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

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 |
Definition at line 18 of file BCkovPlot.h.
| 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 }
| 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] |
TH1F* BCkovPlot::fADC[BCkov::kNChan] [private] |
TH2F* BCkovPlot::fADCVsADC[6] [private] |
TH2F* BCkovPlot::fADCVsTDC[BCkov::kNChan] [private] |
TNtuple* BCkovPlot::fNtuple [private] |
TH1F* BCkovPlot::fTDC[BCkov::kNChan] [private] |
TH2F* BCkovPlot::fUpVsDown [private] |
1.4.7