BCkovPlot Class Reference

#include <BCkovPlot.h>

Inheritance diagram for BCkovPlot:

JobCModule CfgObserver List of all members.

Public Member Functions

 BCkovPlot (const char *version)
 ~BCkovPlot ()
JobCResult Ana (const EDMEventHandle &evt)
void Update (const CfgConfig &c)

Private Attributes

TH1F * fADC [BCkov::kNChan]
TH1F * fTDC [BCkov::kNChan]
TH2F * fADCVsTDC [BCkov::kNChan]
TH2F * fADCVsADC [6]
TH2F * fUpVsDown
TNtuple * fNtuple

Detailed Description

Definition at line 18 of file BCkovPlot.h.


Constructor & Destructor Documentation

BCkovPlot::BCkovPlot ( const char *  version  ) 

Definition at line 32 of file BCkovPlot.cxx.

References fADC, fADCVsADC, fADCVsTDC, fNtuple, fTDC, fUpVsDown, BCkov::kMaxADC, BCkov::kMaxTDC, BCkov::kNChan, name, JobCModule::SetCfgVersion(), and BCkov::ShortName().

00032                                         :
00033   JobCModule("BCkovPlot")
00034 {
00035   SetCfgVersion(version);
00036   
00037   char name[80], title[80];
00038   for (int i = 0; i < kNChan; ++i) {
00039     sprintf(name, "adc%d", i);
00040     sprintf(title, "Beam Cherenkov %s ADC", ShortName(i));
00041     fADC[i] = new TH1F(name, title, kMaxADC, 0, kMaxADC);
00042     fADC[i]->SetXTitle("ADC");
00043 
00044     sprintf(name, "tdc%d", i);
00045     sprintf(title, "Beam Cherenkov %s TDC", ShortName(i));
00046     fTDC[i] = new TH1F(name, title, kMaxTDC, 0, kMaxTDC);
00047     fTDC[i]->SetXTitle("TDC");
00048 
00049     sprintf(name, "adcVsTdc%d", i);
00050     sprintf(title, "Beam Cherenkov %s ADC vs TDC", ShortName(i));
00051     fADCVsTDC[i] = new TH2F(name, title, 256, 0, kMaxTDC, 
00052                 256, 0, kMaxADC);
00053     fADCVsTDC[i]->SetXTitle("TDC");
00054     fADCVsTDC[i]->SetYTitle("ADC");
00055   }
00056 
00057   int indx = 0;
00058   for (int i = 0; i < kNChan; ++i) {
00059     for (int j = i + 1; j < kNChan; ++j) {
00060       sprintf(name, "adcVsAdc%d%d", i, j);
00061       sprintf(title, "Beam Cherenkov %s ADC Vs %s ADC", 
00062           ShortName(j), ShortName(i));
00063       fADCVsADC[indx] = new TH2F(name, title, 256, 0, kMaxADC,
00064                    256, 0, kMaxADC);
00065       sprintf(name, "%s ADC", ShortName(i));
00066       fADCVsADC[indx]->SetXTitle(name);
00067       sprintf(name, "%s ADC", ShortName(j));
00068       fADCVsADC[indx]->SetYTitle(name);
00069 
00070       indx++;
00071     }
00072   }
00073 
00074   fUpVsDown = new TH2F("UpVsDown", "Upstream vs downstream", 
00075                256, -512, 512,
00076                256, -512, 512);
00077 
00078   fNtuple = new TNtuple("bckov", "bckov", "evt:t0:t1:t2:t3:a0:a1:a2:a3");
00079 }

BCkovPlot::~BCkovPlot (  ) 

Definition at line 83 of file BCkovPlot.cxx.

References fADC, fADCVsADC, fADCVsTDC, fNtuple, fTDC, fUpVsDown, BCkov::kNChan, and Write().

00084 {
00085   for (int i = 0; i < kNChan; ++i) {
00086     fADC[i]->Write();
00087     delete fADC[i];
00088     fTDC[i]->Write();
00089     delete fTDC[i];
00090     fADCVsTDC[i]->Write();
00091     delete fADCVsTDC[i];
00092   }
00093   for (int i = 0; i < 6; ++i) {
00094     fADCVsADC[i]->Write();
00095     delete fADCVsADC[i];
00096   }
00097   fUpVsDown->Write();
00098   delete fUpVsDown;
00099   
00100   fNtuple->Write();
00101   delete fNtuple;
00102 }


Member Function Documentation

JobCResult BCkovPlot::Ana ( const EDMEventHandle evt  )  [virtual]

Reimplemented from JobCModule.

Definition at line 106 of file BCkovPlot.cxx.

