CMS 3D CMS Logo

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