CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalEtaPhiHists.h
Go to the documentation of this file.
1 #ifndef DQM_HCALMONITORTASKS_HCALETAPHIHISTS_H
2 #define DQM_HCALMONITORTASKS_HCALETAPHIHISTS_H
3 
4 #include "TH1F.h"
5 #include "TH2F.h"
6 
12 
13 #include <iostream>
14 
15 
16 // Define EtaPhi histograms
17 
19  // Make a set of eta-phi histograms (one for each depth)
20  public:
23 
24  void setup(DQMStore* &m_dbe,std::string Name, std::string Units="")
25  {
26  std::stringstream name;
27  name<<Name;
28 
29  std::stringstream unitname;
30  std::stringstream unittitle;
31  std::string s(Units);
32  if (s.empty())
33  {
34  unitname<<Units;
35  unittitle<<"No Units";
36  }
37  else
38  {
39  unitname<<" "<<Units;
40  unittitle<<Units;
41  }
42 
43  // Push back depth plots
44  depth.push_back(m_dbe->book2D(("HB HE HF Depth 1 "+name.str()+unitname.str()).c_str(),
45  (name.str()+" Depth 1 -- HB HE HF ("+unittitle.str().c_str()+")"),
46  85,-42.5,42.5,
47  72,0.5,72.5));
48  float ybins[73];
49  for (int i=0;i<=72;i++) ybins[i]=(float)(i+0.5);
50  float xbinsd2[]={-42.5,-41.5,-40.5,-39.5,-38.5,-37.5,-36.5,-35.5,-34.5,-33.5,-32.5,-31.5,-30.5,-29.5,
51  -28.5,-27.5,-26.5,-25.5,-24.5,-23.5,-22.5,-21.5,-20.5,-19.5,-18.5,-17.5,-16.5,
52  -15.5,-14.5,
53  14.5, 15.5,
54  16.5,17.5,18.5,19.5,20.5,21.5,22.5,23.5,24.5,25.5,26.5,27.5,28.5,29.5,30.5,
55  31.5,32.5,33.5,34.5,35.5,36.5,37.5,38.5,39.5,40.5,41.5,42.5};
56  depth.push_back(m_dbe->book2D(("HB HE HF Depth 2 "+name.str()+unitname.str()).c_str(),
57  (name.str()+" Depth 2 -- HB HE HF ("+unittitle.str().c_str()+")"),
58  57, xbinsd2, 72, ybins));
59 
60  // Set up variable-sized bins for HE depth 3 (MonitorElement also requires phi bins to be entered in array format)
61  float xbins[]={-28.5,-27.5,-26.5,-16.5,-15.5,
62  15.5,16.5,26.5,27.5,28.5};
63 
64  depth.push_back(m_dbe->book2D(("HE Depth 3 "+name.str()+unitname.str()).c_str(),
65  (name.str()+" Depth 3 -- HE ("+unittitle.str().c_str()+")"),
66  // Use variable-sized eta bins
67  9, xbins, 72, ybins));
68  // HO bins are fixed width, but cover a smaller eta range (-15 -> 15)
69  depth.push_back(m_dbe->book2D(("HO Depth 4 "+name.str()+unitname.str()).c_str(),
70  (name.str()+" Depth 4 -- HO ("+unittitle.str().c_str()+")"),
71  31,-15.5,15.5,
72  72,0.5,72.5));
73  for (unsigned int i=0;i<depth.size();++i)
74  (depth[i]->getTH2F())->SetOption("colz");
75  setBinLabels(); // set axis titles, special bins
76 
77  } // void setup(...)
78 
79  int getEtaBins(int depth)
80  {
81  if (depth==1) return 85;
82  if (depth==2) return 57;
83  if (depth==3) return 9;
84  if (depth==4) return 31;
85  return 0;
86  }
87 
88  int getPhiBins(int depth)
89  {
90  if (depth>0 && depth<5)
91  return 72;
92  return 0;
93  }
94 
95  void setBinLabels()
96  {
97  // Set labels for all depth histograms
98  for (unsigned int i=0;i<depth.size();++i)
99  {
100  depth[i]->setAxisTitle("i#eta",1);
101  depth[i]->setAxisTitle("i#phi",2);
102  }
103 
104  std::stringstream label;
105  // set label on every other bin
106  for (int i=-41;i<=-29;i=i+2)
107  {
108  label<<i;
109  depth[0]->setBinLabel(i+42,label.str().c_str());
110  depth[1]->setBinLabel(i+42,label.str().c_str());
111  label.str("");
112  }
113  depth[0]->setBinLabel(14,"-29HE");
114  depth[1]->setBinLabel(14,"-29HE");
115 
116  // offset by one for HE
117  for (int i=-27;i<=27;i=i+2)
118  {
119  label<<i;
120  depth[0]->setBinLabel(i+43,label.str().c_str());
121  label.str("");
122  }
123  depth[0]->setBinLabel(72,"29HE");
124  for (int i=29;i<=41;i=i+2)
125  {
126  label<<i;
127  depth[0]->setBinLabel(i+44,label.str().c_str());
128  label.str("");
129  }
130  for (int i=16;i<=28;i=i+2)
131  {
132  label<<i-43;
133  depth[1]->setBinLabel(i,label.str().c_str());
134  label.str("");
135  }
136  depth[1]->setBinLabel(29,"NULL");
137  for (int i=15;i<=27;i=i+2)
138  {
139  label<<i;
140  depth[1]->setBinLabel(i+15,label.str().c_str());
141  label.str("");
142  }
143 
144  depth[1]->setBinLabel(44,"29HE");
145  for (int i=29;i<=41;i=i+2)
146  {
147  label<<i;
148  depth[1]->setBinLabel(i+16,label.str().c_str());
149  label.str("");
150  }
151 
152  // HE depth 3 labels;
153  depth[2]->setBinLabel(1,"-28");
154  depth[2]->setBinLabel(2,"-27");
155  depth[2]->setBinLabel(3,"Null");
156  depth[2]->setBinLabel(4,"-16");
157  depth[2]->setBinLabel(5,"Null");
158  depth[2]->setBinLabel(6,"16");
159  depth[2]->setBinLabel(7,"Null");
160  depth[2]->setBinLabel(8,"27");
161  depth[2]->setBinLabel(9,"28");
162 
163  for (int d=0;d<4;++d)
164  {
165  depth[d]->setAxisTitle("i#eta",1);
166  depth[d]->setAxisTitle("i#phi",2);
167  }
168  };
169  // special fill call based on detid -- eventually will need special treatment
170  void Fill(HcalDetId& id, double val=1)
171  {
172  // If in HF, need to shift by 1 bin (-1 bin lower in -HF, +1 bin higher in +HF)
173  if (id.subdet()==HcalForward)
174  depth[id.depth()-1]->Fill(id.ieta()<0 ? id.ieta()-1 : id.ieta()+1, id.iphi(), val);
175  else
176  depth[id.depth()-1]->Fill(id.ieta(),id.iphi(),val);
177  };
178 
179  void Reset(void)
180  {
181  for (unsigned int d=0;d<depth.size();d++)
182  if(depth[d]) depth[d]->Reset();
183  }; // void Reset(void)
184 
185  //******************************************************************************************
186  std::vector<MonitorElement*> depth;
187 
188 };
189 
190 // Now define functions that can be used in conjunction with EtaPhi histograms
191 
192 // This arrays the eta binning for depth 2 histograms (with a gap between -15 -> +15)
193 const int binmapd2[]={-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,
194  -29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,
195  -16,-15,-9999, 15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
196  30,31,32,33,34,35,36,37,38,39,40,41,42};
197 
198 // This stores eta binning in depth 3 (where HE is only present at a few ieta values)
199 
200 const int binmapd3[]={-28,-27,-9999,-16,-9999,16,-9999,27,28};
201 
202 inline int CalcEtaBin(int subdet, int ieta, int depth)
203 {
204  // This takes the eta value from a subdetector and return an eta counter value as used by eta-phi array
205  // (ieta=-41 corresponds to bin 0, +41 to bin 85 -- there are two offsets to deal with the overlap at |ieta|=29).
206  // For HO, ieta = -15 corresponds to bin 0, and ieta=15 is bin 30
207  // For HE depth 3, things are more complicated, but feeding the ieta value will give back the corresponding counter eta value
208 
209  // The CalcEtaBin value is the value as used within our array counters, and thus starts at 0.
210  // If you are using it with getBinContent or setBinContent, you will need to add +1 to the result of this function
211 
212  int etabin=-9999; // default invalid value
213 
214  if (depth==1)
215  {
216  // Depth 1 is fairly straightforward -- just shift HF-, HF+ by -/+1
217  etabin=ieta+42;
218  if (subdet==HcalForward)
219  {
220  ieta < 0 ? etabin-- : etabin++;
221  }
222  }
223 
224  else if (depth==2)
225  {
226  // Depth 2 is more complicated, given that there are no cells in the range |ieta|<15
227  if (ieta<-14)
228  {
229  etabin=ieta+42;
230  if (subdet==HcalForward) etabin--;
231  }
232  else if (ieta>14)
233  {
234  etabin=ieta+14;
235  if (subdet==HcalForward) etabin++;
236  }
237 
238  }
239  // HO is also straightforward; a simple offset to the ieta value is applied
240  else if (subdet==HcalOuter && abs(ieta)<16)
241  etabin=ieta+15;
242  else if (subdet==HcalEndcap)
243  {
244  // HE depth 3 has spotty coverage; hard-code the bin response
245  if (depth==3)
246  {
247  if (ieta==-28) etabin=0;
248  else if (ieta==-27) etabin=1;
249  else if (ieta==-16) etabin=3;
250  else if (ieta==16) etabin=5;
251  else if (ieta==27) etabin=7;
252  else if (ieta==28) etabin=8;
253  }
254  }
255  return etabin;
256 }
257 
258 inline int CalcIeta(int subdet, int eta, int depth)
259 {
260  // This function returns the 'true' ieta value given subdet, eta, and depth
261  // Here 'eta' is the index from our arrays (it starts at 0);
262  // remember that histogram bins start with bin 1, so there's an offset of 1
263  // to consider if using getBinContent(eta,phi)
264 
265  // eta runs from 0...X (X depends on depth)
266  int ieta=-9999; // default value is nonsensical
267  if (subdet==HcalBarrel)
268  {
269  if (depth==1)
270  {
271  ieta=eta-42;
272  if (ieta==0) return -9999;
273  return ieta;
274  }
275  else if (depth==2)
276  {
277  ieta=binmapd2[eta];
278  if (ieta==0) return -9999;
279  if (ieta==17 || ieta == -17)
280  return -9999; // no depth 2 cells at |ieta| = 17
281  return ieta;
282  }
283  else
284  return -9999; // non-physical value
285  }
286  else if (subdet==HcalForward)
287  {
288  if (depth==1)
289  {
290  ieta=eta-42;
291  if (eta<13) ieta++;
292  else if (eta>71) ieta--;
293  else return -9999; // if outside forward range, return dummy
294  return ieta;
295  }
296  else if (depth==2)
297  {
298  ieta=binmapd2[eta]; // special map for depth 2
299  if (ieta<=-30) ieta++;
300  else if (ieta>=30) ieta--;
301  else return -9999;
302  return ieta;
303  }
304  else return -9999;
305  }
306 
307  else if (subdet==HcalEndcap)
308  {
309  if (depth==1)
310  ieta=eta-42;
311  else if (depth==2)
312  {
313  ieta=binmapd2[eta];
314  if (abs(ieta)>29 || abs(ieta)<18) return -9999; // outside HE
315  if (ieta==0) return -9999;
316  return ieta;
317  }
318  else if (depth==3)
319  {
320  if (eta<0 || eta>8) return -9999;
321  else
322  ieta=binmapd3[eta]; // special map for depth 3
323  if (ieta==0) return -9999;
324  return ieta;
325  }
326  else return -9999;
327  } // HcalEndcap
328  else if ( subdet==HcalOuter)
329  {
330  if (depth!=4)
331  return -9999;
332  else
333  {
334  ieta= eta-15; // bin 0 is ieta=-15, all bins increment normally from there
335  if (abs(ieta)>15) return -9999;
336  if (ieta==0) return -9999;
337  return ieta;
338  }
339  } // HcalOuter
340  if (ieta==0) return -9999;
341  return ieta;
342 }
343 
344 inline int CalcIeta(int eta, int depth)
345 {
346  // This version of CalcIeta does the same as the function above,
347  // but does not require that 'subdet' be specified.
348 
349  // returns ieta value give an eta counter.
350  // eta runs from 0...X (X depends on depth)
351  int ieta=-9999;
352  if (eta<0) return ieta;
353  if (depth==1)
354  {
355  ieta=eta-42; // default shift: bin 0 corresponds to a histogram ieta of -42 (which is offset by 1 from true HF value of -41)
356  if (eta<13) ieta++;
357  else if (eta>71) ieta--;
358  if (ieta==0) ieta=-9999;
359  return ieta;
360  }
361  else if (depth==2)
362  {
363  if (eta>56) return -9999;
364  else
365  {
366  ieta=binmapd2[eta];
367  if (ieta==-9999) return ieta;
368  if (ieta==0) return -9999;
369  if (ieta==17 || ieta == -17) return -9999; // no depth 2 cells at |ieta| = 17
370  else if (ieta<=-30) ieta++;
371  else if (ieta>=30) ieta--;
372  return ieta;
373  }
374  }
375  else if (depth==3)
376  {
377  if (eta>8) return -9999;
378  else
379  ieta=binmapd3[eta];
380  if (ieta==0) return -9999;
381  return ieta;
382  }
383  else if (depth==4)
384  {
385  ieta= eta-15; // bin 0 is ieta=-15, all bins increment normally from there
386  if (abs(ieta)>15) return -9999;
387  if (ieta==0) return -9999;
388  return ieta;
389  }
390  return ieta; // avoids compilation warning
391 }
392 
393 
394 // Functions to check whether a given (eta,depth) value is valid for a given subdetector
395 
396 inline std::vector<std::string> HcalEtaPhiHistNames()
397 {
398  std::vector<std::string> name;
399  name.push_back("HB HE HF Depth 1 ");
400  name.push_back("HB HE HF Depth 2 ");
401  name.push_back("HE Depth 3 ");
402  name.push_back("HO Depth 4 ");
403  return name;
404 }
405 
406 
407 inline bool isHB(int etabin, int depth)
408 {
409  if (depth>2) return false;
410  else if (depth<1) return false;
411  else
412  {
413  int ieta=CalcIeta(etabin,depth);
414  if (ieta==-9999) return false;
415  if (depth==1)
416  {
417  if (abs(ieta)<=16 ) return true;
418  else return false;
419  }
420  else if (depth==2)
421  {
422  if (abs(ieta)==15 || abs(ieta)==16) return true;
423  else return false;
424  }
425  }
426  return false;
427 }
428 
429 inline bool isHE(int etabin, int depth)
430 {
431  if (depth>3) return false;
432  else if (depth<1) return false;
433  else
434  {
435  int ieta=CalcIeta(etabin,depth);
436  if (ieta==-9999) return false;
437  if (depth==1)
438  {
439  if (abs(ieta)>=17 && abs(ieta)<=28 ) return true;
440  if (ieta==-29 && etabin==13) return true; // HE -29
441  if (ieta==29 && etabin == 71) return true; // HE +29
442  }
443  else if (depth==2)
444  {
445  if (abs(ieta)>=17 && abs(ieta)<=28 ) return true;
446  if (ieta==-29 && etabin==13) return true; // HE -29
447  if (ieta==29 && etabin == 43) return true; // HE +29
448  }
449  else if (depth==3)
450  return true;
451  }
452  return false;
453 }
454 
455 inline bool isHF(int etabin, int depth)
456 {
457  if (depth>2) return false;
458  else if (depth<1) return false;
459  else
460  {
461  int ieta=CalcIeta(etabin,depth);
462  if (ieta==-9999) return false;
463  if (depth==1)
464  {
465  if (ieta==-29 && etabin==13) return false; // HE -29
466  else if (ieta==29 && etabin == 71) return false; // HE +29
467  else if (abs(ieta)>=29 ) return true;
468  }
469  else if (depth==2)
470  {
471  if (ieta==-29 && etabin==13) return false; // HE -29
472  else if (ieta==29 && etabin==43) return false; // HE +29
473  else if (abs(ieta)>=29 ) return true;
474  }
475  }
476  return false;
477 }
478 
479 inline bool isHO(int etabin, int depth)
480 {
481  if (depth!=4) return false;
482  int ieta=CalcIeta(etabin,depth);
483  if (ieta!=-9999) return true;
484  return false;
485 }
486 
487 // Checks whether HO region contains SiPM
488 
489 inline bool isSiPM(int ieta, int iphi, int depth)
490 {
491  if (depth!=4) return false;
492  // HOP1
493  if (ieta>=5 && ieta <=10 && iphi>=47 && iphi<=58) return true;
494  // HOP2
495  if (ieta>=11 && ieta<=15 && iphi>=59 && iphi<=70) return true;
496  return false;
497 } // bool isSiPM
498 
499 
500 // Checks whether (subdet, ieta, iphi, depth) value is a valid Hcal cell
501 
502 inline bool validDetId(HcalSubdetector sd, int ies, int ip, int dp)
503 {
504  // inputs are (subdetector, ieta, iphi, depth)
505  // stolen from latest version of DataFormats/HcalDetId/src/HcalDetId.cc (not yet available in CMSSW_2_1_9)
506 
507  const int ie ( abs( ies ) ) ;
508 
509  return ( ( ip >= 1 ) &&
510  ( ip <= 72 ) &&
511  ( dp >= 1 ) &&
512  ( ie >= 1 ) &&
513  ( ( ( sd == HcalBarrel ) &&
514  ( ( ( ie <= 14 ) &&
515  ( dp == 1 ) ) ||
516  ( ( ( ie == 15 ) || ( ie == 16 ) ) &&
517  ( dp <= 2 ) ) ) ) ||
518  ( ( sd == HcalEndcap ) &&
519  ( ( ( ie == 16 ) &&
520  ( dp == 3 ) ) ||
521  ( ( ie == 17 ) &&
522  ( dp == 1 ) ) ||
523  ( ( ie >= 18 ) &&
524  ( ie <= 20 ) &&
525  ( dp <= 2 ) ) ||
526  ( ( ie >= 21 ) &&
527  ( ie <= 26 ) &&
528  ( dp <= 2 ) &&
529  ( ip%2 == 1 ) ) ||
530  ( ( ie >= 27 ) &&
531  ( ie <= 28 ) &&
532  ( dp <= 3 ) &&
533  ( ip%2 == 1 ) ) ||
534  ( ( ie == 29 ) &&
535  ( dp <= 2 ) &&
536  ( ip%2 == 1 ) ) ) ) ||
537  ( ( sd == HcalOuter ) &&
538  ( ie <= 15 ) &&
539  ( dp == 4 ) ) ||
540  ( ( sd == HcalForward ) &&
541  ( dp <= 2 ) &&
542  ( ( ( ie >= 29 ) &&
543  ( ie <= 39 ) &&
544  ( ip%2 == 1 ) ) ||
545  ( ( ie >= 40 ) &&
546  ( ie <= 41 ) &&
547  ( ip%4 == 3 ) ) ) ) ) ) ;
548 
549 
550 
551 } // bool validDetId(HcalSubdetector sd, int ies, int ip, int dp)
552 
553 
554 // Sets eta, phi labels for 'summary' eta-phi plots (identical to Depth 1 Eta-Phi labelling)
555 
557 {
558  std::stringstream label;
559  for (int i=-41;i<=-29;i=i+2)
560  {
561  label<<i;
562  h->setBinLabel(i+42,label.str().c_str());
563  label.str("");
564  }
565  h->setBinLabel(14,"-29HE");
566 
567  // offset by one for HE
568  for (int i=-27;i<=27;i=i+2)
569  {
570  label<<i;
571  h->setBinLabel(i+43,label.str().c_str());
572  label.str("");
573  }
574  h->setBinLabel(72,"29HE");
575  for (int i=29;i<=41;i=i+2)
576  {
577  label<<i;
578  h->setBinLabel(i+44,label.str().c_str());
579  label.str("");
580  }
581  return;
582 }
583 
584 
585 // Fill Unphysical bins in histograms
586 
588 {
589  int ieta=0;
590  int iphi=0;
591  // First 2 depths have 5-10-20 degree corrections
592  for (unsigned int d=0;d<3;++d)
593  {
594  if (!hh.depth[d]) continue;
595  for (int eta=0;eta<hh.depth[d]->getNbinsX();++eta)
596  {
597  ieta=CalcIeta(eta,d+1);
598  if (ieta==-9999 || abs(ieta)<21) continue;
599  for (int phi=0;phi<hh.depth[d]->getNbinsY();++phi)
600  {
601  iphi=phi+1;
602  if (iphi%2==1 && abs(ieta)<40 && iphi<73)
603  {
604  hh.depth[d]->setBinContent(eta+1,iphi+1,hh.depth[d]->getBinContent(eta+1,iphi));
605  }
606  // last two eta strips span 20 degrees in phi
607  // Fill the phi cell above iphi, and the 2 below it
608  else if (abs(ieta)>39 && iphi%4==3 && iphi<73)
609  {
610  //ieta=40, iphi=3 covers iphi 3,4,5,6
611  hh.depth[d]->setBinContent(eta+1,(iphi)%72+1, hh.depth[d]->getBinContent(eta+1,iphi));
612  hh.depth[d]->setBinContent(eta+1,(iphi+1)%72+1, hh.depth[d]->getBinContent(eta+1,iphi));
613  hh.depth[d]->setBinContent(eta+1,(iphi+2)%72+1, hh.depth[d]->getBinContent(eta+1,iphi));
614  }
615  } // for (int phi...)
616  } // for (int eta...)
617  } // for (int d=0;...)
618  // no corrections needed for HO (depth 4)
619  return;
620 } // FillUnphysicalHEHFBins(MonitorElement* hh)
621 
622 
623 // Fill unphysical bins for single ME
625 {
626  // Fills unphysical HE/HF bins for Summary Histogram
627  // Summary Histogram is binned with the same binning as the Depth 1 EtaPhiHists
628  if (hh==0) return;
629  int ieta=0;
630  int iphi=0;
631  int etabins = hh->getNbinsX();
632  int phibins = hh->getNbinsY();
633  float binval=0;
634  for (int eta=0;eta<etabins;++eta) // loop over eta bins
635  {
636  ieta=CalcIeta(eta,1);
637  if (ieta==-9999 || abs(ieta)<21) continue; // ignore etas that don't exist, or that have 5 degree phi binning
638 
639  for (int phi=0;phi<phibins;++phi)
640  {
641  iphi=phi+1;
642  if (iphi%2==1 && abs(ieta)<40 && iphi<73) // 10 degree phi binning condition
643  {
644  binval=hh->getBinContent(eta+1,iphi);
645  hh->setBinContent(eta+1,iphi+1,binval);
646  } // if (iphi%2==1...)
647  else if (abs(ieta)>39 && iphi%4==3 && iphi<73) // 20 degree phi binning condition
648  {
649  // Set last two eta strips where each cell spans 20 degrees in phi
650  // Set next phi cell above iphi, and 2 cells below the actual cell
651  hh->setBinContent(eta+1, (iphi)%72+1, hh->getBinContent(eta+1,iphi));
652  hh->setBinContent(eta+1, (iphi+1)%72+1, hh->getBinContent(eta+1,iphi));
653  hh->setBinContent(eta+1, (iphi+2)%72+1, hh->getBinContent(eta+1,iphi));
654  } // else if (abs(ieta)>39 ...)
655  } // for (int phi=0;phi<72;++phi)
656 
657  } // for (int eta=0; eta< (etaBins_-2);++eta)
658 
659  return;
660 } // FillUnphysicalHEHFBins(std::vector<MonitorElement*> &hh)
661 
662 
663 
664 
665 #endif
bool isHO(int etabin, int depth)
int i
Definition: DBlmapReader.cc:9
void setBinContent(int binx, double content)
set content of bin (1-D)
const int binmapd2[]
const double xbins[]
void Reset(void)
std::vector< std::string > HcalEtaPhiHistNames()
void setup(DQMStore *&m_dbe, std::string Name, std::string Units="")
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)
#define abs(x)
Definition: mlp_lapack.h:159
bool isHE(int etabin, int depth)
T eta() const
void setBinLabels()
const int binmapd3[]
int getNbinsY(void) const
get # of bins in Y-axis
int getEtaBins(int depth)
bool isSiPM(int ieta, int iphi, int depth)
std::vector< MonitorElement * > depth
int CalcIeta(int subdet, int eta, int depth)
HcalSubdetector
Definition: HcalAssistant.h:32
int getPhiBins(int depth)
bool isHB(int etabin, int depth)
bool isHF(int etabin, int depth)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
auto dp
Definition: deltaR.h:24
double sd
void FillUnphysicalHEHFBins(std::vector< TH2F > &hh)
int CalcEtaBin(int subdet, int ieta, int depth)
double getBinContent(int binx) const
get content of bin (1-D)
TH2F * getTH2F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
int getNbinsX(void) const
get # of bins in X-axis
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:850
void SetEtaPhiLabels(MonitorElement *h)
bool validDetId(HcalSubdetector sd, int ies, int ip, int dp)
void Fill(HcalDetId &id, double val=1)
Definition: DDAxes.h:10