References EDMTriggerId::CalibTrig(), EDMTriggerId::EoSTrig(), EDMEventHeader::Event(), fADC, fADCVsADC, fADCVsTDC, Fill(), fNtuple, fTDC, fUpVsDown, EDMDataBucket::Get(), EDMEventHandle::Header(), JobCModule::kFailed, BCkov::kMaxADC, BCkov::kMaxTDC, BCkov::kNChan, JobCModule::kPassed, EDMEventHandle::Raw(), and EDMEventHeader::TriggerId().

00107 {
00108   if (evt.Header().TriggerId().EoSTrig() ||
00109       evt.Header().TriggerId().CalibTrig()) return kFailed;
00110 
00111 
00112   static vector<const BCKOVDigit*> digList;
00113   digList.clear();
00114 
00115   try {
00116     evt.Raw().Get("/bckov", digList);
00117   }
00118   catch (...) { return kFailed;}
00119 
00120   vector<const BCKOVDigit*>::iterator itr(digList.begin());
00121   vector<const BCKOVDigit*>::iterator itrEnd(digList.end());
00122 
00123   unsigned short adc[kNChan] = {0, 0, 0, 0};
00124   unsigned short tdc[kNChan] = {0, 0, 0, 0};
00125 
00126   const unsigned short minTDC[4] = {900, 1000, 850, 950};
00127   const unsigned short maxTDC[4] = {1060, 1200, 1050, 1100};
00128 
00129   for ( ; itr != itrEnd; ++itr) {
00130     const BCKOVDigit* dig = *itr;
00131     assert((dig->Channel() > 0) && (dig->Channel() <= kNChan));
00132 
00133     int chanIndx = dig->Channel() - 1;
00134 
00135     adc[chanIndx] = dig->ADC();
00136     if (adc[chanIndx] >= kMaxADC) adc[chanIndx] = kMaxADC - 1;
00137     tdc[chanIndx] = dig->TDC();
00138     if (tdc[chanIndx] >= kMaxTDC) tdc[chanIndx] = kMaxTDC - 1;
00139 
00140     if (tdc[chanIndx] > 0 && tdc[chanIndx] < 2047) {
00141       if (tdc[chanIndx] < minTDC[chanIndx] || 
00142       tdc[chanIndx] > maxTDC[chanIndx]) {
00143     return kFailed;
00144       }
00145     }
00146   }
00147 
00148   fNtuple->Fill(evt.Header().Event(), 
00149         tdc[0], tdc[1], tdc[2], tdc[3],
00150         adc[0], adc[1], adc[2], adc[3]);
00151 
00152   int indx = 0;
00153   for (int i = 0; i < kNChan; ++i) {
00154     fADC[i]->Fill(adc[i]);
00155     fTDC[i]->Fill(tdc[i]);
00156     fADCVsTDC[i]->Fill(tdc[i], adc[i]);
00157 
00158     for (int j = i + 1; j < kNChan; ++j) {
00159       fADCVsADC[indx++]->Fill(adc[i], adc[j]);
00160     }
00161   }
00162 
00163   int diffO = adc[1];
00164   diffO += adc[3];
00165   if (diffO > 511) diffO = 511;
00166   else if (diffO < -511) diffO = -511;
00167 
00168   int diffI = adc[0];
00169   diffI += adc[2];
00170   if (diffI > 511) diffI = 511;
00171   else if (diffI < -511) diffI = -511;
00172 
00173   fUpVsDown->Fill(diffO, diffI);
00174 
00175   return kPassed;
00176 }

void BCkovPlot::Update ( const CfgConfig c  )  [virtual]

Implements CfgObserver.

Definition at line 180 of file BCkovPlot.cxx.

00181 {
00182 }


Member Data Documentation

TH1F* BCkovPlot::fADC[BCkov::kNChan] [private]

Definition at line 28 of file BCkovPlot.h.

Referenced by Ana(), BCkovPlot(), and ~BCkovPlot().

TH2F* BCkovPlot::fADCVsADC[6] [private]

Definition at line 31 of file BCkovPlot.h.

Referenced by Ana(), BCkovPlot(), and ~BCkovPlot().

TH2F* BCkovPlot::fADCVsTDC[BCkov::kNChan] [private]

Definition at line 30 of file BCkovPlot.h.

Referenced by Ana(), BCkovPlot(), and ~BCkovPlot().

TNtuple* BCkovPlot::fNtuple [private]

Definition at line 35 of file BCkovPlot.h.

Referenced by Ana(), BCkovPlot(), and ~BCkovPlot().

TH1F* BCkovPlot::fTDC[BCkov::kNChan] [private]

Definition at line 29 of file BCkovPlot.h.

Referenced by Ana(), BCkovPlot(), and ~BCkovPlot().

TH2F* BCkovPlot::fUpVsDown [private]

Definition at line 33 of file BCkovPlot.h.

Referenced by Ana(), BCkovPlot(), and ~BCkovPlot().


The documentation for this class was generated from the following files:
Generated on Mon Nov 23 08:03:57 2009 for MIPP(E907) by  doxygen 1.4.7