#include <BCkovCalib.h>
Inheritance diagram for BCkovCalib:

Public Member Functions | |
| BCkovCalib (const char *version) | |
| ~BCkovCalib () | |
| JobCResult | Ana (const EDMEventHandle &evt) |
| void | NewRun (int run, int subrun) |
| void | Update (const CfgConfig &c) |
Private Attributes | |
| float | fNsecPerBin |
| Bin size of BCkov signals. | |
| TTree * | fTree |
| BCkovNt * | fNt |
| TH1F * | fPed [BCkov::kNChan] |
| int | fDebug |
| int | fWriteToDB |
| int | fWriteToXML |
Definition at line 43 of file BCkovCalib.h.
| BCkovCalib::BCkovCalib | ( | const char * | version | ) |
Definition at line 32 of file BCkovCalib.cxx.
References BCkov::ChanName(), fNt, fPed, fTree, BCkov::kMaxADC, BCkov::kNChan, name, JobCModule::SetCfgVersion(), and BCkov::ShortName().
00032 : 00033 JobCModule("BCkovCalib"), 00034 fDebug(0) 00035 { 00036 SetCfgVersion(version); 00037 00038 char name[64]; 00039 char title[256]; 00040 00041 fNt = new BCkovNt; 00042 fTree = new TTree("bckovnt", "Beam Cherenkov calibration ntuple"); 00043 fTree->Branch("fNt", "BCkovNt", &fNt); 00044 00045 for (int i = 0; i < kNChan; ++i) { 00046 sprintf(name, "ped_%s", ShortName(i)); 00047 sprintf(title, "%s pedestal", ChanName(i)); 00048 fPed[i] = new TH1F(name, title, kMaxADC, 0, kMaxADC); 00049 fPed[i]->SetXTitle("ADC value"); 00050 } 00051 00052 }
| BCkovCalib::~BCkovCalib | ( | ) |
| JobCResult BCkovCalib::Ana | ( | const EDMEventHandle & | evt | ) | [virtual] |
Reimplemented from JobCModule.
Definition at line 70 of file BCkovCalib.cxx.
References BCkovNt::adc, EDMTriggerId::CalibTrig(), BCkovNt::date, EDMTriggerId::EoSTrig(), EDMEventHeader::Event(), BCkovNt::evt, fNsecPerBin, fNt, fPed, fTree, EDMDataBucket::Get(), EDMEventHandle::Header(), JobCModule::kFailed, BCkov::kNChan, JobCModule::kPassed, LatchWord::kPrescaled, EDMEventHandle::Raw(), EDMEventHandle::Reco(), EDMEventHeader::Run(), BCkovNt::run, EDMTimeStamp::Sec(), EDMEventHeader::SubRun(), BCkovNt::subrun, BCkovNt::t, BCkovNt::t0, EDMEventHeader::TimeStamp(), EDMEventHeader::TriggerId(), and BCkovNt::trigword.
00071 { 00072 if (evt.Header().TriggerId().EoSTrig()) return kFailed; 00073 00074 // Extract BCkov digits from the data stream 00075 std::vector<const BCKOVDigit*> digList(0); 00076 std::vector<const T0Time*> t0time(0); 00077 std::vector<const LatchWord*> latch(0); 00078 try { 00079 evt.Raw().Get("/bckov", digList); 00080 if (digList.size() != kNChan) return kFailed; 00081 } 00082 catch (...) { return kFailed; } 00083 00084 // On calibration events, we only need to fill the pedestal histogram 00085 if (evt.Header().TriggerId().CalibTrig()) { 00086 for (int i = 0; i < kNChan; ++i) { 00087 const BCKOVDigit* dig = digList[i]; 00088 int chanIndx = dig->Channel() - 1; 00089 assert(chanIndx >= 0 && chanIndx < kNChan); 00090 00091 fPed[chanIndx]->Fill(dig->ADC()); 00092 } 00093 return kPassed; 00094 } 00095 00096 // Now try to get trigger latch word and event time 00097 try { 00098 evt.Raw().Get("/trig", latch); 00099 if (latch.empty()) return kFailed; 00100 evt.Reco().Get("/t0", t0time); 00101 if (t0time.empty()) return kFailed; 00102 } catch (...) { return kFailed; } 00103 00104 // Make sure that T0 is reasonable 00105 fNt->t0 = t0time.front()->GetTime(); 00106 if (fNt->t0 > 100) return kFailed; 00107 00108 // Initialize event header info 00109 fNt->run = evt.Header().Run(); 00110 fNt->subrun = evt.Header().SubRun(); 00111 fNt->evt = evt.Header().Event(); 00112 fNt->date = evt.Header().TimeStamp().Sec(); 00113 fNt->trigword = latch[LatchWord::kPrescaled]->GetWord(); 00114 00115 for (int i = 0; i < kNChan; ++i) { 00116 const BCKOVDigit* dig = digList[i]; 00117 int chanIndx = dig->Channel() - 1; 00118 assert(chanIndx >= 0 && chanIndx < kNChan); 00119 00120 fNt->t[chanIndx] = dig->TDC(); 00121 fNt->t[chanIndx] *= fNsecPerBin; 00122 fNt->t[chanIndx] -= fNt->t0; 00123 fNt->adc[chanIndx] = dig->ADC(); 00124 } 00125 00126 fTree->Fill(); 00127 00128 return kPassed; 00129 }
| void BCkovCalib::NewRun | ( | int | run, | |
| int | subrun | |||
| ) | [virtual] |
Reimplemented from JobCModule.
Definition at line 141 of file BCkovCalib.cxx.
References cmap, fDebug, fNsecPerBin, CMapTOF::Init(), CMapTOF::Instance(), and CMapTOF::TDCBinSize().
00142 { 00143 CMapTOF& cmap = CMapTOF::Instance(); 00144 cmap.Init(run, false); 00145 00146 fNsecPerBin = cmap.TDCBinSize(6001) * 1e-3; 00147 assert(fNsecPerBin > 0 && fNsecPerBin < 1); 00148 00149 if (fDebug) cout << "BCkov ns/per bin: " << fNsecPerBin << endl; 00150 }
| void BCkovCalib::Update | ( | const CfgConfig & | c | ) | [virtual] |
Implements CfgObserver.
Definition at line 133 of file BCkovCalib.cxx.
References fDebug, and fWriteToDB.
00134 { 00135 c("Debug"). Get(fDebug); 00136 c("WriteToDB"). Get(fWriteToDB); 00137 }
int BCkovCalib::fDebug [private] |
float BCkovCalib::fNsecPerBin [private] |
BCkovNt* BCkovCalib::fNt [private] |
TH1F* BCkovCalib::fPed[BCkov::kNChan] [private] |
TTree* BCkovCalib::fTree [private] |
int BCkovCalib::fWriteToDB [private] |
int BCkovCalib::fWriteToXML [private] |
Definition at line 61 of file BCkovCalib.h.
1.4.7