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  int npart = 0;
300 
301  const HepMC::GenEvent *myGenEvent = evtMC->GetEvent();
302  for (HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end();
303  ++p) {
304  double phip = (*p)->momentum().phi();
305  double etap = (*p)->momentum().eta();
306  double pt = (*p)->momentum().perp();
307  if (pt > maxPt) {
308  npart++;
309  maxPt = pt;
310  phi_MC = phip;
311  eta_MC = etap;
312  }
313  }
314 
315  double partR = 0.3;
316 
317  // Hcal SimHits
318 
319  // Approximate calibration constants
320  const float calib_HB = 120.;
321  const float calib_HE = 190.;
322  const float calib_HF1 = hf1_; // 1.0/0.383;
323  const float calib_HF2 = hf2_; // 1.0/0.368;
324 
325  const edm::Handle<edm::PCaloHitContainer> &hcalHits = ev.getHandle(tok_hcal_);
326  const auto SimHitResult = hcalHits.product();
327 
328  float eta_diff;
329  float etaMax = 9999;
330  int ietaMax = 0;
331 
332  double HcalCone = 0;
333 
334  geometry_ = &c.getData(tok_geom_);
335 
336  for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResult->begin(); SimHits != SimHitResult->end();
337  ++SimHits) {
338  HcalDetId cell;
339  if (testNumber_)
340  cell = HcalHitRelabeller::relabel(SimHits->id(), hcons_);
341  else
342  cell = HcalDetId(SimHits->id());
343 
344  auto cellGeometry = geometry_->getSubdetectorGeometry(cell)->getGeometry(cell);
345  double etaS = cellGeometry->getPosition().eta();
346  double phiS = cellGeometry->getPosition().phi();
347  double en = SimHits->energy();
348 
349  int sub = cell.subdet();
350  int depth = cell.depth();
351  double ieta = cell.ieta();
352 
353  // Energy in Cone
354  double r = dR(eta_MC, phi_MC, etaS, phiS);
355 
356  if (r < partR) {
357  eta_diff = std::abs(eta_MC - etaS);
358  if (eta_diff < etaMax) {
359  etaMax = eta_diff;
360  ietaMax = cell.ieta();
361  }
362  // Approximation of calibration
363  if (sub == 1)
364  HcalCone += en * calib_HB;
365  else if (sub == 2)
366  HcalCone += en * calib_HE;
367  else if (sub == 4 && (depth == 1 || depth == 3))
368  HcalCone += en * calib_HF1;
369  else if (sub == 4 && (depth == 2 || depth == 4))
370  HcalCone += en * calib_HF2;
371  }
372 
373  if (auxPlots_) {
374  // HB
375  if (sub == 1) {
376  meSimHitsEnergyHB[0]->Fill(en);
377  meSimHitsEnergyHB[depth]->Fill(en);
378 
379  emean_vs_ieta_HB[0]->Fill(double(ieta), en);
380  emean_vs_ieta_HB[depth]->Fill(double(ieta), en);
381 
382  occupancy_vs_ieta_HB[0]->Fill(double(ieta));
383  occupancy_vs_ieta_HB[depth]->Fill(double(ieta));
384  }
385  // HE
386  if (sub == 2 && maxDepthHE_ > 0) {
387  meSimHitsEnergyHE[0]->Fill(en);
388  meSimHitsEnergyHE[depth]->Fill(en);
389 
390  emean_vs_ieta_HE[0]->Fill(double(ieta), en);
391  emean_vs_ieta_HE[depth]->Fill(double(ieta), en);
392 
393  occupancy_vs_ieta_HE[0]->Fill(double(ieta));
394  occupancy_vs_ieta_HE[depth]->Fill(double(ieta));
395  }
396  // HO
397  if (sub == 3) {
398  meSimHitsEnergyHO->Fill(en);
399 
400  emean_vs_ieta_HO->Fill(double(ieta), en);
401 
402  occupancy_vs_ieta_HO->Fill(double(ieta));
403  }
404  // HF
405  if (sub == 4) {
406  meSimHitsEnergyHF[0]->Fill(en);
407  meSimHitsEnergyHF[depth]->Fill(en);
408 
409  emean_vs_ieta_HF[0]->Fill(double(ieta), en);
410  emean_vs_ieta_HF[depth]->Fill(double(ieta), en);
411 
412  occupancy_vs_ieta_HF[0]->Fill(double(ieta));
413  occupancy_vs_ieta_HF[depth]->Fill(double(ieta));
414  }
415 
416  } // auxPlots_
417 
418  } // Loop over SimHits
419 
420  // Ecal EB SimHits
421  double EcalCone = 0;
422 
423  if (!ebHits_.empty()) {
424  const auto &SimHitResultEB = &ev.get(tok_ecalEB_);
425 
426  for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResultEB->begin(); SimHits != SimHitResultEB->end();
427  ++SimHits) {
428  EBDetId EBid = EBDetId(SimHits->id());
429 
430  auto cellGeometry = geometry_->getSubdetectorGeometry(EBid)->getGeometry(EBid);
431  double etaS = cellGeometry->getPosition().eta();
432  double phiS = cellGeometry->getPosition().phi();
433  double en = SimHits->energy();
434 
435  double r = dR(eta_MC, phi_MC, etaS, phiS);
436 
437  if (r < partR)
438  EcalCone += en;
439  }
440  } // ebHits_
441 
442  // Ecal EE SimHits
443  if (!eeHits_.empty()) {
444  const auto &SimHitResultEE = &ev.get(tok_ecalEE_);
445 
446  for (std::vector<PCaloHit>::const_iterator SimHits = SimHitResultEE->begin(); SimHits != SimHitResultEE->end();
447  ++SimHits) {
448  EEDetId EEid = EEDetId(SimHits->id());
449 
450  auto cellGeometry = geometry_->getSubdetectorGeometry(EEid)->getGeometry(EEid);
451  double etaS = cellGeometry->getPosition().eta();
452  double phiS = cellGeometry->getPosition().phi();
453  double en = SimHits->energy();
454 
455  double r = dR(eta_MC, phi_MC, etaS, phiS);
456 
457  if (r < partR)
458  EcalCone += en;
459  }
460  } // eeHits_
461 
462  if (ietaMax != 0) { // If ietaMax == 0, there were no good HCAL SimHits
463  meEnConeEtaProfile->Fill(double(ietaMax), HcalCone);
464  meEnConeEtaProfile_E->Fill(double(ietaMax), EcalCone);
465  meEnConeEtaProfile_EH->Fill(double(ietaMax), HcalCone + EcalCone);
466  }
467 
468  nevtot++;
469 }
470 
471 double HcalSimHitsValidation::dR(double eta1, double phi1, double eta2, double phi2) {
472  double PI = 3.1415926535898;
473  double deltaphi = phi1 - phi2;
474  if (phi2 > phi1) {
475  deltaphi = phi2 - phi1;
476  }
477  if (deltaphi > PI) {
478  deltaphi = 2. * PI - deltaphi;
479  }
480  double deltaeta = eta2 - eta1;
481  double tmp = sqrt(deltaeta * deltaeta + deltaphi * deltaphi);
482  return tmp;
483 }
484 
485 double HcalSimHitsValidation::phi12(double phi1, double en1, double phi2, double en2) {
486  // weighted mean value of phi1 and phi2
487 
488  double tmp;
489  double PI = 3.1415926535898;
490  double a1 = phi1;
491  double a2 = phi2;
492 
493  if (a1 > 0.5 * PI && a2 < 0.)
494  a2 += 2 * PI;
495  if (a2 > 0.5 * PI && a1 < 0.)
496  a1 += 2 * PI;
497  tmp = (a1 * en1 + a2 * en2) / (en1 + en2);
498  if (tmp > PI)
499  tmp -= 2. * PI;
500 
501  return tmp;
502 }
503 
504 double HcalSimHitsValidation::dPhiWsign(double phi1, double phi2) {
505  // clockwise phi2 w.r.t phi1 means "+" phi distance
506  // anti-clockwise phi2 w.r.t phi1 means "-" phi distance
507 
508  double PI = 3.1415926535898;
509  double a1 = phi1;
510  double a2 = phi2;
511  double tmp = a2 - a1;
512  if (a1 * a2 < 0.) {
513  if (a1 > 0.5 * PI)
514  tmp += 2. * PI;
515  if (a2 > 0.5 * PI)
516  tmp -= 2. * PI;
517  }
518  return tmp;
519 }
520 
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
double phi12(double phi1, double en1, double phi2, double en2)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
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
double npart
Definition: HydjetWrapper.h:46
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:19
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Transition
Definition: Transition.h:12
std::vector< MonitorElement * > emean_vs_ieta_HE
bool getData(T &iHolder) const
Definition: EventSetup.h:122
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_
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)