CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalDeadCellMonitor.cc
Go to the documentation of this file.
4 
6 {
7  Online_ = ps.getUntrackedParameter<bool>("online",false);
8  mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns",false);
9  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup",false);
10  debug_ = ps.getUntrackedParameter<int>("debug",0);
11  makeDiagnostics_ = ps.getUntrackedParameter<bool>("makeDiagnostics",false);
12  prefixME_ = ps.getUntrackedParameter<std::string>("subSystemFolder","Hcal/");
13  if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/")
14  prefixME_.append("/");
15  subdir_ = ps.getUntrackedParameter<std::string>("TaskFolder","DeadCellMonitor_Hcal"); // DeadCellMonitor_Hcal
16  if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!="/")
17  subdir_.append("/");
18  subdir_=prefixME_+subdir_;
19  AllowedCalibTypes_ = ps.getUntrackedParameter<std::vector<int> > ("AllowedCalibTypes");
20  skipOutOfOrderLS_ = ps.getUntrackedParameter<bool>("skipOutOfOrderLS",true);
21  NLumiBlocks_ = ps.getUntrackedParameter<int>("NLumiBlocks",4000);
22 
23  badChannelStatusMask_ = ps.getUntrackedParameter<int>("BadChannelStatusMask",
24  ps.getUntrackedParameter<int>("BadChannelStatusMask",
25  (1<<HcalChannelStatus::HcalCellDead))); // identify channel status values to mask
26  // DeadCell-specific parameters
27 
28  // Collection type info
30  hbheRechitLabel_ = ps.getUntrackedParameter<edm::InputTag>("hbheRechitLabel");
31  hoRechitLabel_ = ps.getUntrackedParameter<edm::InputTag>("hoRechitLabel");
32  hfRechitLabel_ = ps.getUntrackedParameter<edm::InputTag>("hfRechitLabel");
33 
34  // minimum number of events required for lumi section-based dead cell checks
35  minDeadEventCount_ = ps.getUntrackedParameter<int>("minDeadEventCount",1000);
36  excludeHORing2_ = ps.getUntrackedParameter<bool>("excludeHORing2",false);
37  excludeHO1P02_ = ps.getUntrackedParameter<bool>("excludeHO1P02",false);
38  endLumiProcessed_ = false;
39 
40  // Set which dead cell checks will be performed
41  /* Dead cells can be defined in the following ways:
42  1) never present digi -- digi is never present in run
43  2) digis -- digi is absent for one or more lumi section
44  3) never present rechit -- rechit > threshold energy never present (NOT redundant, since it requires not just that a rechit be present, but that it be above threshold as well. )
45  4) rechits -- rechit is present, but rechit energy below threshold for one or more lumi sections
46 
47  Of these tests, never-present digis are always checked.
48  Occasional digis are checked only if deadmon_test_digis_ is true,
49  and both rechit tests are made only if deadmon_test_rechits_ is true
50  */
51 
52  deadmon_test_digis_ = ps.getUntrackedParameter<bool>("test_digis",true);
53  deadmon_test_rechits_ = ps.getUntrackedParameter<bool>("test_rechits",false);
54 
55  // rechit energy test -- cell must be below threshold value for a number of consecutive events to be considered dead
56  energyThreshold_ = ps.getUntrackedParameter<double>("MissingRechitEnergyThreshold",0);
57  HBenergyThreshold_ = ps.getUntrackedParameter<double>("HB_energyThreshold",energyThreshold_);
58  HEenergyThreshold_ = ps.getUntrackedParameter<double>("HE_energyThreshold",energyThreshold_);
59  HOenergyThreshold_ = ps.getUntrackedParameter<double>("HO_energyThreshold",energyThreshold_);
60  HFenergyThreshold_ = ps.getUntrackedParameter<double>("HF_energyThreshold",energyThreshold_);
61 
62  needLogicalMap_=true;
63  setupDone_=false;
64 
65  // register for data access
66  tok_dcs_ = consumes<DcsStatusCollection>(edm::InputTag("scalersRawToDigi"));
67  tok_hbhedigi_ = consumes<HBHEDigiCollection>(digiLabel_);
68  tok_hodigi_ = consumes<HODigiCollection>(digiLabel_);
69  tok_hfdigi_ = consumes<HFDigiCollection>(digiLabel_);
70  tok_hbhe_ = consumes<HBHERecHitCollection>(hbheRechitLabel_);
71  tok_ho_ = consumes<HORecHitCollection>(hoRechitLabel_);
72  tok_hf_ = consumes<HFRecHitCollection>(hfRechitLabel_);
73  tok_gtEvm_ = consumes<L1GlobalTriggerEvmReadoutRecord>(edm::InputTag("gtEvmDigis"));
74 
75 
76 } //constructor
77 
79 {
80 } //destructor
81 
82 
83 /* ------------------------------------ */
84 
86 {
87  if (setupDone_)
88  {
89  // Always do a zeroing/resetting so that empty histograms/counter
90  // will always appear.
91  zeroCounters(1); // make sure arrays are set up
92  this->reset();
93 
94  return;
95  }
96  else
97  setupDone_=true;
98 
100  if (debug_>0)
101  std::cout <<"<HcalDeadCellMonitor::setup> Setting up histograms"<<std::endl;
102 
104  MonitorElement* excludeHO2=ib.bookInt("ExcludeHOring2");
105  // Fill with 0 if ring is not to be excluded; fill with 1 if it is to be excluded
106  if (excludeHO2) excludeHO2->Fill(excludeHORing2_==true ? 1 : 0);
107 
108  Nevents = ib.book1D("NumberOfDeadCellEvents","Number of Events Seen by DeadCellMonitor",2,0,2);
109  Nevents->setBinLabel(1,"allEvents");
110  Nevents->setBinLabel(2,"lumiCheck");
111  // 1D plots count number of bad cells vs. luminosity block
112  ProblemsVsLB=ib.bookProfile("TotalDeadCells_HCAL_vs_LS",
113  "Total Number of Dead Hcal Cells (excluding known problems) vs LS;Lumi Section;Dead Cells",
114  NLumiBlocks_,0.5,NLumiBlocks_+0.5,
115  100,0,10000);
116  ProblemsVsLB_HB=ib.bookProfile("TotalDeadCells_HB_vs_LS",
117  "Total Number of Dead HB Cells (excluding known problems) vs LS;Lumi Section;Dead Cells",
118  NLumiBlocks_,0.5,NLumiBlocks_+0.5,
119  100,0,10000);
120  ProblemsVsLB_HE=ib.bookProfile("TotalDeadCells_HE_vs_LS",
121  "Total Number of Dead HE Cells (excluding known problems) vs LS;Lumi Section;Dead Cells",
122  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
123  ProblemsVsLB_HO=ib.bookProfile("TotalDeadCells_HO_vs_LS",
124  "Total Number of Dead HO Cells Ring 0,1 |ieta|<=10 (excluding known problems) vs LS;Lumi Section;Dead Cells",
125  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
126  ProblemsVsLB_HO2=ib.bookProfile("TotalDeadCells_HO2_vs_LS",
127  "Total Number of Dead HO Cells Ring 2 |ieta|>10 (excluding known problems) vs LS;Lumi Section;Dead Cells",
128  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
129  ProblemsVsLB_HF=ib.bookProfile("TotalDeadCells_HF_vs_LS",
130  "Total Number of Dead HF Cells (excluding known problems) vs LS;Lumi Section;Dead Cells",
131  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
132  ProblemsVsLB_HBHEHF=ib.bookProfile("TotalDeadCells_HBHEHF_vs_LS",
133  "Total Number of Dead HBHEHF Cells (excluding known problems) vs LS;Lumi Section;Dead Cells",
134  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
135 
136  (ProblemsVsLB->getTProfile())->SetMarkerStyle(20);
137  (ProblemsVsLB_HB->getTProfile())->SetMarkerStyle(20);
138  (ProblemsVsLB_HE->getTProfile())->SetMarkerStyle(20);
139  (ProblemsVsLB_HO->getTProfile())->SetMarkerStyle(20);
140  (ProblemsVsLB_HO2->getTProfile())->SetMarkerStyle(20);
141  (ProblemsVsLB_HF->getTProfile())->SetMarkerStyle(20);
142  (ProblemsVsLB_HBHEHF->getTProfile())->SetMarkerStyle(20);
143 
144  RBX_loss_VS_LB=ib.book2D("RBX_loss_VS_LB",
145  "RBX loss vs LS; Lumi Section; Index of lost RBX",
146  NLumiBlocks_,0.5,NLumiBlocks_+0.5,156,0,156);
147 
148  ProblemsInLastNLB_HBHEHF_alarm=ib.book1D("ProblemsInLastNLB_HBHEHF_alarm",
149  "Total Number of Dead HBHEHF Cells in last 10 LS. Last bin contains OverFlow",
150  100,0,100);
151  ProblemsInLastNLB_HO01_alarm=ib.book1D("ProblemsInLastNLB_HO01_alarm",
152  "Total Number of Dead Cells Ring 0,1 (abs(ieta)<=10) in last 10 LS. Last bin contains OverFlow",
153  100,0,100);
154 
155 
156  ib.setCurrentFolder(subdir_+"dead_cell_parameters");
157  MonitorElement* me=ib.bookInt("Test_NeverPresent_Digis");
158  me->Fill(1);
159  me=ib.bookInt("Test_DigiMissing_Periodic_Lumi_Check");
161  me->Fill(1);
162  else
163  me->Fill(0);
164  me=ib.bookInt("Min_Events_Required_Periodic_Lumi_Check");
166  me=ib.bookInt("Test_NeverPresent_RecHits");
167  deadmon_test_rechits_>0 ? me->Fill(1) : me->Fill(0);
168  me=ib.bookFloat("HBMinimumRecHitEnergy");
170  me=ib.bookFloat("HEMinimumRecHitEnergy");
172  me=ib.bookFloat("HOMinimumRecHitEnergy");
174  me=ib.bookFloat("HFMinimumRecHitEnergy");
176  me=ib.bookInt("Test_RecHitsMissing_Periodic_Lumi_Check");
177  deadmon_test_rechits_>0 ? me->Fill(1) : me->Fill(0);
178 
179  // ProblemCells plots are in HcalDeadCellClient!
180 
181  // Set up plots for each failure mode of dead cells
182  std::stringstream units; // We'll need to set the titles individually, rather than passing units to SetupEtaPhiHists (since this also would affect the name of the histograms)
183  std::stringstream name;
184 
185  // Never-present test will always be called, by definition of dead cell
186 
187  ib.setCurrentFolder(subdir_+"dead_digi_never_present");
189  "Digi Present At Least Once","");
190  // 1D plots count number of bad cells
191  NumberOfNeverPresentDigis=ib.bookProfile("Problem_NeverPresentDigis_HCAL_vs_LS",
192  "Total Number of Never-Present Hcal Cells vs LS;Lumi Section;Dead Cells",
193  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
194 
195  NumberOfNeverPresentDigisHB=ib.bookProfile("Problem_NeverPresentDigis_HB_vs_LS",
196  "Total Number of Never-Present HB Cells vs LS;Lumi Section;Dead Cells",
197  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
198 
199  NumberOfNeverPresentDigisHE=ib.bookProfile("Problem_NeverPresentDigis_HE_vs_LS",
200  "Total Number of Never-Present HE Cells vs LS;Lumi Section;Dead Cells",
201  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
202 
203  NumberOfNeverPresentDigisHO=ib.bookProfile("Problem_NeverPresentDigis_HO_vs_LS",
204  "Total Number of Never-Present HO Cells vs LS;Lumi Section;Dead Cells",
205  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
206 
207  NumberOfNeverPresentDigisHF=ib.bookProfile("Problem_NeverPresentDigis_HF_vs_LS",
208  "Total Number of Never-Present HF Cells vs LS;Lumi Section;Dead Cells",
209  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
210  (NumberOfNeverPresentDigis->getTProfile())->SetMarkerStyle(20);
211  (NumberOfNeverPresentDigisHB->getTProfile())->SetMarkerStyle(20);
212  (NumberOfNeverPresentDigisHE->getTProfile())->SetMarkerStyle(20);
213  (NumberOfNeverPresentDigisHO->getTProfile())->SetMarkerStyle(20);
214  (NumberOfNeverPresentDigisHF->getTProfile())->SetMarkerStyle(20);
215 
217 
219  {
220  ib.setCurrentFolder(subdir_+"dead_digi_often_missing");
221  //units<<"("<<deadmon_checkNevents_<<" consec. events)";
222  name<<"Dead Cells with No Digis";
224  name.str(),
225  "");
226  name.str("");
227  name<<"HB HE HF Depth 1 Dead Cells with No Digis for at least 1 Full Luminosity Block";
228  RecentMissingDigisByDepth.depth[0]->setTitle(name.str().c_str());
229 
230  name.str("");
231  name<<"HB HE HF Depth 2 Dead Cells with No Digis for at least 1 Full Luminosity Block";
232  RecentMissingDigisByDepth.depth[1]->setTitle(name.str().c_str());
233 
234  name.str("");
235  name<<"HE Depth 3 Dead Cells with No Digis for at least 1 Full Luminosity Block";
236  RecentMissingDigisByDepth.depth[2]->setTitle(name.str().c_str());
237 
238  name.str("");
239  name<<"HO Depth 4 Dead Cells with No Digis for at least 1 Full Luminosity Block";
240  RecentMissingDigisByDepth.depth[3]->setTitle(name.str().c_str());
241  name.str("");
242 
243  // 1D plots count number of bad cells
244  name<<"Total Number of Hcal Digis Unoccupied for at least 1 Full Luminosity Block";
245  NumberOfRecentMissingDigis=ib.bookProfile("Problem_RecentMissingDigis_HCAL_vs_LS",
246  name.str(),
247  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
248  name.str("");
249  name<<"Total Number of HB Digis Unoccupied for at least 1 Full LS vs LS;Lumi Section; Dead Cells";
250  NumberOfRecentMissingDigisHB=ib.bookProfile("Problem_RecentMissingDigis_HB_vs_LS",
251  name.str(),
252  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
253  name.str("");
254  name<<"Total Number of HE Digis Unoccupied for at least 1 Full LS vs LS;Lumi Section; Dead Cells";
255  NumberOfRecentMissingDigisHE=ib.bookProfile("Problem_RecentMissingDigis_HE_vs_LS",
256  name.str(),
257  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
258  name.str("");
259  name<<"Total Number of HO Digis Unoccupied for at least 1 Full LS vs LS;Lumi Section; Dead Cells";
260  NumberOfRecentMissingDigisHO=ib.bookProfile("Problem_RecentMissingDigis_HO_vs_LS",
261  name.str(),
262  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
263  name.str("");
264  name<<"Total Number of HF Digis Unoccupied for at least 1 Full LS vs LS;Lumi Section; Dead Cells";
265  NumberOfRecentMissingDigisHF=ib.bookProfile("Problem_RecentMissingDigis_HF_vs_LS",
266  name.str(),
267  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
268  (NumberOfRecentMissingDigis->getTProfile())->SetMarkerStyle(20);
269  (NumberOfRecentMissingDigisHB->getTProfile())->SetMarkerStyle(20);
270  (NumberOfRecentMissingDigisHE->getTProfile())->SetMarkerStyle(20);
271  (NumberOfRecentMissingDigisHO->getTProfile())->SetMarkerStyle(20);
272  (NumberOfRecentMissingDigisHF->getTProfile())->SetMarkerStyle(20);
273 
274  }
275 
277  {
278  // test 1: energy never above threshold
279  ib.setCurrentFolder(subdir_+"dead_rechit_neverpresent");
280  SetupEtaPhiHists(ib,RecHitPresentByDepth,"RecHit Above Threshold At Least Once","");
281  // set more descriptive titles for threshold plots
282  units.str("");
283  units<<"Cells Above Energy Threshold At Least Once: Depth 1 -- HB >="<<HBenergyThreshold_<<" GeV, HE >= "<<HEenergyThreshold_<<", HF >="<<HFenergyThreshold_<<" GeV";
284  RecHitPresentByDepth.depth[0]->setTitle(units.str().c_str());
285  units.str("");
286  units<<"Cells Above Energy Threshold At Least Once: Depth 2 -- HB >="<<HBenergyThreshold_<<" GeV, HE >= "<<HEenergyThreshold_<<", HF >="<<HFenergyThreshold_<<" GeV";
287  RecHitPresentByDepth.depth[1]->setTitle(units.str().c_str());
288  units.str("");
289  units<<"Cells Above Energy Threshold At Least Once: Depth 3 -- HE >="<<HEenergyThreshold_<<" GeV";
290  RecHitPresentByDepth.depth[2]->setTitle(units.str().c_str());
291  units.str("");
292  units<<"Cells Above Energy Threshold At Least Once: Depth 4 -- HO >="<<HOenergyThreshold_<<" GeV";
293  RecHitPresentByDepth.depth[3]->setTitle(units.str().c_str());
294  units.str("");
295 
296  // 1D plots count number of bad cells
297  NumberOfNeverPresentRecHits=ib.bookProfile("Problem_RecHitsNeverPresent_HCAL_vs_LS",
298  "Total Number of Hcal Rechits with Low Energy;Lumi Section;Dead Cells",
299  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
300  name.str("");
301  name<<"Total Number of HB RecHits with Energy Never >= "<<HBenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
302  NumberOfNeverPresentRecHitsHB=ib.bookProfile("Problem_RecHitsNeverPresent_HB_vs_LS",
303  name.str(),
304  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
305  name.str("");
306  name<<"Total Number of HE RecHits with Energy Never >= "<<HEenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
307  NumberOfNeverPresentRecHitsHE=ib.bookProfile("Problem_RecHitsNeverPresent_HE_vs_LS",
308  name.str(),
309  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
310  name.str("");
311  name<<"Total Number of HO RecHits with Energy Never >= "<<HOenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
312  NumberOfNeverPresentRecHitsHO=ib.bookProfile("Problem_RecHitsNeverPresent_HO_vs_LS",
313  name.str(),
314  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
315  name.str("");
316  name<<"Total Number of HF RecHits with Energy Never >= "<<HFenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
317  NumberOfNeverPresentRecHitsHF=ib.bookProfile("Problem_RecHitsNeverPresent_HF_vs_LS",
318  name.str(),
319  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
320  (NumberOfNeverPresentRecHits->getTProfile())->SetMarkerStyle(20);
321  (NumberOfNeverPresentRecHitsHB->getTProfile())->SetMarkerStyle(20);
322  (NumberOfNeverPresentRecHitsHE->getTProfile())->SetMarkerStyle(20);
323  (NumberOfNeverPresentRecHitsHO->getTProfile())->SetMarkerStyle(20);
324  (NumberOfNeverPresentRecHitsHF->getTProfile())->SetMarkerStyle(20);
325 
326  ib.setCurrentFolder(subdir_+"dead_rechit_often_missing");
327  SetupEtaPhiHists(ib,RecentMissingRecHitsByDepth,"RecHits Failing Energy Threshold Test","");
328  // set more descriptive titles for threshold plots
329  units.str("");
330  units<<"RecHits with Consistent Low Energy Depth 1 -- HB <"<<HBenergyThreshold_<<" GeV, HE < "<<HEenergyThreshold_<<", HF <"<<HFenergyThreshold_<<" GeV";
331  RecentMissingRecHitsByDepth.depth[0]->setTitle(units.str().c_str());
332  units.str("");
333  units<<"RecHits with Consistent Low Energy Depth 2 -- HB <"<<HBenergyThreshold_<<" GeV, HE < "<<HEenergyThreshold_<<", HF <"<<HFenergyThreshold_<<" GeV";
334  RecentMissingRecHitsByDepth.depth[1]->setTitle(units.str().c_str());
335  units.str("");
336  units<<"RecHits with Consistent Low Energy Depth 3 -- HE <"<<HEenergyThreshold_<<" GeV";
337  RecentMissingRecHitsByDepth.depth[2]->setTitle(units.str().c_str());
338  units.str("");
339  units<<"RecHits with Consistent Low Energy Depth 4 -- HO <"<<HOenergyThreshold_<<" GeV";
340  RecentMissingRecHitsByDepth.depth[3]->setTitle(units.str().c_str());
341  units.str("");
342 
343 
344  // 1D plots count number of bad cells
345  name.str("");
346  name<<"Total Number of Hcal RecHits with Consistent Low Energy;Lumi Section;Dead Cells";
347  NumberOfRecentMissingRecHits=ib.bookProfile("Problem_BelowEnergyRecHits_HCAL_vs_LS",
348  name.str(),
349  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
350  name.str("");
351  name<<"Total Number of HB RecHits with Consistent Low Energy < "<<HBenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
352  NumberOfRecentMissingRecHitsHB=ib.bookProfile("Problem_BelowEnergyRecHits_HB_vs_LS",
353  name.str(),
354  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
355  name.str("");
356  name<<"Total Number of HE RecHits with Consistent Low Energy < "<<HEenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
357  NumberOfRecentMissingRecHitsHE=ib.bookProfile("Problem_BelowEnergyRecHits_HE_vs_LS",
358  name.str(),
359  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
360  name.str("");
361  name<<"Total Number of HO RecHits with Consistent Low Energy < "<<HOenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
362  NumberOfRecentMissingRecHitsHO=ib.bookProfile("Problem_BelowEnergyRecHits_HO_vs_LS",
363  name.str(),
364  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
365  name.str("");
366  name<<"Total Number of HF RecHits with Consistent Low Energy < "<<HFenergyThreshold_<<" GeV;Lumi Section;Dead Cells";
367  NumberOfRecentMissingRecHitsHF=ib.bookProfile("Problem_BelowEnergyRecHits_HF_vs_LS",
368  name.str(),
369  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
370  (NumberOfRecentMissingRecHits->getTProfile())->SetMarkerStyle(20);
371  (NumberOfRecentMissingRecHitsHB->getTProfile())->SetMarkerStyle(20);
372  (NumberOfRecentMissingRecHitsHE->getTProfile())->SetMarkerStyle(20);
373  (NumberOfRecentMissingRecHitsHO->getTProfile())->SetMarkerStyle(20);
374  (NumberOfRecentMissingRecHitsHF->getTProfile())->SetMarkerStyle(20);
375 
376  } // if (deadmon_test_rechits)
377 
378 
379  if (makeDiagnostics_)
380  {
381  ib.setCurrentFolder(subdir_+"DiagnosticPlots");
382  HBDeadVsEvent=ib.book1D("HBDeadVsEvent","HB Total Dead Cells Vs Event", NLumiBlocks_/10,-0.5,NLumiBlocks_-0.5);
383  HEDeadVsEvent=ib.book1D("HEDeadVsEvent","HE Total Dead Cells Vs Event", NLumiBlocks_/10,-0.5,NLumiBlocks_-0.5);
384  HODeadVsEvent=ib.book1D("HODeadVsEvent","HO Total Dead Cells Vs Event", NLumiBlocks_/10,-0.5,NLumiBlocks_-0.5);
385  HFDeadVsEvent=ib.book1D("HFDeadVsEvent","HF Total Dead Cells Vs Event", NLumiBlocks_/10,-0.5,NLumiBlocks_-0.5);
386  }
387 
388  return;
389 
390 } // void HcalDeadCellMonitor::setup(...)
391 
393 {
394  if (debug_>1) std::cout <<"HcalDeadCellMonitor::bookHistograms"<<std::endl;
396 
397  if (tevt_==0) this->setup(ib); // set up histograms if they have not been created before
398  if (mergeRuns_==false)
399  this->reset();
400 
401  doReset_ = true;
402 
403  // Get known dead cells for this run
404  KnownBadCells_.clear();
405  if (badChannelStatusMask_>0)
406  {
408  c.get<HcalChannelQualityRcd>().get("withTopo",p);
409  const HcalChannelQuality* chanquality= p.product();
410  std::vector<DetId> mydetids = chanquality->getAllChannels();
411  for (std::vector<DetId>::const_iterator i = mydetids.begin();
412  i!=mydetids.end();
413  ++i)
414  {
415  if (i->det()!=DetId::Hcal) continue; // not an hcal cell
416  HcalDetId id=HcalDetId(*i);
417  int status=(chanquality->getValues(id))->getValue();
418  if ((status & badChannelStatusMask_))
419  KnownBadCells_[id.rawId()]=status;
420  }
421  } // if (badChannelStatusMask_>0)
422  return;
423 } //void HcalDeadCellMonitor::bookHistograms(...)
424 
426 {
427  if (debug_>1) std::cout <<"HcalDeadCellMonitor::reset()"<<std::endl;
428  doReset_ = false;
429 
431  zeroCounters();
432  deadevt_=0;
433  is_RBX_loss_ = 0;
434  beamMode_ = 0 ;
435  alarmer_counter_ = 0;
437  is_stable_beam = true;
438  hbhedcsON = true; hfdcsON = true; hodcsON = true;
444 
445  for (unsigned int depth=0;depth<DigiPresentByDepth.depth.size();++depth)
446  DigiPresentByDepth.depth[depth]->Reset();
447 
448  // Mark HORing2 channels as present (fill with a 2, rather than a 1, to distinguish between this setting and actual presence)
449  if (excludeHORing2_==true && DigiPresentByDepth.depth.size()>3)
450  {
451  for (int ieta=11;ieta<=15;++ieta)
452  for (int iphi=1;iphi<=72;++iphi)
453  {
454  // Don't fill ring2 SiPMs, since they will still be active even if the rest of HO is excluded.
455  if (isSiPM(ieta,iphi,4)==false)
456  DigiPresentByDepth.depth[3]->Fill(ieta,iphi,2);
457  //std::cout <<" FILLING ("<<-1*ieta<<", "<<iphi<<") with '2'"<<std::endl;
458  DigiPresentByDepth.depth[3]->Fill(-1*ieta,iphi,2);
459  }
460  }
462 
463 
465  {
468  }
470  {
483 
484  // Mark HORing2 channels as present (fill with a 2, rather than a 1, to distinguish between this setting and actual presence)
485  if (excludeHORing2_==true && RecHitPresentByDepth.depth.size()>3)
486  {
487  for (int ieta=11;ieta<=15;++ieta)
488  for (int iphi=1;iphi<=72;++iphi)
489  {
490  RecHitPresentByDepth.depth[3]->Fill(ieta,iphi,2);
491  RecHitPresentByDepth.depth[3]->Fill(-1*ieta,iphi,2);
492  }
493  }
495  }
496 
497  Nevents->Reset();
498 } // reset function is empty for now
499 
500 /* ------------------------------------------------------------------------- */
501 
502 
504  const edm::EventSetup& c)
505 {
506  // skip old lumi sections
507  if (this->LumiInOrder(lumiSeg.luminosityBlock())==false) return;
508 
509  // Reset current LS histogram
510  if (ProblemsCurrentLB)
512 
515 
516  //increase the number of LS counting, for alarmer. Only make alarms for HBHE
517  if(hbhedcsON == true && hfdcsON == true && HBpresent_ == 1 && HEpresent_ == 1 && HFpresent_ == 1)
519  else
520  alarmer_counter_ = 0;
521 
522  if(hodcsON==true && HOpresent_ == 1)
524  else
526 
527  if (!is_stable_beam)
528  {
529  alarmer_counter_ = 0;
531  }
532 
533  // Here is where we determine whether or not to process an event
534  // Not enough events
535  // there are less than minDeadEventCount_ in this LS, but RBXloss is found
536 
538  {
542 
543  endLumiProcessed_=true;
544  is_RBX_loss_=0;
545 
546  for (unsigned int i=0;i<156;++i)
547  rbxlost[i] = 0;
548 
549  if (ProblemsCurrentLB)
550  {
551  ProblemsCurrentLB->setBinContent(0,0, levt_); // underflow bin contains number of events
559  }
560  }
561 
562  if (deadevt_<minDeadEventCount_) // perform normal tasks, since no RBX loss is detected in this lumisections
563  return;
564 
565  endLumiProcessed_=true;
566  // fillNevents_problemCells checks for never-present cells
570 
571  if (ProblemsCurrentLB)
572  {
573  ProblemsCurrentLB->setBinContent(0,0, levt_); // underflow bin contains number of events
581  }
582  zeroCounters();
583  deadevt_=0;
584  is_RBX_loss_=0;
585  beamMode_ = 0;
586  return;
587 } //endLuminosityBlock()
588 
590 {
591  // Always carry out overall occupancy test at endRun, regardless minimum number of events?
592  // Or should we require an absolute lower bound?
593  // We can always run this test; we'll use the summary client to implement a lower bound before calculating reportSummary values
594  if (endLumiProcessed_==false) fillNevents_problemCells(); // always check for never-present cells
595 
596  return;
597 }
598 
600 {
601  if (debug_>0) std::cout <<"HcalDeadCellMonitor::endJob()"<<std::endl;
602  if (enableCleanup_) cleanup(); // when do we force cleanup?
603 }
604 
606 {
608  if (!IsAllowedCalibType()) return;
609  endLumiProcessed_=false;
610 
611  if(doReset_)
612  this->reset();
613 
614  Nevents->Fill(0,1); // count all events of allowed calibration type, even if their lumi block is not in the right order
615  if (LumiInOrder(e.luminosityBlock())==false) return;
616  // try to get rechits and digis
620 
624 
626 
628  // check if detectors whether they were ON
630  e.getByToken(tok_dcs_, dcsStatus);
631 
632  if (dcsStatus.isValid() && dcsStatus->size() != 0)
633  {
634  if ((*dcsStatus)[0].ready(DcsStatus::HBHEa) &&
635  (*dcsStatus)[0].ready(DcsStatus::HBHEb) &&
636  (*dcsStatus)[0].ready(DcsStatus::HBHEc))
637  {
638  hbhedcsON = true;
639  if (debug_) std::cout << "hbhe on" << std::endl;
640  }
641  else hbhedcsON = false;
642 
643  if ((*dcsStatus)[0].ready(DcsStatus::HF))
644  {
645  hfdcsON = true;
646  if (debug_) std::cout << "hf on" << std::endl;
647  }
648  else hfdcsON = false;
649 
650  if ((*dcsStatus)[0].ready(DcsStatus::HO))
651  {
652  hodcsON = true;
653  if (debug_) std::cout << "ho on" << std::endl;
654  }
655  else hodcsON = false;
656  }
658 
659  if (!(e.getByToken(tok_hbhedigi_,hbhe_digi)))
660  {
661  edm::LogWarning("HcalDeadCellMonitor")<< digiLabel_<<" hbhe_digi not available";
662  return;
663  }
664  if (!(e.getByToken(tok_hodigi_,ho_digi)))
665  {
666  edm::LogWarning("HcalDeadCellMonitor")<< digiLabel_<<" ho_digi not available";
667  return;
668  }
669  if (!(e.getByToken(tok_hfdigi_,hf_digi)))
670  {
671  edm::LogWarning("HcalDeadCellMonitor")<< digiLabel_<<" hf_digi not available";
672  return;
673  }
674 
675  if (!(e.getByToken(tok_hbhe_,hbhe_rechit)))
676  {
677  edm::LogWarning("HcalDeadCellMonitor")<< hbheRechitLabel_<<" hbhe_rechit not available";
678  return;
679  }
680 
681  if (!(e.getByToken(tok_hf_,hf_rechit)))
682  {
683  edm::LogWarning("HcalDeadCellMonitor")<< hfRechitLabel_<<" hf_rechit not available";
684  return;
685  }
686  if (!(e.getByToken(tok_ho_,ho_rechit)))
687  {
688  edm::LogWarning("HcalDeadCellMonitor")<< hoRechitLabel_<<" ho_rechit not available";
689  return;
690  }
691 
692  if (debug_>1) std::cout <<"\t<HcalDeadCellMonitor::analyze> Processing good event! event # = "<<ievt_<<std::endl;
693  // Good event found; increment counter (via base class analyze method)
694  // This also runs the allowed calibration /lumi in order tests again; remove?
695 
696  ++deadevt_; //increment local counter
697 
698  processEvent(*hbhe_rechit, *ho_rechit, *hf_rechit, *hbhe_digi, *ho_digi, *hf_digi);
699 
700  // check for presence of an RBX data loss
701  if(levt_>10 && tevt_ % 10 == 0 ) //levt_ counts events perLS, but excludes
702  { //"wrong", calibration-type events. Compare with tevt_ instead...
703  for(int i=71; i<132; i++)
704  {
705  // These RBXs in HO are excluded, set to 1 to ignore
706  // HO0: 96-107 (all)
707  // HO1: 85-95, 109-119 (all odd)
708  // HO2: 73, 75, 79, 81, 83, 121-131 (all odd)
709  if(i >= 72 && i < 95 && i%2==0)
710  occupancy_RBX[i] = 1;
711  if(i >=108 && i <= 131 && i%2==0)
712  occupancy_RBX[i] = 1;
713 
714  if(i==117 || i==131) // HO SiPMs have much less hits, 10 events not enough.
715  occupancy_RBX[i] = 1; // Also no RBX loss for SiPMs, so ignore for now.
716  if(i==77)
717  occupancy_RBX[i] = 1;
718  }
719 
720  // RBX loss detected
721  for (unsigned int i=0;i<132;++i)
722  if(occupancy_RBX[i] == 0)
723  {
724  is_RBX_loss_ = 1;
725  rbxlost[i] = 1;
726  }
727 
728  //
729  // Modified: not to use gtfeEvmExtWord
730  // is_stable_beam = false for now!
731  // Set beamMode to NOBEAM
732  // TODO: Obtain these values from TCDS Record
733  //
734  int intensity1_ = 101;
735  int intensity2_ = 101;
736  is_stable_beam = false;
737  int beamMode = 21;
738 
739  for (unsigned int i=132;i<156;++i)
740  if(occupancy_RBX[i] == 0 && beamMode == 11)
741  if(intensity1_>100 && intensity2_>100) // only in stable beam mode (11) and with circulating beams, otherwise
742  { // this check is too sensitive in HF
743  is_RBX_loss_ = 1;
744  rbxlost[i] = 1;
745  }
746 
747  // no RBX loss, reset the counters
748  if (is_RBX_loss_ == 0)
749  for (unsigned int i=0;i<156;++i)
750  occupancy_RBX[i] = 0;
751  }
752 
753  // if RBX is lost any time during the LS, don't allow the counters to increment
754  if(is_RBX_loss_ == 1)
755  for (unsigned int i=0;i<156;++i)
756  if(rbxlost[i]==1) occupancy_RBX[i] = 0;
757 
758 } // void HcalDeadCellMonitor::analyze(...)
759 
760 /* --------------------------------------- */
761 
762 
764  const HORecHitCollection& hoHits,
765  const HFRecHitCollection& hfHits,
766  const HBHEDigiCollection& hbhedigi,
767  const HODigiCollection& hodigi,
768  const HFDigiCollection& hfdigi)
769 {
770  if (debug_>1) std::cout <<"<HcalDeadCellMonitor::processEvent> Processing event..."<<std::endl;
771 
772  // Do Digi-Based dead cell searches
773 
774  // Make sure histograms update
775  for (unsigned int i=0;i<DigiPresentByDepth.depth.size();++i)
776  DigiPresentByDepth.depth[i]->update();
777 
783 
785  {
786 
787  for (unsigned int i=0;i<RecentMissingDigisByDepth.depth.size();++i)
788  RecentMissingDigisByDepth.depth[i]->update();
789 
795  }
796 
798  j!=hbhedigi.end(); ++j)
799  {
800  const HBHEDataFrame digi = (const HBHEDataFrame)(*j);
801  processEvent_HBHEdigi(digi);
802  }
803 
805  j!=hodigi.end(); ++j)
806  {
807  const HODataFrame digi = (const HODataFrame)(*j);
808  process_Digi(digi);
809  }
811  j!=hfdigi.end(); ++j)
812  {
813  const HFDataFrame digi = (const HFDataFrame)(*j);
814  process_Digi(digi);
815  }
817 
818  // Search for "dead" cells below a certain energy
820  {
821  // Normalization Fill
822  for (unsigned int i=0;i<RecentMissingRecHitsByDepth.depth.size();++i)
824 
830 
832  j!=hbHits.end(); ++j)
833  process_RecHit(j);
834 
836  k!=hoHits.end(); ++k)
837  process_RecHit(k);
838 
840  j!=hfHits.end(); ++j)
841  process_RecHit(j);
842 
843  } // if (deadmon_test_rechits)
844 
845  if (!makeDiagnostics_) return;
846  if (tevt_>=NLumiBlocks_) return;
847  // Diagnostic plots -- add number of missing channels vs event number
848  int hbpresent=0;
849  int hepresent=0;
850  int hopresent=0;
851  int hfpresent=0;
852  int ieta=0;
853  for (int d=0;d<4;++d)
854  {
855  for (int phi=0;phi<72;++phi)
856  {
857  for (int eta=0;eta<85;++eta)
858  {
859  if (!present_digi[eta][phi][d]) continue;
860  if (d==3) ++hopresent;
861  else if (d==2) ++hepresent;
862  else if (d==1)
863  {
864  ieta=binmapd2[eta];
865  //if (abs(ieta)>29) continue;
866  if (abs(ieta)>29) ++hfpresent;
867  else if (abs(ieta)<17) ++hbpresent; //depths 15&16
868  else ++hepresent;
869  }
870  else if (d==0)
871  {
872  ieta=eta-42;
873  if (abs(ieta)>29) ++hfpresent;
874  else if (abs(ieta)<17) ++hbpresent;
875  else ++hepresent;
876  }
877  }
878  }
879  } // for (int d=0;d<4;++d)
880  HBDeadVsEvent->Fill(tevt_,2592-hbpresent);
881  HEDeadVsEvent->Fill(tevt_,2592-hepresent);
882  HODeadVsEvent->Fill(tevt_,2160-hopresent);
883  HFDeadVsEvent->Fill(tevt_,1728-hfpresent);
884  return;
885 } // void HcalDeadCellMonitor::processEvent(...)
886 
887 /************************************/
888 
889 
890 // Digi-based dead cell checks
891 
893 {
894  // Simply check whether a digi is present. If so, increment occupancy counter.
895  process_Digi(digi);
896  return;
897 } //void HcalDeadCellMonitor::processEvent_HBHEdigi(HBHEDigiCollection::const_iterator j)
898 
899 template<class DIGI>
901 {
902  // Remove the validate check when we figure out how to access bad digis in digi monitor
903  //if (!digi.validate()) return; // digi must be good to be counted
904  int ieta=digi.id().ieta();
905  int iphi=digi.id().iphi();
906  int depth=digi.id().depth();
907 
908  // Fill occupancy counter
909  ++recentoccupancy_digi[CalcEtaBin(digi.id().subdet(),ieta,depth)][iphi-1][depth-1];
910 
911  // If previously-missing digi found, change boolean status and fill histogram
912  if (present_digi[CalcEtaBin(digi.id().subdet(),ieta,depth)][iphi-1][depth-1]==false)
913  {
914  if (DigiPresentByDepth.depth[depth-1])
915  {
916  DigiPresentByDepth.depth[depth-1]->setBinContent(CalcEtaBin(digi.id().subdet(),ieta,depth)+1,iphi,1);
917  }
918  present_digi[CalcEtaBin(digi.id().subdet(),ieta,depth)][iphi-1][depth-1]=true;
919  }
920  return;
921 }
922 
923 //RecHit-based dead cell checks
924 
925 template<class RECHIT>
927 {
928  float en = rechit->energy();
929  HcalDetId id(rechit->detid().rawId());
930  int ieta = id.ieta();
931  int iphi = id.iphi();
932  int depth = id.depth();
933 
934  if (id.subdet()==HcalBarrel)
935  {
936  if (en>=HBenergyThreshold_)
937  {
938  ++recentoccupancy_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1];
939  present_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1]=true;
940  if (RecHitPresentByDepth.depth[depth-1])
941  RecHitPresentByDepth.depth[depth-1]->setBinContent(CalcEtaBin(id.subdet(),ieta,depth)+1,iphi,1);
942  }
944  // RBX index, HB RBX indices are 0-35
945  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
946 
947  occupancy_RBX[RBXindex]++;
949  }
950  else if (id.subdet()==HcalEndcap)
951  {
952  if (en>=HEenergyThreshold_)
953  {
954  ++recentoccupancy_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1];
955  present_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1]=true;
956  if (RecHitPresentByDepth.depth[depth-1])
957  RecHitPresentByDepth.depth[depth-1]->setBinContent(CalcEtaBin(id.subdet(),ieta,depth)+1,iphi,1);
958  }
960  // RBX index, HE RBX indices are 36-71
961  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
962 
963  occupancy_RBX[RBXindex]++;
965  }
966  else if (id.subdet()==HcalForward)
967  {
968  if (en>=HFenergyThreshold_)
969  {
970  ++recentoccupancy_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1];
971 
972  present_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1]=true;
973  if (RecHitPresentByDepth.depth[depth-1])
974  RecHitPresentByDepth.depth[depth-1]->setBinContent(CalcEtaBin(id.subdet(),ieta,depth)+1,iphi,1);
975  }
977  // RBX index, HF RBX indices are 132-155
978  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
979 
980  occupancy_RBX[RBXindex]++;
982  }
983  else if (id.subdet()==HcalOuter)
984  {
985  if (en>=HOenergyThreshold_)
986  {
987  ++recentoccupancy_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1];
988  present_rechit[CalcEtaBin(id.subdet(),ieta,depth)][iphi-1][depth-1]=true;
989  if (RecHitPresentByDepth.depth[depth-1])
990  RecHitPresentByDepth.depth[depth-1]->setBinContent(CalcEtaBin(id.subdet(),ieta,depth)+1,iphi,1);
991  }
993  // RBX index, HO RBX indices are 73-95 (odd), 96-107 (all), 108-119 (odd), 120-130 (EXCL), 131
994  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
995 
996  occupancy_RBX[RBXindex]++;
998  }
999 }
1000 
1002 {
1003  // Fill Histograms showing digi cells with no occupancy for the past few lumiblocks
1004  if (!deadmon_test_digis_) return; // extra protection here against calling histograms than don't exist
1005 
1006  if (debug_>0)
1007  std::cout <<"<HcalDeadCellMonitor::fillNevents_recentdigis> CHECKING FOR RECENT MISSING DIGIS evtcount = "<<deadevt_<<std::endl;
1008 
1009  int ieta=0;
1010  int iphi=0;
1011 
1012  int etabins=0;
1013  int phibins=0;
1014 
1016  if ((deadevt_ >= 10 && deadevt_<minDeadEventCount_) || (deadevt_ >= 10 && is_RBX_loss_==1)) // maybe not enough events to run the standard test
1017  // if( is_RBX_loss_ == 1 ) // but enough to detect RBX loss
1018  for (unsigned int depth=0;depth<RecentMissingDigisByDepth.depth.size();++depth)
1019  {
1020  RecentMissingDigisByDepth.depth[depth]->setBinContent(0,0,ievt_);
1021  etabins=RecentMissingDigisByDepth.depth[depth]->getNbinsX();
1022  phibins=RecentMissingDigisByDepth.depth[depth]->getNbinsY();
1023  for (int eta=0;eta<etabins;++eta)
1024  for (int phi=0;phi<phibins;++phi)
1025  {
1026  iphi=phi+1;
1027  for (int subdet=1;subdet<=4;++subdet)
1028  {
1029  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1030  if (ieta==-9999) continue;
1031  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1032  continue;
1033  // now check which dead cell tests failed; increment counter if any failed
1034  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1035 
1036  int index = logicalMap_->getHcalFrontEndId(TempID).rbxIndex();
1037  // if(subdet==HcalForward) continue;
1038 
1039  if(occupancy_RBX[index]==0)
1040  {
1042  RecentMissingDigisByDepth.depth[depth]->Fill(ieta,iphi,deadevt_);
1043  }
1044  }
1045  }
1046  }
1048 
1049  if (deadevt_ < minDeadEventCount_) return; // not enough entries to make a determination for this LS
1050 
1051  for (unsigned int depth=0;depth<RecentMissingDigisByDepth.depth.size();++depth)
1052  {
1053  RecentMissingDigisByDepth.depth[depth]->setBinContent(0,0,ievt_);
1054  etabins=RecentMissingDigisByDepth.depth[depth]->getNbinsX();
1055  phibins=RecentMissingDigisByDepth.depth[depth]->getNbinsY();
1056  for (int eta=0;eta<etabins;++eta)
1057  {
1058  for (int subdet=1;subdet<=4;++subdet)
1059  {
1060  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1061  if (ieta==-9999) continue;
1062  for (int phi=0;phi<phibins;++phi)
1063  {
1064  iphi=phi+1;
1065 
1066  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1067  continue;
1068 
1069  // Ignore subdetectors that weren't in run?
1070  /*
1071  if ((subdet==HcalBarrel && !HBpresent_) ||
1072  (subdet==HcalEndcap &&!HEpresent_) ||
1073  (subdet==HcalOuter &&!HOpresent_) ||
1074  (subdet==HcalForward &&!HFpresent_)) continue;
1075  */
1076  int zside=0;
1077  if (subdet==HcalForward) // shift HcalForward ieta
1078  ieta<0 ? zside=-1 : zside=+1;
1079 
1080  if (recentoccupancy_digi[eta][phi][depth]==0)
1081  {
1082  if (debug_>0)
1083  {
1084  std::cout <<"DEAD CELL; NO RECENT OCCUPANCY: subdet = "<<subdet<<", ieta = "<<ieta<<", iphi = "<<iphi<<" depth = "<<depth+1<<std::endl;
1085  std::cout <<"\t RAW COORDINATES: eta = "<<eta<< " phi = "<<phi<<" depth = "<<depth<<std::endl;
1086  std::cout <<"\t Present? "<<present_digi[eta][phi][depth]<<std::endl;
1087  }
1088 
1089  // Don't fill HORing2 if boolean enabled
1090  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1091  continue;
1092 
1093  // no digi was found for the N events; Fill cell as bad for all N events (N = checkN);
1095  }
1096  } // for (int subdet=1;subdet<=4;++subdet)
1097  } // for (int phi=0;...)
1098  } // for (int eta=0;...)
1099  } //for (int depth=1;...)
1101 
1102  return;
1103 
1104 } // void HcalDeadCellMonitor::fillNevents_recentdigis()
1105 
1106 
1107 
1108 /* ----------------------------------- */
1109 
1111 {
1112  // Fill Histograms showing unoccupied rechits, or rec hits with low energy
1113 
1114  // This test is a bit pointless, unless the energy threshold is greater than the ZS threshold.
1115  // If we require that cells are always < thresh to be flagged by this test, and if
1116  // thresh < ZS, then we will never catch any cells, since they'll show up as dead in the
1117  // neverpresent/occupancy test plots first.
1118  // Only exception is if something strange is going on between ZS ADC value an RecHit energy?
1119 
1120  if (!deadmon_test_rechits_) return;
1122 
1123  if (debug_>0)
1124  std::cout <<"<HcalDeadCellMonitor::fillNevents_energy> BELOW-ENERGY-THRESHOLD PLOTS"<<std::endl;
1125 
1126  int ieta=0;
1127  int iphi=0;
1128 
1129  int etabins=0;
1130  int phibins=0;
1131 
1133  if ((deadevt_ >= 10 && deadevt_<minDeadEventCount_) || (deadevt_ >= 10 && is_RBX_loss_==1)) // maybe not enough events to run the standard test
1134  // if( is_RBX_loss_ == 1 ) // but enough to detect RBX loss
1135  for (unsigned int depth=0;depth<RecentMissingRecHitsByDepth.depth.size();++depth)
1136  {
1137  RecentMissingRecHitsByDepth.depth[depth]->setBinContent(0,0,ievt_);
1138  etabins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsX();
1139  phibins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsY();
1140  for (int eta=0;eta<etabins;++eta)
1141  for (int phi=0;phi<phibins;++phi)
1142  {
1143  iphi=phi+1;
1144  for (int subdet=1;subdet<=4;++subdet)
1145  {
1146  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1147  if (ieta==-9999) continue;
1148  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1149  continue;
1150  // now check which dead cell tests failed; increment counter if any failed
1151  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1152 
1153  int index = logicalMap_->getHcalFrontEndId(TempID).rbxIndex();
1154  // if(subdet==HcalForward) continue;
1155 
1156  if(occupancy_RBX[index]==0)
1157  {
1159  RecentMissingRecHitsByDepth.depth[depth]->Fill(ieta,iphi,deadevt_);
1160  }
1161  }
1162  }
1163  }
1165 
1166  if (deadevt_ < minDeadEventCount_) return; // not enough entries to make a determination for this LS
1167 
1168  for (unsigned int depth=0;depth<RecentMissingRecHitsByDepth.depth.size();++depth)
1169  {
1170  RecentMissingRecHitsByDepth.depth[depth]->setBinContent(0,0,ievt_);
1171  etabins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsX();
1172  phibins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsY();
1173  for (int eta=0;eta<etabins;++eta)
1174  {
1175  for (int subdet=1;subdet<=4;++subdet)
1176  {
1177  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1178  if (ieta==-9999) continue;
1179  for (int phi=0;phi<phibins;++phi)
1180  {
1181  iphi=phi+1;
1182  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1183  continue;
1184 
1185  if (recentoccupancy_rechit[eta][phi][depth]>0) continue; // cell exceeded energy at least once, so it's not dead
1186 
1187  // Ignore subdetectors that weren't in run?
1188  /*
1189  if ((subdet==HcalBarrel && !HBpresent_) ||
1190  (subdet==HcalEndcap &&!HEpresent_) ||
1191  (subdet==HcalOuter &&!HOpresent_) ||
1192  (subdet==HcalForward &&!HFpresent_)) continue;
1193  */
1194 
1195  int zside=0;
1196  if (subdet==HcalForward) // shift HcalForward ieta
1197  {
1198  ieta<0 ? zside=-1 : zside=+1;
1199  }
1200 
1201  if (debug_>2)
1202  std::cout <<"DEAD CELL; BELOW ENERGY THRESHOLD; subdet = "<<subdet<<" ieta = "<<ieta<<", phi = "<<iphi<<" depth = "<<depth+1<<std::endl;
1203  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1204  continue;
1205 
1207  } // loop on phi bins
1208  } // for (unsigned int depth=1;depth<=4;++depth)
1209  } // // loop on subdetectors
1210  } // for (int eta=0;...)
1211 
1213 
1214  return;
1215 } // void HcalDeadCellMonitor::fillNevents_recentrechits()
1216 
1217 
1219 {
1220  //fillNevents_problemCells now only performs checks of never-present cells
1221 
1222  if (debug_>0)
1223  std::cout <<"<HcalDeadCellMonitor::fillNevents_problemCells> FILLING PROBLEM CELL PLOTS"<<std::endl;
1224 
1225  int ieta=0;
1226  int iphi=0;
1227 
1228  // Count problem cells in each subdetector
1229 
1230  NumBadHB=0;
1231  NumBadHE=0;
1232  NumBadHO=0;
1233  NumBadHF=0;
1234  NumBadHFLUMI=0;
1235  NumBadHO01=0;
1236  NumBadHO2=0;
1237  NumBadHO12=0;
1238  NumBadHO1P02=0;
1239 
1240  int knownBadHB=0;
1241  int knownBadHE=0;
1242  int knownBadHF=0;
1243  int knownBadHO=0;
1244  int knownBadHFLUMI=0;
1245  int knownBadHO01=0;
1246  int knownBadHO2=0;
1247  int knownBadHO12=0;
1248 
1249 
1250  unsigned int neverpresentHB=0;
1251  unsigned int neverpresentHE=0;
1252  unsigned int neverpresentHO=0;
1253  unsigned int neverpresentHF=0;
1254 
1255  unsigned int unoccupiedHB=0;
1256  unsigned int unoccupiedHE=0;
1257  unsigned int unoccupiedHO=0;
1258  unsigned int unoccupiedHF=0;
1259 
1260  unsigned int belowenergyHB=0;
1261  unsigned int belowenergyHE=0;
1262  unsigned int belowenergyHO=0;
1263  unsigned int belowenergyHF=0;
1264 
1265  unsigned int energyneverpresentHB=0;
1266  unsigned int energyneverpresentHE=0;
1267  unsigned int energyneverpresentHO=0;
1268  unsigned int energyneverpresentHF=0;
1269 
1271  Nevents->Fill(1,deadevt_);
1272 
1273  int etabins=0;
1274  int phibins=0;
1275 
1276  // Store values for number of bad channels in each lumi section, for plots of ProblemsVsLS.
1277  // This is different than the NumBadHB, etc. values, which must included even known bad channels
1278  // in order to calculate reportSummaryByLS values correctly.
1279 
1281  //Check for RBX data loss
1282  unsigned int RBX_loss_HB=0;
1283  unsigned int RBX_loss_HE=0;
1284  unsigned int RBX_loss_HO01=0;
1285  unsigned int RBX_loss_HO2=0;
1286  unsigned int RBX_loss_HF=0;
1287 
1288  unsigned int counter_HB = 0;
1289  unsigned int counter_HE = 0;
1290  unsigned int counter_HO01 = 0;
1291  unsigned int counter_HO2 = 0;
1292  unsigned int counter_HF = 0;
1293 
1294  for(int i=0; i<156; i++)
1295  {
1296  if(occupancy_RBX[i]==0 && is_RBX_loss_ == 1)
1297  {
1298  if(i<=35) //HB
1299  { counter_HB ++ ; RBX_loss_HB = 72*(counter_HB); }
1300  if(i>=36 && i<=71) //HE
1301  { counter_HE ++ ; RBX_loss_HE = 72*(counter_HE); }
1302  if(i>=85 && i<=119) // HO Rings 0, 1
1303  { counter_HO01 ++ ; RBX_loss_HO01 = 72*(counter_HO01); }
1304  if(i>=121 || i<=83) // HO Ring 2
1305  { counter_HO2 ++ ; RBX_loss_HO2 = 72*(counter_HO2); }
1306  if(i>=132 && i<=155) //HF
1307  { counter_HF ++ ; RBX_loss_HF = 72*(counter_HF); }
1308 
1309  if(excludeHO1P02_==true && i==109) NumBadHO1P02 = 72; // exclude HO1P02
1310  }
1311  if(occupancy_RBX[i]>0)
1313  if(occupancy_RBX[i]==0 && is_RBX_loss_ == 1)
1314  RBX_loss_VS_LB->Fill(currentLS, i, 1);
1315  }
1316 
1317  if (deadevt_ >= 10 && deadevt_<minDeadEventCount_) // maybe not enough events to run the standard test
1318  if( is_RBX_loss_ == 1 ) // but enough to detect RBX loss
1319  {
1320  NumBadHB+=RBX_loss_HB;
1321  NumBadHE+=RBX_loss_HE;
1322  NumBadHO+=RBX_loss_HO01+RBX_loss_HO2;
1323  NumBadHO01+=RBX_loss_HO01;
1324  NumBadHO2+=RBX_loss_HO2;
1325  NumBadHF+=RBX_loss_HF;
1326 
1327  belowenergyHB+=RBX_loss_HB;
1328  belowenergyHE+=RBX_loss_HE;
1329  belowenergyHO+=RBX_loss_HO01+RBX_loss_HO2;
1330  belowenergyHF+=RBX_loss_HF;
1331 
1332  unoccupiedHB+=RBX_loss_HB;
1333  unoccupiedHE+=RBX_loss_HE;
1334  unoccupiedHO+=RBX_loss_HO01+RBX_loss_HO2;
1335  unoccupiedHF+=RBX_loss_HF;
1336  }
1338 
1339  for (unsigned int depth=0;depth<DigiPresentByDepth.depth.size();++depth)
1340  {
1341  DigiPresentByDepth.depth[depth]->setBinContent(0,0,ievt_);
1342  etabins=DigiPresentByDepth.depth[depth]->getNbinsX();
1343  phibins=DigiPresentByDepth.depth[depth]->getNbinsY();
1344  for (int eta=0;eta<etabins;++eta)
1345  {
1346  for (int phi=0;phi<phibins;++phi)
1347  {
1348  iphi=phi+1;
1349  for (int subdet=1;subdet<=4;++subdet)
1350  {
1351  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1352  if (ieta==-9999) continue;
1353  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1354  continue;
1355  // Ignore subdetectors that weren't in run?
1356  /*
1357  if ((subdet==HcalBarrel && !HBpresent_) ||
1358  (subdet==HcalEndcap &&!HEpresent_) ||
1359  (subdet==HcalOuter &&!HOpresent_) ||
1360  (subdet==HcalForward &&!HFpresent_)) continue;
1361  */
1362 
1363  /*
1364  if ((!checkHB_ && subdet==HcalBarrel) ||
1365  (!checkHE_ && subdet==HcalEndcap) ||
1366  (!checkHO_ && subdet==HcalOuter) ||
1367  (!checkHF_ && subdet==HcalForward)) continue;
1368  */
1369 
1370  // now check which dead cell tests failed; increment counter if any failed
1371  if ((present_digi[eta][phi][depth]==0) ||
1374  )
1375  {
1376  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1377  if (subdet==HcalBarrel)
1378  {
1379  ++NumBadHB;
1380  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1381  ++knownBadHB;
1382  }
1383  else if (subdet==HcalEndcap)
1384  {
1385  ++NumBadHE;
1386  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1387  ++knownBadHE;
1388  }
1389 
1390  else if (subdet==HcalOuter)
1391  {
1392  ++NumBadHO;
1393  if (abs(ieta)<=10) ++NumBadHO01;
1394  else ++NumBadHO2;
1395  // Don't include HORing2 if boolean set; subtract away those counters
1396  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1397  {
1398  --NumBadHO;
1399  --NumBadHO2;
1400  --NumBadHO12;
1401  }
1402  // Don't include HO1P02 if boolean set, RBX does not repsond well to resets,; subtract away those counters
1403  if (excludeHO1P02_==true && ( (ieta>4 && ieta<10) && (iphi<=10 || iphi>70) ) )
1404  ++NumBadHO1P02;
1405 
1406  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1407  {
1408  ++knownBadHO;
1409  if (abs(ieta)<=10) ++knownBadHO01;
1410  else ++knownBadHO2;
1411  // Don't include HORing2 if boolean set; subtract away those counters
1412  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1413  {
1414  --knownBadHO;
1415  --knownBadHO12;
1416  }
1417  }
1418  }
1419  else if (subdet==HcalForward)
1420  {
1421  ++NumBadHF;
1422  if (depth==1 && (abs(ieta)==33 || abs(ieta)==34))
1423  ++NumBadHFLUMI;
1424  else if (depth==2 && (abs(ieta)==35 || abs(ieta)==36))
1425  ++NumBadHFLUMI;
1426  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1427  {
1428  ++knownBadHF;
1429  if (depth==1 && (abs(ieta)==33 || abs(ieta)==34))
1430  ++knownBadHFLUMI;
1431  else if (depth==2 && (abs(ieta)==35 || abs(ieta)==36))
1432  ++knownBadHFLUMI;
1433  }
1434  }
1435  }
1436  if (present_digi[eta][phi][depth]==0 )
1437  {
1438  if (subdet==HcalBarrel) ++neverpresentHB;
1439  else if (subdet==HcalEndcap) ++neverpresentHE;
1440  else if (subdet==HcalOuter)
1441  {
1442  ++neverpresentHO;
1443  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1444  --neverpresentHO;
1445  }
1446  else if (subdet==HcalForward) ++neverpresentHF;
1447  }
1448  // Count recent unoccupied digis if the total events in this lumi section is > minEvents_
1450  {
1451  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1452  if (subdet==HcalBarrel) ++unoccupiedHB;
1453  else if (subdet==HcalEndcap) ++unoccupiedHE;
1454  else if (subdet==HcalOuter)
1455  {
1456  ++unoccupiedHO;
1457  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1458  --unoccupiedHO;
1459  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end() && abs(ieta)<=10)
1460  --unoccupiedHO;
1461  }
1462  else if (subdet==HcalForward) ++unoccupiedHF;
1463  }
1464  // Look at rechit checks
1466  {
1467  if (present_rechit[eta][phi][depth]==0)
1468  {
1469  if (subdet==HcalBarrel) ++energyneverpresentHB;
1470  else if (subdet==HcalEndcap) ++energyneverpresentHE;
1471  else if (subdet==HcalOuter)
1472  {
1473  ++energyneverpresentHO;
1474  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1475  --energyneverpresentHO;
1476  }
1477  else if (subdet==HcalForward) ++energyneverpresentHF;
1478  }
1480  {
1481  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1482  if (subdet==HcalBarrel) ++belowenergyHB;
1483  else if (subdet==HcalEndcap) ++belowenergyHE;
1484  else if (subdet==HcalOuter)
1485  {
1486  ++belowenergyHO;
1487  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1488  --belowenergyHO;
1489  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end() && abs(ieta)<=10)
1490  --belowenergyHO;
1491  }
1492  else if (subdet==HcalForward) ++belowenergyHF;
1493  }
1494  }
1495  } // subdet loop
1496  } // phi loop
1497  } //eta loop
1498  } // depth loop
1499 
1500  // Fill with number of problem cells found on this pass
1501  NumberOfNeverPresentDigisHB->Fill(currentLS,neverpresentHB);
1502  NumberOfNeverPresentDigisHE->Fill(currentLS,neverpresentHE);
1503  NumberOfNeverPresentDigisHO->Fill(currentLS,neverpresentHO);
1504  NumberOfNeverPresentDigisHF->Fill(currentLS,neverpresentHF);
1505  NumberOfNeverPresentDigis->Fill(currentLS,neverpresentHB+neverpresentHE+neverpresentHO+neverpresentHF);
1506 
1508  {
1509  if( NumBadHB<RBX_loss_HB )
1510  NumBadHB+=RBX_loss_HB;
1511  if( NumBadHE<RBX_loss_HE )
1512  NumBadHE+=RBX_loss_HE;
1513  if( NumBadHO01<RBX_loss_HO01 )
1514  NumBadHO01+=RBX_loss_HO01;
1515  if( NumBadHO2<RBX_loss_HO2 )
1516  NumBadHO2+=RBX_loss_HO2;
1517  if( NumBadHF<RBX_loss_HF )
1518  NumBadHF+=RBX_loss_HF;
1519 
1520  if( belowenergyHB<RBX_loss_HB )
1521  belowenergyHB+=RBX_loss_HB;
1522  if( belowenergyHE<RBX_loss_HE )
1523  belowenergyHE+=RBX_loss_HE;
1524  if( belowenergyHO<RBX_loss_HO01+RBX_loss_HO2)
1525  belowenergyHO+=RBX_loss_HO01+RBX_loss_HO2;
1526  if( belowenergyHF<RBX_loss_HF )
1527  belowenergyHF+=RBX_loss_HF;
1528 
1529  if( unoccupiedHB<RBX_loss_HB )
1530  unoccupiedHB+=RBX_loss_HB;
1531  if( unoccupiedHE<RBX_loss_HE )
1532  unoccupiedHE+=RBX_loss_HE;
1533  if( unoccupiedHO<RBX_loss_HO01+RBX_loss_HO2 )
1534  unoccupiedHO+=RBX_loss_HO01+RBX_loss_HO2;
1535  if( unoccupiedHF<RBX_loss_HF )
1536  unoccupiedHF+=RBX_loss_HF;
1537 
1538  // is_RBX_loss_ = 0;
1539  }
1540 
1541  ProblemsVsLB_HB->Fill(currentLS,NumBadHB-knownBadHB+0.0001); // add a small offset, so that the histograms reset when no errors follow
1542  ProblemsVsLB_HE->Fill(currentLS,NumBadHE-knownBadHE+0.0001); // problematic LSs
1543  ProblemsVsLB_HO->Fill(currentLS,NumBadHO01-knownBadHO01+0.0001);
1544  ProblemsVsLB_HO2->Fill(currentLS,NumBadHO2-knownBadHO2+0.0001);
1545  ProblemsVsLB_HF->Fill(currentLS,NumBadHF-knownBadHF+0.0001);
1546  ProblemsVsLB_HBHEHF->Fill(currentLS,NumBadHB+NumBadHE+NumBadHF-knownBadHB-knownBadHE-knownBadHF+0.0001);
1547  ProblemsVsLB->Fill(currentLS,NumBadHB+NumBadHE+NumBadHO01+NumBadHO2+NumBadHF-knownBadHB-knownBadHE-knownBadHO01-knownBadHO2-knownBadHF+0.0001);
1548 
1549  if(excludeHO1P02_==true)
1551 
1552  if( NumBadHB+NumBadHE+NumBadHF-knownBadHB-knownBadHE-knownBadHF < 30 )
1553  alarmer_counter_ = 0;
1554  if( NumBadHO01-knownBadHO01 < 30 )
1556 
1557  if( alarmer_counter_ >= 10 )
1558  ProblemsInLastNLB_HBHEHF_alarm->Fill( std::min(int(NumBadHB+NumBadHE+NumBadHF-knownBadHB-knownBadHE-knownBadHF), 99) );
1559  if( alarmer_counterHO01_ >= 10 )
1560  ProblemsInLastNLB_HO01_alarm->Fill( std::min(int(NumBadHO01-knownBadHO01), 99) );
1561 
1562  // if (deadevt_<minDeadEventCount_)
1563  // return;
1564 
1565  if (deadmon_test_digis_)
1566  {
1571  NumberOfRecentMissingDigis->Fill(currentLS,unoccupiedHB+unoccupiedHE+unoccupiedHO+unoccupiedHF);
1572  }
1573 
1575  {
1576  NumberOfNeverPresentRecHitsHB->Fill(currentLS,energyneverpresentHB);
1577  NumberOfNeverPresentRecHitsHE->Fill(currentLS,energyneverpresentHE);
1578  NumberOfNeverPresentRecHitsHO->Fill(currentLS,energyneverpresentHO);
1579  NumberOfNeverPresentRecHitsHF->Fill(currentLS,energyneverpresentHF);
1580  NumberOfNeverPresentRecHits->Fill(currentLS,energyneverpresentHB+energyneverpresentHE+energyneverpresentHO+energyneverpresentHF);
1581 
1586  NumberOfRecentMissingRecHits->Fill(currentLS,belowenergyHB+belowenergyHE+belowenergyHO+belowenergyHF);
1587  }
1588 
1589  return;
1590 } // void HcalDeadCellMonitor::fillNevents_problemCells(void)
1591 
1592 
1593 void HcalDeadCellMonitor::zeroCounters(bool resetpresent)
1594 {
1595 
1596  // zero all counters
1597 
1598  // 2D histogram counters
1599  for (unsigned int i=0;i<85;++i)
1600  {
1601  for (unsigned int j=0;j<72;++j)
1602  {
1603  for (unsigned int k=0;k<4;++k)
1604  {
1605  if (resetpresent) present_digi[i][j][k]=false; // keeps track of whether digi was ever present
1606  if (resetpresent) present_rechit[i][j][k]=false;
1607  recentoccupancy_digi[i][j][k]=0; // counts occupancy in last (checkNevents) events
1608  recentoccupancy_rechit[i][j][k]=0; // counts instances of cell above threshold energy in last (checkNevents)
1609  }
1610  }
1611  }
1612 
1613  for (unsigned int i=0;i<156;++i)
1614  {
1615  occupancy_RBX[i] = 0;
1616  rbxlost[i] = 0;
1617  }
1618 
1619  return;
1620 } // void HcalDeadCellMonitor::zeroCounters(bool resetpresent)
1621 
edm::InputTag hfRechitLabel_
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
MonitorElement * NumberOfNeverPresentRecHitsHO
bool LumiInOrder(int lumisec)
MonitorElement * NumberOfRecentMissingRecHitsHF
MonitorElement * NumberOfNeverPresentRecHits
void setBinContent(int binx, double content)
set content of bin (1-D)
MonitorElement * ProblemsCurrentLB
MonitorElement * NumberOfNeverPresentDigisHB
int ib
Definition: cuy.py:660
const int binmapd2[]
void analyze(edm::Event const &e, edm::EventSetup const &s)
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
MonitorElement * HEDeadVsEvent
MonitorElement * NumberOfRecentMissingRecHits
void zeroCounters(bool resetpresent=false)
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:449
bool present_digi[85][72][4]
edm::InputTag hbheRechitLabel_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
std::map< unsigned int, int > KnownBadCells_
MonitorElement * NumberOfNeverPresentDigisHE
std::vector< int > AllowedCalibTypes_
void endRun(const edm::Run &run, const edm::EventSetup &c)
void Reset(void)
virtual void cleanup(void)
virtual void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &)
MonitorElement * bookInt(Args &&...args)
Definition: DQMStore.h:103
std::vector< HBHEDataFrame >::const_iterator const_iterator
HcalDeadCellMonitor(const edm::ParameterSet &ps)
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:63
MonitorElement * NumberOfRecentMissingDigisHB
const Item * getValues(DetId fId, bool throwOnFail=true) const
int zside(DetId const &)
void update(void)
Mark the object updated.
void process_RecHit(T &rechit)
T eta() const
MonitorElement * ProblemsInLastNLB_HO01_alarm
MonitorElement * NumberOfRecentMissingDigisHE
bool present_rechit[85][72][4]
edm::EDGetTokenT< HORecHitCollection > tok_ho_
void Fill(long long x)
LuminosityBlockNumber_t luminosityBlock() const
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
tuple d
Definition: ztail.py:151
void SetupEtaPhiHists(DQMStore::IBooker &ib, EtaPhiHists &hh, std::string Name, std::string Units)
edm::EDGetTokenT< DcsStatusCollection > tok_dcs_
bool isSiPM(int ieta, int iphi, int depth)
EtaPhiHists RecHitPresentByDepth
MonitorElement * RBX_loss_VS_LB
std::vector< MonitorElement * > depth
int CalcIeta(int subdet, int eta, int depth)
MonitorElement * ProblemsVsLB
MonitorElement * NumberOfNeverPresentDigisHF
MonitorElement * ProblemsVsLB_HBHEHF
edm::InputTag hoRechitLabel_
std::vector< DetId > getAllChannels() const
unsigned int occupancy_RBX[156]
HcalLogicalMap * logicalMap_
MonitorElement * NumberOfNeverPresentDigisHO
int ieta() const
get the cell ieta
Definition: HcalDetId.h:36
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
MonitorElement * NumberOfNeverPresentRecHitsHB
HcalSubdetector
Definition: HcalAssistant.h:31
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int j
Definition: DBlmapReader.cc:9
MonitorElement * Nevents
T min(T a, T b)
Definition: MathUtil.h:58
unsigned int recentoccupancy_rechit[85][72][4]
MonitorElement * NumberOfRecentMissingRecHitsHE
MonitorElement * ProblemsVsLB_HF
MonitorElement * NumberOfRecentMissingDigisHO
bool isValid() const
Definition: HandleBase.h:75
MonitorElement * NumberOfNeverPresentRecHitsHF
edm::EDGetTokenT< HODigiCollection > tok_hodigi_
void bookHistograms(DQMStore::IBooker &ib, const edm::Run &run, const edm::EventSetup &c)
MonitorElement * ProblemsVsLB_HB
const_iterator end() const
void setup(DQMStore::IBooker &)
const HcalFrontEndId getHcalFrontEndId(const DetId &)
edm::EDGetTokenT< HFRecHitCollection > tok_hf_
unsigned int recentoccupancy_digi[85][72][4]
void processEvent(const HBHERecHitCollection &hbHits, const HORecHitCollection &hoHits, const HFRecHitCollection &hfHits, const HBHEDigiCollection &hbhedigi, const HODigiCollection &hodigi, const HFDigiCollection &hfdigi)
EtaPhiHists RecentMissingDigisByDepth
edm::EDGetTokenT< HFDigiCollection > tok_hfdigi_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
edm::EDGetTokenT< HBHEDigiCollection > tok_hbhedigi_
MonitorElement * NumberOfRecentMissingRecHitsHO
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
EtaPhiHists DigiPresentByDepth
int rbxIndex() const
virtual void reset(void)
void FillUnphysicalHEHFBins(std::vector< TH2F > &hh)
EtaPhiHists RecentMissingRecHitsByDepth
int CalcEtaBin(int subdet, int ieta, int depth)
MonitorElement * HBDeadVsEvent
MonitorElement * NumberOfNeverPresentRecHitsHE
TString units(TString variable, Char_t axis)
MonitorElement * ProblemsVsLB_HE
TProfile * getTProfile(void) const
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
MonitorElement * NumberOfNeverPresentDigis
MonitorElement * NumberOfRecentMissingDigis
const JetExtendedData & getValue(const Container &, const reco::JetBaseRef &)
get value for the association. Throw exception if no association found
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
MonitorElement * NumberOfRecentMissingDigisHF
tuple cout
Definition: gather_cfg.py:121
void process_Digi(T &digi)
void processEvent_HBHEdigi(HBHEDataFrame digi)
MonitorElement * bookFloat(Args &&...args)
Definition: DQMStore.h:109
tuple status
Definition: ntuplemaker.py:245
MonitorElement * ProblemsInLastNLB_HBHEHF_alarm
edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > tok_gtEvm_
MonitorElement * HFDeadVsEvent
void Reset(void)
reset ME (ie. contents, errors, etc)
virtual void setup(DQMStore::IBooker &)
MonitorElement * ProblemsVsLB_HO2
MonitorElement * HODeadVsEvent
const_iterator begin() const
Definition: Run.h:41
bool validDetId(HcalSubdetector sd, int ies, int ip, int dp)
MonitorElement * NumberOfRecentMissingRecHitsHB
MonitorElement * ProblemsVsLB_HO
Definition: DDAxes.h:10