00001 #include "DQM/HcalMonitorTasks/interface/HcalDigiMonitor.h"
00002 #include "EventFilter/HcalRawToDigi/interface/HcalDCCHeader.h"
00003 #include <cmath>
00004
00005 #include "FWCore/Common/interface/TriggerNames.h"
00006 #include "FWCore/Framework/interface/LuminosityBlock.h"
00007 #include "DataFormats/Common/interface/TriggerResults.h"
00008 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
00009 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
00010 #include "Geometry/HcalTowerAlgo/src/HcalHardcodeGeometryData.h"
00011 #include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
00012
00013
00014 HcalDigiMonitor::HcalDigiMonitor(const edm::ParameterSet& ps)
00015 {
00016 Online_ = ps.getUntrackedParameter<bool>("online",false);
00017 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns",false);
00018 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup",false);
00019 debug_ = ps.getUntrackedParameter<int>("debug",0);
00020 prefixME_ = ps.getUntrackedParameter<std::string>("subSystemFolder","Hcal/");
00021 if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/")
00022 prefixME_.append("/");
00023 subdir_ = ps.getUntrackedParameter<std::string>("TaskFolder","DigiMonitor_Hcal");
00024 if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!="/")
00025 subdir_.append("/");
00026 subdir_=prefixME_+subdir_;
00027 AllowedCalibTypes_ = ps.getUntrackedParameter<std::vector<int> > ("AllowedCalibTypes");
00028 skipOutOfOrderLS_ = ps.getUntrackedParameter<bool>("skipOutOfOrderLS",true);
00029 NLumiBlocks_ = ps.getUntrackedParameter<int>("NLumiBlocks",4000);
00030 makeDiagnostics_ = ps.getUntrackedParameter<bool>("makeDiagnostics",false);
00031 digiLabel_ = ps.getUntrackedParameter<edm::InputTag>("digiLabel");
00032 hfRechitLabel_ = ps.getUntrackedParameter<edm::InputTag>("hfRechitLabel");
00033 shapeThresh_ = ps.getUntrackedParameter<int>("shapeThresh",20);
00034
00035 shapeThreshHB_ = ps.getUntrackedParameter<int>("shapeThreshHB",shapeThresh_);
00036 shapeThreshHE_ = ps.getUntrackedParameter<int>("shapeThreshHE",shapeThresh_);
00037 shapeThreshHF_ = ps.getUntrackedParameter<int>("shapeThreshHF",shapeThresh_);
00038 shapeThreshHO_ = ps.getUntrackedParameter<int>("shapeThreshHO",shapeThresh_);
00039
00040 hltresultsLabel_ = ps.getUntrackedParameter<edm::InputTag>("HLTResultsLabel");
00041 MinBiasHLTBits_ = ps.getUntrackedParameter<std::vector<std::string> >("MinBiasHLTBits");
00042 excludeHORing2_ = ps.getUntrackedParameter<bool>("excludeHORing2",false);
00043 excludeHO1P02_ = ps.getUntrackedParameter<bool>("excludeHO1P02",false);
00044
00045 if (debug_>0)
00046 std::cout <<"<HcalDigiMonitor> Digi shape ADC threshold set to: >" << shapeThresh_ <<" counts above nominal pedestal (3*10)"<< std::endl;
00047
00048
00049 digi_checkoccupancy_ = ps.getUntrackedParameter<bool>("checkForMissingDigis",false);
00050 digi_checkcapid_ = ps.getUntrackedParameter<bool>("checkCapID",true);
00051 digi_checkdigisize_ = ps.getUntrackedParameter<bool>("checkDigiSize",true);
00052 digi_checkadcsum_ = ps.getUntrackedParameter<bool>("checkADCsum",true);
00053 digi_checkdverr_ = ps.getUntrackedParameter<bool>("checkDVerr",true);
00054 mindigisizeHBHE_ = ps.getUntrackedParameter<int>("minDigiSizeHBHE",1);
00055 maxdigisizeHBHE_ = ps.getUntrackedParameter<int>("maxDigiSizeHBHE",10);
00056 mindigisizeHO_ = ps.getUntrackedParameter<int>("minDigiSizeHO",1);
00057 maxdigisizeHO_ = ps.getUntrackedParameter<int>("maxDigiSizeHO",10);
00058 mindigisizeHF_ = ps.getUntrackedParameter<int>("minDigiSizeHF",1);
00059 maxdigisizeHF_ = ps.getUntrackedParameter<int>("maxDigiSizeHF",10);
00060
00061
00062 badChannelStatusMask_ = ps.getUntrackedParameter<int>("BadChannelStatusMask",
00063 ps.getUntrackedParameter<int>("BadChannelStatusMask",
00064 (1<<HcalChannelStatus::HcalCellDead)));
00065 if (debug_>1)
00066 {
00067 std::cout <<"<HcalDigiMonitor> Checking for the following problems:"<<std::endl;
00068 if (digi_checkcapid_) std::cout <<"\tChecking that cap ID rotation is correct;"<<std::endl;
00069 if (digi_checkdigisize_)
00070 {
00071 std::cout <<"\tChecking that HBHE digi size is between ["<<mindigisizeHBHE_<<" - "<<maxdigisizeHBHE_<<"];"<<std::endl;
00072 std::cout <<"\tChecking that HO digi size is between ["<<mindigisizeHO_<<" - "<<maxdigisizeHO_<<"];"<<std::endl;
00073 std::cout <<"\tChecking that HF digi size is between ["<<mindigisizeHF_<<" - "<<maxdigisizeHF_<<"];"<<std::endl;
00074 }
00075 if (digi_checkadcsum_) std::cout <<"\tChecking that ADC sum of digi is greater than 0;"<<std::endl;
00076 if (digi_checkdverr_) std::cout <<"\tChecking that data valid bit is true and digi error bit is false;\n"<<std::endl;
00077 }
00078
00079 shutOffOrbitTest_ = ps.getUntrackedParameter<bool>("shutOffOrbitTest",false);
00080 DigiMonitor_ExpectedOrbitMessageTime_=ps.getUntrackedParameter<int>("ExpectedOrbitMessageTime",3559);
00081
00082 HFtiming_totaltime2D=0;
00083 HFtiming_occupancy2D=0;
00084 HFtiming_etaProfile=0;
00085 HFP_shape=0;
00086 HFM_shape=0;
00087 }
00088
00089
00090 HcalDigiMonitor::~HcalDigiMonitor() {}
00091
00092
00093 static bool bitUpset(int last, int now){
00094 if(last ==-1) return false;
00095 int v = last+1;
00096 if(v==4) v=0;
00097 if(v==now) return false;
00098 return true;
00099 }
00100
00101 void HcalDigiMonitor::cleanup()
00102 {
00103
00104 if (debug_>0) std::cout <<"HcalDigiMonitor::cleanup()"<<std::endl;
00105 if (!enableCleanup_) return;
00106 if (dbe_)
00107 {
00108
00109 dbe_->setCurrentFolder(subdir_);
00110 dbe_->removeContents();
00111 dbe_->setCurrentFolder(subdir_+"digi_parameters"); dbe_->removeContents();
00112 dbe_->setCurrentFolder(subdir_+"bad_digis/bad_digi_occupancy"); dbe_->removeContents();
00113 dbe_->setCurrentFolder(subdir_+"bad_digis/1D_digi_plots"); dbe_->removeContents();
00114 dbe_->setCurrentFolder(subdir_+"bad_digis/badcapID"); dbe_->removeContents();
00115 dbe_->setCurrentFolder(subdir_+"bad_digis/data_invalid_error"); dbe_->removeContents();
00116 dbe_->setCurrentFolder(subdir_+"bad_digis/bad_reportUnpackerErrors"); dbe_->removeContents();
00117 dbe_->setCurrentFolder(subdir_+"bad_digis/baddigisize"); dbe_->removeContents();
00118 dbe_->setCurrentFolder(subdir_+"digi_info"); dbe_->removeContents();
00119 dbe_->setCurrentFolder(subdir_+"bad_digis/badfibBCNoff"); dbe_->removeContents();
00120 dbe_->setCurrentFolder(subdir_+"good_digis/1D_digi_plots"); dbe_->removeContents();
00121 dbe_->setCurrentFolder(subdir_+"good_digis/digi_occupancy"); dbe_->removeContents();
00122 dbe_->setCurrentFolder(subdir_+"bad_digis/bad_digi_occupancy"); dbe_->removeContents();
00123 dbe_->setCurrentFolder(subdir_+"bad_digis"); dbe_->removeContents();
00124 dbe_->setCurrentFolder(subdir_+"good_digis/"); dbe_->removeContents();
00125 dbe_->setCurrentFolder(subdir_+"digi_info/HB"); dbe_->removeContents();
00126 dbe_->setCurrentFolder(subdir_+"digi_info/HE"); dbe_->removeContents();
00127 dbe_->setCurrentFolder(subdir_+"digi_info/HO"); dbe_->removeContents();
00128 dbe_->setCurrentFolder(subdir_+"digi_info/HF"); dbe_->removeContents();
00129 dbe_->setCurrentFolder(subdir_+"LSvalues");
00130 dbe_->removeContents();
00131 }
00132
00133 }
00134
00135
00136 void HcalDigiMonitor::endRun(const edm::Run& run, const edm::EventSetup& c)
00137 {
00138
00139 }
00140
00141 void HcalDigiMonitor::endJob()
00142 {
00143 if (debug_>0) std::cout <<"HcalDigiMonitor::endJob()"<<std::endl;
00144 if (enableCleanup_) cleanup();
00145 }
00146
00147
00148 void HcalDigiMonitor::setup()
00149 {
00150
00151 HcalBaseDQMonitor::setup();
00152 if (!dbe_) return;
00153
00154
00155 if (debug_>1)
00156 std::cout <<"<HcalDigiMonitor::beginRun> Setting up histograms"<<std::endl;
00157
00158 std::ostringstream name;
00159 dbe_->setCurrentFolder(subdir_);
00160
00161 dbe_->setCurrentFolder(subdir_+"digi_parameters");
00162 MonitorElement* ExpectedOrbit = dbe_->bookInt("ExpectedOrbitMessageTime");
00163 ExpectedOrbit->Fill(DigiMonitor_ExpectedOrbitMessageTime_);
00164
00165 MonitorElement* shapeT = dbe_->bookInt("DigiShapeThresh");
00166 shapeT->Fill(shapeThresh_);
00167 MonitorElement* shapeTHB = dbe_->bookInt("DigiShapeThreshHB");
00168 shapeTHB->Fill(shapeThreshHB_);
00169 MonitorElement* shapeTHE = dbe_->bookInt("DigiShapeThreshHE");
00170 shapeTHE->Fill(shapeThreshHE_);
00171 MonitorElement* shapeTHO = dbe_->bookInt("DigiShapeThreshHO");
00172 shapeTHO->Fill(shapeThreshHO_);
00173 MonitorElement* shapeTHF = dbe_->bookInt("DigiShapeThreshHF");
00174 shapeTHF->Fill(shapeThreshHF_);
00175
00176 dbe_->setCurrentFolder(subdir_+"bad_digis/bad_digi_occupancy");
00177 SetupEtaPhiHists(DigiErrorsByDepth,"Bad Digi Map","");
00178 dbe_->setCurrentFolder(subdir_+"bad_digis/1D_digi_plots");
00179 ProblemsVsLB=dbe_->bookProfile("BadDigisVsLB","Number Bad Digis vs Luminosity block;Lumi block;# of Bad digis",
00180 NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
00181 ProblemsVsLB_HB=dbe_->bookProfile("HB Bad Quality Digis vs LB","HB Bad Quality Digis vs Luminosity Block",
00182 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00183 100,0,10000);
00184 ProblemsVsLB_HE=dbe_->bookProfile("HE Bad Quality Digis vs LB","HE Bad Quality Digis vs Luminosity Block",
00185 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00186 100,0,10000);
00187 ProblemsVsLB_HO=dbe_->bookProfile("HO Bad Quality Digis vs LB","HO Bad Quality Digis vs Luminosity Block",
00188 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00189 100,0,10000);
00190 ProblemsVsLB_HF=dbe_->bookProfile("HF Bad Quality Digis vs LB","HF Bad Quality Digis vs Luminosity Block",
00191 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00192 100,0,10000);
00193 ProblemsVsLB_HBHEHF=dbe_->bookProfile("HBHEHF Bad Quality Digis vs LB","HBHEHF Bad Quality Digis vs Luminosity Block",
00194 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00195 100,0,10000);
00196
00197 if (makeDiagnostics_)
00198 {
00199
00200 dbe_->setCurrentFolder(subdir_+"diagnostics/bad_digis/badcapID");
00201 SetupEtaPhiHists(DigiErrorsBadCapID," Digis with Bad Cap ID Rotation", "");
00202 dbe_->setCurrentFolder(subdir_+"diagnostics/bad_digis/data_invalid_error");
00203 SetupEtaPhiHists(DigiErrorsDVErr," Digis with Data Invalid or Error Bit Set", "");
00204 }
00205
00206 if (Online_)
00207 {
00208
00209 dbe_->setCurrentFolder(subdir_+"HFTimingStudy");
00210 HFtiming_etaProfile=dbe_->bookProfile("HFTiming_etaProfile","HFTiming Eta Profile;ieta;average time (time slice)",83,-41.5,41.5,200,0,10);
00211 HFP_shape=dbe_->book1D("HFP_signal_shape","HFP signal shape",10,-0.5,9.5);
00212 HFM_shape=dbe_->book1D("HFM_signal_shape","HFM signal shape",10,-0.5,9.5);
00213 dbe_->setCurrentFolder(subdir_+"HFTimingStudy/sumplots");
00214 HFtiming_totaltime2D=dbe_->book2D("HFTiming_Total_Time","HFTiming Total Time",83,-41.5,41.5,72,0.5,72.5);
00215 HFtiming_occupancy2D=dbe_->book2D("HFTiming_Occupancy","HFTiming Occupancy",83,-41.5,41.5,72,0.5,72.5);
00216 }
00217
00218 dbe_->setCurrentFolder(subdir_+"bad_digis/bad_reportUnpackerErrors");
00219 SetupEtaPhiHists(DigiErrorsUnpacker," Bad Unpacker Digis", "");
00220
00221 dbe_->setCurrentFolder(subdir_+"bad_digis/baddigisize");
00222 SetupEtaPhiHists(DigiErrorsBadDigiSize," Digis with Bad Size", "");
00223
00224 dbe_->setCurrentFolder(subdir_+"digi_info");
00225
00226 h_valid_digis=dbe_->book1D("ValidEvents","Events with minimum number of valid digis",2,-0.5,1.5);
00227 h_valid_digis->setBinLabel(1,"Valid");
00228 h_valid_digis->setBinLabel(2,"Invalid");
00229
00230 h_invalid_orbitnumMod103=dbe_->book1D("InvalidDigiEvents_ORN","Orbit Number (mod 103) for Events with Many Unpacker Errors",103,-0.5,102.5);
00231 h_invalid_bcn=dbe_->book1D("InvalidDigiEvents_BCN","Bunch Crossing Number fo Events with Many Unpacker Errors",3464,-0.5,3563.5);
00232
00233 DigiSize = dbe_->book2D("Digi Size", "Digi Size",4,0,4,20,-0.5,19.5);
00234 DigiSize->setBinLabel(1,"HB",1);
00235 DigiSize->setBinLabel(2,"HE",1);
00236 DigiSize->setBinLabel(3,"HO",1);
00237 DigiSize->setBinLabel(4,"HF",1);
00238 DigiSize->setAxisTitle("Subdetector",1);
00239 DigiSize->setAxisTitle("Digi Size",2);
00240
00241 dbe_->setCurrentFolder(subdir_+"bad_digis/badfibBCNoff");
00242 SetupEtaPhiHists(DigiErrorsBadFibBCNOff," Digis with non-zero Fiber Orbit Msg Idle BCN Offsets", "");
00243
00244 dbe_->setCurrentFolder(subdir_+"good_digis/1D_digi_plots");
00245 HBocc_vs_LB=dbe_->bookProfile("HBoccVsLB","HB digi occupancy vs Luminosity Block;Lumi block;# of Good digis",
00246 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00247 0,2600);
00248 HEocc_vs_LB=dbe_->bookProfile("HEoccVsLB","HE digi occupancy vs Luminosity Block;Lumi block;# of Good digis",
00249 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00250 0,2600);
00251 HOocc_vs_LB=dbe_->bookProfile("HOoccVsLB","HO digi occupancy vs Luminosity Block;Lumi block;# of Good digis",
00252 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00253 0,2200);
00254 HFocc_vs_LB=dbe_->bookProfile("HFoccVsLB","HF digi occupancy vs Luminosity Block;Lumi block;# of Good digis",
00255 NLumiBlocks_,0.5,NLumiBlocks_+0.5,
00256 0,1800);
00257
00258 dbe_->setCurrentFolder(subdir_+"good_digis/digi_occupancy");
00259 SetupEtaPhiHists(DigiOccupancyByDepth," Digi Eta-Phi Occupancy Map","");
00260 DigiOccupancyPhi= dbe_->book1D("Digi Phi Occupancy Map",
00261 "Digi Phi Occupancy Map;i#phi;# of Events",
00262 72,0.5,72.5);
00263 DigiOccupancyEta= dbe_->book1D("Digi Eta Occupancy Map",
00264 "Digi Eta Occupancy Map;i#eta;# of Events",
00265 83,-41.5,41.5);
00266 DigiOccupancyVME = dbe_->book2D("Digi VME Occupancy Map",
00267 "Digi VME Occupancy Map;HTR Slot;VME Crate Id",
00268 40,-0.25,19.75,18,-0.5,17.5);
00269
00270 DigiOccupancySpigot = dbe_->book2D("Digi Spigot Occupancy Map",
00271 "Digi Spigot Occupancy Map;Spigot;DCC Id",
00272 HcalDCCHeader::SPIGOT_COUNT,-0.5,HcalDCCHeader::SPIGOT_COUNT-0.5,
00273 36,-0.5,35.5);
00274
00275 dbe_->setCurrentFolder(subdir_+"bad_digis/bad_digi_occupancy");
00276 DigiErrorVME = dbe_->book2D("Digi VME Error Map",
00277 "Digi VME Error Map;HTR Slot;VME Crate Id",
00278 40,-0.25,19.75,18,-0.5,17.5);
00279
00280 DigiErrorSpigot = dbe_->book2D("Digi Spigot Error Map",
00281 "Digi Spigot Error Map;Spigot;DCC Id",
00282 HcalDCCHeader::SPIGOT_COUNT,-0.5,HcalDCCHeader::SPIGOT_COUNT-0.5,
00283 36,-0.5,35.5);
00284
00285 dbe_->setCurrentFolder(subdir_+"bad_digis");
00286 int nbins = sizeof(bins_cellcount_new)/sizeof(float)-1;
00287
00288 DigiBQ = dbe_->book1D("NumBadQualDigis","Number Bad Qual Digis within Digi Collection",nbins, bins_cellcount_new);
00289
00290 nbins=sizeof(bins_fraccount_new)/sizeof(float)-1;
00291
00292 DigiBQFrac = dbe_->book1D("Bad Digi Fraction","Bad Digi Fraction;Bad Quality Digi Fraction for digis in collection; # of Events",
00293 nbins, bins_fraccount_new);
00294
00295 nbins = sizeof(bins_cellcount_new)/sizeof(float)-1;
00296 DigiUnpackerErrorCount = dbe_->book1D("Unpacker Error Count", "Number of Bad Digis from Unpacker; Bad Unpacker Digis; # of Events",nbins, bins_cellcount_new);
00297
00298 nbins=sizeof(bins_fraccount_new)/sizeof(float)-1;
00299 DigiUnpackerErrorFrac = dbe_->book1D("Unpacker Bad Digi Fraction",
00300 "Bad Digis From Unpacker/ (Bad Digis From Unpacker + Good Digis); Bad Unpacker Fraction; # of Events",
00301 nbins,bins_fraccount_new);
00302
00303 dbe_->setCurrentFolder(subdir_+"good_digis/");
00304 DigiNum = dbe_->book1D("NumGoodDigis","Number of Digis;# of Good Digis;# of Events",DIGI_NUM+1,-0.5,DIGI_NUM+1-0.5);
00305
00306 setupSubdetHists(hbHists,"HB");
00307 setupSubdetHists(heHists,"HE");
00308 setupSubdetHists(hoHists,"HO");
00309 setupSubdetHists(hfHists,"HF");
00310
00311 this->reset();
00312 return;
00313 }
00314
00315 void HcalDigiMonitor::beginRun(const edm::Run& run, const edm::EventSetup& c)
00316 {
00317 HcalBaseDQMonitor::beginRun(run,c);
00318 if (mergeRuns_ && tevt_>0) return;
00319
00320 if (debug_>1) std::cout <<"\t<HcalDigiMonitor::setup> Getting conditions from DB!"<<std::endl;
00321 c.get<HcalDbRecord>().get(conditions_);
00322
00323
00324 edm::ESHandle<HcalChannelQuality> p;
00325 c.get<HcalChannelQualityRcd>().get(p);
00326 HcalChannelQuality *chanquality= new HcalChannelQuality(*p.product());
00327 std::vector<DetId> mydetids = chanquality->getAllChannels();
00328 PedestalsByCapId_.clear();
00329
00330 const HcalQIEShape* shape = conditions_->getHcalShape();
00331 for (std::vector<DetId>::const_iterator chan = mydetids.begin();chan!=mydetids.end();++chan)
00332 {
00333 if (chan->det()!=DetId::Hcal) continue;
00334 std::vector <double> peds;
00335 peds.clear();
00336 HcalCalibrations calibs=conditions_->getHcalCalibrations(*chan);
00337 const HcalQIECoder* channelCoder = conditions_->getHcalCoder(*chan);
00338
00339 for (int capid=0;capid<4;++capid)
00340 {
00341
00342 double temp_ADC=channelCoder->adc(*shape,(float)calibs.pedestal(capid),capid);
00343 peds.push_back(temp_ADC);
00344
00345 }
00346
00347 PedestalsByCapId_[*chan]=peds;
00348 }
00349
00350 if (tevt_==0) this->setup();
00351 if (mergeRuns_==false) this->reset();
00352 delete chanquality;
00353
00354
00355 KnownBadCells_.clear();
00356 if (badChannelStatusMask_>0)
00357 {
00358 edm::ESHandle<HcalChannelQuality> p;
00359 c.get<HcalChannelQualityRcd>().get(p);
00360 HcalChannelQuality* chanquality= new HcalChannelQuality(*p.product());
00361 std::vector<DetId> mydetids = chanquality->getAllChannels();
00362 for (std::vector<DetId>::const_iterator i = mydetids.begin();
00363 i!=mydetids.end();
00364 ++i)
00365 {
00366 if (i->det()!=DetId::Hcal) continue;
00367 HcalDetId id=HcalDetId(*i);
00368 int status=(chanquality->getValues(id))->getValue();
00369 if ((status & badChannelStatusMask_))
00370 {
00371 KnownBadCells_[id.rawId()]=status;
00372 }
00373 }
00374 delete chanquality;
00375 }
00376
00377 }
00378
00379
00380 void HcalDigiMonitor::setupSubdetHists(DigiHists& hist, std::string subdet)
00381 {
00382 if (!dbe_) return;
00383 std::stringstream name;
00384 int nChan=0;
00385 if (subdet=="HB" || subdet=="HE") nChan=2592;
00386 else if (subdet == "HO") nChan=2160;
00387 else if (subdet == "HF") nChan=1728;
00388
00389 dbe_->setCurrentFolder(subdir_+"digi_info/"+subdet);
00390 hist.shape = dbe_->book1D(subdet+" Digi Shape",subdet+" Digi Shape;Time Slice",10,-0.5,9.5);
00391 hist.shapeThresh = dbe_->book1D(subdet+" Digi Shape - over thresh",
00392 subdet+" Digi Shape - over thresh passing trigger and HF HT cuts;Time slice",
00393 10,-0.5,9.5);
00394 hist.ThreshCount = dbe_->book1D(subdet+" Total Digis Over Threshold",
00395 subdet+" Total Digis Over Threshold",
00396 1,-0.5,0.5);
00397
00398 for (int ts=0;ts<9;++ts)
00399 {
00400 name<<subdet<<" Plus Time Slices "<<ts<<" and "<<ts+1;
00401 hist.TS_sum_plus.push_back(dbe_->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5));
00402 name.str("");
00403 name<<subdet<<" Minus Time Slices "<<ts<<" and "<<ts+1;
00404 hist.TS_sum_minus.push_back(dbe_->book1D(name.str().c_str(),name.str().c_str(),50,-5.5,44.5));
00405 name.str("");
00406 }
00407 hist.presample= dbe_->book1D(subdet+" Digi Presamples",subdet+" Digi Presamples",50,-0.5,49.5);
00408 hist.BQ = dbe_->book1D(subdet+" Bad Quality Digis",subdet+" Bad Quality Digis",nChan+1,-0.5,nChan+0.5);
00409
00410 hist.BQFrac = dbe_->book1D(subdet+" Bad Quality Digi Fraction",subdet+" Bad Quality Digi Fraction",DIGI_BQ_FRAC_NBINS,(0-0.5/(DIGI_BQ_FRAC_NBINS-1)),1+0.5/(DIGI_BQ_FRAC_NBINS-1));
00411 hist.DigiFirstCapID = dbe_->book1D(subdet+" Capid 1st Time Slice",subdet+" Capid for 1st Time Slice;CapId (T0)- 1st CapId (T0);# of Events",7,-3.5,3.5);
00412
00413 hist.DVerr = dbe_->book1D(subdet+" Data Valid Err Bits",subdet+" QIE Data Valid Err Bits",4,-0.5,3.5);
00414 hist.DVerr ->setBinLabel(1,"Err=0, DV=0",1);
00415 hist.DVerr ->setBinLabel(2,"Err=0, DV=1",1);
00416 hist.DVerr ->setBinLabel(3,"Err=1, DV=0",1);
00417 hist.DVerr ->setBinLabel(4,"Err=1, DV=1",1);
00418 hist.CapID = dbe_->book1D(subdet+" CapID",subdet+" CapID",4,-0.5,3.5);
00419 hist.ADC = dbe_->book1D(subdet+" ADC count per time slice",subdet+" ADC count per time slice",200,-0.5,199.5);
00420 hist.ADCsum = dbe_->book1D(subdet+" ADC sum", subdet+" ADC sum",200,-0.5,199.5);
00421 hist.fibBCNOff = dbe_->book1D(subdet+" Fiber Orbit Message Idle BCN Offset", subdet+" Fiber Orbit Message Idle BCN Offset;Offset from Expected",
00422 15, -7.5, 7.5);
00423 }
00424
00425 void HcalDigiMonitor::analyze(edm::Event const&e, edm::EventSetup const&s)
00426 {
00427 if (!IsAllowedCalibType()) return;
00428 if (LumiInOrder(e.luminosityBlock())==false) return;
00429
00430
00431 passedMinBiasHLT_=false;
00432
00433 edm::Handle<edm::TriggerResults> hltRes;
00434 if (!(e.getByLabel(hltresultsLabel_,hltRes)))
00435 {
00436 if (debug_>0) edm::LogWarning("HcalDigiMonitor")<<" Could not get HLT results with tag "<<hltresultsLabel_<<std::endl;
00437 }
00438 else
00439 {
00440 const edm::TriggerNames & triggerNames = e.triggerNames(*hltRes);
00441 const unsigned int nTrig(triggerNames.size());
00442 for (unsigned int i=0;i<nTrig;++i){
00443
00444 for (unsigned int k=0;k<MinBiasHLTBits_.size();++k)
00445 {
00446
00447 if (triggerNames.triggerName(i).find(MinBiasHLTBits_[k])!=std::string::npos && hltRes->accept(i))
00448 {
00449 passedMinBiasHLT_=true;
00450 break;
00451 }
00452 }
00453 }
00454 }
00455
00456
00457 HT_HFP_=0;
00458 HT_HFM_=0;
00459 bool rechitsFound=false;
00460 edm::Handle<HFRecHitCollection> hf_rechit;
00461 if (e.getByLabel(hfRechitLabel_,hf_rechit))
00462 {
00463 rechitsFound=true;
00464 for (HFRecHitCollection::const_iterator HF=hf_rechit->begin();HF!=hf_rechit->end();++HF)
00465 {
00466 float en=HF->energy();
00467 int ieta=HF->id().ieta();
00468
00469 double fEta=fabs(0.5*(theHFEtaBounds[abs(ieta)-28]+theHFEtaBounds[abs(ieta)-29]));
00470 ieta>0 ? HT_HFP_+=en/cosh(fEta) : HT_HFM_+=en/cosh(fEta);
00471 }
00472 }
00473 else
00474 {
00475
00476 HT_HFP_=999;
00477 HT_HFM_=999;
00478 }
00479
00480
00481 edm::Handle<HBHEDigiCollection> hbhe_digi;
00482 edm::Handle<HODigiCollection> ho_digi;
00483 edm::Handle<HFDigiCollection> hf_digi;
00484
00485 if (!(e.getByLabel(digiLabel_,hbhe_digi)))
00486 {
00487 edm::LogWarning("HcalDigiMonitor")<< digiLabel_<<" hbhe_digi not available";
00488 return;
00489 }
00490
00491 if (!(e.getByLabel(digiLabel_,hf_digi)))
00492 {
00493 edm::LogWarning("HcalDigiMonitor")<< digiLabel_<<" hf_digi not available";
00494 return;
00495 }
00496 if (!(e.getByLabel(digiLabel_,ho_digi)))
00497 {
00498 edm::LogWarning("HcalDigiMonitor")<< digiLabel_<<" ho_digi not available";
00499 return;
00500 }
00501 edm::Handle<HcalUnpackerReport> report;
00502 if (!(e.getByLabel(digiLabel_,report)))
00503 {
00504 edm::LogWarning("HcalDigiMonitor")<< digiLabel_<<" unpacker report not available";
00505 return;
00506 }
00507
00508
00509 if (debug_>1) std::cout <<"\t<HcalDigiMonitor::analyze> Processing good event! event # = "<<ievt_<<std::endl;
00510
00511 HcalBaseDQMonitor::analyze(e,s);
00512
00513
00514 processEvent(*hbhe_digi, *ho_digi, *hf_digi, *conditions_,
00515 *report, e.orbitNumber(),e.bunchCrossing());
00516
00517 }
00518
00519 void HcalDigiMonitor::processEvent(const HBHEDigiCollection& hbhe,
00520 const HODigiCollection& ho,
00521 const HFDigiCollection& hf,
00522 const HcalDbService& cond,
00523 const HcalUnpackerReport& report,
00524 int orN, int bcN)
00525 {
00526 if(!dbe_)
00527 {
00528 if(debug_)
00529 std::cout <<"HcalDigiMonitor::processEvent DQMStore not instantiated!!!"<<std::endl;
00530 return;
00531 }
00532
00533
00534
00535 DigiUnpackerErrorCount->Fill(report.badQualityDigis());
00536
00537 unsigned int allgooddigis= hbhe.size()+ho.size()+hf.size();
00538
00539
00540 if ((allgooddigis==0) ||
00541 (1.*report.badQualityDigis()>100*allgooddigis))
00542 {
00543 h_valid_digis->Fill(1);
00544 if (bcN>-1)
00545 h_invalid_bcn->Fill(bcN);
00546 if (orN>-1)
00547 h_invalid_orbitnumMod103->Fill(orN%103);
00548 return;
00549 }
00550
00551 h_valid_digis->Fill(0);
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568 typedef std::vector<DetId> DetIdVector;
00569
00570 for ( DetIdVector::const_iterator baddigi_iter=report.bad_quality_begin();
00571 baddigi_iter != report.bad_quality_end();
00572 ++baddigi_iter)
00573 {
00574 HcalDetId id(baddigi_iter->rawId());
00575 int rDepth = id.depth();
00576 int rPhi = id.iphi();
00577 int rEta = id.ieta();
00578 int binEta = CalcEtaBin(id.subdet(), rEta, rDepth);
00579 if (id.subdet()==HcalBarrel) ++hbHists.count_bad;
00580 else if (id.subdet()==HcalEndcap) ++heHists.count_bad;
00581 else if (id.subdet()==HcalForward)
00582 {
00583 ++hfHists.count_bad;
00584 if (rDepth==1 && (abs(rEta)==33 || abs(rEta)==34)) ++HFlumibad;
00585 else if (rDepth==2 && (abs(rEta)==35 || abs(rEta)==36)) ++HFlumibad;
00586 }
00587 else if (id.subdet()==HcalOuter)
00588 {
00589
00590 if (excludeHORing2_==true && rDepth==4)
00591 if (abs(rEta)>=11 && abs(rEta)<=15 && !isSiPM(rEta,rPhi,rDepth)) continue;
00592
00593 if (excludeHO1P02_==true)
00594 if( (rEta>4 && rEta<10) && (rPhi<=10 || rPhi>70) ) continue;
00595
00596 if (KnownBadCells_.find(id)!=KnownBadCells_.end()) continue;
00597
00598 ++hoHists.count_bad;
00599 if (abs(rEta)<5) ++HO0bad;
00600 else ++HO12bad;
00601 }
00602 else
00603 continue;
00604
00605 if (binEta < 85 && binEta >= 0
00606 && (rPhi-1) >= 0 && (rPhi-1)<72
00607 && (rDepth-1) >= 0 && (rDepth-1)<4)
00608 {
00609 ++badunpackerreport[binEta][rPhi-1][rDepth-1];
00610 ++baddigis[binEta][rPhi-1][rDepth-1];
00611 }
00612 }
00613
00615
00616 int firsthbcap=-1;
00617 int firsthecap=-1;
00618 int firsthocap=-1;
00619 int firsthfcap=-1;
00620
00621 for (HBHEDigiCollection::const_iterator j=hbhe.begin(); j!=hbhe.end(); ++j)
00622 {
00623 const HBHEDataFrame digi = (const HBHEDataFrame)(*j);
00624
00625 if (digi.id().subdet()==HcalBarrel)
00626 {
00627 if (!HBpresent_) continue;
00628 if (KnownBadCells_.find(digi.id())!=KnownBadCells_.end()) continue;
00629
00630 process_Digi(digi, hbHists, firsthbcap);
00631 }
00632 else if (digi.id().subdet()==HcalEndcap)
00633 {
00634 if (!HEpresent_) continue;
00635 process_Digi(digi, heHists,firsthecap);
00636 }
00637 }
00638
00639
00640
00641
00642
00643
00644 if (HBpresent_ && (hbHists.count_good>0 || hbHists.count_bad>0))
00645 {
00646 int counter=hbHists.count_bad;
00647 if (counter<DIGI_SUBDET_NUM)
00648 ++hbHists.count_BQ[counter];
00649 float counter2 = (1.*hbHists.count_bad)/(hbHists.count_bad+hbHists.count_good)*(DIGI_BQ_FRAC_NBINS-1);
00650 if (counter2<DIGI_SUBDET_NUM) ++hbHists.count_BQFrac[(int)counter2];
00651 }
00652
00653 if (HEpresent_ && (heHists.count_good>0 || heHists.count_bad>0))
00654 {
00655 int counter=heHists.count_bad;
00656 if (counter<DIGI_SUBDET_NUM)
00657 ++heHists.count_BQ[counter];
00658 float counter2 = (1.*heHists.count_bad)/(heHists.count_bad+heHists.count_good)*(DIGI_BQ_FRAC_NBINS-1);
00659 if (counter2<DIGI_SUBDET_NUM) ++heHists.count_BQFrac[int(counter2)];
00660 }
00661
00663 if (HOpresent_)
00664 {
00665 for (HODigiCollection::const_iterator j=ho.begin(); j!=ho.end(); ++j)
00666 {
00667 const HODataFrame digi = (const HODataFrame)(*j);
00668
00669 if (excludeHORing2_==true && digi.id().depth()==4)
00670 if (abs(digi.id().ieta())>=11 && abs(digi.id().ieta())<=15 &&
00671 !isSiPM(digi.id().ieta(),digi.id().iphi(),digi.id().depth())) continue;
00672
00673 if (excludeHO1P02_==true)
00674 if( (digi.id().ieta()>4 && digi.id().ieta()<10)
00675 && (digi.id().iphi()<=10 || digi.id().iphi()>70) ) continue;
00676
00677 if (KnownBadCells_.find(digi.id())!=KnownBadCells_.end()) continue;
00678
00679 process_Digi(digi, hoHists, firsthocap);
00680 }
00681
00682 if (hoHists.count_bad>0 || hoHists.count_good>0)
00683 {
00684 int counter=hoHists.count_bad;
00685 if (counter<DIGI_SUBDET_NUM)
00686 ++hoHists.count_BQ[counter];
00687
00688 float counter2 = (1.*hoHists.count_bad)/(hoHists.count_bad+hoHists.count_good)*(DIGI_BQ_FRAC_NBINS-1);
00689 if (counter2<DIGI_SUBDET_NUM) ++hoHists.count_BQFrac[int(counter2)];
00690 }
00691 HOocc_vs_LB->Fill(currentLS,hoHists.count_good);
00692 }
00693
00695 if (HFpresent_)
00696 {
00697 for (HFDigiCollection::const_iterator j=hf.begin(); j!=hf.end(); ++j)
00698 {
00699 const HFDataFrame digi = (const HFDataFrame)(*j);
00700 process_Digi(digi, hfHists, firsthfcap);
00701 }
00702
00703 if (hfHists.count_bad>0 || hfHists.count_good>0)
00704 {
00705 int counter=hfHists.count_bad;
00706 if (counter<DIGI_SUBDET_NUM)
00707 ++hfHists.count_BQ[counter];
00708 float counter2 = (1.*hfHists.count_bad)/(hfHists.count_bad+hfHists.count_good)*(DIGI_BQ_FRAC_NBINS-1);
00709 if (counter2<DIGI_SUBDET_NUM) ++hfHists.count_BQFrac[int(counter2)];
00710 }
00711 HFocc_vs_LB->Fill(currentLS,hfHists.count_good);
00712 }
00713
00714
00715 int count_good=hbHists.count_good+heHists.count_good+hoHists.count_good+hfHists.count_good;
00716 int count_bad=hbHists.count_bad+heHists.count_bad+hoHists.count_bad+hfHists.count_bad;
00717
00718 if (count_good<DIGI_NUM)
00719 ++diginum[count_good];
00720
00721
00722 DigiUnpackerErrorFrac->Fill(1.*report.badQualityDigis()/(report.badQualityDigis()+count_good));
00723 DigiBQ->Fill(count_bad);
00724 if (count_bad>0 || count_good>0)
00725 DigiBQFrac->Fill(1.*count_bad/(count_bad+count_good));
00726
00727
00728 UpdateHists(hbHists);
00729 UpdateHists(heHists);
00730 UpdateHists(hoHists);
00731 UpdateHists(hfHists);
00732
00733
00734 DigiNum->update();
00735 DigiErrorVME->update();
00736 DigiErrorSpigot->update();
00737 DigiBQ->update();
00738 DigiBQFrac->update();
00739 DigiUnpackerErrorCount->update();
00740 DigiUnpackerErrorFrac->update();
00741
00742
00743 for (unsigned int zz=0;zz<DigiErrorOccupancyByDepth.depth.size();++zz)
00744 DigiErrorOccupancyByDepth.depth[zz]->update();
00745 for (unsigned int zz=0;zz<DigiErrorsByDepth.depth.size();++zz)
00746 DigiErrorsByDepth.depth[zz]->update();
00747 for (unsigned int zz=0;zz<DigiErrorsBadCapID.depth.size();++zz)
00748 DigiErrorsBadCapID.depth[zz]->update();
00749 for (unsigned int zz=0;zz<DigiErrorsDVErr.depth.size();++zz)
00750 DigiErrorsDVErr.depth[zz]->update();
00751 for (unsigned int zz=0;zz<DigiErrorsBadDigiSize.depth.size();++zz)
00752 DigiErrorsBadDigiSize.depth[zz]->update();
00753 for (unsigned int zz=0;zz<DigiErrorsBadADCSum.depth.size();++zz)
00754 DigiErrorsBadADCSum.depth[zz]->update();
00755 for (unsigned int zz=0;zz<DigiErrorsUnpacker.depth.size();++zz)
00756 DigiErrorsUnpacker.depth[zz]->update();
00757 for (unsigned int zz=0;zz<DigiErrorsBadFibBCNOff.depth.size();++zz)
00758 DigiErrorsBadFibBCNOff.depth[zz]->update();
00759
00760 DigiOccupancyEta->update();
00761 DigiOccupancyPhi->update();
00762 DigiOccupancyVME->update();
00763 DigiOccupancySpigot->update();
00764 DigiSize->update();
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787 return;
00788 }
00789
00790
00791
00792 template <class DIGI>
00793 int HcalDigiMonitor::process_Digi(DIGI& digi, DigiHists& h, int& firstcap)
00794 {
00795 int err=0x0;
00796 bool bitUp = false;
00797 int ADCcount=0;
00798
00799 int shapeThresh=0;
00800
00801 int mindigisize=1;
00802 int maxdigisize=10;
00803
00804 if (digi.id().subdet()==HcalBarrel)
00805 {
00806 shapeThresh=shapeThreshHB_;
00807 mindigisize=mindigisizeHBHE_;
00808 maxdigisize=maxdigisizeHBHE_;
00809 }
00810 else if (digi.id().subdet()==HcalEndcap)
00811 {
00812 shapeThresh=shapeThreshHE_;
00813 mindigisize=mindigisizeHBHE_;
00814 maxdigisize=maxdigisizeHBHE_;
00815 }
00816 else if (digi.id().subdet()==HcalOuter)
00817 {
00818 shapeThresh=shapeThreshHO_;
00819 mindigisize=mindigisizeHO_;
00820 maxdigisize=maxdigisizeHO_;
00821 }
00822 else if (digi.id().subdet()==HcalForward)
00823 {
00824 shapeThresh=shapeThreshHF_;
00825 mindigisize=mindigisizeHF_;
00826 maxdigisize=maxdigisizeHF_;
00827 }
00828 int iEta = digi.id().ieta();
00829 int iPhi = digi.id().iphi();
00830 int iDepth = digi.id().depth();
00831 int calcEta = CalcEtaBin(digi.id().subdet(),iEta,iDepth);
00832
00833
00834 if (digi.size()<mindigisize || digi.size()>maxdigisize)
00835 {
00836 if (digi_checkdigisize_) err|=0x1;
00837 ++baddigisize[calcEta][iPhi-1][iDepth-1];
00838 }
00839
00840 if (digi.size()<20)
00841 ++digisize[static_cast<int>(digi.size())][digi.id().subdet()-1];
00842 else
00843 ++digisize[19][digi.id().subdet()-1];
00844
00845
00846 ++h.count_presample[digi.presamples()];
00847
00848
00849 if (firstcap==-1) firstcap = digi.sample(0).capid();
00850 int capdif = digi.sample(0).capid() - firstcap;
00851
00852
00853 if (capdif >-4 && capdif<4)
00854 ++h.capIDdiff[capdif+3];
00855 else
00856 ++h.capIDdiff[7];
00857
00858 int last=-1;
00859
00860 int offset = digi.fiberIdleOffset();
00861
00862
00863
00864
00865 if (offset != -1000 && DigiMonitor_ExpectedOrbitMessageTime_>-1)
00866 {
00867
00868 ++h.fibbcnoff[offset + 7];
00869 if (offset != 0)
00870 {
00871 ++badFibBCNOff[calcEta][iPhi-1][iDepth-1];
00872 if (shutOffOrbitTest_ == false) err |= 0xF;
00873 }
00874 }
00875
00876 int tssum=0;
00877
00878 bool digi_error=false;
00879
00880 const int DigiSize=digi.size();
00881 for (int i=0;i<10;++i) pedSubtractedADC_[i]=0;
00882 const int pedSubADCsize=sizeof(pedSubtractedADC_)/sizeof(double);
00883
00884 std::map<HcalDetId, std::vector<double> >::iterator foundID = PedestalsByCapId_.find(digi.id());
00885 for (int i=0;i<DigiSize;++i)
00886 {
00887 int thisCapid = digi.sample(i).capid();
00888 if (thisCapid>=0 && thisCapid<4) ++h.capid[thisCapid];
00889
00890 if (makeDiagnostics_)
00891 {
00892 if(bitUpset(last,thisCapid)) bitUp=true;
00893 last = thisCapid;
00894
00895 if (digi_checkdverr_)
00896 {
00897 if(digi.sample(i).er()) err=(err|0x2);
00898 if(!digi.sample(i).dv()) err=(err|0x2);
00899 }
00900 if ((digi_error==false) && (digi.sample(i).er() || !digi.sample(i).dv()))
00901 {
00902 ++digierrorsdverr[calcEta][iPhi-1][iDepth-1];
00903 digi_error=true;
00904 }
00905 ++h.dverr[static_cast<int>(2*digi.sample(i).er()+digi.sample(i).dv())];
00906 }
00907
00908 h.count_shape[i]+=digi.sample(i).adc();
00909
00910
00911 if (i==digi.size()-1) continue;
00912 tssum= digi.sample(i).adc()+digi.sample(i+1).adc();
00913 if (tssum<45 && tssum>=-5)
00914 {
00915 if (iEta>0)
00916 ++h.tssumplus[tssum+5][i];
00917 else
00918 ++h.tssumminus[tssum+5][i];
00919 }
00920
00921 if (digi.sample(i).adc()<0) ++h.adc[0];
00922 else if (digi.sample(i).adc()<200) ++h.adc[digi.sample(i).adc()];
00923 else ++h.adc[199];
00924
00925 if (i>=pedSubADCsize) continue;
00926
00927 if (foundID!=PedestalsByCapId_.end())
00928 {
00929 pedSubtractedADC_[i]=digi.sample(i).adc()-(foundID->second)[thisCapid];
00930 ADCcount+=(int)(digi.sample(i).adc()-(foundID->second)[thisCapid]);
00931 }
00932 else
00933 {
00934 pedSubtractedADC_[i]=digi.sample(i).adc()-3;
00935 ADCcount+=digi.sample(i).adc()-3;
00936 }
00937 }
00938
00939
00940 if(bitUp)
00941 {
00942 if (digi_checkcapid_) err=(err|0x4);
00943 ++badcapID[calcEta][iPhi-1][iDepth-1];
00944 }
00945
00946
00947 if (err>0)
00948 {
00949 ++h.count_bad;
00950 ++baddigis[calcEta][iPhi-1][iDepth-1];
00951 ++errorVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())];
00952 ++errorSpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())];
00953
00954 return err;
00955 }
00956
00957 if (ADCcount<0) ADCcount=0;
00958 if (ADCcount<199)
00959 ++h.adcsum[ADCcount];
00960 else
00961 ++h.adcsum[199];
00962
00963
00964
00965 if (ADCcount>shapeThresh && passedMinBiasHLT_ && HT_HFP_>1 && HT_HFM_>1)
00966 {
00967 h.ThreshCount->Fill(0,1);
00968 if (digi.id().subdet()!=HcalOuter || isSiPM(iEta,iPhi, iDepth)==false)
00969 {
00970 for (int i=0;i<pedSubADCsize;++i)
00971 h.count_shapeThresh[i]+=pedSubtractedADC_[i];
00972 }
00973 }
00974
00975
00976 ++h.count_good;
00977 ++occupancyEtaPhi[calcEta][iPhi-1][iDepth-1];
00978 ++occupancyEta[iEta+41];
00979 ++occupancyPhi[iPhi-1];
00980
00981 ++occupancyVME[static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][static_cast<int>(digi.elecId().readoutVMECrateId())];
00982 ++occupancySpigot[static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())];
00983
00984
00985 if (digi.id().subdet()==HcalForward
00986 && Online_
00987 && currenttype_==0
00988 && passedMinBiasHLT_
00989 )
00990 {
00991 int maxtime=-1;
00992 double maxenergy=-1, fullenergy=0;
00993 int digisize=digi.size();
00994 for (int ff=0;ff<digisize;++ff)
00995 {
00996 fullenergy+=digi.sample(ff).nominal_fC()-2.5;
00997 if (digi.sample(ff).nominal_fC()-2.5>maxenergy)
00998 {
00999 maxenergy=digi.sample(ff).nominal_fC()-2.5;
01000 maxtime=ff;
01001 }
01002 }
01003
01004 if (maxtime>=2 && maxtime<=5 && maxenergy>20 && maxenergy<100)
01005 {
01006 for (int ff=0;ff<digisize;++ff){
01007 if(fullenergy>0){
01008 if(digi.id().ieta()>0)HFP_shape->Fill(ff,(digi.sample(ff).nominal_fC()-2.5)/fullenergy);
01009 if(digi.id().ieta()<0)HFM_shape->Fill(ff,(digi.sample(ff).nominal_fC()-2.5)/fullenergy);
01010 }
01011 }
01012
01013 double time_den=0, time_num=0;
01014
01015 int startslice=std::max(0,maxtime-1);
01016 int endslice=std::min(digisize-1,maxtime+1);
01017 for (int ss=startslice;ss<=endslice;++ss)
01018 {
01019
01020 time_num+=ss*(digi.sample(ss).nominal_fC()-2.5);
01021 time_den+=digi.sample(ss).nominal_fC()-2.5;
01022 }
01023
01024 int myiphi=iPhi;
01025 if (iDepth==2) ++myiphi;
01026 if (HFtiming_etaProfile!=0 && time_den!=0)
01027 HFtiming_etaProfile->Fill(iEta,time_num/time_den);
01028 if (HFtiming_totaltime2D!=0 && time_den!=0)
01029 HFtiming_totaltime2D->Fill(iEta,myiphi,time_num/time_den);
01030 if (HFtiming_occupancy2D!=0 && time_den!=0)
01031 HFtiming_occupancy2D->Fill(iEta,myiphi,1);
01032 }
01033 }
01034
01035 return err;
01036 }
01037
01038 void HcalDigiMonitor::beginLuminosityBlock(const edm::LuminosityBlock& lumiSeg,
01039 const edm::EventSetup& c)
01040 {
01041 HcalBaseDQMonitor::beginLuminosityBlock(lumiSeg,c);
01042 ProblemsCurrentLB->Reset();
01043 }
01044
01045 void HcalDigiMonitor::endLuminosityBlock(const edm::LuminosityBlock& lumiSeg,
01046 const edm::EventSetup& c)
01047 {
01048 if (LumiInOrder(lumiSeg.luminosityBlock())==false) return;
01049
01050
01051 if (ProblemsCurrentLB)
01052 ProblemsCurrentLB->Reset();
01053
01054 fill_Nevents();
01055
01056 zeroCounters();
01057
01058 return;
01059 }
01060
01061 void HcalDigiMonitor::fill_Nevents()
01062 {
01063 if (debug_>0)
01064 std::cout <<"<HcalDigiMonitor> Calling fill_Nevents for event "<<tevt_<< " (processed events = "<<ievt_<<")"<<std::endl;
01065 int iPhi, iEta, iDepth;
01066 bool valid=false;
01067
01068
01069 ProblemsVsLB->Fill(currentLS,hbHists.count_bad+heHists.count_bad+hoHists.count_bad+hfHists.count_bad);
01070 ProblemsVsLB_HB->Fill(currentLS,hbHists.count_bad);
01071 ProblemsVsLB_HE->Fill(currentLS,heHists.count_bad);
01072 ProblemsVsLB_HO->Fill(currentLS,hoHists.count_bad);
01073 ProblemsVsLB_HF->Fill(currentLS,hfHists.count_bad);
01074 ProblemsVsLB_HBHEHF->Fill(currentLS,hbHists.count_bad+heHists.count_bad+hfHists.count_bad);
01075
01076
01077 if (ProblemsCurrentLB)
01078 {
01079 ProblemsCurrentLB->Fill(-1,-1,1);
01080 ProblemsCurrentLB->Fill(0,0,hbHists.count_bad);
01081 ProblemsCurrentLB->Fill(1,0,heHists.count_bad);
01082 ProblemsCurrentLB->Fill(2,0,hoHists.count_bad);
01083 ProblemsCurrentLB->Fill(3,0,hfHists.count_bad);
01084 ProblemsCurrentLB->Fill(4,0,HO0bad);
01085 ProblemsCurrentLB->Fill(5,0,HO12bad);
01086 ProblemsCurrentLB->Fill(6,0,HFlumibad);
01087 }
01088
01089
01090 for (int i=0;i<10;++i)
01091 {
01092 for (int j=0;j<50;++j)
01093 {
01094 if (hbHists.tssumplus[j][i]>0) hbHists.TS_sum_plus[i]->Fill(j, hbHists.tssumplus[j][i]);
01095 if (hbHists.tssumminus[j][i]>0) hbHists.TS_sum_minus[i]->Fill(j, hbHists.tssumminus[j][i]);
01096 if (heHists.tssumplus[j][i]>0) heHists.TS_sum_plus[i]->Fill(j, heHists.tssumplus[j][i]);
01097 if (heHists.tssumminus[j][i]>0) heHists.TS_sum_minus[i]->Fill(j, heHists.tssumminus[j][i]);
01098 if (hoHists.tssumplus[j][i]>0) hoHists.TS_sum_plus[i]->Fill(j, hoHists.tssumplus[j][i]);
01099 if (hoHists.tssumminus[j][i]>0) hoHists.TS_sum_minus[i]->Fill(j, hoHists.tssumminus[j][i]);
01100 if (hfHists.tssumplus[j][i]>0) hfHists.TS_sum_plus[i]->Fill(j, hfHists.tssumplus[j][i]);
01101 if (hfHists.tssumminus[j][i]>0) hfHists.TS_sum_minus[i]->Fill(j, hfHists.tssumminus[j][i]);
01102 }
01103 }
01104
01105 for (int i=0;i<DIGI_NUM;++i)
01106 {
01107 if (diginum[i]>0) DigiNum->Fill(i, diginum[i]);
01108 if (i>=DIGI_SUBDET_NUM) continue;
01109
01110 if (hbHists.count_BQ[i]>0) hbHists.BQ->Fill(i, hbHists.count_BQ[i]);
01111 if (heHists.count_BQ[i]>0) heHists.BQ->Fill(i, heHists.count_BQ[i]);
01112 if (hoHists.count_BQ[i]>0) hoHists.BQ->Fill(i, hoHists.count_BQ[i]);
01113 if (hfHists.count_BQ[i]>0) hfHists.BQ->Fill(i, hfHists.count_BQ[i]);
01114 }
01115
01116
01117
01118 for (int i=0;i<4;++i)
01119 {
01120 if (hbHists.dverr[i]>0) hbHists.DVerr->Fill(i, hbHists.dverr[i]);
01121 if (heHists.dverr[i]>0) heHists.DVerr->Fill(i, heHists.dverr[i]);
01122 if (hoHists.dverr[i]>0) hoHists.DVerr->Fill(i, hoHists.dverr[i]);
01123 if (hfHists.dverr[i]>0) hfHists.DVerr->Fill(i, hfHists.dverr[i]);
01124
01125 if (hbHists.capid[i]>0) hbHists.CapID->Fill(i, hbHists.capid[i]);
01126 if (heHists.capid[i]>0) heHists.CapID->Fill(i, heHists.capid[i]);
01127 if (hoHists.capid[i]>0) hoHists.CapID->Fill(i, hoHists.capid[i]);
01128 if (hfHists.capid[i]>0) hfHists.CapID->Fill(i, hfHists.capid[i]);
01129 }
01130
01131 for (int i=0;i<200;++i)
01132 {
01133 if (hbHists.adc[i]>0) hbHists.ADC->Fill(i, hbHists.adc[i]);
01134
01135 if (heHists.adc[i]>0) heHists.ADC->Fill(i, heHists.adc[i]);
01136 if (hoHists.adc[i]>0) hoHists.ADC->Fill(i, hoHists.adc[i]);
01137 if (hfHists.adc[i]>0) hfHists.ADC->Fill(i, hfHists.adc[i]);
01138
01139 if (hbHists.adcsum[i]>0) hbHists.ADCsum->Fill(i, hbHists.adcsum[i]);
01140 if (heHists.adcsum[i]>0) heHists.ADCsum->Fill(i, heHists.adcsum[i]);
01141 if (hoHists.adcsum[i]>0) hoHists.ADCsum->Fill(i, hoHists.adcsum[i]);
01142 if (hfHists.adcsum[i]>0) hfHists.ADCsum->Fill(i, hfHists.adcsum[i]);
01143 }
01144
01145 for (int i = 0; i < 15; ++i)
01146 {
01147 if (hbHists.fibbcnoff[i]>0) hbHists.fibBCNOff->Fill(i-7,
01148 hbHists.fibbcnoff[i]);
01149 if (heHists.fibbcnoff[i]>0) heHists.fibBCNOff->Fill(i-7,
01150 heHists.fibbcnoff[i]);
01151 if (hfHists.fibbcnoff[i]>0) hfHists.fibBCNOff->Fill(i-7,
01152 hfHists.fibbcnoff[i]);
01153 if (hoHists.fibbcnoff[i]>0) hoHists.fibBCNOff->Fill(i-7,
01154 hoHists.fibbcnoff[i]);
01155 }
01156
01157
01158 for (int i=0;i<DIGI_BQ_FRAC_NBINS;++i)
01159 {
01160 if (DIGI_BQ_FRAC_NBINS==1) break;
01161 if (hbHists.count_BQFrac[i]>0) hbHists.BQFrac->Fill(1.*i/(DIGI_BQ_FRAC_NBINS-1), hbHists.count_BQFrac[i]);
01162 if (heHists.count_BQFrac[i]>0) heHists.BQFrac->Fill(1.*i/(DIGI_BQ_FRAC_NBINS-1), heHists.count_BQFrac[i]);
01163 if (hoHists.count_BQFrac[i]>0)
01164 {
01165 hoHists.BQFrac->Fill(1.*i/(DIGI_BQ_FRAC_NBINS), hoHists.count_BQFrac[i]);
01166 }
01167 if (hfHists.count_BQFrac[i]>0) hfHists.BQFrac->Fill(1.*i/(DIGI_BQ_FRAC_NBINS-1), hfHists.count_BQFrac[i]);
01168 }
01169
01170
01171 for (int i=0;i<50;++i)
01172 {
01173 if (hbHists.count_presample[i]>0) hbHists.presample->Fill(i, hbHists.count_presample[i]);
01174 if (heHists.count_presample[i]>0) heHists.presample->Fill(i, heHists.count_presample[i]);
01175 if (hoHists.count_presample[i]>0) hoHists.presample->Fill(i, hoHists.count_presample[i]);
01176 if (hfHists.count_presample[i]>0) hfHists.presample->Fill(i, hfHists.count_presample[i]);
01177 }
01178
01179
01180 for (int i=0;i<10;++i)
01181 {
01182 if (hbHists.count_shape[i]>0) hbHists.shape->Fill(i, hbHists.count_shape[i]);
01183 if (hbHists.count_shapeThresh[i]>0) hbHists.shapeThresh->Fill(i, hbHists.count_shapeThresh[i]);
01184 if (heHists.count_shape[i]>0) heHists.shape->Fill(i, heHists.count_shape[i]);
01185 if (heHists.count_shapeThresh[i]>0) heHists.shapeThresh->Fill(i, heHists.count_shapeThresh[i]);
01186 if (hoHists.count_shape[i]>0) hoHists.shape->Fill(i, hoHists.count_shape[i]);
01187 if (hoHists.count_shapeThresh[i]>0) hoHists.shapeThresh->Fill(i, hoHists.count_shapeThresh[i]);
01188 if (hfHists.count_shape[i]>0) hfHists.shape->Fill(i, hfHists.count_shape[i]);
01189 if (hfHists.count_shapeThresh[i]>0) hfHists.shapeThresh->Fill(i, hfHists.count_shapeThresh[i]);
01190 }
01191
01192
01193 for (int i=0;i<8;++i)
01194 {
01195 if (hbHists.capIDdiff[i]>0) hbHists.DigiFirstCapID->Fill(i, hbHists.capIDdiff[i]);
01196 if (heHists.capIDdiff[i]>0) heHists.DigiFirstCapID->Fill(i, heHists.capIDdiff[i]);
01197 if (hoHists.capIDdiff[i]>0) hoHists.DigiFirstCapID->Fill(i, hoHists.capIDdiff[i]);
01198 if (hfHists.capIDdiff[i]>0) hfHists.DigiFirstCapID->Fill(i, hfHists.capIDdiff[i]);
01199 }
01200
01201
01202 for (int i=0;i<40;++i)
01203 {
01204 for (int j=0;j<18;++j)
01205 {
01206 if (errorVME[i][j]>0) DigiErrorVME->Fill(i, j,errorVME[i][j]);
01207 if (occupancyVME[i][j]>0) DigiOccupancyVME->Fill(i, j,occupancyVME[i][j]);
01208 }
01209 }
01210
01211
01212 for (int i=0;i<HcalDCCHeader::SPIGOT_COUNT;++i)
01213 {
01214 for (int j=0;j<36;++j)
01215 {
01216 if (errorSpigot[i][j]>0) DigiErrorSpigot->Fill(i, j,errorSpigot[i][j]);
01217 if (occupancySpigot[i][j]>0) DigiOccupancySpigot->Fill(i, j,occupancySpigot[i][j]);
01218 }
01219 }
01220
01221
01222 for (int sub=0;sub<4;++sub)
01223 {
01224 for (int dsize=0;dsize<20;++dsize)
01225 {
01226 if (digisize[dsize][sub]>0)
01227 DigiSize->Fill(sub,dsize,digisize[dsize][sub]);
01228 }
01229 }
01230
01231
01232 for (int d=0;d<4;++d)
01233 {
01234 iDepth=d+1;
01235 DigiErrorsByDepth.depth[d]->setBinContent(0,0,ievt_);
01236 DigiOccupancyByDepth.depth[d]->setBinContent(0,0,ievt_);
01237 DigiErrorsBadDigiSize.depth[d]->setBinContent(0,0,ievt_);
01238 DigiErrorsUnpacker.depth[d]->setBinContent(0,0,ievt_);
01239 DigiErrorsBadFibBCNOff.depth[d]->setBinContent(0,0,ievt_);
01240
01241 for (int phi=0;phi<72;++phi)
01242 {
01243 iPhi=phi+1;
01244 DigiOccupancyPhi->Fill(iPhi,occupancyPhi[phi]);
01245 for (int eta=0;eta<83;++eta)
01246 {
01247
01248 iEta=eta-41;
01249 if (phi==0)
01250 DigiOccupancyEta->Fill(iEta,occupancyEta[eta]);
01251 valid=false;
01252
01253
01254 if (validDetId(HcalBarrel, iEta, iPhi, iDepth))
01255 {
01256 valid=true;
01257 if (HBpresent_)
01258 {
01259 int calcEta = CalcEtaBin(HcalBarrel,iEta,iDepth);
01260
01261 DigiOccupancyByDepth.depth[d]->Fill(iEta, iPhi,
01262 occupancyEtaPhi[calcEta][phi][d]);
01263
01264 if (makeDiagnostics_)
01265 {
01266 DigiErrorsBadCapID.depth[d]->Fill(iEta, iPhi,
01267 badcapID[calcEta][phi][d]);
01268 DigiErrorsDVErr.depth[d]->Fill(iEta, iPhi,
01269 digierrorsdverr[calcEta][phi][d]);
01270 }
01271 DigiErrorsBadDigiSize.depth[d]->Fill(iEta, iPhi,
01272 baddigisize[calcEta][phi][d]);
01273 DigiErrorsBadFibBCNOff.depth[d]->Fill(iEta, iPhi,
01274 badFibBCNOff[calcEta][phi][d]);
01275 DigiErrorsUnpacker.depth[d]->Fill(iEta, iPhi,
01276 badunpackerreport[calcEta][phi][d]);
01277 DigiErrorsByDepth.depth[d]->Fill(iEta, iPhi,
01278 baddigis[calcEta][phi][d]);
01279
01280
01281 }
01282 }
01283
01284 if (validDetId(HcalEndcap, iEta, iPhi, iDepth))
01285 {
01286 valid=true;
01287 if (HEpresent_)
01288 {
01289 int calcEta = CalcEtaBin(HcalEndcap,iEta,iDepth);
01290
01291 DigiOccupancyByDepth.depth[d]->Fill(iEta, iPhi,
01292 occupancyEtaPhi[calcEta][phi][d]);
01293
01294 if (makeDiagnostics_)
01295 {
01296 DigiErrorsBadCapID.depth[d]->Fill(iEta, iPhi,
01297 badcapID[calcEta][phi][d]);
01298 DigiErrorsDVErr.depth[d]->Fill(iEta, iPhi,
01299 digierrorsdverr[calcEta][phi][d]);
01300 }
01301 DigiErrorsBadDigiSize.depth[d]->Fill(iEta, iPhi,
01302 baddigisize[calcEta][phi][d]);
01303 DigiErrorsBadFibBCNOff.depth[d]->Fill(iEta, iPhi,
01304 badFibBCNOff[calcEta][phi][d]);
01305 DigiErrorsUnpacker.depth[d]->Fill(iEta, iPhi,
01306 badunpackerreport[calcEta][phi][d]);
01307 DigiErrorsByDepth.depth[d]->Fill(iEta, iPhi,
01308 baddigis[calcEta][phi][d]);
01309 }
01310 }
01311
01312 if (validDetId(HcalOuter,iEta,iPhi,iDepth))
01313 {
01314 valid=true;
01315 if (HOpresent_)
01316 {
01317 int calcEta = CalcEtaBin(HcalOuter,iEta,iDepth);
01318 DigiOccupancyByDepth.depth[d]->Fill(iEta, iPhi,
01319 occupancyEtaPhi[calcEta][phi][d]);
01320 if (makeDiagnostics_)
01321 {
01322 DigiErrorsBadCapID.depth[d]->Fill(iEta, iPhi,
01323 badcapID[calcEta][phi][d]);
01324 DigiErrorsDVErr.depth[d]->Fill(iEta, iPhi,
01325 digierrorsdverr[calcEta][phi][d]);
01326 }
01327 DigiErrorsBadDigiSize.depth[d]->Fill(iEta, iPhi,
01328 baddigisize[calcEta][phi][d]);
01329 DigiErrorsBadFibBCNOff.depth[d]->Fill(iEta, iPhi,
01330 badFibBCNOff[calcEta][phi][d]);
01331 DigiErrorsUnpacker.depth[d]->Fill(iEta, iPhi,
01332 badunpackerreport[calcEta][phi][d]);
01333
01334 DigiErrorsByDepth.depth[d]->Fill(iEta,iPhi,
01335 baddigis[calcEta][phi][d]);
01336 }
01337 }
01338
01339 if (validDetId(HcalForward,iEta,iPhi,iDepth))
01340 {
01341 valid=true;
01342 if (HFpresent_)
01343 {
01344 int calcEta = CalcEtaBin(HcalForward,iEta,iDepth);
01345 int zside = iEta/abs(iEta);
01346 DigiOccupancyByDepth.depth[d]->Fill(iEta+zside, iPhi,
01347 occupancyEtaPhi[calcEta][phi][d]);
01348
01349 if (makeDiagnostics_)
01350 {
01351 DigiErrorsBadCapID.depth[d]->Fill(iEta+zside, iPhi,
01352 badcapID[calcEta][phi][d]);
01353 DigiErrorsDVErr.depth[d]->Fill(iEta+zside, iPhi,
01354 digierrorsdverr[calcEta][phi][d]);
01355 }
01356 DigiErrorsBadDigiSize.depth[d]->Fill(iEta+zside, iPhi,
01357 baddigisize[calcEta][phi][d]);
01358 DigiErrorsBadFibBCNOff.depth[d]->Fill(iEta+zside, iPhi,
01359 badFibBCNOff[calcEta][phi][d]);
01360 DigiErrorsUnpacker.depth[d]->Fill(iEta+zside, iPhi,
01361 badunpackerreport[calcEta][phi][d]);
01362 DigiErrorsByDepth.depth[d]->Fill(iEta+zside, iPhi,
01363 baddigis[calcEta][phi][d]);
01364 }
01365 }
01366 }
01367 }
01368 }
01369
01370
01371 FillUnphysicalHEHFBins(DigiErrorsByDepth);
01372 if (makeDiagnostics_)
01373 {
01374 FillUnphysicalHEHFBins(DigiErrorsBadCapID);
01375 FillUnphysicalHEHFBins(DigiErrorsDVErr);
01376 }
01377 FillUnphysicalHEHFBins(DigiErrorsBadDigiSize);
01378 FillUnphysicalHEHFBins(DigiOccupancyByDepth);
01379 FillUnphysicalHEHFBins(DigiErrorsBadFibBCNOff);
01380 FillUnphysicalHEHFBins(DigiErrorsUnpacker);
01381
01382
01383
01384 return;
01385 }
01386
01387
01388 void HcalDigiMonitor::zeroCounters()
01389 {
01390
01391
01392
01393
01394
01395
01396 hbHists.count_bad=0;
01397 hbHists.count_good=0;
01398 heHists.count_bad=0;
01399 heHists.count_good=0;
01400 hoHists.count_bad=0;
01401 hoHists.count_good=0;
01402 hfHists.count_bad=0;
01403 hfHists.count_good=0;
01404
01405 HO0bad=0;
01406 HO12bad=0;
01407 HFlumibad=0;
01408
01409 for (int i=0;i<85;++i)
01410 {
01411 occupancyEta[i]=0;
01412 if (i<72)
01413 occupancyPhi[i]=0;
01414 for (int j=0;j<72;++j)
01415 {
01416 for (int k=0;k<4;++k)
01417 {
01418 baddigis[i][j][k]=0;
01419 badcapID[i][j][k]=0;
01420 baddigisize[i][j][k]=0;
01421 occupancyEtaPhi[i][j][k]=0;
01422 digierrorsdverr[i][j][k]=0;
01423 badFibBCNOff[i][j][k]=0;
01424 badunpackerreport[i][j][k]=0;
01425 }
01426 }
01427 }
01428
01429 for (int i=0;i<40;++i)
01430 {
01431 for (int j=0;j<18;++j)
01432 {
01433 occupancyVME[i][j]=0;
01434 errorVME[i][j]=0;
01435 }
01436 }
01437
01438 for (int i=0;i<HcalDCCHeader::SPIGOT_COUNT;++i)
01439 {
01440 for (int j=0;j<36;++j)
01441 {
01442 occupancySpigot[i][j]=0;
01443 errorSpigot[i][j]=0;
01444 }
01445 }
01446
01447
01448 for (int i=0;i<20;++i)
01449 {
01450 for (int j=0;j<4;++j)
01451 digisize[i][j]=0;
01452 }
01453
01454 for (int i=0;i<DIGI_NUM;++i)
01455 {
01456 diginum[i]=0;
01457
01458
01459 if (i<4)
01460 {
01461 hbHists.dverr[i]=0;
01462 heHists.dverr[i]=0;
01463 hoHists.dverr[i]=0;
01464 hfHists.dverr[i]=0;
01465 hbHists.capid[i]=0;
01466 heHists.capid[i]=0;
01467 hoHists.capid[i]=0;
01468 hfHists.capid[i]=0;
01469 }
01470 if (i<8)
01471 {
01472 hbHists.capIDdiff[i]=0;
01473 heHists.capIDdiff[i]=0;
01474 hoHists.capIDdiff[i]=0;
01475 hfHists.capIDdiff[i]=0;
01476 }
01477
01478 if (i<10)
01479 {
01480 hbHists.count_shape[i]=0;
01481 heHists.count_shape[i]=0;
01482 hoHists.count_shape[i]=0;
01483 hfHists.count_shape[i]=0;
01484
01485 hbHists.count_shapeThresh[i]=0;
01486 heHists.count_shapeThresh[i]=0;
01487 hoHists.count_shapeThresh[i]=0;
01488 hfHists.count_shapeThresh[i]=0;
01489 }
01490 if (i<50)
01491 {
01492 hbHists.count_presample[i]=0;
01493 heHists.count_presample[i]=0;
01494 hoHists.count_presample[i]=0;
01495 hfHists.count_presample[i]=0;
01496 for (int j=0;j<10;++j)
01497 {
01498 hbHists.tssumplus[i][j]=0;
01499 heHists.tssumplus[i][j]=0;
01500 hoHists.tssumplus[i][j]=0;
01501 hfHists.tssumplus[i][j]=0;
01502 hbHists.tssumminus[i][j]=0;
01503 heHists.tssumminus[i][j]=0;
01504 hoHists.tssumminus[i][j]=0;
01505 hfHists.tssumminus[i][j]=0;
01506 }
01507 }
01508
01509 if (i<15)
01510 {
01511 hbHists.fibbcnoff[i]=0;
01512 heHists.fibbcnoff[i]=0;
01513 hoHists.fibbcnoff[i]=0;
01514 hfHists.fibbcnoff[i]=0;
01515 }
01516
01517 if (i<200)
01518 {
01519 hbHists.adc[i]=0;
01520 heHists.adc[i]=0;
01521 hoHists.adc[i]=0;
01522 hfHists.adc[i]=0;
01523 hbHists.adcsum[i]=0;
01524 heHists.adcsum[i]=0;
01525 hoHists.adcsum[i]=0;
01526 hfHists.adcsum[i]=0;
01527 }
01528 if (i<DIGI_SUBDET_NUM)
01529 {
01530 hbHists.count_BQ[i]=0;
01531 heHists.count_BQ[i]=0;
01532 hoHists.count_BQ[i]=0;
01533 hfHists.count_BQ[i]=0;
01534 }
01535 if (i<DIGI_BQ_FRAC_NBINS)
01536 {
01537 hbHists.count_BQFrac[i]=0;
01538 heHists.count_BQFrac[i]=0;
01539 hoHists.count_BQFrac[i]=0;
01540 hfHists.count_BQFrac[i]=0;
01541 }
01542 }
01543
01544
01545 return;
01546 }
01547
01548 void HcalDigiMonitor::UpdateHists(DigiHists& h)
01549 {
01550
01551 h.shape->update();
01552 h.shapeThresh->update();
01553 h.presample->update();
01554 h.BQ->update();
01555 h.BQFrac->update();
01556 h.DigiFirstCapID->update();
01557 h.DVerr->update();
01558 h.CapID->update();
01559 h.ADC->update();
01560 h.ADCsum->update();
01561 h.fibBCNOff->update();
01562
01563 for (unsigned int i=0;i<h.TS_sum_plus.size();++i)
01564 h.TS_sum_plus[i]->update();
01565 for (unsigned int i=0;i<h.TS_sum_minus.size();++i)
01566 h.TS_sum_minus[i]->update();
01567 }
01568
01569
01570 void HcalDigiMonitor::reset()
01571 {
01572
01573 zeroCounters();
01574
01575
01576
01577 DigiErrorsByDepth.Reset();
01578 DigiErrorsBadCapID.Reset();
01579 DigiErrorsDVErr.Reset();
01580 DigiErrorsBadDigiSize.Reset();
01581 DigiErrorsBadADCSum.Reset();
01582 DigiErrorsUnpacker.Reset();
01583 DigiErrorsBadFibBCNOff.Reset();
01584 DigiOccupancyByDepth.Reset();
01585 DigiErrorOccupancyByDepth.Reset();
01586
01587 DigiOccupancyEta->Reset();
01588 DigiOccupancyPhi->Reset();
01589 DigiOccupancyVME->Reset();
01590 DigiOccupancySpigot->Reset();
01591 DigiErrorVME->Reset();
01592 DigiErrorSpigot->Reset();
01593
01594 DigiBQ->Reset();
01595 DigiBQFrac->Reset();
01596 DigiUnpackerErrorCount->Reset();
01597 DigiUnpackerErrorFrac->Reset();
01598
01599 DigiNum->Reset();
01600
01601 hbHists.shape->Reset();
01602 hbHists.shapeThresh->Reset();
01603 hbHists.presample->Reset();
01604 hbHists.BQ->Reset();
01605 hbHists.BQFrac->Reset();
01606 hbHists.DigiFirstCapID->Reset();
01607 hbHists.DVerr->Reset();
01608 hbHists.CapID->Reset();
01609 hbHists.ADC->Reset();
01610 hbHists.ADCsum->Reset();
01611 hbHists.fibBCNOff->Reset();
01612 for (unsigned int i=0;i<hbHists.TS_sum_plus.size();++i)
01613 hbHists.TS_sum_plus[i]->Reset();
01614 for (unsigned int i=0;i<hbHists.TS_sum_minus.size();++i)
01615 hbHists.TS_sum_minus[i]->Reset();
01616
01617 heHists.shape->Reset();
01618 heHists.shapeThresh->Reset();
01619 heHists.presample->Reset();
01620 heHists.BQ->Reset();
01621 heHists.BQFrac->Reset();
01622 heHists.DigiFirstCapID->Reset();
01623 heHists.DVerr->Reset();
01624 heHists.CapID->Reset();
01625 heHists.ADC->Reset();
01626 heHists.ADCsum->Reset();
01627 heHists.fibBCNOff->Reset();
01628 for (unsigned int i=0;i<heHists.TS_sum_plus.size();++i)
01629 heHists.TS_sum_plus[i]->Reset();
01630 for (unsigned int i=0;i<heHists.TS_sum_minus.size();++i)
01631 heHists.TS_sum_minus[i]->Reset();
01632
01633 hoHists.shape->Reset();
01634 hoHists.shapeThresh->Reset();
01635 hoHists.presample->Reset();
01636 hoHists.BQ->Reset();
01637 hoHists.BQFrac->Reset();
01638 hoHists.DigiFirstCapID->Reset();
01639 hoHists.DVerr->Reset();
01640 hoHists.CapID->Reset();
01641 hoHists.ADC->Reset();
01642 hoHists.ADCsum->Reset();
01643 hoHists.fibBCNOff->Reset();
01644 for (unsigned int i=0;i<hoHists.TS_sum_plus.size();++i)
01645 hoHists.TS_sum_plus[i]->Reset();
01646 for (unsigned int i=0;i<hoHists.TS_sum_minus.size();++i)
01647 hoHists.TS_sum_minus[i]->Reset();
01648
01649 hfHists.shape->Reset();
01650 hfHists.shapeThresh->Reset();
01651 hfHists.presample->Reset();
01652 hfHists.BQ->Reset();
01653 hfHists.BQFrac->Reset();
01654 hfHists.DigiFirstCapID->Reset();
01655 hfHists.DVerr->Reset();
01656 hfHists.CapID->Reset();
01657 hfHists.ADC->Reset();
01658 hfHists.ADCsum->Reset();
01659 hfHists.fibBCNOff->Reset();
01660 for (unsigned int i=0;i<hfHists.TS_sum_plus.size();++i)
01661 hfHists.TS_sum_plus[i]->Reset();
01662 for (unsigned int i=0;i<hfHists.TS_sum_minus.size();++i)
01663 hfHists.TS_sum_minus[i]->Reset();
01664
01665 return;
01666 }
01667 DEFINE_FWK_MODULE(HcalDigiMonitor);
01668