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  auto eta_index = CalcEtaBin(digi.id().subdet(), ieta, depth);
910  if (eta_index < 0) {
911  // invalid index, return
912  if (debug_ > 0)
913  std::cout << "<HcalDeadCellMonitor::process_Digi> Invalid bin returned, eta_index = " << eta_index << std::endl;
914 
915  return;
916  }
917 
918  ++recentoccupancy_digi[eta_index][iphi-1][depth-1];
919 
920  // If previously-missing digi found, change boolean status and fill histogram
921  if (present_digi[eta_index][iphi-1][depth-1]==false)
922  {
923  if (DigiPresentByDepth.depth[depth-1])
924  {
925  DigiPresentByDepth.depth[depth-1]->setBinContent(eta_index+1,iphi,1);
926  }
927  present_digi[eta_index][iphi-1][depth-1]=true;
928  }
929  return;
930 }
931 
932 //RecHit-based dead cell checks
933 
934 template<class RECHIT>
936 {
937  float en = rechit->energy();
938  HcalDetId id(rechit->detid().rawId());
939  int ieta = id.ieta();
940  int iphi = id.iphi();
941  int depth = id.depth();
942 
943  int eta_index = CalcEtaBin(id.subdet(),ieta,depth);
944  if (eta_index < 0) {
945  // invalid index, return
946  if (debug_ > 0)
947  std::cout << "<HcalDeadCellMonitor::process_Digi> Invalid bin returned, eta_index = " << eta_index << std::endl;
948 
949  return;
950  }
951 
952  if (id.subdet()==HcalBarrel)
953  {
954  if (en>=HBenergyThreshold_)
955  {
956  ++recentoccupancy_rechit[eta_index][iphi-1][depth-1];
957  present_rechit[eta_index][iphi-1][depth-1]=true;
958  if (RecHitPresentByDepth.depth[depth-1])
959  RecHitPresentByDepth.depth[depth-1]->setBinContent(eta_index+1,iphi,1);
960  }
962  // RBX index, HB RBX indices are 0-35
963  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
964 
965  occupancy_RBX[RBXindex]++;
967  }
968  else if (id.subdet()==HcalEndcap)
969  {
970  if (en>=HEenergyThreshold_)
971  {
972  ++recentoccupancy_rechit[eta_index][iphi-1][depth-1];
973  present_rechit[eta_index][iphi-1][depth-1]=true;
974  if (RecHitPresentByDepth.depth[depth-1])
975  RecHitPresentByDepth.depth[depth-1]->setBinContent(eta_index+1,iphi,1);
976  }
978  // RBX index, HE RBX indices are 36-71
979  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
980 
981  occupancy_RBX[RBXindex]++;
983  }
984  else if (id.subdet()==HcalForward)
985  {
986  if (en>=HFenergyThreshold_)
987  {
988  ++recentoccupancy_rechit[eta_index][iphi-1][depth-1];
989 
990  present_rechit[eta_index][iphi-1][depth-1]=true;
991  if (RecHitPresentByDepth.depth[depth-1])
992  RecHitPresentByDepth.depth[depth-1]->setBinContent(eta_index+1,iphi,1);
993  }
995  // RBX index, HF RBX indices are 132-155
996  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
997 
998  occupancy_RBX[RBXindex]++;
1000  }
1001  else if (id.subdet()==HcalOuter)
1002  {
1003  if (en>=HOenergyThreshold_)
1004  {
1005  ++recentoccupancy_rechit[eta_index][iphi-1][depth-1];
1006  present_rechit[eta_index][iphi-1][depth-1]=true;
1007  if (RecHitPresentByDepth.depth[depth-1])
1008  RecHitPresentByDepth.depth[depth-1]->setBinContent(eta_index+1,iphi,1);
1009  }
1011  // RBX index, HO RBX indices are 73-95 (odd), 96-107 (all), 108-119 (odd), 120-130 (EXCL), 131
1012  int RBXindex = logicalMap_->getHcalFrontEndId(rechit->detid()).rbxIndex();
1013 
1014  occupancy_RBX[RBXindex]++;
1016  }
1017 }
1018 
1020 {
1021  // Fill Histograms showing digi cells with no occupancy for the past few lumiblocks
1022  if (!deadmon_test_digis_) return; // extra protection here against calling histograms than don't exist
1023 
1024  if (debug_>0)
1025  std::cout <<"<HcalDeadCellMonitor::fillNevents_recentdigis> CHECKING FOR RECENT MISSING DIGIS evtcount = "<<deadevt_<<std::endl;
1026 
1027  int ieta=0;
1028  int iphi=0;
1029 
1030  int etabins=0;
1031  int phibins=0;
1032 
1034  if ((deadevt_ >= 10 && deadevt_<minDeadEventCount_) || (deadevt_ >= 10 && is_RBX_loss_==1)) // maybe not enough events to run the standard test
1035  // if( is_RBX_loss_ == 1 ) // but enough to detect RBX loss
1036  for (unsigned int depth=0;depth<RecentMissingDigisByDepth.depth.size();++depth)
1037  {
1038  RecentMissingDigisByDepth.depth[depth]->setBinContent(0,0,ievt_);
1039  etabins=RecentMissingDigisByDepth.depth[depth]->getNbinsX();
1040  phibins=RecentMissingDigisByDepth.depth[depth]->getNbinsY();
1041  for (int eta=0;eta<etabins;++eta)
1042  for (int phi=0;phi<phibins;++phi)
1043  {
1044  iphi=phi+1;
1045  for (int subdet=1;subdet<=4;++subdet)
1046  {
1047  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1048  if (ieta==-9999) continue;
1049  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1050  continue;
1051  // now check which dead cell tests failed; increment counter if any failed
1052  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1053 
1054  int index = logicalMap_->getHcalFrontEndId(TempID).rbxIndex();
1055  // if(subdet==HcalForward) continue;
1056 
1057  if(occupancy_RBX[index]==0)
1058  {
1060  RecentMissingDigisByDepth.depth[depth]->Fill(ieta,iphi,deadevt_);
1061  }
1062  }
1063  }
1064  }
1066 
1067  if (deadevt_ < minDeadEventCount_) return; // not enough entries to make a determination for this LS
1068 
1069  for (unsigned int depth=0;depth<RecentMissingDigisByDepth.depth.size();++depth)
1070  {
1071  RecentMissingDigisByDepth.depth[depth]->setBinContent(0,0,ievt_);
1072  etabins=RecentMissingDigisByDepth.depth[depth]->getNbinsX();
1073  phibins=RecentMissingDigisByDepth.depth[depth]->getNbinsY();
1074  for (int eta=0;eta<etabins;++eta)
1075  {
1076  for (int subdet=1;subdet<=4;++subdet)
1077  {
1078  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1079  if (ieta==-9999) continue;
1080  for (int phi=0;phi<phibins;++phi)
1081  {
1082  iphi=phi+1;
1083 
1084  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1085  continue;
1086 
1087  // Ignore subdetectors that weren't in run?
1088  /*
1089  if ((subdet==HcalBarrel && !HBpresent_) ||
1090  (subdet==HcalEndcap &&!HEpresent_) ||
1091  (subdet==HcalOuter &&!HOpresent_) ||
1092  (subdet==HcalForward &&!HFpresent_)) continue;
1093  */
1094  int zside=0;
1095  if (subdet==HcalForward) // shift HcalForward ieta
1096  ieta<0 ? zside=-1 : zside=+1;
1097 
1098  if (recentoccupancy_digi[eta][phi][depth]==0)
1099  {
1100  if (debug_>0)
1101  {
1102  std::cout <<"DEAD CELL; NO RECENT OCCUPANCY: subdet = "<<subdet<<", ieta = "<<ieta<<", iphi = "<<iphi<<" depth = "<<depth+1<<std::endl;
1103  std::cout <<"\t RAW COORDINATES: eta = "<<eta<< " phi = "<<phi<<" depth = "<<depth<<std::endl;
1104  std::cout <<"\t Present? "<<present_digi[eta][phi][depth]<<std::endl;
1105  }
1106 
1107  // Don't fill HORing2 if boolean enabled
1108  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1109  continue;
1110 
1111  // no digi was found for the N events; Fill cell as bad for all N events (N = checkN);
1113  }
1114  } // for (int subdet=1;subdet<=4;++subdet)
1115  } // for (int phi=0;...)
1116  } // for (int eta=0;...)
1117  } //for (int depth=1;...)
1119 
1120  return;
1121 
1122 } // void HcalDeadCellMonitor::fillNevents_recentdigis()
1123 
1124 
1125 
1126 /* ----------------------------------- */
1127 
1129 {
1130  // Fill Histograms showing unoccupied rechits, or rec hits with low energy
1131 
1132  // This test is a bit pointless, unless the energy threshold is greater than the ZS threshold.
1133  // If we require that cells are always < thresh to be flagged by this test, and if
1134  // thresh < ZS, then we will never catch any cells, since they'll show up as dead in the
1135  // neverpresent/occupancy test plots first.
1136  // Only exception is if something strange is going on between ZS ADC value an RecHit energy?
1137 
1138  if (!deadmon_test_rechits_) return;
1140 
1141  if (debug_>0)
1142  std::cout <<"<HcalDeadCellMonitor::fillNevents_energy> BELOW-ENERGY-THRESHOLD PLOTS"<<std::endl;
1143 
1144  int ieta=0;
1145  int iphi=0;
1146 
1147  int etabins=0;
1148  int phibins=0;
1149 
1151  if ((deadevt_ >= 10 && deadevt_<minDeadEventCount_) || (deadevt_ >= 10 && is_RBX_loss_==1)) // maybe not enough events to run the standard test
1152  // if( is_RBX_loss_ == 1 ) // but enough to detect RBX loss
1153  for (unsigned int depth=0;depth<RecentMissingRecHitsByDepth.depth.size();++depth)
1154  {
1155  RecentMissingRecHitsByDepth.depth[depth]->setBinContent(0,0,ievt_);
1156  etabins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsX();
1157  phibins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsY();
1158  for (int eta=0;eta<etabins;++eta)
1159  for (int phi=0;phi<phibins;++phi)
1160  {
1161  iphi=phi+1;
1162  for (int subdet=1;subdet<=4;++subdet)
1163  {
1164  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1165  if (ieta==-9999) continue;
1166  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1167  continue;
1168  // now check which dead cell tests failed; increment counter if any failed
1169  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1170 
1171  int index = logicalMap_->getHcalFrontEndId(TempID).rbxIndex();
1172  // if(subdet==HcalForward) continue;
1173 
1174  if(occupancy_RBX[index]==0)
1175  {
1177  RecentMissingRecHitsByDepth.depth[depth]->Fill(ieta,iphi,deadevt_);
1178  }
1179  }
1180  }
1181  }
1183 
1184  if (deadevt_ < minDeadEventCount_) return; // not enough entries to make a determination for this LS
1185 
1186  for (unsigned int depth=0;depth<RecentMissingRecHitsByDepth.depth.size();++depth)
1187  {
1188  RecentMissingRecHitsByDepth.depth[depth]->setBinContent(0,0,ievt_);
1189  etabins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsX();
1190  phibins=RecentMissingRecHitsByDepth.depth[depth]->getNbinsY();
1191  for (int eta=0;eta<etabins;++eta)
1192  {
1193  for (int subdet=1;subdet<=4;++subdet)
1194  {
1195  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1196  if (ieta==-9999) continue;
1197  for (int phi=0;phi<phibins;++phi)
1198  {
1199  iphi=phi+1;
1200  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1201  continue;
1202 
1203  if (recentoccupancy_rechit[eta][phi][depth]>0) continue; // cell exceeded energy at least once, so it's not dead
1204 
1205  // Ignore subdetectors that weren't in run?
1206  /*
1207  if ((subdet==HcalBarrel && !HBpresent_) ||
1208  (subdet==HcalEndcap &&!HEpresent_) ||
1209  (subdet==HcalOuter &&!HOpresent_) ||
1210  (subdet==HcalForward &&!HFpresent_)) continue;
1211  */
1212 
1213  int zside=0;
1214  if (subdet==HcalForward) // shift HcalForward ieta
1215  {
1216  ieta<0 ? zside=-1 : zside=+1;
1217  }
1218 
1219  if (debug_>2)
1220  std::cout <<"DEAD CELL; BELOW ENERGY THRESHOLD; subdet = "<<subdet<<" ieta = "<<ieta<<", phi = "<<iphi<<" depth = "<<depth+1<<std::endl;
1221  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1222  continue;
1223 
1225  } // loop on phi bins
1226  } // for (unsigned int depth=1;depth<=4;++depth)
1227  } // // loop on subdetectors
1228  } // for (int eta=0;...)
1229 
1231 
1232  return;
1233 } // void HcalDeadCellMonitor::fillNevents_recentrechits()
1234 
1235 
1237 {
1238  //fillNevents_problemCells now only performs checks of never-present cells
1239 
1240  if (debug_>0)
1241  std::cout <<"<HcalDeadCellMonitor::fillNevents_problemCells> FILLING PROBLEM CELL PLOTS"<<std::endl;
1242 
1243  int ieta=0;
1244  int iphi=0;
1245 
1246  // Count problem cells in each subdetector
1247 
1248  NumBadHB=0;
1249  NumBadHE=0;
1250  NumBadHO=0;
1251  NumBadHF=0;
1252  NumBadHFLUMI=0;
1253  NumBadHO01=0;
1254  NumBadHO2=0;
1255  NumBadHO12=0;
1256  NumBadHO1P02=0;
1257 
1258  int knownBadHB=0;
1259  int knownBadHE=0;
1260  int knownBadHF=0;
1261  int knownBadHO=0;
1262  int knownBadHFLUMI=0;
1263  int knownBadHO01=0;
1264  int knownBadHO2=0;
1265  int knownBadHO12=0;
1266 
1267 
1268  unsigned int neverpresentHB=0;
1269  unsigned int neverpresentHE=0;
1270  unsigned int neverpresentHO=0;
1271  unsigned int neverpresentHF=0;
1272 
1273  unsigned int unoccupiedHB=0;
1274  unsigned int unoccupiedHE=0;
1275  unsigned int unoccupiedHO=0;
1276  unsigned int unoccupiedHF=0;
1277 
1278  unsigned int belowenergyHB=0;
1279  unsigned int belowenergyHE=0;
1280  unsigned int belowenergyHO=0;
1281  unsigned int belowenergyHF=0;
1282 
1283  unsigned int energyneverpresentHB=0;
1284  unsigned int energyneverpresentHE=0;
1285  unsigned int energyneverpresentHO=0;
1286  unsigned int energyneverpresentHF=0;
1287 
1289  Nevents->Fill(1,deadevt_);
1290 
1291  int etabins=0;
1292  int phibins=0;
1293 
1294  // Store values for number of bad channels in each lumi section, for plots of ProblemsVsLS.
1295  // This is different than the NumBadHB, etc. values, which must included even known bad channels
1296  // in order to calculate reportSummaryByLS values correctly.
1297 
1299  //Check for RBX data loss
1300  unsigned int RBX_loss_HB=0;
1301  unsigned int RBX_loss_HE=0;
1302  unsigned int RBX_loss_HO01=0;
1303  unsigned int RBX_loss_HO2=0;
1304  unsigned int RBX_loss_HF=0;
1305 
1306  unsigned int counter_HB = 0;
1307  unsigned int counter_HE = 0;
1308  unsigned int counter_HO01 = 0;
1309  unsigned int counter_HO2 = 0;
1310  unsigned int counter_HF = 0;
1311 
1312  for(int i=0; i<156; i++)
1313  {
1314  if(occupancy_RBX[i]==0 && is_RBX_loss_ == 1)
1315  {
1316  if(i<=35) //HB
1317  { counter_HB ++ ; RBX_loss_HB = 72*(counter_HB); }
1318  if(i>=36 && i<=71) //HE
1319  { counter_HE ++ ; RBX_loss_HE = 72*(counter_HE); }
1320  if(i>=85 && i<=119) // HO Rings 0, 1
1321  { counter_HO01 ++ ; RBX_loss_HO01 = 72*(counter_HO01); }
1322  if(i>=121 || i<=83) // HO Ring 2
1323  { counter_HO2 ++ ; RBX_loss_HO2 = 72*(counter_HO2); }
1324  if(i>=132 && i<=155) //HF
1325  { counter_HF ++ ; RBX_loss_HF = 72*(counter_HF); }
1326 
1327  if(excludeHO1P02_==true && i==109) NumBadHO1P02 = 72; // exclude HO1P02
1328  }
1329  if(occupancy_RBX[i]>0)
1331  if(occupancy_RBX[i]==0 && is_RBX_loss_ == 1)
1332  RBX_loss_VS_LB->Fill(currentLS, i, 1);
1333  }
1334 
1335  if (deadevt_ >= 10 && deadevt_<minDeadEventCount_) // maybe not enough events to run the standard test
1336  if( is_RBX_loss_ == 1 ) // but enough to detect RBX loss
1337  {
1338  NumBadHB+=RBX_loss_HB;
1339  NumBadHE+=RBX_loss_HE;
1340  NumBadHO+=RBX_loss_HO01+RBX_loss_HO2;
1341  NumBadHO01+=RBX_loss_HO01;
1342  NumBadHO2+=RBX_loss_HO2;
1343  NumBadHF+=RBX_loss_HF;
1344 
1345  belowenergyHB+=RBX_loss_HB;
1346  belowenergyHE+=RBX_loss_HE;
1347  belowenergyHO+=RBX_loss_HO01+RBX_loss_HO2;
1348  belowenergyHF+=RBX_loss_HF;
1349 
1350  unoccupiedHB+=RBX_loss_HB;
1351  unoccupiedHE+=RBX_loss_HE;
1352  unoccupiedHO+=RBX_loss_HO01+RBX_loss_HO2;
1353  unoccupiedHF+=RBX_loss_HF;
1354  }
1356 
1357  for (unsigned int depth=0;depth<DigiPresentByDepth.depth.size();++depth)
1358  {
1359  DigiPresentByDepth.depth[depth]->setBinContent(0,0,ievt_);
1360  etabins=DigiPresentByDepth.depth[depth]->getNbinsX();
1361  phibins=DigiPresentByDepth.depth[depth]->getNbinsY();
1362  for (int eta=0;eta<etabins;++eta)
1363  {
1364  for (int phi=0;phi<phibins;++phi)
1365  {
1366  iphi=phi+1;
1367  for (int subdet=1;subdet<=4;++subdet)
1368  {
1369  ieta=CalcIeta((HcalSubdetector)subdet,eta,depth+1);
1370  if (ieta==-9999) continue;
1371  if (!validDetId((HcalSubdetector)subdet, ieta, iphi, depth+1))
1372  continue;
1373  // Ignore subdetectors that weren't in run?
1374  /*
1375  if ((subdet==HcalBarrel && !HBpresent_) ||
1376  (subdet==HcalEndcap &&!HEpresent_) ||
1377  (subdet==HcalOuter &&!HOpresent_) ||
1378  (subdet==HcalForward &&!HFpresent_)) continue;
1379  */
1380 
1381  /*
1382  if ((!checkHB_ && subdet==HcalBarrel) ||
1383  (!checkHE_ && subdet==HcalEndcap) ||
1384  (!checkHO_ && subdet==HcalOuter) ||
1385  (!checkHF_ && subdet==HcalForward)) continue;
1386  */
1387 
1388  // now check which dead cell tests failed; increment counter if any failed
1389  if ((present_digi[eta][phi][depth]==0) ||
1392  )
1393  {
1394  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1395  if (subdet==HcalBarrel)
1396  {
1397  ++NumBadHB;
1398  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1399  ++knownBadHB;
1400  }
1401  else if (subdet==HcalEndcap)
1402  {
1403  ++NumBadHE;
1404  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1405  ++knownBadHE;
1406  }
1407 
1408  else if (subdet==HcalOuter)
1409  {
1410  ++NumBadHO;
1411  if (abs(ieta)<=10) ++NumBadHO01;
1412  else ++NumBadHO2;
1413  // Don't include HORing2 if boolean set; subtract away those counters
1414  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1415  {
1416  --NumBadHO;
1417  --NumBadHO2;
1418  --NumBadHO12;
1419  }
1420  // Don't include HO1P02 if boolean set, RBX does not repsond well to resets,; subtract away those counters
1421  if (excludeHO1P02_==true && ( (ieta>4 && ieta<10) && (iphi<=10 || iphi>70) ) )
1422  ++NumBadHO1P02;
1423 
1424  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1425  {
1426  ++knownBadHO;
1427  if (abs(ieta)<=10) ++knownBadHO01;
1428  else ++knownBadHO2;
1429  // Don't include HORing2 if boolean set; subtract away those counters
1430  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1431  {
1432  --knownBadHO;
1433  --knownBadHO12;
1434  }
1435  }
1436  }
1437  else if (subdet==HcalForward)
1438  {
1439  ++NumBadHF;
1440  if (depth==1 && (abs(ieta)==33 || abs(ieta)==34))
1441  ++NumBadHFLUMI;
1442  else if (depth==2 && (abs(ieta)==35 || abs(ieta)==36))
1443  ++NumBadHFLUMI;
1444  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end())
1445  {
1446  ++knownBadHF;
1447  if (depth==1 && (abs(ieta)==33 || abs(ieta)==34))
1448  ++knownBadHFLUMI;
1449  else if (depth==2 && (abs(ieta)==35 || abs(ieta)==36))
1450  ++knownBadHFLUMI;
1451  }
1452  }
1453  }
1454  if (present_digi[eta][phi][depth]==0 )
1455  {
1456  if (subdet==HcalBarrel) ++neverpresentHB;
1457  else if (subdet==HcalEndcap) ++neverpresentHE;
1458  else if (subdet==HcalOuter)
1459  {
1460  ++neverpresentHO;
1461  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1462  --neverpresentHO;
1463  }
1464  else if (subdet==HcalForward) ++neverpresentHF;
1465  }
1466  // Count recent unoccupied digis if the total events in this lumi section is > minEvents_
1468  {
1469  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1470  if (subdet==HcalBarrel) ++unoccupiedHB;
1471  else if (subdet==HcalEndcap) ++unoccupiedHE;
1472  else if (subdet==HcalOuter)
1473  {
1474  ++unoccupiedHO;
1475  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1476  --unoccupiedHO;
1477  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end() && abs(ieta)<=10)
1478  --unoccupiedHO;
1479  }
1480  else if (subdet==HcalForward) ++unoccupiedHF;
1481  }
1482  // Look at rechit checks
1484  {
1485  if (present_rechit[eta][phi][depth]==0)
1486  {
1487  if (subdet==HcalBarrel) ++energyneverpresentHB;
1488  else if (subdet==HcalEndcap) ++energyneverpresentHE;
1489  else if (subdet==HcalOuter)
1490  {
1491  ++energyneverpresentHO;
1492  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1493  --energyneverpresentHO;
1494  }
1495  else if (subdet==HcalForward) ++energyneverpresentHF;
1496  }
1498  {
1499  HcalDetId TempID((HcalSubdetector)subdet, ieta, iphi, (int)depth+1);
1500  if (subdet==HcalBarrel) ++belowenergyHB;
1501  else if (subdet==HcalEndcap) ++belowenergyHE;
1502  else if (subdet==HcalOuter)
1503  {
1504  ++belowenergyHO;
1505  if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,depth+1)==false)
1506  --belowenergyHO;
1507  if (KnownBadCells_.find(TempID.rawId())!=KnownBadCells_.end() && abs(ieta)<=10)
1508  --belowenergyHO;
1509  }
1510  else if (subdet==HcalForward) ++belowenergyHF;
1511  }
1512  }
1513  } // subdet loop
1514  } // phi loop
1515  } //eta loop
1516  } // depth loop
1517 
1518  // Fill with number of problem cells found on this pass
1519  NumberOfNeverPresentDigisHB->Fill(currentLS,neverpresentHB);
1520  NumberOfNeverPresentDigisHE->Fill(currentLS,neverpresentHE);
1521  NumberOfNeverPresentDigisHO->Fill(currentLS,neverpresentHO);
1522  NumberOfNeverPresentDigisHF->Fill(currentLS,neverpresentHF);
1523  NumberOfNeverPresentDigis->Fill(currentLS,neverpresentHB+neverpresentHE+neverpresentHO+neverpresentHF);
1524 
1526  {
1527  if( NumBadHB<RBX_loss_HB )
1528  NumBadHB+=RBX_loss_HB;
1529  if( NumBadHE<RBX_loss_HE )
1530  NumBadHE+=RBX_loss_HE;
1531  if( NumBadHO01<RBX_loss_HO01 )
1532  NumBadHO01+=RBX_loss_HO01;
1533  if( NumBadHO2<RBX_loss_HO2 )
1534  NumBadHO2+=RBX_loss_HO2;
1535  if( NumBadHF<RBX_loss_HF )
1536  NumBadHF+=RBX_loss_HF;
1537 
1538  if( belowenergyHB<RBX_loss_HB )
1539  belowenergyHB+=RBX_loss_HB;
1540  if( belowenergyHE<RBX_loss_HE )
1541  belowenergyHE+=RBX_loss_HE;
1542  if( belowenergyHO<RBX_loss_HO01+RBX_loss_HO2)
1543  belowenergyHO+=RBX_loss_HO01+RBX_loss_HO2;
1544  if( belowenergyHF<RBX_loss_HF )
1545  belowenergyHF+=RBX_loss_HF;
1546 
1547  if( unoccupiedHB<RBX_loss_HB )
1548  unoccupiedHB+=RBX_loss_HB;
1549  if( unoccupiedHE<RBX_loss_HE )
1550  unoccupiedHE+=RBX_loss_HE;
1551  if( unoccupiedHO<RBX_loss_HO01+RBX_loss_HO2 )
1552  unoccupiedHO+=RBX_loss_HO01+RBX_loss_HO2;
1553  if( unoccupiedHF<RBX_loss_HF )
1554  unoccupiedHF+=RBX_loss_HF;
1555 
1556  // is_RBX_loss_ = 0;
1557  }
1558 
1559  ProblemsVsLB_HB->Fill(currentLS,NumBadHB-knownBadHB+0.0001); // add a small offset, so that the histograms reset when no errors follow
1560  ProblemsVsLB_HE->Fill(currentLS,NumBadHE-knownBadHE+0.0001); // problematic LSs
1561  ProblemsVsLB_HO->Fill(currentLS,NumBadHO01-knownBadHO01+0.0001);
1562  ProblemsVsLB_HO2->Fill(currentLS,NumBadHO2-knownBadHO2+0.0001);
1563  ProblemsVsLB_HF->Fill(currentLS,NumBadHF-knownBadHF+0.0001);
1564  ProblemsVsLB_HBHEHF->Fill(currentLS,NumBadHB+NumBadHE+NumBadHF-knownBadHB-knownBadHE-knownBadHF+0.0001);
1565  ProblemsVsLB->Fill(currentLS,NumBadHB+NumBadHE+NumBadHO01+NumBadHO2+NumBadHF-knownBadHB-knownBadHE-knownBadHO01-knownBadHO2-knownBadHF+0.0001);
1566 
1567  if(excludeHO1P02_==true)
1569 
1570  if( NumBadHB+NumBadHE+NumBadHF-knownBadHB-knownBadHE-knownBadHF < 30 )
1571  alarmer_counter_ = 0;
1572  if( NumBadHO01-knownBadHO01 < 30 )
1574 
1575  if( alarmer_counter_ >= 10 )
1576  ProblemsInLastNLB_HBHEHF_alarm->Fill( std::min(int(NumBadHB+NumBadHE+NumBadHF-knownBadHB-knownBadHE-knownBadHF), 99) );
1577  if( alarmer_counterHO01_ >= 10 )
1578  ProblemsInLastNLB_HO01_alarm->Fill( std::min(int(NumBadHO01-knownBadHO01), 99) );
1579 
1580  // if (deadevt_<minDeadEventCount_)
1581  // return;
1582 
1583  if (deadmon_test_digis_)
1584  {
1589  NumberOfRecentMissingDigis->Fill(currentLS,unoccupiedHB+unoccupiedHE+unoccupiedHO+unoccupiedHF);
1590  }
1591 
1593  {
1594  NumberOfNeverPresentRecHitsHB->Fill(currentLS,energyneverpresentHB);
1595  NumberOfNeverPresentRecHitsHE->Fill(currentLS,energyneverpresentHE);
1596  NumberOfNeverPresentRecHitsHO->Fill(currentLS,energyneverpresentHO);
1597  NumberOfNeverPresentRecHitsHF->Fill(currentLS,energyneverpresentHF);
1598  NumberOfNeverPresentRecHits->Fill(currentLS,energyneverpresentHB+energyneverpresentHE+energyneverpresentHO+energyneverpresentHF);
1599 
1604  NumberOfRecentMissingRecHits->Fill(currentLS,belowenergyHB+belowenergyHE+belowenergyHO+belowenergyHF);
1605  }
1606 
1607  return;
1608 } // void HcalDeadCellMonitor::fillNevents_problemCells(void)
1609 
1610 
1611 void HcalDeadCellMonitor::zeroCounters(bool resetpresent)
1612 {
1613 
1614  // zero all counters
1615 
1616  // 2D histogram counters
1617  for (unsigned int i=0;i<85;++i)
1618  {
1619  for (unsigned int j=0;j<72;++j)
1620  {
1621  for (unsigned int k=0;k<4;++k)
1622  {
1623  if (resetpresent) present_digi[i][j][k]=false; // keeps track of whether digi was ever present
1624  if (resetpresent) present_rechit[i][j][k]=false;
1625  recentoccupancy_digi[i][j][k]=0; // counts occupancy in last (checkNevents) events
1626  recentoccupancy_rechit[i][j][k]=0; // counts instances of cell above threshold energy in last (checkNevents)
1627  }
1628  }
1629  }
1630 
1631  for (unsigned int i=0;i<156;++i)
1632  {
1633  occupancy_RBX[i] = 0;
1634  rbxlost[i] = 0;
1635  }
1636 
1637  return;
1638 } // void HcalDeadCellMonitor::zeroCounters(bool resetpresent)
1639 
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:457
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)
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:51
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