CMS 3D CMS Logo

HcalSimHitsValidation.cc
Go to the documentation of this file.
3 
5  : g4Label_(conf.getUntrackedParameter<std::string>("ModuleLabel", "g4SimHits")),
6  hcalHits_(conf.getUntrackedParameter<std::string>("HcalHitCollection", "HcalHits")),
7  ebHits_(conf.getUntrackedParameter<std::string>("EBHitCollection", "EcalHitsEB")),
8  eeHits_(conf.getUntrackedParameter<std::string>("EEHitCollection", "EcalHitsEE")),
9  hf1_(conf.getParameter<double>("hf1")),
10  hf2_(conf.getParameter<double>("hf2")),
11  outputFile_(conf.getUntrackedParameter<std::string>("outputFile", "myfile.root")),
12  testNumber_(conf.getUntrackedParameter<bool>("TestNumber", false)),
13  auxPlots_(conf.getUntrackedParameter<bool>("auxiliaryPlots", false)),
14  tok_evt_(consumes<edm::HepMCProduct>(edm::InputTag("generatorSmeared"))),
15  tok_hcal_(consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label_, hcalHits_))),
16  tok_ecalEB_(consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label_, ebHits_))),
17  tok_ecalEE_(consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label_, eeHits_))),
20  // DQM ROOT output
21 
22  // register for data access
23 
24  // import sampling factors
25 
26  if (!outputFile_.empty()) {
27  edm::LogVerbatim("OutputInfo") << " Hcal SimHit Task histograms will be saved to '" << outputFile_.c_str() << "'";
28  } else {
29  edm::LogVerbatim("OutputInfo") << " Hcal SimHit Task histograms will NOT be saved";
30  }
31 
32  nevtot = 0;
33 }
34 
36  hcons_ = &es.getData(tok_HRNDC_);
41 
42  // Get Phi segmentation from geometry, use the max phi number so that all iphi
43  // values are included.
44 
45  int NphiMax = hcons_->getNPhi(0);
46 
47  NphiMax = (hcons_->getNPhi(1) > NphiMax ? hcons_->getNPhi(1) : NphiMax);
48  NphiMax = (hcons_->getNPhi(2) > NphiMax ? hcons_->getNPhi(2) : NphiMax);
49  NphiMax = (hcons_->getNPhi(3) > NphiMax ? hcons_->getNPhi(3) : NphiMax);
50 
51  // Center the iphi bins on the integers
52  // float iphi_min = 0.5;
53  // float iphi_max = NphiMax + 0.5;
54  // int iphi_bins = (int) (iphi_max - iphi_min);
55 
56  int iEtaHBMax = hcons_->getEtaRange(0).second;
57  int iEtaHEMax = std::max(hcons_->getEtaRange(1).second, 1);
58  int iEtaHFMax = hcons_->getEtaRange(2).second;
59  int iEtaHOMax = hcons_->getEtaRange(3).second;
60 
61  // Retain classic behavior, all plots have same ieta range.
62  // Comment out code to allow each subdetector to have its on range
63 
64  int iEtaMax = (iEtaHBMax > iEtaHEMax ? iEtaHBMax : iEtaHEMax);
65  iEtaMax = (iEtaMax > iEtaHFMax ? iEtaMax : iEtaHFMax);
66  iEtaMax = (iEtaMax > iEtaHOMax ? iEtaMax : iEtaHOMax);
67 
68  iEtaHBMax = iEtaMax;
69  iEtaHEMax = iEtaMax;
70  iEtaHFMax = iEtaMax;
71  iEtaHOMax = iEtaMax;
72 
73  // Give an empty bin around the subdet ieta range to make it clear that all
74  // ieta rings have been included
75  float ieta_min_HB = -iEtaHBMax - 1.5;
76  float ieta_max_HB = iEtaHBMax + 1.5;
77  int ieta_bins_HB = (int)(ieta_max_HB - ieta_min_HB);
78 
79  float ieta_min_HE = -iEtaHEMax - 1.5;
80  float ieta_max_HE = iEtaHEMax + 1.5;
81  int ieta_bins_HE = (int)(ieta_max_HE - ieta_min_HE);
82 
83  float ieta_min_HF = -iEtaHFMax - 1.5;
84  float ieta_max_HF = iEtaHFMax + 1.5;
85  int ieta_bins_HF = (int)(ieta_max_HF - ieta_min_HF);
86 
87  float ieta_min_HO = -iEtaHOMax - 1.5;
88  float ieta_max_HO = iEtaHOMax + 1.5;
89  int ieta_bins_HO = (int)(ieta_max_HO - ieta_min_HO);
90 
91  Char_t histo[200];
92 
93  ib.setCurrentFolder("HcalHitsV/HcalSimHitTask");
94 
95  if (auxPlots_) {
96  // General counters
97  for (int depth = 0; depth <= maxDepthHB_; depth++) {
98  if (depth == 0) {
99  sprintf(histo, "N_HB");
100  } else {
101  sprintf(histo, "N_HB%d", depth);
102  }
103 
104  Nhb.push_back(ib.book1D(histo, histo, 2600, 0., 2600.));
105  }
106  for (int depth = 0; depth <= maxDepthHE_; depth++) {
107  if (depth == 0) {
108  sprintf(histo, "N_HE");
109  } else {
110  sprintf(histo, "N_HE%d", depth);
111  }
112 
113  Nhe.push_back(ib.book1D(histo, histo, 2600, 0., 2600.));
114  }
115 
116  sprintf(histo, "N_HO");
117  Nho = ib.book1D(histo, histo, 2200, 0., 2200.);
118 
119  for (int depth = 0; depth <= maxDepthHF_; depth++) {
120  if (depth == 0) {
121  sprintf(histo, "N_HF");
122  } else {
123  sprintf(histo, "N_HF%d", depth);
124  }
125 
126  Nhf.push_back(ib.book1D(histo, histo, 1800, 0., 1800.));
127  }
128 
129  // Mean energy vs iEta TProfiles
130  for (int depth = 0; depth <= maxDepthHB_; depth++) {
131  if (depth == 0) {
132  sprintf(histo, "emean_vs_ieta_HB");
133  } else {
134  sprintf(histo, "emean_vs_ieta_HB%d", depth);
135  }
136 
137  emean_vs_ieta_HB.push_back(
138  ib.bookProfile(histo, histo, ieta_bins_HB, ieta_min_HB, ieta_max_HB, -10., 2000., " "));
139  }
140  for (int depth = 0; depth <= maxDepthHE_; depth++) {
141  if (depth == 0) {
142  sprintf(histo, "emean_vs_ieta_HE");
143  } else {
144  sprintf(histo, "emean_vs_ieta_HE%d", depth);
145  }
146 
147  emean_vs_ieta_HE.push_back(
148  ib.bookProfile(histo, histo, ieta_bins_HE, ieta_min_HE, ieta_max_HE, -10., 2000., " "));
149  }
150 
151  sprintf(histo, "emean_vs_ieta_HO");
152  emean_vs_ieta_HO = ib.bookProfile(histo, histo, ieta_bins_HO, ieta_min_HO, ieta_max_HO, -10., 2000., " ");
153 
154  for (int depth = 0; depth <= maxDepthHF_; depth++) {
155  if (depth == 0) {
156  sprintf(histo, "emean_vs_ieta_HF");
157  } else {
158  sprintf(histo, "emean_vs_ieta_HF%d", depth);
159  }
160 
161  emean_vs_ieta_HF.push_back(
162  ib.bookProfile(histo, histo, ieta_bins_HF, ieta_min_HF, ieta_max_HF, -10., 2000., " "));
163  }
164 
165  // Occupancy vs. iEta TH1Fs
166  for (int depth = 0; depth <= maxDepthHB_; depth++) {
167  if (depth == 0) {
168  sprintf(histo, "occupancy_vs_ieta_HB");
169  } else {
170  sprintf(histo, "occupancy_vs_ieta_HB%d", depth);
171  }
172 
173  occupancy_vs_ieta_HB.push_back(ib.book1D(histo, histo, ieta_bins_HB, ieta_min_HB, ieta_max_HB));
174  }
175  for (int depth = 0; depth <= maxDepthHE_; depth++) {
176  if (depth == 0) {
177  sprintf(histo, "occupancy_vs_ieta_HE");
178  } else {
179  sprintf(histo, "occupancy_vs_ieta_HE%d", depth);
180  }
181 
182  occupancy_vs_ieta_HE.push_back(ib.book1D(histo, histo, ieta_bins_HE, ieta_min_HE, ieta_max_HE));
183  }
184 
185  sprintf(histo, "occupancy_vs_ieta_HO");
186  occupancy_vs_ieta_HO = ib.book1D(histo, histo, ieta_bins_HO, ieta_min_HO, ieta_max_HO);
187 
188  for (int depth = 0; depth <= maxDepthHF_; depth++) {
189  if (depth == 0) {
190  sprintf(histo, "occupancy_vs_ieta_HF");
191  } else {
192  sprintf(histo, "occupancy_vs_ieta_HF%d", depth);
193  }
194 
195  occupancy_vs_ieta_HF.push_back(ib.book1D(histo, histo, ieta_bins_HF, ieta_min_HF, ieta_max_HF));
196  }
197 
198  // Energy spectra
199  for (int depth = 0; depth <= maxDepthHB_; depth++) {
200  if (depth == 0) {
201  sprintf(histo, "HcalSimHitTask_energy_of_simhits_HB");
202  } else {
203  sprintf(histo, "HcalSimHitTask_energy_of_simhits_HB%d", depth);
204  }
205 
206  meSimHitsEnergyHB.push_back(ib.book1D(histo, histo, 510, -0.1, 5.));
207  }
208  for (int depth = 0; depth <= maxDepthHE_; depth++) {
209  if (depth == 0) {
210  sprintf(histo, "HcalSimHitTask_energy_of_simhits_HE");
211  } else {
212  sprintf(histo, "HcalSimHitTask_energy_of_simhits_HE%d", depth);
213  }
214 
215  meSimHitsEnergyHE.push_back(ib.book1D(histo, histo, 510, -0.1, 5.));
216  }
217 
218  sprintf(histo, "HcalSimHitTask_energy_of_simhits_HO");
219  meSimHitsEnergyHO = ib.book1D(histo, histo, 510, -0.1, 5.);
220 
221  for (int depth = 0; depth <= maxDepthHF_; depth++) {
222  if (depth == 0) {
223  sprintf(histo, "HcalSimHitTask_energy_of_simhits_HF");
224  } else {
225  sprintf(histo, "HcalSimHitTask_energy_of_simhits_HF%d", depth);
226  }
227 
228  meSimHitsEnergyHF.push_back(ib.book1D(histo, histo, 1010, -5., 500.));
229  }
230 
231  } // auxPlots_
232 
233  // Energy in Cone
234  sprintf(histo, "HcalSimHitTask_En_simhits_cone_profile_vs_ieta_all_depths");
235  meEnConeEtaProfile = ib.bookProfile(histo, histo, ieta_bins_HF, ieta_min_HF, ieta_max_HF, -10., 200., " ");
236 
237  sprintf(histo, "HcalSimHitTask_En_simhits_cone_profile_vs_ieta_all_depths_E");
238  meEnConeEtaProfile_E = ib.bookProfile(histo, histo, ieta_bins_HF, ieta_min_HF, ieta_max_HF, -10., 200., " ");
239 
240  sprintf(histo, "HcalSimHitTask_En_simhits_cone_profile_vs_ieta_all_depths_EH");
241  meEnConeEtaProfile_EH = ib.bookProfile(histo, histo, ieta_bins_HF, ieta_min_HF, ieta_max_HF, -10., 200., " ");
242 }
243 
245  if (auxPlots_) {
246  for (int i = 1; i <= occupancy_vs_ieta_HB[0]->getNbinsX(); i++) {
247  int ieta = i - 43; // -41 -1, 1 41
248 
249  float phi_factor;
250 
251  if (std::abs(ieta) <= 20)
252  phi_factor = 72.;
253  else if (std::abs(ieta) < 40)
254  phi_factor = 36.;
255  else
256  phi_factor = 18.;
257 
258  float cnorm;
259 
260  // Occupancy vs. iEta TH1Fs
261  for (int depth = 0; depth <= maxDepthHB_; depth++) {
262  cnorm = occupancy_vs_ieta_HB[depth]->getBinContent(i) / (phi_factor * nevtot);
263  occupancy_vs_ieta_HB[depth]->setBinContent(i, cnorm);
264  }
265  for (int depth = 0; depth <= maxDepthHE_; depth++) {
266  cnorm = occupancy_vs_ieta_HE[depth]->getBinContent(i) / (phi_factor * nevtot);
267  occupancy_vs_ieta_HE[depth]->setBinContent(i, cnorm);
268  }
269 
270  cnorm = occupancy_vs_ieta_HO->getBinContent(i) / (phi_factor * nevtot);
272 
273  for (int depth = 0; depth <= maxDepthHF_; depth++) {
274  cnorm = occupancy_vs_ieta_HF[depth]->getBinContent(i) / (phi_factor * nevtot);
275  occupancy_vs_ieta_HF[depth]->setBinContent(i, cnorm);
276  }
277  }
278  }
279 
280  // let's see if this breaks anything
281  // if ( outputFile_.size() != 0 && dbe_ ) dbe_->save(outputFile_);
282 }
283 
285  //===========================================================================
286  // Getting SimHits
287  //===========================================================================
288 
289  double phi_MC = -999.; // phi of initial particle from HepMC
290  double eta_MC = -999.; // eta of initial particle from HepMC
291 
292  const edm::Handle<edm::HepMCProduct> &evtMC = ev.getHandle(tok_evt_); // generator in late 310_preX
293  if (!evtMC.isValid()) {
294  edm::LogVerbatim("OutputInfo") << "no HepMCProduct found";
295  }
296 
297  // MC particle with highest pt is taken as a direction reference
298  double maxPt = -99999.;
299 
300  const HepMC::GenEvent *myGenEvent = evtMC->GetEvent();
301  for (HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end();
302  ++p) {
303  double phip = (*p)->momentum().phi();
304  double etap = (*p)->momentum().eta();
305  double pt = (*p)->momentum().perp();
306  if (pt > maxPt) {
307  maxPt = pt;
308  phi_MC = phip;
309  eta_MC = etap;
310  }
311  }
312 
313  double partR = 0.3;
314 
315  // Hcal SimHits
316 
317  // Approximate calibration constants
318  const float calib_HB = 120.;
319  const float calib_HE = 190.;
320  const float calib_HF1 = hf1_; // 1.0/0.383;
321  const float calib_HF2 = hf2_; // 1.0/0.368;
322 
323  const edm::Handle<edm::PCaloHitContainer> &hcalHits = ev.getHandle(tok_hcal_);
324  const auto SimHitResult = hcalHits.product();
325 
326  float eta_diff;
327  float etaMax = 9999;
328  int ietaMax = 0;
329 
330  double HcalCone = 0;
331 
332  geometry_ = &c.getData(tok_geom_);
333 
334  for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResult->begin(); SimHits != SimHitResult->end();
335  ++SimHits) {
336  HcalDetId cell;
337  if (testNumber_)
338  cell = HcalHitRelabeller::relabel(SimHits->id(), hcons_);
339  else
340  cell = HcalDetId(SimHits->id());
341 
342  auto cellGeometry = geometry_->getSubdetectorGeometry(cell)->getGeometry(cell);
343  double etaS = cellGeometry->getPosition().eta();
344  double phiS = cellGeometry->getPosition().phi();
345  double en = SimHits->energy();
346 
347  int sub = cell.subdet();
348  int depth = cell.depth();
349  double ieta = cell.ieta();
350 
351  // Energy in Cone
352  double r = dR(eta_MC, phi_MC, etaS, phiS);
353 
354  if (r < partR) {
355  eta_diff = std::abs(eta_MC - etaS);
356  if (eta_diff < etaMax) {
357  etaMax = eta_diff;
358  ietaMax = cell.ieta();
359  }
360  // Approximation of calibration
361  if (sub == 1)
362  HcalCone += en * calib_HB;
363  else if (sub == 2)
364  HcalCone += en * calib_HE;
365  else if (sub == 4 && (depth == 1 || depth == 3))
366  HcalCone += en * calib_HF1;
367  else if (sub == 4 && (depth == 2 || depth == 4))
368  HcalCone += en * calib_HF2;
369  }
370 
371  if (auxPlots_) {
372  // HB
373  if (sub == 1) {
374  meSimHitsEnergyHB[0]->Fill(en);
375  meSimHitsEnergyHB[depth]->Fill(en);
376 
377  emean_vs_ieta_HB[0]->Fill(double(ieta), en);
378  emean_vs_ieta_HB[depth]->Fill(double(ieta), en);
379 
380  occupancy_vs_ieta_HB[0]->Fill(double(ieta));
381  occupancy_vs_ieta_HB[depth]->Fill(double(ieta));
382  }
383  // HE
384  if (sub == 2 && maxDepthHE_ > 0) {
385  meSimHitsEnergyHE[0]->Fill(en);
386  meSimHitsEnergyHE[depth]->Fill(en);
387 
388  emean_vs_ieta_HE[0]->Fill(double(ieta), en);
389  emean_vs_ieta_HE[depth]->Fill(double(ieta), en);
390 
391  occupancy_vs_ieta_HE[0]->Fill(double(ieta));
392  occupancy_vs_ieta_HE[depth]->Fill(double(ieta));
393  }
394  // HO
395  if (sub == 3) {
396  meSimHitsEnergyHO->Fill(en);
397 
398  emean_vs_ieta_HO->Fill(double(ieta), en);
399 
400  occupancy_vs_ieta_HO->Fill(double(ieta));
401  }
402  // HF
403  if (sub == 4) {
404  meSimHitsEnergyHF[0]->Fill(en);
405  meSimHitsEnergyHF[depth]->Fill(en);
406 
407  emean_vs_ieta_HF[0]->Fill(double(ieta), en);
408  emean_vs_ieta_HF[depth]->Fill(double(ieta), en);
409 
410  occupancy_vs_ieta_HF[0]->Fill(double(ieta));
411  occupancy_vs_ieta_HF[depth]->Fill(double(ieta));
412  }
413 
414  } // auxPlots_
415 
416  } // Loop over SimHits
417 
418  // Ecal EB SimHits
419  double EcalCone = 0;
420 
421  if (!ebHits_.empty()) {
422  const auto &SimHitResultEB = &ev.get(tok_ecalEB_);
423 
424  for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResultEB->begin(); SimHits != SimHitResultEB->end();
425  ++SimHits) {
426  EBDetId EBid = EBDetId(SimHits->id());
427 
428  auto cellGeometry = geometry_->getSubdetectorGeometry(EBid)->getGeometry(EBid);
429  double etaS = cellGeometry->getPosition().eta();
430  double phiS = cellGeometry->getPosition().phi();
431  double en = SimHits->energy();
432 
433  double r = dR(eta_MC, phi_MC, etaS, phiS);
434 
435  if (r < partR)
436  EcalCone += en;
437  }
438  } // ebHits_
439 
440  // Ecal EE SimHits
441  if (!eeHits_.empty()) {
442  const auto &SimHitResultEE = &ev.get(tok_ecalEE_);
443 
444  for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResultEE->begin(); SimHits != SimHitResultEE->end();
445  ++SimHits) {
446  EEDetId EEid = EEDetId(SimHits->id());
447 
448  auto cellGeometry = geometry_->getSubdetectorGeometry(EEid)->getGeometry(EEid);
449  double etaS = cellGeometry->getPosition().eta();
450  double phiS = cellGeometry->getPosition().phi();
451  double en = SimHits->energy();
452 
453  double r = dR(eta_MC, phi_MC, etaS, phiS);
454 
455  if (r < partR)
456  EcalCone += en;
457  }
458  } // eeHits_
459 
460  if (ietaMax != 0) { // If ietaMax == 0, there were no good HCAL SimHits
461  meEnConeEtaProfile->Fill(double(ietaMax), HcalCone);
462  meEnConeEtaProfile_E->Fill(double(ietaMax), EcalCone);
463  meEnConeEtaProfile_EH->Fill(double(ietaMax), HcalCone + EcalCone);
464  }
465 
466  nevtot++;
467 }
468 
469 double HcalSimHitsValidation::dR(double eta1, double phi1, double eta2, double phi2) {
470  double PI = 3.1415926535898;
471  double deltaphi = phi1 - phi2;
472  if (phi2 > phi1) {
473  deltaphi = phi2 - phi1;
474  }
475  if (deltaphi > PI) {
476  deltaphi = 2. * PI - deltaphi;
477  }
478  double deltaeta = eta2 - eta1;
479  double tmp = sqrt(deltaeta * deltaeta + deltaphi * deltaphi);
480  return tmp;
481 }
482 
483 double HcalSimHitsValidation::phi12(double phi1, double en1, double phi2, double en2) {
484  // weighted mean value of phi1 and phi2
485 
486  double tmp;
487  double PI = 3.1415926535898;
488  double a1 = phi1;
489  double a2 = phi2;
490 
491  if (a1 > 0.5 * PI && a2 < 0.)
492  a2 += 2 * PI;
493  if (a2 > 0.5 * PI && a1 < 0.)
494  a1 += 2 * PI;
495  tmp = (a1 * en1 + a2 * en2) / (en1 + en2);
496  if (tmp > PI)
497  tmp -= 2. * PI;
498 
499  return tmp;
500 }
501 
502 double HcalSimHitsValidation::dPhiWsign(double phi1, double phi2) {
503  // clockwise phi2 w.r.t phi1 means "+" phi distance
504  // anti-clockwise phi2 w.r.t phi1 means "-" phi distance
505 
506  double PI = 3.1415926535898;
507  double a1 = phi1;
508  double a2 = phi2;
509  double tmp = a2 - a1;
510  if (a1 * a2 < 0.) {
511  if (a1 > 0.5 * PI)
512  tmp += 2. * PI;
513  if (a2 > 0.5 * PI)
514  tmp -= 2. * PI;
515  }
516  return tmp;
517 }
518 
MonitorElement * meEnConeEtaProfile
Log< level::Info, true > LogVerbatim
std::pair< int, int > getEtaRange(const int &i) const
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
std::vector< PCaloHit > PCaloHitContainer
double dR(double eta1, double phi1, double eta2, double phi2)
std::vector< MonitorElement * > emean_vs_ieta_HF
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
double phi12(double phi1, double en1, double phi2, double en2)
const edm::EDGetTokenT< edm::HepMCProduct > tok_evt_
int getNPhi(const int &type) const
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_ecalEB_
std::vector< MonitorElement * > occupancy_vs_ieta_HF
void analyze(edm::Event const &ev, edm::EventSetup const &c) override
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > tok_geom_
T const * product() const
Definition: Handle.h:70
const CaloGeometry * geometry_
std::vector< MonitorElement * > Nhf
std::vector< MonitorElement * > meSimHitsEnergyHE
const std::string outputFile_
MonitorElement * meSimHitsEnergyHO
void Fill(long long x)
MonitorElement * meEnConeEtaProfile_E
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
std::vector< MonitorElement * > emean_vs_ieta_HB
std::vector< MonitorElement * > meSimHitsEnergyHB
const edm::ESGetToken< HcalDDDRecConstants, HcalRecNumberingRecord > tok_HRNDC_
MonitorElement * emean_vs_ieta_HO
T sqrt(T t)
Definition: SSEVec.h:23
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Transition
Definition: Transition.h:12
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::vector< MonitorElement * > emean_vs_ieta_HE
DetId relabel(const uint32_t testId) const
int getMaxDepth(const int &type) const
#define PI
Definition: QcdUeDQM.h:37
double dPhiWsign(double phi1, double phi2)
std::vector< MonitorElement * > occupancy_vs_ieta_HE
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:37
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
HcalSimHitsValidation(edm::ParameterSet const &conf)
const HcalDDDRecConstants * hcons_
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_ecalEE_
maxPt
Definition: PV_cfg.py:224
MonitorElement * meEnConeEtaProfile_EH
bool isValid() const
Definition: HandleBase.h:70
HLT enums.
MonitorElement * occupancy_vs_ieta_HO
std::vector< MonitorElement * > occupancy_vs_ieta_HB
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hcal_
tmp
align.sh
Definition: createJobs.py:716
std::vector< MonitorElement * > Nhb
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
std::vector< MonitorElement * > Nhe
Definition: Run.h:45
ib
Definition: cuy.py:661
std::vector< MonitorElement * > meSimHitsEnergyHF
virtual double getBinContent(int binx) const
get content of bin (1-D)