#include <DQM/HcalMonitorTasks/interface/HcalDigiMonitor.h>
Definition at line 56 of file HcalDigiMonitor.h.
HcalDigiMonitor::HcalDigiMonitor | ( | ) |
Definition at line 7 of file HcalDigiMonitor.cc.
References doPerChannel_, ievt_, NULL, occThresh_, and shape_.
00007 { 00008 doPerChannel_ = false; 00009 occThresh_ = 1; 00010 ievt_=0; 00011 shape_=NULL; 00012 }
HcalDigiMonitor::~HcalDigiMonitor | ( | ) |
void HcalDigiMonitor::fill_Nevents | ( | ) | [private] |
Methods.
Definition at line 1019 of file HcalDigiMonitor.cc.
References DigiHists::adc, DigiHists::ADC, DigiHists::ADCsum, DigiHists::adcsum, badADCsum, badcapID, baddigisize, DigiHists::BQ, DigiHists::BQFrac, DigiHists::capid, DigiHists::CapID, DigiHists::capIDdiff, DigiHists::check, DigiHists::count_BQ, DigiHists::count_BQFrac, DigiHists::count_presample, DigiHists::count_shape, DigiHists::count_shapeThresh, GenMuonPlsPt100GeV_cfg::cout, HcalBaseMonitor::cpu_timer, edm::CPUTimer::cpuTime(), d, DIGI_BQ_FRAC_NBINS, digi_checkNevents_, digi_checkoccupancy_, DIGI_NUM, DIGI_SUBDET_NUM, digiBQ, DigiBQ, digiBQfrac, DigiBQFrac, DigiErrorsBadADCSum, DigiErrorsBadCapID, DigiErrorsBadDigiSize, DigiErrorsDVErr, digierrorsdverr, DigiErrorsNoDigi, DigiErrorSpigot, DigiErrorVME, DigiHists::DigiFirstCapID, DigiNum, diginum, DigiOccupancyByDepth, DigiOccupancyEta, DigiOccupancyPhi, DigiOccupancySpigot, DigiOccupancyVME, digisize, DigiSize, DigiHists::dverr, DigiHists::DVerr, lat::endl(), errorSpigot, errorVME, eta, HcalBaseMonitor::etaBins_, HcalBaseMonitor::FillUnphysicalHEHFBins(), HcalBaseMonitor::fVerbosity, hbHists, HcalBarrel, HcalEndcap, HcalForward, HcalOuter, heHists, hfHists, hoHists, i, ievt_, int, j, min, occupancyEta, occupancyEtaPhi, occupancyPhi, occupancySpigot, occupancyVME, phi, HcalBaseMonitor::phiBins_, DigiHists::presample, problemdigis, ProblemDigis, ProblemDigisByDepth, edm::CPUTimer::reset(), MonitorElement::setBinContent(), DigiHists::shape, DigiHists::shapeThresh, HcalBaseMonitor::showTiming, HcalDCCHeader::SPIGOT_COUNT, edm::CPUTimer::start(), edm::CPUTimer::stop(), DigiHists::TS_sum_minus, DigiHists::TS_sum_plus, DigiHists::tssumminus, DigiHists::tssumplus, TrackValidation_HighPurity_cff::valid, and HcalBaseMonitor::validDetId().
Referenced by processEvent().
01020 { 01021 if (showTiming) 01022 { 01023 cpu_timer.reset(); cpu_timer.start(); 01024 } 01025 01026 if (fVerbosity>0) 01027 cout <<"<HcalDigiMonitor> Calling fill_Nevents for event # "<<ievt_<<endl; 01028 int iPhi, iEta, iDepth; 01029 double problemvalue=0; 01030 double problemsum=0; 01031 bool valid=false; 01032 01033 01034 // Fill plots of sums of adjacent digi samples 01035 for (int i=0;i<10;++i) 01036 { 01037 for (int j=0;j<50;++j) 01038 { 01039 if (hbHists.tssumplus[j][i]>0) hbHists.TS_sum_plus[i]->setBinContent(j+1, hbHists.tssumplus[j][i]); 01040 if (hbHists.tssumminus[j][i]>0) hbHists.TS_sum_minus[i]->setBinContent(j+1, hbHists.tssumminus[j][i]); 01041 if (heHists.tssumplus[j][i]>0) heHists.TS_sum_plus[i]->setBinContent(j+1, heHists.tssumplus[j][i]); 01042 if (heHists.tssumminus[j][i]>0) heHists.TS_sum_minus[i]->setBinContent(j+1, heHists.tssumminus[j][i]); 01043 if (hoHists.tssumplus[j][i]>0) hoHists.TS_sum_plus[i]->setBinContent(j+1, hoHists.tssumplus[j][i]); 01044 if (hoHists.tssumminus[j][i]>0) hoHists.TS_sum_minus[i]->setBinContent(j+1, hoHists.tssumminus[j][i]); 01045 if (hfHists.tssumplus[j][i]>0) hfHists.TS_sum_plus[i]->setBinContent(j+1, hfHists.tssumplus[j][i]); 01046 if (hfHists.tssumminus[j][i]>0) hfHists.TS_sum_minus[i]->setBinContent(j+1, hfHists.tssumminus[j][i]); 01047 } 01048 } // for (int i=0;i<10;++i) 01049 01050 // Fill plots of number of digis found 01051 for (int i=0;i<DIGI_NUM;++i) 01052 { 01053 if (diginum[i]>0) DigiNum->setBinContent(i+1,diginum[i]); 01054 if (digiBQ[i]>0) DigiBQ->setBinContent(i+1,digiBQ[i]); 01055 if (i>=DIGI_SUBDET_NUM) continue; 01056 if (hbHists.count_BQ[i]>0) hbHists.BQ->setBinContent(i+1,hbHists.count_BQ[i]); 01057 if (heHists.count_BQ[i]>0) heHists.BQ->setBinContent(i+1,heHists.count_BQ[i]); 01058 if (hoHists.count_BQ[i]>0) hoHists.BQ->setBinContent(i+1,hoHists.count_BQ[i]); 01059 if (hfHists.count_BQ[i]>0) hfHists.BQ->setBinContent(i+1,hfHists.count_BQ[i]); 01060 01061 }//for int i=0;i<DIGI_NUM;++i) 01062 01063 // Fill data-valid/error plots and capid plots 01064 for (int i=0;i<4;++i) 01065 { 01066 if (hbHists.dverr[i]>0) hbHists.DVerr->setBinContent(i+1,hbHists.dverr[i]); 01067 if (heHists.dverr[i]>0) heHists.DVerr->setBinContent(i+1,heHists.dverr[i]); 01068 if (hoHists.dverr[i]>0) hoHists.DVerr->setBinContent(i+1,hoHists.dverr[i]); 01069 if (hfHists.dverr[i]>0) hfHists.DVerr->setBinContent(i+1,hfHists.dverr[i]); 01070 if (hbHists.capid[i]>0) hbHists.CapID->setBinContent(i+1,hbHists.capid[i]); 01071 if (heHists.capid[i]>0) heHists.CapID->setBinContent(i+1,heHists.capid[i]); 01072 if (hoHists.capid[i]>0) hoHists.CapID->setBinContent(i+1,hoHists.capid[i]); 01073 if (hfHists.capid[i]>0) hfHists.CapID->setBinContent(i+1,hfHists.capid[i]); 01074 } 01075 for (int i=0;i<200;++i) 01076 { 01077 if (hbHists.adc[i]>0) hbHists.ADC->setBinContent(i+1,hbHists.adc[i]); 01078 if (heHists.adc[i]>0) heHists.ADC->setBinContent(i+1,heHists.adc[i]); 01079 if (hoHists.adc[i]>0) hoHists.ADC->setBinContent(i+1,hoHists.adc[i]); 01080 if (hfHists.adc[i]>0) hfHists.ADC->setBinContent(i+1,hfHists.adc[i]); 01081 if (hbHists.adcsum[i]>0) hbHists.ADCsum->setBinContent(i+1,hbHists.adcsum[i]); 01082 if (heHists.adcsum[i]>0) heHists.ADCsum->setBinContent(i+1,heHists.adcsum[i]); 01083 if (hoHists.adcsum[i]>0) hoHists.ADCsum->setBinContent(i+1,hoHists.adcsum[i]); 01084 if (hfHists.adcsum[i]>0) hfHists.ADCsum->setBinContent(i+1,hfHists.adcsum[i]); 01085 } 01086 01087 01088 // Fill plots of bad fraction of digis found 01089 for (int i=0;i<DIGI_BQ_FRAC_NBINS;++i) 01090 { 01091 if (digiBQfrac[i]>0) DigiBQFrac->setBinContent(i+1,digiBQfrac[i]); 01092 if (hbHists.count_BQFrac[i]>0) hbHists.BQFrac->setBinContent(i+1,hbHists.count_BQFrac[i]); 01093 if (heHists.count_BQFrac[i]>0) heHists.BQFrac->setBinContent(i+1,heHists.count_BQFrac[i]); 01094 if (hoHists.count_BQFrac[i]>0) hoHists.BQFrac->setBinContent(i+1,hoHists.count_BQFrac[i]); 01095 if (hfHists.count_BQFrac[i]>0) hfHists.BQFrac->setBinContent(i+1,hfHists.count_BQFrac[i]); 01096 01097 }//for (int i=0;i<DIGI_BQ_FRAC_NBINS;++i) 01098 01099 // Fill presample plots 01100 for (int i=0;i<50;++i) 01101 { 01102 if (hbHists.count_presample[i]>0) hbHists.presample->setBinContent(i+1,hbHists.count_presample[i]); 01103 if (heHists.count_presample[i]>0) heHists.presample->setBinContent(i+1,heHists.count_presample[i]); 01104 if (hoHists.count_presample[i]>0) hoHists.presample->setBinContent(i+1,hoHists.count_presample[i]); 01105 if (hfHists.count_presample[i]>0) hfHists.presample->setBinContent(i+1,hfHists.count_presample[i]); 01106 } //for (int i=0;i<50;++i) 01107 01108 // Fill shape plots 01109 for (int i=0;i<10;++i) 01110 { 01111 if (hbHists.count_shape[i]>0) hbHists.shape->setBinContent(i+1,hbHists.count_shape[i]); 01112 if (hbHists.count_shapeThresh[i]>0) hbHists.shapeThresh->setBinContent(i+1,hbHists.count_shapeThresh[i]); 01113 if (heHists.count_shape[i]>0) heHists.shape->setBinContent(i+1,heHists.count_shape[i]); 01114 if (heHists.count_shapeThresh[i]>0) heHists.shapeThresh->setBinContent(i+1,heHists.count_shapeThresh[i]); 01115 if (hoHists.count_shape[i]>0) hoHists.shape->setBinContent(i+1,hoHists.count_shape[i]); 01116 if (hoHists.count_shapeThresh[i]>0) hoHists.shapeThresh->setBinContent(i+1,hoHists.count_shapeThresh[i]); 01117 if (hfHists.count_shape[i]>0) hfHists.shape->setBinContent(i+1,hfHists.count_shape[i]); 01118 if (hfHists.count_shapeThresh[i]>0) hfHists.shapeThresh->setBinContent(i+1,hfHists.count_shapeThresh[i]); 01119 }// for (int i=0;i<10;++i) 01120 01121 // Fill capID difference plots 01122 for (int i=0;i<8;++i) 01123 { 01124 if (hbHists.capIDdiff[i]>0) hbHists.DigiFirstCapID->setBinContent(i+1,hbHists.capIDdiff[i]); 01125 if (heHists.capIDdiff[i]>0) heHists.DigiFirstCapID->setBinContent(i+1,heHists.capIDdiff[i]); 01126 if (hoHists.capIDdiff[i]>0) hoHists.DigiFirstCapID->setBinContent(i+1,hoHists.capIDdiff[i]); 01127 if (hfHists.capIDdiff[i]>0) hfHists.DigiFirstCapID->setBinContent(i+1,hfHists.capIDdiff[i]); 01128 } 01129 01130 01131 // Fill VME plots 01132 for (int i=0;i<40;++i) 01133 { 01134 for (int j=0;j<18;++j) 01135 { 01136 if (errorVME[i][j]>0) DigiErrorVME->setBinContent(i+1,j+1,errorVME[i][j]); 01137 if (occupancyVME[i][j]>0) DigiOccupancyVME->setBinContent(i+1,j+1,occupancyVME[i][j]); 01138 } 01139 } //for (int i=0;i<40;++i) 01140 01141 // Fill VME plots 01142 for (int i=0;i<HcalDCCHeader::SPIGOT_COUNT;++i) 01143 { 01144 for (int j=0;j<36;++j) 01145 { 01146 if (errorSpigot[i][j]>0) DigiErrorSpigot->setBinContent(i+1,j+1,errorSpigot[i][j]); 01147 if (occupancySpigot[i][j]>0) DigiOccupancySpigot->setBinContent(i+1,j+1,occupancySpigot[i][j]); 01148 } 01149 } //for (int i=0;i<HcalDCCHeader::SPIGOT_COUNT;++i) 01150 01151 // Loop over subdetectors 01152 for (int sub=0;sub<4;++sub) 01153 { 01154 for (int dsize=0;dsize<20;++dsize) 01155 { 01156 if (digisize[dsize][sub]>0) 01157 DigiSize->setBinContent(sub+1,dsize+1,digisize[dsize][sub]); 01158 } 01159 } // for (int sub=0;sub<4;++sub) 01160 01161 01162 // Loop over eta, phi, depth 01163 for (int phi=0;phi<(phiBins_-2);++phi) 01164 { 01165 DigiOccupancyPhi->setBinContent(phi+2,occupancyPhi[phi]); 01166 for (int eta=0;eta<(etaBins_-2);++eta) 01167 { 01168 if (phi==0) 01169 DigiOccupancyEta->setBinContent(eta+2,occupancyEta[eta]); 01170 problemsum=0; 01171 valid=false; 01172 01173 for (int d=0;d<6;++d) 01174 { 01175 iPhi=phi+1; 01176 iEta=eta-int((etaBins_-2)/2); 01177 iDepth=d+1; 01178 01179 // HB 01180 if (validDetId(HcalBarrel, iEta, iPhi, iDepth)) 01181 { 01182 valid=true; 01183 if (hbHists.check) 01184 { 01185 if (occupancyEtaPhi[eta][phi][d]==0 && digi_checkoccupancy_) 01186 { 01187 problemdigis[eta][phi][d]+=digi_checkNevents_; 01188 } 01189 01190 // Fill plots as fractions of total # of events 01191 01192 // Occupancy plot needs to get old occupancy value, since counter gets reset 01193 DigiOccupancyByDepth[d]->setBinContent(eta+2,phi+2, 01194 ((ievt_-digi_checkNevents_)*DigiOccupancyByDepth[d]->getBinContent(eta+2,phi+2)+occupancyEtaPhi[eta][phi][d])/ievt_); 01195 01196 DigiErrorsBadCapID[d]->setBinContent(eta+2, phi+2, 01197 badcapID[eta][phi][d]/ievt_); 01198 DigiErrorsBadDigiSize[d]->setBinContent(eta+2, phi+2, 01199 baddigisize[eta][phi][d]/ievt_); 01200 DigiErrorsBadADCSum[d]->setBinContent(eta+2, phi+2, 01201 badADCsum[eta][phi][d]/ievt_); 01202 DigiErrorsDVErr[d]->setBinContent(eta+2, phi+2, 01203 digierrorsdverr[eta][phi][d]/ievt_); 01204 problemsum+=problemdigis[eta][phi][d]; 01205 problemvalue=problemdigis[eta][phi][d]/ievt_; 01206 if (problemvalue>1) 01207 problemvalue=1; 01208 ProblemDigisByDepth[d]->setBinContent(eta+2, phi+2, 01209 problemvalue); 01210 } // if (hbHists.check) 01211 } 01212 // HE (depth=3 only) 01213 if (d==2 && validDetId(HcalEndcap, iEta, iPhi, iDepth)) 01214 { 01215 valid=true; 01216 if (heHists.check) 01217 { 01218 if (occupancyEtaPhi[eta][phi][d]==0 && digi_checkoccupancy_) 01219 { 01220 problemdigis[eta][phi][d]+=digi_checkNevents_; 01221 } 01222 01223 // Fill plots as fractions of total # of events 01224 01225 // Occupancy plot needs to get old occupancy value, since counter gets reset 01226 DigiOccupancyByDepth[d]->setBinContent(eta+2,phi+2, 01227 ((ievt_-digi_checkNevents_)*DigiOccupancyByDepth[d]->getBinContent(eta+2,phi+2)+occupancyEtaPhi[eta][phi][d])/ievt_); 01228 01229 DigiErrorsBadCapID[d]->setBinContent(eta+2, phi+2, 01230 badcapID[eta][phi][d]/ievt_); 01231 DigiErrorsBadDigiSize[d]->setBinContent(eta+2, phi+2, 01232 baddigisize[eta][phi][d]/ievt_); 01233 DigiErrorsBadADCSum[d]->setBinContent(eta+2, phi+2, 01234 badADCsum[eta][phi][d]/ievt_); 01235 DigiErrorsDVErr[d]->setBinContent(eta+2, phi+2, 01236 digierrorsdverr[eta][phi][d]/ievt_); 01237 problemsum+=problemdigis[eta][phi][d]; 01238 problemvalue=problemdigis[eta][phi][d]/ievt_; 01239 if (problemvalue>1) 01240 problemvalue=1; 01241 ProblemDigisByDepth[d]->setBinContent(eta+2, phi+2, 01242 problemvalue); 01243 } // if (heHists.check) 01244 } 01245 // HO 01246 if (validDetId(HcalOuter,iEta,iPhi,iDepth)) 01247 { 01248 valid=true; 01249 if (hoHists.check) 01250 { 01251 if (occupancyEtaPhi[eta][phi][d]==0 && digi_checkoccupancy_) 01252 { 01253 problemdigis[eta][phi][d]+=digi_checkNevents_; 01254 } 01255 01256 // Fill plots as fractions of total # of events 01257 01258 // Occupancy plot needs to get old occupancy value, since counter gets reset 01259 DigiOccupancyByDepth[d]->setBinContent(eta+2,phi+2, 01260 ((ievt_-digi_checkNevents_)*DigiOccupancyByDepth[d]->getBinContent(eta+2,phi+2)+occupancyEtaPhi[eta][phi][d])/ievt_); 01261 01262 DigiErrorsBadCapID[d]->setBinContent(eta+2, phi+2, 01263 badcapID[eta][phi][d]/ievt_); 01264 DigiErrorsBadDigiSize[d]->setBinContent(eta+2, phi+2, 01265 baddigisize[eta][phi][d]/ievt_); 01266 DigiErrorsBadADCSum[d]->setBinContent(eta+2, phi+2, 01267 badADCsum[eta][phi][d]/ievt_); 01268 DigiErrorsDVErr[d]->setBinContent(eta+2, phi+2, 01269 digierrorsdverr[eta][phi][d]/ievt_); 01270 problemsum+=problemdigis[eta][phi][d]; 01271 problemvalue=problemdigis[eta][phi][d]/ievt_; 01272 if (problemvalue>1) 01273 problemvalue=1; 01274 ProblemDigisByDepth[d]->setBinContent(eta+2, phi+2, 01275 problemvalue); 01276 } // if (hoHists.check) 01277 } 01278 // HF 01279 if (validDetId(HcalForward,iEta,iPhi,iDepth)) 01280 { 01281 valid=true; 01282 if (hfHists.check) 01283 { 01284 if (occupancyEtaPhi[eta][phi][d]==0 && digi_checkoccupancy_) 01285 { 01286 problemdigis[eta][phi][d]+=digi_checkNevents_; 01287 } 01288 01289 // Fill plots as fractions of total # of events 01290 01291 // Occupancy plot needs to get old occupancy value, since counter gets reset 01292 DigiOccupancyByDepth[d]->setBinContent(eta+2,phi+2, 01293 ((ievt_-digi_checkNevents_)*DigiOccupancyByDepth[d]->getBinContent(eta+2,phi+2)+occupancyEtaPhi[eta][phi][d])/ievt_); 01294 01295 DigiErrorsBadCapID[d]->setBinContent(eta+2, phi+2, 01296 badcapID[eta][phi][d]/ievt_); 01297 DigiErrorsBadDigiSize[d]->setBinContent(eta+2, phi+2, 01298 baddigisize[eta][phi][d]/ievt_); 01299 DigiErrorsBadADCSum[d]->setBinContent(eta+2, phi+2, 01300 badADCsum[eta][phi][d]/ievt_); 01301 DigiErrorsDVErr[d]->setBinContent(eta+2, phi+2, 01302 digierrorsdverr[eta][phi][d]/ievt_); 01303 problemsum+=problemdigis[eta][phi][d]; 01304 problemvalue=problemdigis[eta][phi][d]/ievt_; 01305 if (problemvalue>1) 01306 problemvalue=1; 01307 ProblemDigisByDepth[d]->setBinContent(eta+2, phi+2, 01308 problemvalue); 01309 } // if (hfHists.check) 01310 } 01311 // HE (depths 1 & 2) 01312 if (d>3) 01313 { 01314 if (!heHists.check) continue; 01315 iDepth=d-3; // iDepth=d+1, but shift down by 4 for HE 01316 if (validDetId(HcalEndcap,iEta,iPhi,iDepth)) 01317 { 01318 valid=true; 01319 if (occupancyEtaPhi[eta][phi][d]==0 && digi_checkoccupancy_) 01320 { 01321 problemdigis[eta][phi][d]+=digi_checkNevents_; 01322 } 01323 01324 // Fill plots as fractions of total # of events 01325 01326 // Occupancy plot needs to get old occupancy value, since counter gets reset 01327 DigiOccupancyByDepth[d]->setBinContent(eta+2,phi+2, 01328 ((ievt_-digi_checkNevents_)*DigiOccupancyByDepth[d]->getBinContent(eta+2,phi+2)+occupancyEtaPhi[eta][phi][d])/ievt_); 01329 01330 DigiErrorsBadCapID[d]->setBinContent(eta+2, phi+2, 01331 badcapID[eta][phi][d]/ievt_); 01332 DigiErrorsBadDigiSize[d]->setBinContent(eta+2, phi+2, 01333 baddigisize[eta][phi][d]/ievt_); 01334 DigiErrorsBadADCSum[d]->setBinContent(eta+2, phi+2, 01335 badADCsum[eta][phi][d]/ievt_); 01336 DigiErrorsDVErr[d]->setBinContent(eta+2, phi+2, 01337 digierrorsdverr[eta][phi][d]/ievt_); 01338 problemsum+=problemdigis[eta][phi][d]; 01339 problemvalue=problemdigis[eta][phi][d]/ievt_; 01340 if (problemvalue>1) 01341 problemvalue=1; 01342 ProblemDigisByDepth[d]->setBinContent(eta+2, phi+2, 01343 problemvalue); 01344 } // if (validDetId(HcalEndcap,iEta,iPhi,iDepth) 01345 } //if (d>3) 01346 01347 occupancyEtaPhi[eta][phi][d]=0; //reset counter 01348 } // for (int d=0;...) 01349 if (valid==true) // only fill overall problem plot if the (eta,phi) value was valid for some depth 01350 { 01351 problemvalue=min(1.,problemsum/ievt_); 01352 ProblemDigis->setBinContent(eta+2,phi+2,problemvalue); 01353 } 01354 } // for (int phi=0;...) 01355 } // for (int eta=0;...) 01356 01357 // Now fill all the unphysical cell values 01358 FillUnphysicalHEHFBins(ProblemDigis); 01359 FillUnphysicalHEHFBins(ProblemDigisByDepth); 01360 FillUnphysicalHEHFBins(DigiErrorsBadCapID); 01361 FillUnphysicalHEHFBins(DigiErrorsDVErr); 01362 FillUnphysicalHEHFBins(DigiErrorsBadDigiSize); 01363 FillUnphysicalHEHFBins(DigiErrorsBadADCSum); 01364 FillUnphysicalHEHFBins(DigiErrorsNoDigi); 01365 FillUnphysicalHEHFBins(DigiOccupancyByDepth); 01366 if (showTiming) 01367 { 01368 cpu_timer.stop(); cout <<"TIMER:: HcalDigiMonitor DIGI fill_Nevents -> "<<cpu_timer.cpuTime()<<endl; 01369 } 01370 return; 01371 } // void HcalDigiMonitor::fill_Nevents()
void HcalDigiMonitor::processEvent | ( | const HBHEDigiCollection & | hbhe, | |
const HODigiCollection & | ho, | |||
const HFDigiCollection & | hf, | |||
const HcalDbService & | cond, | |||
const HcalUnpackerReport & | report | |||
) |
Definition at line 484 of file HcalDigiMonitor.cc.
References DigiHists::adc, HcalQIESample::adc(), DigiHists::adcsum, badADCsum, badcapID, baddigisize, edm::SortedCollection< T, SORT >::begin(), bitUpset(), HcalQIESample::capid(), DigiHists::capid, DigiHists::capIDdiff, DigiHists::check, DigiHists::count_all, DigiHists::count_bad, DigiHists::count_BQ, DigiHists::count_BQFrac, DigiHists::count_presample, DigiHists::count_shape, DigiHists::count_shapeThresh, GenMuonPlsPt100GeV_cfg::cout, HcalBaseMonitor::cpu_timer, edm::CPUTimer::cpuTime(), HcalElectronicsId::dccid(), HcalDetId::depth(), DIGI_BQ_FRAC_NBINS, digi_checkadcsum_, digi_checkcapid_, digi_checkdigisize_, digi_checkdverr_, digi_checkNevents_, digiBQ, digiBQfrac, digierrorsdverr, diginum, digisize, HcalQIESample::dv(), DigiHists::dverr, HBHEDataFrame::elecId(), HFDataFrame::elecId(), HODataFrame::elecId(), edm::SortedCollection< T, SORT >::end(), lat::endl(), HcalQIESample::er(), err, errorSpigot, errorVME, HcalBaseMonitor::etaBins_, MonitorElement::Fill(), fill_Nevents(), HcalBaseMonitor::fVerbosity, hbHists, HcalBarrel, heHists, hfHists, hoHists, HcalElectronicsId::htrSlot(), HcalElectronicsId::htrTopBottom(), i, HODataFrame::id(), HBHEDataFrame::id(), HFDataFrame::id(), HcalDetId::ieta(), ievt_, HcalDetId::iphi(), j, prof2calltree::last, HcalBaseMonitor::m_dbe, maxdigisize_, meEVT_, mindigisize_, occThresh_, occupancyEta, occupancyEtaPhi, occupancyPhi, occupancySpigot, occupancyVME, HFDataFrame::presamples(), HBHEDataFrame::presamples(), HODataFrame::presamples(), problemdigis, HcalElectronicsId::readoutVMECrateId(), edm::CPUTimer::reset(), HFDataFrame::sample(), HBHEDataFrame::sample(), HODataFrame::sample(), shapeThresh_, HcalBaseMonitor::showTiming, HODataFrame::size(), HBHEDataFrame::size(), HFDataFrame::size(), HcalElectronicsId::spigot(), edm::CPUTimer::start(), edm::CPUTimer::stop(), HcalDetId::subdet(), DigiHists::tssumminus, and DigiHists::tssumplus.
Referenced by HcalMonitorModule::analyze().
00489 { 00490 if(!m_dbe) 00491 { 00492 if(fVerbosity) 00493 cout <<"HcalDigiMonitor::processEvent DQMStore not instantiated!!!"<<endl; 00494 return; 00495 } 00496 00497 00498 ++ievt_; 00499 meEVT_->Fill(ievt_); 00500 00501 int iEta, iPhi, iDepth; 00502 00503 int err; 00504 bool occ, bitUp; 00505 00506 hbHists.count_bad=0; 00507 hbHists.count_all=0; 00508 heHists.count_bad=0; 00509 heHists.count_all=0; 00510 hoHists.count_bad=0; 00511 hoHists.count_all=0; 00512 hfHists.count_bad=0; 00513 hfHists.count_all=0; 00514 00515 int tssum=0; 00516 00517 if (showTiming) 00518 { 00519 cpu_timer.reset(); cpu_timer.start(); 00520 } 00521 00523 00524 int firsthbcap=-1; int firsthecap=-1; 00525 for (HBHEDigiCollection::const_iterator j=hbhe.begin(); j!=hbhe.end(); ++j) 00526 { 00527 const HBHEDataFrame digi = (const HBHEDataFrame)(*j); 00528 iEta = digi.id().ieta(); 00529 iPhi = digi.id().iphi(); 00530 iDepth = digi.id().depth(); 00531 00532 err=0x0; 00533 occ=false; 00534 bitUp=false; 00535 00536 int ADCcount=0; 00537 00538 // Check HB 00539 if ((HcalSubdetector)(digi.id().subdet())==HcalBarrel) 00540 { 00541 if (!hbHists.check) continue; 00542 ++hbHists.count_all; 00543 // Check that digi size is correct 00544 if (digi.size()<mindigisize_ || digi.size()>maxdigisize_) 00545 { 00546 if (digi_checkdigisize_) err|=0x1; 00547 ++baddigisize[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00548 } 00549 // Check digi size; if > 20, increment highest bin of digisize array 00550 if (digi.size()<20) 00551 ++digisize[static_cast<int>(digi.size())][0]; 00552 else 00553 ++digisize[19][0]; 00554 // loop over time slices of digi to check capID and errors 00555 ++hbHists.count_presample[digi.presamples()]; 00556 00557 00558 // Compare starting cap ID with first capID found 00559 if (firsthbcap==-1) firsthbcap = digi.sample(0).capid(); 00560 int capdif = digi.sample(0).capid() - firsthbcap; 00561 //capdif = capdif%3 - capdif/3; // unnecessary? 00562 // capdif should run from -3 to +3 00563 if (capdif >-4 && capdif<4) 00564 ++hbHists.capIDdiff[capdif+3]; 00565 else 00566 { 00567 ++hbHists.capIDdiff[7]; 00568 if (fVerbosity > 1) 00569 cout <<"<HcalDigiMonitor> Odd behavior of HB capIDs: capID diff = "<<capdif<<" = "<<digi.sample(0).capid()<< " - "<<firsthbcap<<endl; 00570 } 00571 00572 int last=-1; 00573 for (int i=0;i<digi.size();++i) 00574 { 00575 // Check capid rotation 00576 int thisCapid = digi.sample(i).capid(); 00577 if (thisCapid<4) ++hbHists.capid[thisCapid]; 00578 if(bitUpset(last,thisCapid)) bitUp=true; 00579 last = thisCapid; 00580 00581 // Check for digi error bits 00582 if (digi_checkdverr_) 00583 { 00584 if(digi.sample(i).er()) err=(err|0x2); 00585 if(!digi.sample(i).dv()) err=(err|0x2); 00586 } 00587 if (digi.sample(i).er() || !digi.sample(i).dv()) 00588 ++digierrorsdverr[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00589 ++hbHists.dverr[static_cast<int>(2*digi.sample(i).er()+digi.sample(i).dv())]; 00590 // Store ADC value and make ADC sum over whole digi sample 00591 ADCcount+=digi.sample(i).adc(); 00592 if (digi.sample(i).adc()<200) ++hbHists.adc[digi.sample(i).adc()]; 00593 hbHists.count_shape[i]+=digi.sample(i).adc(); 00594 // Calculate ADC sum of adjacent samples 00595 if (i==digi.size()-1) continue; 00596 tssum= digi.sample(i).adc()+digi.sample(i+1).adc(); 00597 if (tssum<45 && tssum>=-5) 00598 { 00599 if (iEta>0) 00600 ++hbHists.tssumplus[tssum+5][i]; 00601 else 00602 ++hbHists.tssumminus[tssum+5][i]; 00603 } 00604 } // for (int i=0;i<digi.size();++i) 00605 if(ADCcount>occThresh_) occ=true; 00606 if (ADCcount<200) 00607 ++hbHists.adcsum[ADCcount]; 00608 if (ADCcount>shapeThresh_) 00609 { 00610 for (int i=0;i<digi.size();++i) 00611 hbHists.count_shapeThresh[i]+=digi.sample(i).adc(); 00612 } 00613 if(bitUp) 00614 { 00615 if (digi_checkcapid_) err=(err|0x4); 00616 ++badcapID[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00617 } 00618 00619 ++occupancyEtaPhi[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00620 ++occupancyEta[static_cast<int>(iEta+(etaBins_-2)/2)]; 00621 ++occupancyPhi[iPhi-1]; 00622 00623 // htr Slots run from 0-20, incremented by 0.5 for top/bottom 00624 ++occupancyVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00625 ++occupancySpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00626 if (!occ) 00627 { 00628 if (digi_checkadcsum_) err=err|0x8; 00629 ++badADCsum[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00630 } 00631 if (err>0) 00632 { 00633 ++hbHists.count_bad; 00634 ++problemdigis[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00635 ++errorVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00636 ++errorSpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00637 } 00638 } // if ((HcalSubdetector)(digi.id().subdet())==HcalBarrel) 00639 else 00640 { 00641 if (!heHists.check) continue; 00642 ++heHists.count_all; 00643 if (iDepth<3) 00644 iDepth=iDepth+4; 00645 00646 // Check that digi size is correct 00647 if (digi.size()<mindigisize_ || digi.size()>maxdigisize_) 00648 { 00649 if (digi_checkdigisize_) err|=0x1; 00650 ++baddigisize[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00651 } 00652 // Check digi size; if > 20, increment highest bin of digisize array 00653 if (digi.size()<20) 00654 ++digisize[static_cast<int>(digi.size())][1]; 00655 else 00656 ++digisize[19][1]; 00657 // loop over time slices of digi to check capID and errors 00658 ++heHists.count_presample[digi.presamples()]; 00659 00660 // Check CapID rotation 00661 if (firsthecap==-1) firsthecap = digi.sample(0).capid(); 00662 int capdif = digi.sample(0).capid() - firsthecap; 00663 //capdif = capdif%3 - capdif/3; // unnecessary? 00664 // capdif should run from -3 to +3 00665 if (capdif >-4 && capdif<4) 00666 ++heHists.capIDdiff[capdif+3]; 00667 else 00668 { 00669 ++heHists.capIDdiff[7]; 00670 if (fVerbosity > 1) 00671 cout <<"<HcalDigiMonitor> Odd behavior of HB capIDs: capID diff = "<<capdif<<" = "<<digi.sample(0).capid()<< " - "<<firsthbcap<<endl; 00672 } 00673 int last=-1; 00674 for (int i=0;i<digi.size();++i) 00675 { 00676 int thisCapid = digi.sample(i).capid(); 00677 if (thisCapid<4) ++heHists.capid[thisCapid]; 00678 if(bitUpset(last,thisCapid)) bitUp=true; 00679 last = thisCapid; 00680 // Check for digi error bits 00681 if (digi_checkdverr_) 00682 { 00683 if(digi.sample(i).er()) err=(err|0x2); 00684 if(!digi.sample(i).dv()) err=(err|0x2); 00685 } 00686 if (digi.sample(i).er() || !digi.sample(i).dv()) 00687 ++digierrorsdverr[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00688 ++heHists.dverr[static_cast<int>(2*digi.sample(i).er()+digi.sample(i).dv())]; 00689 ADCcount+=digi.sample(i).adc(); 00690 if (digi.sample(i).adc()<200) ++heHists.adc[digi.sample(i).adc()]; 00691 heHists.count_shape[i]+=digi.sample(i).adc(); 00692 // Calculate ADC sum of adjacent samples 00693 if (i==digi.size()-1) continue; 00694 tssum= digi.sample(i).adc()+digi.sample(i+1).adc(); 00695 if (tssum<45 && tssum>=-5) 00696 { 00697 if (iEta>0) 00698 ++heHists.tssumplus[tssum+5][i]; 00699 else 00700 ++heHists.tssumminus[tssum+5][i]; 00701 } 00702 } //for (int i=0;i<digi.size();++i) 00703 if(ADCcount>occThresh_) occ=true; 00704 if (ADCcount<200) 00705 ++heHists.adcsum[ADCcount]; 00706 if (ADCcount>shapeThresh_) 00707 { 00708 for (int i=0;i<digi.size();++i) 00709 heHists.count_shapeThresh[i]+=digi.sample(i).adc(); 00710 } 00711 if(bitUp) 00712 { 00713 if (digi_checkcapid_) err=(err|0x4); 00714 ++badcapID[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00715 } 00716 00717 ++occupancyEtaPhi[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00718 ++occupancyEta[static_cast<int>(iEta+(etaBins_-2)/2)]; 00719 ++occupancyPhi[iPhi-1]; 00720 // htr Slots run from 0-20, incremented by 0.5 for top/bottom 00721 ++occupancyVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00722 ++occupancySpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00723 if (!occ) 00724 { 00725 if (digi_checkadcsum_) err=err|0x8; 00726 ++badADCsum[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00727 } 00728 if (err>0) 00729 { 00730 ++heHists.count_bad; 00731 ++problemdigis[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00732 ++errorVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00733 ++errorSpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00734 } 00735 } // else // HE loop 00736 } // loop over HBHE collection 00737 00738 // Calculate number of bad quality cells and bad quality fraction 00739 if (hbHists.check && hbHists.count_all>0) 00740 { 00741 ++hbHists.count_BQ[static_cast<int>(hbHists.count_bad)]; 00742 //if (hbHists.count_bad>0) 00743 ++hbHists.count_BQFrac[static_cast<int>(hbHists.count_bad/hbHists.count_all)*DIGI_BQ_FRAC_NBINS]; 00744 } 00745 if (heHists.check && heHists.count_all>0) 00746 { 00747 ++heHists.count_BQ[static_cast<int>(heHists.count_bad)]; 00748 //if (heHists.count_bad>0) 00749 ++heHists.count_BQFrac[static_cast<int>(heHists.count_bad/heHists.count_all)*DIGI_BQ_FRAC_NBINS]; 00750 } 00751 00752 if (showTiming) 00753 { 00754 cpu_timer.stop(); cout <<"TIMER:: HcalDigiMonitor DIGI HBHE -> "<<cpu_timer.cpuTime()<<endl; 00755 cpu_timer.reset(); cpu_timer.start(); 00756 } 00757 00758 00760 if (hoHists.check) 00761 { 00762 int firsthocap=-1; 00763 for (HODigiCollection::const_iterator j=ho.begin(); j!=ho.end(); ++j) 00764 { 00765 const HODataFrame digi = (const HODataFrame)(*j); 00766 iEta = digi.id().ieta(); 00767 iPhi = digi.id().iphi(); 00768 iDepth = digi.id().depth(); 00769 00770 err=0x0; 00771 occ=false; 00772 bitUp=false; 00773 00774 int ADCcount=0; 00775 ++hoHists.count_all; 00776 00777 // Check that digi size is correct 00778 if (digi.size()<mindigisize_ || digi.size()>maxdigisize_) 00779 { 00780 if (digi_checkdigisize_) err|=0x1; 00781 ++baddigisize[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00782 } 00783 // Check digi size; if > 20, increment highest bin of digisize array 00784 if (digi.size()<20) 00785 ++digisize[static_cast<int>(digi.size())][2]; 00786 else 00787 ++digisize[19][2]; 00788 // loop over time slices of digi to check capID and errors 00789 ++hoHists.count_presample[digi.presamples()]; 00790 00791 // Check CapID rotation 00792 if (firsthocap==-1) firsthocap = digi.sample(0).capid(); 00793 int capdif = digi.sample(0).capid() - firsthocap; 00794 // capdif should run from -3 to +3 00795 if (capdif >-4 && capdif<4) 00796 ++hoHists.capIDdiff[capdif+3]; 00797 else 00798 { 00799 ++hoHists.capIDdiff[7]; 00800 if (fVerbosity > 1) 00801 cout <<"<HcalDigiMonitor> Odd behavior of HB capIDs: capID diff = "<<capdif<<" = "<<digi.sample(0).capid()<< " - "<<firsthbcap<<endl; 00802 } 00803 int last=-1; 00804 for (int i=0;i<digi.size();++i) 00805 { 00806 int thisCapid = digi.sample(i).capid(); 00807 if (thisCapid<4) ++hoHists.capid[thisCapid]; 00808 if(bitUpset(last,thisCapid)) bitUp=true; 00809 last = thisCapid; 00810 // Check for digi error bits 00811 if (digi_checkdverr_) 00812 { 00813 if(digi.sample(i).er()) err=(err|0x2); 00814 if(!digi.sample(i).dv()) err=(err|0x2); 00815 } 00816 if (digi.sample(i).er() || !digi.sample(i).dv()) 00817 ++digierrorsdverr[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00818 ++hoHists.dverr[static_cast<int>(2*digi.sample(i).er()+digi.sample(i).dv())]; 00819 ADCcount+=digi.sample(i).adc(); 00820 if (digi.sample(i).adc()<200) ++hoHists.adc[digi.sample(i).adc()]; 00821 hoHists.count_shape[i]+=digi.sample(i).adc(); 00822 // Calculate ADC sum of adjacent samples 00823 if (i==digi.size()-1) continue; 00824 tssum= digi.sample(i).adc()+digi.sample(i+1).adc(); 00825 if (tssum<45 && tssum>=-5) 00826 { 00827 if (iEta>0) 00828 ++hoHists.tssumplus[tssum+5][i]; 00829 else 00830 ++hoHists.tssumminus[tssum+5][i]; 00831 } 00832 } //for (int i=0;i<digi.size();++i) 00833 if(ADCcount>occThresh_) occ=true; 00834 if (ADCcount<200) 00835 ++hoHists.adcsum[ADCcount]; 00836 if (ADCcount>shapeThresh_) 00837 { 00838 for (int i=0;i<digi.size();++i) 00839 hoHists.count_shapeThresh[i]+=digi.sample(i).adc(); 00840 } 00841 if(bitUp) 00842 { 00843 if (digi_checkcapid_) err=(err|0x4); 00844 ++badcapID[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00845 } 00846 00847 ++occupancyEtaPhi[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00848 ++occupancyEta[static_cast<int>(iEta+(etaBins_-2)/2)]; 00849 ++occupancyPhi[iPhi-1]; 00850 // htr Slots run from 0-20, incremented by 0.5 for top/bottom 00851 ++occupancyVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00852 ++occupancySpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00853 if (!occ) 00854 { 00855 if (digi_checkadcsum_) err=err|0x8; 00856 ++badADCsum[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00857 } 00858 if (err>0) 00859 { 00860 ++hoHists.count_bad; 00861 ++problemdigis[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00862 ++errorVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00863 ++errorSpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00864 } 00865 } // for (HODigiCollection) 00866 00867 if (hoHists.count_all>0) 00868 { 00869 ++hoHists.count_BQ[static_cast<int>(hoHists.count_bad)]; 00870 // if (hoHists.count_bad>0) 00871 ++hoHists.count_BQFrac[static_cast<int>(hoHists.count_bad/hoHists.count_all)*DIGI_BQ_FRAC_NBINS]; 00872 } 00873 } // if (hoHists.check) 00874 00875 if (showTiming) 00876 { 00877 cpu_timer.stop(); cout <<"TIMER:: HcalDigiMonitor DIGI HO -> "<<cpu_timer.cpuTime()<<endl; 00878 cpu_timer.reset(); cpu_timer.start(); 00879 } 00880 00882 if (hfHists.check) 00883 { 00884 int firsthfcap=-1; 00885 for (HFDigiCollection::const_iterator j=hf.begin(); j!=hf.end(); ++j) 00886 { 00887 const HFDataFrame digi = (const HFDataFrame)(*j); 00888 iEta = digi.id().ieta(); 00889 iPhi = digi.id().iphi(); 00890 iDepth = digi.id().depth(); 00891 00892 err=0x0; 00893 occ=false; 00894 bitUp=false; 00895 00896 int ADCcount=0; 00897 ++hfHists.count_all; 00898 00899 // Check that digi size is correct 00900 if (digi.size()<mindigisize_ || digi.size()>maxdigisize_) 00901 { 00902 if (digi_checkdigisize_) err|=0x1; 00903 ++baddigisize[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00904 } 00905 // Check digi size; if > 20, increment highest bin of digisize array 00906 if (digi.size()<20) 00907 ++digisize[static_cast<int>(digi.size())][3]; 00908 else 00909 ++digisize[19][3]; 00910 // loop over time slices of digi to check capID and errors 00911 ++hfHists.count_presample[digi.presamples()]; 00912 00913 // Check CapID rotation 00914 if (firsthfcap==-1) firsthfcap = digi.sample(0).capid(); 00915 int capdif = digi.sample(0).capid() - firsthfcap; 00916 //capdif = capdif%3 - capdif/3; // unnecessary? 00917 // capdif should run from -3 to +3 00918 if (capdif >-4 && capdif<4) 00919 ++hoHists.capIDdiff[capdif+3]; 00920 else 00921 { 00922 ++hoHists.capIDdiff[7]; 00923 if (fVerbosity > 1) 00924 cout <<"<HcalDigiMonitor> Odd behavior of HB capIDs: capID diff = "<<capdif<<" = "<<digi.sample(0).capid()<< " - "<<firsthbcap<<endl; 00925 } 00926 int last=-1; 00927 for (int i=0;i<digi.size();++i) 00928 { 00929 int thisCapid = digi.sample(i).capid(); 00930 if (thisCapid<4) ++hfHists.capid[thisCapid]; 00931 if(bitUpset(last,thisCapid)) bitUp=true; 00932 last = thisCapid; 00933 // Check for digi error bits 00934 if (digi_checkdverr_) 00935 { 00936 if(digi.sample(i).er()) err=(err|0x2); 00937 if(!digi.sample(i).dv()) err=(err|0x2); 00938 } 00939 if (digi.sample(i).er() || !digi.sample(i).dv()) 00940 ++digierrorsdverr[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00941 ++hfHists.dverr[static_cast<int>(2*digi.sample(i).er()+digi.sample(i).dv())]; 00942 ADCcount+=digi.sample(i).adc(); 00943 if (digi.sample(i).adc()<200) ++hfHists.adc[digi.sample(i).adc()]; 00944 hfHists.count_shape[i]+=digi.sample(i).adc(); 00945 // Calculate ADC sum of adjacent samples 00946 if (i==digi.size()-1) continue; 00947 tssum= digi.sample(i).adc()+digi.sample(i+1).adc(); 00948 if (tssum<45 && tssum>=-5) 00949 { 00950 if (iEta>0) 00951 ++hfHists.tssumplus[tssum+5][i]; 00952 else 00953 ++hfHists.tssumminus[tssum+5][i]; 00954 } 00955 } // for (int i=0;i<digi.size();++i) 00956 if(ADCcount>occThresh_) occ=true; 00957 if (ADCcount<200) 00958 ++hfHists.adcsum[ADCcount]; 00959 if (ADCcount>shapeThresh_) 00960 { 00961 for (int i=0;i<digi.size();++i) 00962 hfHists.count_shapeThresh[i]+=digi.sample(i).adc(); 00963 } 00964 if(bitUp) 00965 { 00966 if (digi_checkcapid_) err=(err|0x4); 00967 ++badcapID[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00968 } 00969 00970 ++occupancyEtaPhi[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00971 ++occupancyEta[static_cast<int>(iEta+(etaBins_-2)/2)]; 00972 ++occupancyPhi[iPhi-1]; 00973 // htr Slots run from 0-20, incremented by 0.5 for top/bottom 00974 ++occupancyVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00975 ++occupancySpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00976 if (!occ) 00977 { 00978 if (digi_checkadcsum_) err=err|0x8; 00979 ++badADCsum[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00980 } 00981 if (err>0) 00982 { 00983 ++hfHists.count_bad; 00984 ++problemdigis[static_cast<int>(iEta+(etaBins_-2)/2)][iPhi-1][iDepth-1]; 00985 ++errorVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())]; 00986 ++errorSpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())]; 00987 } 00988 } // for (HFDigiCollection) 00989 00990 if (hfHists.count_all>0) 00991 { 00992 ++hfHists.count_BQ[static_cast<int>(hfHists.count_bad)]; 00993 // if (hfHists.count_bad>0) 00994 ++hfHists.count_BQFrac[static_cast<int>(hfHists.count_bad/hfHists.count_all)*DIGI_BQ_FRAC_NBINS]; 00995 } 00996 } // if (hfHists.check) 00997 00998 if (showTiming) 00999 { 01000 cpu_timer.stop(); cout <<"TIMER:: HcalDigiMonitor DIGI HF -> "<<cpu_timer.cpuTime()<<endl; 01001 } 01002 01003 // This only counts digis that are present but bad somehow; it does not count digis that are missing 01004 int count_all=hbHists.count_all+heHists.count_all+hoHists.count_all+hfHists.count_all; 01005 int count_bad=hbHists.count_bad+heHists.count_bad+hoHists.count_bad+hfHists.count_bad; 01006 01007 ++digiBQ[count_bad]; 01008 ++diginum[count_all]; 01009 if (count_all>0) 01010 ++digiBQfrac[static_cast<int>(count_bad/count_all)*DIGI_BQ_FRAC_NBINS]; 01011 01012 if (ievt_%digi_checkNevents_==0) 01013 fill_Nevents(); 01014 01015 return; 01016 } // void HcalDigiMonitor::processEvent(...)
Definition at line 1373 of file HcalDigiMonitor.cc.
References DigiHists::check, hbHists, heHists, hfHists, and hoHists.
Referenced by HcalMonitorModule::analyze().
01374 { 01375 hbHists.check&=hb; 01376 heHists.check&=he; 01377 hoHists.check&=ho; 01378 hfHists.check&=hf; 01379 01380 return; 01381 } // void HcalDigiMonitor::setSubDetectors(...)
void HcalDigiMonitor::setup | ( | const edm::ParameterSet & | ps, | |
DQMStore * | dbe | |||
) | [virtual] |
Reimplemented from HcalBaseMonitor.
Definition at line 29 of file HcalDigiMonitor.cc.
References DigiHists::adc, DigiHists::ADC, DigiHists::ADCsum, DigiHists::adcsum, badADCsum, badcapID, baddigisize, HcalBaseMonitor::baseFolder_, DQMStore::book1D(), DQMStore::book2D(), DQMStore::bookInt(), DigiHists::BQ, DigiHists::BQFrac, DigiHists::capid, DigiHists::CapID, DigiHists::capIDdiff, DigiHists::check, HcalBaseMonitor::checkNevents_, DigiHists::count_BQ, DigiHists::count_BQFrac, DigiHists::count_presample, DigiHists::count_shape, DigiHists::count_shapeThresh, GenMuonPlsPt100GeV_cfg::cout, HcalBaseMonitor::cpu_timer, edm::CPUTimer::cpuTime(), DIGI_BQ_FRAC_NBINS, digi_checkadcsum_, digi_checkcapid_, digi_checkdigisize_, digi_checkdverr_, digi_checkNevents_, digi_checkoccupancy_, DIGI_NUM, DIGI_SUBDET_NUM, digiBQ, DigiBQ, digiBQfrac, DigiBQFrac, DigiErrorsBadADCSum, DigiErrorsBadCapID, DigiErrorsBadDigiSize, DigiErrorsDVErr, digierrorsdverr, DigiErrorsNoDigi, DigiErrorSpigot, DigiErrorVME, DigiHists::DigiFirstCapID, DigiNum, diginum, DigiOccupancyByDepth, DigiOccupancyEta, DigiOccupancyPhi, DigiOccupancySpigot, DigiOccupancyVME, digisize, DigiSize, doPerChannel_, DigiHists::dverr, DigiHists::DVerr, lat::endl(), errorSpigot, errorVME, HcalBaseMonitor::etaBins_, HcalBaseMonitor::etaMax_, HcalBaseMonitor::etaMin_, MonitorElement::Fill(), HcalBaseMonitor::fVerbosity, edm::ParameterSet::getUntrackedParameter(), hbHists, heHists, hfHists, hoHists, i, ievt_, j, k, HcalBaseMonitor::m_dbe, HcalBaseMonitor::makeDiagnostics, maxdigisize_, meEVT_, mindigisize_, name, occThresh_, occupancyEta, occupancyEtaPhi, occupancyPhi, occupancySpigot, occupancyVME, HcalBaseMonitor::phiBins_, HcalBaseMonitor::phiMax_, HcalBaseMonitor::phiMin_, DigiHists::presample, problemdigis, ProblemDigis, ProblemDigisByDepth, edm::CPUTimer::reset(), HcalBaseMonitor::rootFolder_, MonitorElement::setAxisTitle(), MonitorElement::setBinLabel(), DQMStore::setCurrentFolder(), HcalBaseMonitor::setup(), HcalBaseMonitor::setupDepthHists2D(), DigiHists::shape, DigiHists::shapeThresh, shapeThresh_, HcalBaseMonitor::showTiming, HcalDCCHeader::SPIGOT_COUNT, edm::CPUTimer::start(), edm::CPUTimer::stop(), DigiHists::TS_sum_minus, DigiHists::TS_sum_plus, DigiHists::tssumminus, and DigiHists::tssumplus.
Referenced by HcalMonitorModule::HcalMonitorModule().
00031 { 00032 // Call base class setup 00033 HcalBaseMonitor::setup(ps,dbe); 00034 baseFolder_ = rootFolder_+"DigiMonitor_Hcal"; 00035 00036 if (showTiming) 00037 { 00038 cpu_timer.reset(); cpu_timer.start(); 00039 } 00040 00041 // Get digi-specific parameters 00042 00043 shapeThresh_ = ps.getUntrackedParameter<int>("DigiMonitor_ShapeThresh", -1); 00044 //shapeThresh_ is used for plotting pulse shapes for all digis with ADC sum > shapeThresh_; 00045 occThresh_ = ps.getUntrackedParameter<int>("DigiMonitor_ADCsumThresh", 0); 00046 //occThresh_ is used to determine when checking ADC sums of digis 00047 if (fVerbosity>0) 00048 { 00049 cout << "<HcalDigiMonitor> Digi ADC occupancy threshold set to: >" << occThresh_ << endl; 00050 cout <<"<HcalDigiMonitor> Digi shape ADC threshold set to: >" << shapeThresh_ << endl; 00051 } 00052 makeDiagnostics = ps.getUntrackedParameter<bool>("DigiMonitor_MakeDiagnosticPlots",false); // not yet used 00053 00054 doPerChannel_ = ps.getUntrackedParameter<bool>("DigiMonitor_DigisPerchannel",false); // not yet used -- never will be? 00055 if (fVerbosity>1) 00056 cout << "<HcalDigiMonitor> Digi phi min/max set to " << phiMin_ << "/" <<phiMax_ << endl; 00057 00058 digi_checkNevents_ = ps.getUntrackedParameter<int>("DigiMonitor_checkNevents",checkNevents_); 00059 if (fVerbosity>1) 00060 cout <<"<HcalDigiMonitor> Perform checks and histogram fills every "<<digi_checkNevents_<<" events"<<endl; 00061 00062 // Specify which tests to run when looking for problem digis 00063 digi_checkoccupancy_ = ps.getUntrackedParameter<bool>("DigiMonitor_problems_checkForMissingDigis",false); 00064 digi_checkcapid_ = ps.getUntrackedParameter<bool>("DigiMonitor_problems_checkCapID",true); 00065 digi_checkdigisize_ = ps.getUntrackedParameter<bool>("DigiMonitor_problems_checkDigiSize",true); 00066 digi_checkadcsum_ = ps.getUntrackedParameter<bool>("DigiMonitor_problems_checkADCsum",true); 00067 digi_checkdverr_ = ps.getUntrackedParameter<bool>("DigiMonitor_problems_checkDVerr",true); 00068 mindigisize_ = ps.getUntrackedParameter<int>("DigiMonitor_minDigiSize",1); 00069 maxdigisize_ = ps.getUntrackedParameter<int>("DigiMonitor_maxDigiSize",20); 00070 00071 hbHists.check=ps.getUntrackedParameter<bool>("checkHB",true); 00072 heHists.check=ps.getUntrackedParameter<bool>("checkHE",true); 00073 hoHists.check=ps.getUntrackedParameter<bool>("checkHO",true); 00074 hfHists.check=ps.getUntrackedParameter<bool>("checkHF",true); 00075 00076 if (fVerbosity>1) 00077 { 00078 cout <<"<HcalDigiMonitor> Checking for the following problems:"<<endl; 00079 if (digi_checkoccupancy_) cout <<"\tChecking that digi present at least once every "<<digi_checkNevents_<<" events;"<<endl; 00080 if (digi_checkcapid_) cout <<"\tChecking that cap ID rotation is correct;"<<endl; 00081 if (digi_checkdigisize_) cout <<"\tChecking that digi size is between ["<<mindigisize_<<" - "<<maxdigisize_<<"];"<<endl; 00082 if (digi_checkadcsum_) cout <<"\tChecking that ADC sum of digi is greater than 0;"<<endl; 00083 if (digi_checkdverr_) cout <<"\tChecking that data valid bit is true and digi error bit is false;"<<endl; 00084 cout <<"\tChecking digis for the following subdetectors:"<<endl; 00085 if (hbHists.check) cout <<"\tHB"; 00086 if (heHists.check) cout <<"\tHE"; 00087 if (hoHists.check) cout <<"\tHO"; 00088 if (hfHists.check) cout <<"\tHF"; 00089 cout <<endl; 00090 } 00091 00092 ievt_=0; 00093 00094 /******** Zero all counters *******/ 00095 00096 for (int i=0;i<87;++i) 00097 { 00098 occupancyEta[i]=0; 00099 if (i<72) 00100 occupancyPhi[i]=0; 00101 for (int j=0;j<72;++j) 00102 { 00103 for (int k=0;k<6;++k) 00104 { 00105 problemdigis[i][j][k]=0; 00106 badcapID[i][j][k]=0; 00107 baddigisize[i][j][k]=0; 00108 badADCsum[i][j][k]=0; 00109 occupancyEtaPhi[i][j][k]=0; 00110 digierrorsdverr[i][j][k]=0; 00111 } 00112 } // for (int j=0;j<72;++i) 00113 } // for (int i=0;i<87;++i) 00114 00115 for (int i=0;i<40;++i) 00116 { 00117 for (int j=0;j<18;++j) 00118 { 00119 occupancyVME[i][j]=0; 00120 errorVME[i][j]=0; 00121 } 00122 } 00123 00124 for (int i=0;i<HcalDCCHeader::SPIGOT_COUNT;++i) 00125 { 00126 for (int j=0;j<36;++j) 00127 { 00128 occupancySpigot[i][j]=0; 00129 errorSpigot[i][j]=0; 00130 } 00131 } 00132 00133 00134 for (int i=0;i<20;++i) 00135 { 00136 for (int j=0;j<4;++j) 00137 digisize[i][j]=0; 00138 } 00139 00140 for (int i=0;i<DIGI_NUM;++i) 00141 { 00142 if (i<DIGI_BQ_FRAC_NBINS) 00143 digiBQfrac[i]=0; 00144 digiBQ[i]=0; 00145 diginum[i]=0; 00146 00147 // set all DigiHists counters to 0 00148 if (i<4) 00149 { 00150 hbHists.dverr[i]=0; 00151 heHists.dverr[i]=0; 00152 hoHists.dverr[i]=0; 00153 hfHists.dverr[i]=0; 00154 hbHists.capid[i]=0; 00155 heHists.capid[i]=0; 00156 hoHists.capid[i]=0; 00157 hfHists.capid[i]=0; 00158 } 00159 if (i<8) 00160 { 00161 hbHists.capIDdiff[i]=0; 00162 heHists.capIDdiff[i]=0; 00163 hoHists.capIDdiff[i]=0; 00164 hfHists.capIDdiff[i]=0; 00165 } 00166 00167 if (i<10) 00168 { 00169 hbHists.count_shape[i]=0; 00170 heHists.count_shape[i]=0; 00171 hoHists.count_shape[i]=0; 00172 hfHists.count_shape[i]=0; 00173 hbHists.count_shapeThresh[i]=0; 00174 heHists.count_shapeThresh[i]=0; 00175 hoHists.count_shapeThresh[i]=0; 00176 hfHists.count_shapeThresh[i]=0; 00177 } 00178 if (i<50) 00179 { 00180 hbHists.count_presample[i]=0; 00181 heHists.count_presample[i]=0; 00182 hoHists.count_presample[i]=0; 00183 hfHists.count_presample[i]=0; 00184 for (int j=0;j<10;++j) 00185 { 00186 hbHists.tssumplus[i][j]=0; 00187 heHists.tssumplus[i][j]=0; 00188 hoHists.tssumplus[i][j]=0; 00189 hfHists.tssumplus[i][j]=0; 00190 hbHists.tssumminus[i][j]=0; 00191 heHists.tssumminus[i][j]=0; 00192 hoHists.tssumminus[i][j]=0; 00193 hfHists.tssumminus[i][j]=0; 00194 } 00195 } 00196 if (i<200) 00197 { 00198 hbHists.adc[i]=0; 00199 heHists.adc[i]=0; 00200 hoHists.adc[i]=0; 00201 hfHists.adc[i]=0; 00202 hbHists.adcsum[i]=0; 00203 heHists.adcsum[i]=0; 00204 hoHists.adcsum[i]=0; 00205 hfHists.adcsum[i]=0; 00206 } 00207 if (i<DIGI_SUBDET_NUM) 00208 { 00209 hbHists.count_BQ[i]=0; 00210 heHists.count_BQ[i]=0; 00211 hoHists.count_BQ[i]=0; 00212 hfHists.count_BQ[i]=0; 00213 } 00214 if (i<DIGI_BQ_FRAC_NBINS) 00215 { 00216 hbHists.count_BQFrac[i]=0; 00217 heHists.count_BQFrac[i]=0; 00218 hoHists.count_BQFrac[i]=0; 00219 hfHists.count_BQFrac[i]=0; 00220 } 00221 } // for (int i=0;i<DIGI_NUM;++i) 00222 00223 00224 /******* Set up all histograms ********/ 00225 00226 if (m_dbe) 00227 { 00228 ostringstream name; 00229 m_dbe->setCurrentFolder(baseFolder_); 00230 meEVT_ = m_dbe->bookInt("Digi Task Event Number"); 00231 meEVT_->Fill(ievt_); 00232 00233 MonitorElement* checkN = m_dbe->bookInt("DigiCheckNevents"); 00234 checkN->Fill(digi_checkNevents_); 00235 MonitorElement* occT = m_dbe->bookInt("DigiOccThresh"); 00236 occT->Fill(occThresh_); 00237 MonitorElement* shapeT = m_dbe->bookInt("DigiShapeThresh"); 00238 shapeT->Fill(shapeThresh_); 00239 ProblemDigis = m_dbe->book2D(" ProblemDigis", 00240 " Problem Digi Rate for all HCAL", 00241 etaBins_,etaMin_,etaMax_, 00242 phiBins_,phiMin_,phiMax_); 00243 00244 m_dbe->setCurrentFolder(baseFolder_+"/problem_digis"); 00245 setupDepthHists2D(ProblemDigisByDepth," Problem Digi Rate",""); 00246 m_dbe->setCurrentFolder(baseFolder_+"/problem_digis/badcapID"); 00247 setupDepthHists2D(DigiErrorsBadCapID," Digis with Bad Cap ID Rotation", ""); 00248 m_dbe->setCurrentFolder(baseFolder_+"/problem_digis/baddigisize"); 00249 setupDepthHists2D(DigiErrorsBadDigiSize," Digis with Bad Size", ""); 00250 DigiSize = m_dbe->book2D("Digi Size", "Digi Size",4,0,4,20,-0.5,19.5); 00251 DigiSize->setBinLabel(1,"HB",1); 00252 DigiSize->setBinLabel(2,"HE",1); 00253 DigiSize->setBinLabel(3,"HO",1); 00254 DigiSize->setBinLabel(4,"HF",1); 00255 DigiSize->setAxisTitle("Subdetector",1); 00256 DigiSize->setAxisTitle("Digi Size",2); 00257 00258 m_dbe->setCurrentFolder(baseFolder_+"/problem_digis/badADCsum"); 00259 name<<" Digis with ADC sum below threshold ADC counts"; // make the name variable at some point? Or just change title to specify ADC threshold? 00260 setupDepthHists2D(DigiErrorsBadADCSum," Digis with ADC sum below threshold ADC counts", ""); 00261 name.str(""); 00262 for (int i=0;i<6;++i) 00263 { 00264 name<<DigiErrorsBadADCSum[i]->getTitle()<<"(ADC sum > "<<occThresh_<<" events)"; 00265 DigiErrorsBadADCSum[i]->setTitle(static_cast<const string>(name.str().c_str())); 00266 name.str(""); 00267 } 00268 m_dbe->setCurrentFolder(baseFolder_+"/problem_digis/nodigis"); 00269 name<<" Digis Missing for a Number of Consecutive Events"; 00270 // setup requires char*; .c_str() returns const char*; recast 00271 setupDepthHists2D(DigiErrorsNoDigi," Digis Missing for a Number of Consecutive Events", ""); 00272 name.str(""); 00273 for (int i=0;i<6;++i) 00274 { 00275 name<<DigiErrorsNoDigi[i]->getTitle()<<"("<<digi_checkNevents_<<" events)"; 00276 DigiErrorsNoDigi[i]->setTitle(static_cast<const string>(name.str().c_str())); 00277 name.str(""); 00278 } 00279 m_dbe->setCurrentFolder(baseFolder_+"/problem_digis/data_invalid_error"); 00280 setupDepthHists2D(DigiErrorsDVErr," Digis with Data Invalid or Error Bit Set", ""); 00281 00282 m_dbe->setCurrentFolder(baseFolder_+"/digi_occupancy"); 00283 setupDepthHists2D(DigiOccupancyByDepth," Digi Eta-Phi Occupancy Map",""); 00284 DigiOccupancyPhi= m_dbe->book1D("Digi Phi Occupancy Map", 00285 "Digi Phi Occupancy Map", 00286 phiBins_,phiMin_,phiMax_); 00287 DigiOccupancyPhi->setAxisTitle("i#phi",1); 00288 DigiOccupancyPhi->setAxisTitle("# of Events",2); 00289 DigiOccupancyEta= m_dbe->book1D("Digi Eta Occupancy Map", 00290 "Digi Eta Occupancy Map", 00291 etaBins_,etaMin_,etaMax_); 00292 DigiOccupancyEta->setAxisTitle("i#eta",1); 00293 DigiOccupancyEta->setAxisTitle("# of Events",2); 00294 00295 DigiOccupancyVME = m_dbe->book2D("Digi VME Occupancy Map", 00296 "Digi VME Occupancy Map", 00297 40,-0.25,19.75,18,-0.5,17.5); 00298 DigiOccupancyVME -> setAxisTitle("HTR Slot",1); 00299 DigiOccupancyVME -> setAxisTitle("VME Crate Id",2); 00300 00301 DigiOccupancySpigot = m_dbe->book2D("Digi Spigot Occupancy Map", 00302 "Digi Spigot Occupancy Map", 00303 HcalDCCHeader::SPIGOT_COUNT,-0.5,HcalDCCHeader::SPIGOT_COUNT-0.5, 00304 36,-0.5,35.5); 00305 DigiOccupancySpigot -> setAxisTitle("Spigot",1); 00306 DigiOccupancySpigot -> setAxisTitle("DCC Id",2); 00307 00308 m_dbe->setCurrentFolder(baseFolder_+"/digi_errors"); 00309 /* 00310 DigiErrorEtaPhi = m_dbe->book2D("Digi Geo Error Map","Digi Geo Error Map", 00311 etaBins_,etaMin_,etaMax_, 00312 phiBins_,phiMin_,phiMax_); 00313 DigiErrorEtaPhi -> setAxisTitle("i#eta",1); 00314 DigiErrorEtaPhi -> setAxisTitle("i#phi",2); 00315 */ 00316 00317 DigiErrorVME = m_dbe->book2D("Digi VME Error Map", 00318 "Digi VME Error Map", 00319 40,-0.25,19.75,18,-0.5,17.5); 00320 DigiErrorVME -> setAxisTitle("HTR Slot",1); 00321 DigiErrorVME -> setAxisTitle("VME Crate Id",2); 00322 00323 DigiErrorSpigot = m_dbe->book2D("Digi Spigot Error Map", 00324 "Digi Spigot Error Map", 00325 HcalDCCHeader::SPIGOT_COUNT,-0.5,HcalDCCHeader::SPIGOT_COUNT-0.5, 00326 36,-0.5,35.5); 00327 DigiErrorSpigot -> setAxisTitle("Spigot",1); 00328 DigiErrorSpigot -> setAxisTitle("DCC Id",2); 00329 00330 DigiBQ = m_dbe->book1D("# Bad Qual Digis","# Bad Qual Digis",DIGI_NUM,-0.5,DIGI_NUM-0.5); 00331 DigiBQ -> setAxisTitle("# Bad Quality Digis",1); 00332 DigiBQ -> setAxisTitle("# of Events",2); 00333 00334 DigiBQFrac = m_dbe->book1D("Bad Digi Fraction","Bad Digi Fraction",DIGI_BQ_FRAC_NBINS,(0-0.5/(DIGI_BQ_FRAC_NBINS-1)),1+0.5/(DIGI_BQ_FRAC_NBINS-1)); 00335 DigiBQFrac -> setAxisTitle("Bad Quality Digi Fraction",1); 00336 DigiBQFrac -> setAxisTitle("# of Events",2); 00337 00338 00339 m_dbe->setCurrentFolder(baseFolder_+"/digi_info"); 00340 DigiNum = m_dbe->book1D("# of Digis","# of Digis",DIGI_NUM,-0.5,DIGI_NUM-0.5); 00341 DigiNum -> setAxisTitle("# of Digis",1); 00342 DigiNum -> setAxisTitle("# of Events",2); 00343 00344 // Individual subdetector histograms 00345 m_dbe->setCurrentFolder(baseFolder_+"/digi_info/HB"); 00346 hbHists.shape = m_dbe->book1D("HB Digi Shape","HB Digi Shape",10,-0.5,9.5); 00347 hbHists.shapeThresh = m_dbe->book1D("HB Digi Shape - over thresh", 00348 "HB Digi Shape - over thresh", 00349 10,-0.5,9.5); 00350 hbHists.shape->setAxisTitle("Time Slice",1); 00351 hbHists.shapeThresh->setAxisTitle("Time Slice",1); 00352 00353 // Create plots of sums of adjacent time slices 00354 for (int ts=0;ts<9;++ts) 00355 { 00356 name<<"HB Plus Time Slices "<<ts<<" and "<<ts+1; 00357 hbHists.TS_sum_plus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00358 name.str(""); 00359 name<<"HB Minus Time Slices "<<ts<<" and "<<ts+1; 00360 hbHists.TS_sum_minus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00361 name.str(""); 00362 } 00363 hbHists.presample= m_dbe->book1D("HB Digi Presamples","HB Digi Presamples",50,-0.5,49.5); 00364 hbHists.BQ = m_dbe->book1D("HB Bad Quality Digis","HB Bad Quality Digis",DIGI_SUBDET_NUM,-0.5,DIGI_SUBDET_NUM-0.5); 00365 hbHists.BQFrac = m_dbe->book1D("HB Bad Quality Digi Fraction","HB Bad Quality Digi Fraction",DIGI_BQ_FRAC_NBINS,(0-0.5/(DIGI_BQ_FRAC_NBINS-1)),1+0.5/(DIGI_BQ_FRAC_NBINS-1)); 00366 hbHists.DigiFirstCapID = m_dbe->book1D("HB Capid 1st Time Slice","HB Capid for 1st Time Slice",7,-3.5,3.5); 00367 hbHists.DigiFirstCapID -> setAxisTitle("CapID (T0) - 1st CapId (T0)",1); 00368 hbHists.DigiFirstCapID -> setAxisTitle("# of Events",2); 00369 hbHists.DVerr = m_dbe->book1D("HB Data Valid Err Bits","HB QIE Data Valid Err Bits",4,-0.5,3.5); 00370 hbHists.DVerr ->setBinLabel(1,"Err=0, DV=0",1); 00371 hbHists.DVerr ->setBinLabel(2,"Err=0, DV=1",1); 00372 hbHists.DVerr ->setBinLabel(3,"Err=1, DV=0",1); 00373 hbHists.DVerr ->setBinLabel(4,"Err=1, DV=1",1); 00374 hbHists.CapID = m_dbe->book1D("HB CapID","HB CapID",4,-0.5,3.5); 00375 hbHists.ADC = m_dbe->book1D("HB ADC count per time slice","HB ADC count per time slice",200,-0.5,199.5); 00376 hbHists.ADCsum = m_dbe->book1D("HB ADC sum", "HB ADC sum",200,-0.5,199.5); 00377 00378 m_dbe->setCurrentFolder(baseFolder_+"/digi_info/HE"); 00379 heHists.shape = m_dbe->book1D("HE Digi Shape","HE Digi Shape",10,-0.5,9.5); 00380 heHists.shapeThresh = m_dbe->book1D("HE Digi Shape - over thresh", 00381 "HE Digi Shape - over thresh", 00382 10,-0.5,9.5); 00383 heHists.shape->setAxisTitle("Time Slice",1); 00384 heHists.shapeThresh->setAxisTitle("Time Slice",1); 00385 // Create plots of sums of adjacent time slices 00386 for (int ts=0;ts<9;++ts) 00387 { 00388 name<<"HE Plus Time Slices "<<ts<<" and "<<ts+1; 00389 heHists.TS_sum_plus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00390 name.str(""); 00391 name<<"HE Minus Time Slices "<<ts<<" and "<<ts+1; 00392 heHists.TS_sum_minus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00393 name.str(""); 00394 } 00395 00396 heHists.presample= m_dbe->book1D("HE Digi Presamples","HE Digi Presamples",50,-0.5,49.5); 00397 heHists.BQ = m_dbe->book1D("HE Bad Quality Digis","HE Bad Quality Digis",DIGI_SUBDET_NUM,-0.5,DIGI_SUBDET_NUM-0.5); 00398 heHists.BQFrac = m_dbe->book1D("HE Bad Quality Digi Fraction","HE Bad Quality Digi Fraction",DIGI_BQ_FRAC_NBINS,(0-0.5/(DIGI_BQ_FRAC_NBINS-1)),1+0.5/(DIGI_BQ_FRAC_NBINS-1)); 00399 heHists.DigiFirstCapID = m_dbe->book1D("HE Capid 1st Time Slice","HE Capid for 1st Time Slice",7,-3.5,3.5); 00400 heHists.DigiFirstCapID -> setAxisTitle("CapID (T0) - 1st CapId (T0)",1); 00401 heHists.DigiFirstCapID -> setAxisTitle("# of Events",2); 00402 heHists.DVerr = m_dbe->book1D("HE Data Valid Err Bits","HE QIE Data Valid Err Bits",4,-0.5,3.5); 00403 heHists.DVerr ->setBinLabel(1,"Err=0, DV=0",1); 00404 heHists.DVerr ->setBinLabel(2,"Err=0, DV=1",1); 00405 heHists.DVerr ->setBinLabel(3,"Err=1, DV=0",1); 00406 heHists.DVerr ->setBinLabel(4,"Err=1, DV=1",1); 00407 heHists.CapID = m_dbe->book1D("HE CapID","HE CapID",4,-0.5,3.5); 00408 heHists.ADC = m_dbe->book1D("HE ADC count per time slice","HE ADC count per time slice",200,-0.5,199.5); 00409 heHists.ADCsum = m_dbe->book1D("HE ADC sum", "HE ADC sum",200,-0.5,199.5); 00410 00411 m_dbe->setCurrentFolder(baseFolder_+"/digi_info/HO"); 00412 hoHists.shape = m_dbe->book1D("HO Digi Shape","HO Digi Shape",10,-0.5,9.5); 00413 hoHists.shapeThresh = m_dbe->book1D("HO Digi Shape - over thresh", 00414 "HO Digi Shape - over thresh", 00415 10,-0.5,9.5); 00416 hoHists.shape->setAxisTitle("Time Slice",1); 00417 hoHists.shapeThresh->setAxisTitle("Time Slice",1); 00418 // Create plots of sums of adjacent time slices 00419 for (int ts=0;ts<9;++ts) 00420 { 00421 name<<"HO Plus Time Slices "<<ts<<" and "<<ts+1; 00422 hoHists.TS_sum_plus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00423 name.str(""); 00424 name<<"HO Minus Time Slices "<<ts<<" and "<<ts+1; 00425 hoHists.TS_sum_minus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00426 name.str(""); 00427 } 00428 hoHists.presample= m_dbe->book1D("HO Digi Presamples","HO Digi Presamples",50,-0.5,49.5); 00429 hoHists.BQ = m_dbe->book1D("HO Bad Quality Digis","HO Bad Quality Digis",DIGI_SUBDET_NUM,-0.5,DIGI_SUBDET_NUM-0.5); 00430 hoHists.BQFrac = m_dbe->book1D("HO Bad Quality Digi Fraction","HO Bad Quality Digi Fraction",DIGI_BQ_FRAC_NBINS,(0-0.5/(DIGI_BQ_FRAC_NBINS-1)),1+0.5/(DIGI_BQ_FRAC_NBINS-1)); 00431 hoHists.DigiFirstCapID = m_dbe->book1D("HO Capid 1st Time Slice","HO Capid for 1st Time Slice",7,-3.5,3.5); 00432 hoHists.DigiFirstCapID -> setAxisTitle("CapID (T0) - 1st CapId (T0)",1); 00433 hoHists.DigiFirstCapID -> setAxisTitle("# of Events",2); 00434 hoHists.DVerr = m_dbe->book1D("HO Data Valid Err Bits","HO QIE Data Valid Err Bits",4,-0.5,3.5); 00435 hoHists.DVerr ->setBinLabel(1,"Err=0, DV=0",1); 00436 hoHists.DVerr ->setBinLabel(2,"Err=0, DV=1",1); 00437 hoHists.DVerr ->setBinLabel(3,"Err=1, DV=0",1); 00438 hoHists.DVerr ->setBinLabel(4,"Err=1, DV=1",1); 00439 hoHists.CapID = m_dbe->book1D("HO CapID","HO CapID",4,-0.5,3.5); 00440 hoHists.ADC = m_dbe->book1D("HO ADC count per time slice","HO ADC count per time slice",200,-0.5,199.5); 00441 hoHists.ADCsum = m_dbe->book1D("HO ADC sum", "HO ADC sum",200,-0.5,199.5); 00442 00443 m_dbe->setCurrentFolder(baseFolder_+"/digi_info/HF"); 00444 hfHists.shape = m_dbe->book1D("HF Digi Shape","HF Digi Shape",10,-0.5,9.5); 00445 hfHists.shapeThresh = m_dbe->book1D("HF Digi Shape - over thresh", 00446 "HF Digi Shape - over thresh", 00447 10,-0.5,9.5); 00448 // Create plots of sums of adjacent time slices 00449 for (int ts=0;ts<9;++ts) 00450 { 00451 name<<"HF Plus Time Slices "<<ts<<" and "<<ts+1; 00452 hfHists.TS_sum_plus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00453 name.str(""); 00454 name<<"HF Minus Time Slices "<<ts<<" and "<<ts+1; 00455 hfHists.TS_sum_minus.push_back(m_dbe->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5)); 00456 name.str(""); 00457 } 00458 hfHists.shape->setAxisTitle("Time Slice",1); 00459 hfHists.shapeThresh->setAxisTitle("Time Slice",1); 00460 hfHists.presample= m_dbe->book1D("HF Digi Presamples","HF Digi Presamples",50,-0.5,49.5); 00461 hfHists.BQ = m_dbe->book1D("HF Bad Quality Digis","HF Bad Quality Digis",DIGI_SUBDET_NUM,-0.5,DIGI_SUBDET_NUM-0.5); 00462 hfHists.BQFrac = m_dbe->book1D("HF Bad Quality Digi Fraction","HF Bad Quality Digi Fraction",DIGI_BQ_FRAC_NBINS,(0-0.5/(DIGI_BQ_FRAC_NBINS-1)),1+0.5/(DIGI_BQ_FRAC_NBINS-1)); 00463 hfHists.DigiFirstCapID = m_dbe->book1D("HF Capid 1st Time Slice","HF Capid for 1st Time Slice",7,-3.5,3.5); 00464 hfHists.DigiFirstCapID -> setAxisTitle("CapID (T0) - 1st CapId (T0)",1); 00465 hfHists.DigiFirstCapID -> setAxisTitle("# of Events",2); 00466 hfHists.DVerr = m_dbe->book1D("HF Data Valid Err Bits","HF QIE Data Valid Err Bits",4,-0.5,3.5); 00467 hfHists.DVerr ->setBinLabel(1,"Err=0, DV=0",1); 00468 hfHists.DVerr ->setBinLabel(2,"Err=0, DV=1",1); 00469 hfHists.DVerr ->setBinLabel(3,"Err=1, DV=0",1); 00470 hfHists.DVerr ->setBinLabel(4,"Err=1, DV=1",1); 00471 hfHists.CapID = m_dbe->book1D("HF CapID","HF CapID",4,-0.5,3.5); 00472 hfHists.ADC = m_dbe->book1D("HF ADC count per time slice","HF ADC count per time slice",200,-0.5,199.5); 00473 hfHists.ADCsum = m_dbe->book1D("HF ADC sum", "HF ADC sum",200,-0.5,199.5); 00474 00475 } // if (m_dbe) // ends histogram setup 00476 if (showTiming) 00477 { 00478 cpu_timer.stop(); cout <<"TIMER:: HcalDigiMonitor Setup -> "<<cpu_timer.cpuTime()<<endl; 00479 } 00480 00481 } // void HcalDigiMonitor::setup(...)
int HcalDigiMonitor::badADCsum[87][72][6] [private] |
Definition at line 104 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::badcapID[87][72][6] [private] |
Definition at line 102 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::baddigisize[87][72][6] [private] |
Definition at line 103 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
const HcalQIECoder* HcalDigiMonitor::channelCoder_ [private] |
Definition at line 89 of file HcalDigiMonitor.h.
bool HcalDigiMonitor::digi_checkadcsum_ [private] |
bool HcalDigiMonitor::digi_checkcapid_ [private] |
bool HcalDigiMonitor::digi_checkdigisize_ [private] |
bool HcalDigiMonitor::digi_checkdverr_ [private] |
int HcalDigiMonitor::digi_checkNevents_ [private] |
Definition at line 79 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
bool HcalDigiMonitor::digi_checkoccupancy_ [private] |
int HcalDigiMonitor::digiBQ[DIGI_NUM] [private] |
Definition at line 127 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
MonitorElement* HcalDigiMonitor::DigiBQ [private] |
int HcalDigiMonitor::digiBQfrac[DIGI_BQ_FRAC_NBINS] [private] |
Definition at line 128 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
MonitorElement* HcalDigiMonitor::DigiBQFrac [private] |
std::vector<MonitorElement*> HcalDigiMonitor::DigiErrorsBadADCSum [private] |
std::vector<MonitorElement*> HcalDigiMonitor::DigiErrorsBadCapID [private] |
std::vector<MonitorElement*> HcalDigiMonitor::DigiErrorsBadDigiSize [private] |
int HcalDigiMonitor::digierrorsdverr[87][72][6] [private] |
Definition at line 106 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
std::vector<MonitorElement*> HcalDigiMonitor::DigiErrorsDVErr [private] |
std::vector<MonitorElement*> HcalDigiMonitor::DigiErrorsNoDigi [private] |
MonitorElement* HcalDigiMonitor::DigiErrorSpigot [private] |
MonitorElement* HcalDigiMonitor::DigiErrorVME [private] |
MonitorElement* HcalDigiMonitor::DigiFirstCapID [private] |
Definition at line 133 of file HcalDigiMonitor.h.
int HcalDigiMonitor::diginum[DIGI_NUM] [private] |
Definition at line 135 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
MonitorElement* HcalDigiMonitor::DigiNum [private] |
std::vector<MonitorElement*> HcalDigiMonitor::DigiOccupancyByDepth [private] |
MonitorElement* HcalDigiMonitor::DigiOccupancyEta [private] |
MonitorElement* HcalDigiMonitor::DigiOccupancyPhi [private] |
MonitorElement* HcalDigiMonitor::DigiOccupancyVME [private] |
int HcalDigiMonitor::digisize[20][4] [private] |
Definition at line 105 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
MonitorElement* HcalDigiMonitor::DigiSize [private] |
bool HcalDigiMonitor::doFCpeds_ [private] |
Definition at line 76 of file HcalDigiMonitor.h.
bool HcalDigiMonitor::doPerChannel_ [private] |
int HcalDigiMonitor::errorSpigot[15][36] [private] |
Definition at line 130 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::errorVME[40][18] [private] |
Definition at line 129 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
DigiHists HcalDigiMonitor::hbHists [private] |
Definition at line 139 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), setSubDetectors(), and setup().
DigiHists HcalDigiMonitor::heHists [private] |
Definition at line 139 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), setSubDetectors(), and setup().
DigiHists HcalDigiMonitor::hfHists [private] |
Definition at line 139 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), setSubDetectors(), and setup().
DigiHists HcalDigiMonitor::hoHists [private] |
Definition at line 139 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), setSubDetectors(), and setup().
int HcalDigiMonitor::ievt_ [private] |
Definition at line 74 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), HcalDigiMonitor(), processEvent(), and setup().
int HcalDigiMonitor::maxdigisize_ [private] |
MonitorElement* HcalDigiMonitor::meEVT_ [private] |
int HcalDigiMonitor::mindigisize_ [private] |
int HcalDigiMonitor::occThresh_ [private] |
Definition at line 78 of file HcalDigiMonitor.h.
Referenced by HcalDigiMonitor(), processEvent(), and setup().
int HcalDigiMonitor::occupancyEta[87] [private] |
Definition at line 116 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::occupancyEtaPhi[87][72][6] [private] |
Definition at line 115 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::occupancyPhi[72] [private] |
Definition at line 117 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::occupancySpigot[40][36] [private] |
Definition at line 119 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::occupancyVME[40][18] [private] |
Definition at line 118 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
int HcalDigiMonitor::problemdigis[87][72][6] [private] |
Definition at line 101 of file HcalDigiMonitor.h.
Referenced by fill_Nevents(), processEvent(), and setup().
MonitorElement* HcalDigiMonitor::ProblemDigis [private] |
std::vector<MonitorElement*> HcalDigiMonitor::ProblemDigisByDepth [private] |
const HcalQIEShape* HcalDigiMonitor::shape_ [private] |
int HcalDigiMonitor::shapeThresh_ [private] |