CMS 3D CMS Logo

CaloTowersValidation.cc
Go to the documentation of this file.
5 
7  tok_calo_ = consumes<CaloTowerCollection>(conf.getUntrackedParameter<edm::InputTag>("CaloTowerCollectionLabel"));
8  tok_evt_ = consumes<edm::HepMCProduct>(edm::InputTag("generatorSmeared"));
9 
10  // DQM ROOT output
11  outputFile_ = conf.getUntrackedParameter<std::string>("outputFile", "myfile.root");
12 
13  hcalselector_ = conf.getUntrackedParameter<std::string>("hcalselector", "all");
14 
15  mc_ = conf.getUntrackedParameter<bool>("mc", true);
16  useAllHistos_ = conf.getUntrackedParameter<bool>("useAllHistos", false);
17 
18  etaMin[0] = 0.;
19  etaMax[0] = 1.4;
20  etaMin[1] = 1.4;
21  etaMax[1] = 2.9;
22  etaMin[2] = 2.9;
23  etaMax[2] = 5.2;
24 
25  isub = 0;
26  if (hcalselector_ == "HB")
27  isub = 1;
28  if (hcalselector_ == "HE")
29  isub = 2;
30  if (hcalselector_ == "HF")
31  isub = 3;
32 
33  imc = 1;
34  if (!mc_)
35  imc = 0;
36 
37  if (!outputFile_.empty()) {
38  edm::LogInfo("OutputInfo") << " Hcal RecHit Task histograms will be saved to '" << outputFile_.c_str() << "'";
39  } else {
40  edm::LogInfo("OutputInfo") << " Hcal RecHit Task histograms will NOT be saved";
41  }
42 
43  nevent = 0;
44  // const char * sub = hcalselector_.c_str();
45 }
46 
48 
50  edm::Run const& irun,
51  edm::EventSetup const& isetup) {
52  Char_t histo[100];
53 
54  ibooker.setCurrentFolder("CaloTowersV/CaloTowersTask");
55 
56  //These two histos are not drawn by our macros, but they are used
57  //in the EndJob for norms and such so I am leaving them alone for now
58  //-------------------------------------------------------------------------------------------
59  sprintf(histo, "Ntowers_per_event_vs_ieta");
60  Ntowers_vs_ieta = ibooker.book1D(histo, histo, 83, -41.5, 41.5);
61 
62  sprintf(histo, "CaloTowersTask_map_Nentries");
63  mapEnergy_N = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
64  //-------------------------------------------------------------------------------------------
65 
66  //These the single pion scan histos
67  //-------------------------------------------------------------------------------------------
68  sprintf(histo, "emean_vs_ieta_E");
69  emean_vs_ieta_E = ibooker.bookProfile(histo, histo, 83, -41.5, 41.5, -100., 2000., " ");
70  sprintf(histo, "emean_vs_ieta_H");
71  emean_vs_ieta_H = ibooker.bookProfile(histo, histo, 83, -41.5, 41.5, -100., 2000., " ");
72  sprintf(histo, "emean_vs_ieta_EH");
73  emean_vs_ieta_EH = ibooker.bookProfile(histo, histo, 83, -41.5, 41.5, -100., 2000., " ");
74  //These are drawn
75  sprintf(histo, "emean_vs_ieta_E1");
76  emean_vs_ieta_E1 = ibooker.bookProfile(histo, histo, 83, -41.5, 41.5, -100., 2000., " ");
77  sprintf(histo, "emean_vs_ieta_H1");
78  emean_vs_ieta_H1 = ibooker.bookProfile(histo, histo, 83, -41.5, 41.5, -100., 2000., " ");
79  sprintf(histo, "emean_vs_ieta_EH1");
80  emean_vs_ieta_EH1 = ibooker.bookProfile(histo, histo, 83, -41.5, 41.5, -100., 2000., " ");
81  //-------------------------------------------------------------------------------------------
82 
83  //Map energy histos are not drawn
84  if (useAllHistos_) {
85  sprintf(histo, "CaloTowersTask_map_energy_E");
86  mapEnergy_E = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
87  sprintf(histo, "CaloTowersTask_map_energy_H");
88  mapEnergy_H = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
89  sprintf(histo, "CaloTowersTask_map_energy_EH");
90  mapEnergy_EH = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
91  }
92 
93  //All ECAL cell histos are used
94  // XXX: ECAL 0-25 [0-26, 26 bins] HCAL 0-4 [0-5, 5 bins]
95  sprintf(histo, "number_of_bad_cells_Ecal_EB");
96  numBadCellsEcal_EB = ibooker.book1D(histo, histo, 26, 0, 26);
97  sprintf(histo, "number_of_bad_cells_Ecal_EE");
98  numBadCellsEcal_EE = ibooker.book1D(histo, histo, 26, 0, 26);
99  sprintf(histo, "number_of_recovered_cells_Ecal_EB");
100  numRcvCellsEcal_EB = ibooker.book1D(histo, histo, 26, 0, 26);
101  sprintf(histo, "number_of_recovered_cells_Ecal_EE");
102  numRcvCellsEcal_EE = ibooker.book1D(histo, histo, 26, 0, 26);
103  sprintf(histo, "number_of_problematic_cells_Ecal_EB");
104  numPrbCellsEcal_EB = ibooker.book1D(histo, histo, 26, 0, 26);
105  sprintf(histo, "number_of_problematic_cells_Ecal_EE");
106  numPrbCellsEcal_EE = ibooker.book1D(histo, histo, 26, 0, 26);
107 
108  //Occupancy vs. ieta is drawn, occupancy map is needed to draw it
109  sprintf(histo, "CaloTowersTask_map_occupancy");
110  occupancy_map = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
111 
112  sprintf(histo, "CaloTowersTask_occupancy_vs_ieta");
113  occupancy_vs_ieta = ibooker.book1D(histo, histo, 83, -41.5, 41.5);
114 
115  if (isub == 1 || isub == 0) {
116  //All cell histos are used
117  sprintf(histo, "number_of_bad_cells_Hcal_HB");
118  numBadCellsHcal_HB = ibooker.book1D(histo, histo, 5, 0, 5);
119  sprintf(histo, "number_of_recovered_cells_Hcal_HB");
120  numRcvCellsHcal_HB = ibooker.book1D(histo, histo, 5, 0, 5);
121  sprintf(histo, "number_of_problematic_cells_Hcal_HB");
122  numPrbCellsHcal_HB = ibooker.book1D(histo, histo, 5, 0, 5);
123 
124  //These are the five oldest CaloTower histos used: NTowers, E in HCAL/ECAL, MET and SET
125  //-------------------------------------------------------------------------------------------
126  sprintf(histo, "CaloTowersTask_energy_HCAL_HB");
127  meEnergyHcal_HB = ibooker.book1D(histo, histo, 4100, -200, 8000);
128 
129  sprintf(histo, "CaloTowersTask_energy_ECAL_HB");
130  meEnergyEcal_HB = ibooker.book1D(histo, histo, 3100, -200, 6000);
131 
132  sprintf(histo, "CaloTowersTask_number_of_fired_towers_HB");
133  meNumFiredTowers_HB = ibooker.book1D(histo, histo, 1000, 0, 2000);
134 
135  sprintf(histo, "CaloTowersTask_MET_HB");
136  MET_HB = ibooker.book1D(histo, histo, 3000, 0., 3000.);
137 
138  sprintf(histo, "CaloTowersTask_SET_HB");
139  SET_HB = ibooker.book1D(histo, histo, 8000, 0., 8000.);
140  //-------------------------------------------------------------------------------------------
141 
142  //Timing histos and profiles -- all six are necessary
143  //-------------------------------------------------------------------------------------------
144  sprintf(histo, "CaloTowersTask_EM_Timing_HB");
145  emTiming_HB = ibooker.book1D(histo, histo, 110, -120., 100.);
146 
147  sprintf(histo, "CaloTowersTask_HAD_Timing_HB");
148  hadTiming_HB = ibooker.book1D(histo, histo, 70, -48., 92.);
149 
150  //Energy-Timing histos are divided into low, medium and high to reduce memory usage
151  //EM
152  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_Low_HB");
153  emEnergyTiming_Low_HB = ibooker.book2D(histo, histo, 40, 0., 40., 110, -120., 100.);
154 
155  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_HB");
156  emEnergyTiming_HB = ibooker.book2D(histo, histo, 200, 0., 400., 110, -120., 100.);
157 
158  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_High_HB");
159  emEnergyTiming_High_HB = ibooker.book2D(histo, histo, 200, 0., 3000., 110, -120., 100.);
160 
161  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_profile_Low_HB");
162  emEnergyTiming_profile_Low_HB = ibooker.bookProfile(histo, histo, 40, 0., 40., 110, -120., 100.);
163 
164  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_profile_HB");
165  emEnergyTiming_profile_HB = ibooker.bookProfile(histo, histo, 200, 0., 400., 110, -120., 100.);
166 
167  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_profile_High_HB");
168  emEnergyTiming_profile_High_HB = ibooker.bookProfile(histo, histo, 200, 0., 3000., 110, -120., 100.);
169 
170  //HAD
171  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_Low_HB");
172  hadEnergyTiming_Low_HB = ibooker.book2D(histo, histo, 40, 0., 40., 70, -48., 92.);
173 
174  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_HB");
175  hadEnergyTiming_HB = ibooker.book2D(histo, histo, 100, 0., 200., 70, -48., 92.);
176 
177  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_High_HB");
178  hadEnergyTiming_High_HB = ibooker.book2D(histo, histo, 300, 0., 3000., 70, -48., 92.);
179 
180  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_profile_Low_HB");
181  hadEnergyTiming_profile_Low_HB = ibooker.bookProfile(histo, histo, 40, 0., 40., 70, -48., 92.);
182 
183  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_profile_HB");
184  hadEnergyTiming_profile_HB = ibooker.bookProfile(histo, histo, 100, 0., 200., 70, -48., 92.);
185 
186  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_profile_High_HB");
187  hadEnergyTiming_profile_High_HB = ibooker.bookProfile(histo, histo, 300, 0., 3000., 70, -48., 92.);
188  //-------------------------------------------------------------------------------------------
189 
190  //Everything else is not drawn
191  if (useAllHistos_) {
192  sprintf(histo, "CaloTowersTask_sum_of_energy_HCAL_vs_ECAL_HB");
193  meEnergyHcalvsEcal_HB = ibooker.book2D(histo, histo, 500, 0., 500., 500, 0., 500.);
194 
195  sprintf(histo, "CaloTowersTask_energy_OUTER_HB");
196  meEnergyHO_HB = ibooker.book1D(histo, histo, 1640, -200, 8000);
197 
198  sprintf(histo, "CaloTowersTask_energy_of_ECAL_component_of_tower_HB");
199  meEnergyEcalTower_HB = ibooker.book1D(histo, histo, 440, -200, 2000);
200 
201  sprintf(histo, "CaloTowersTask_energy_of_HCAL_component_of_tower_HB");
202  meEnergyHcalTower_HB = ibooker.book1D(histo, histo, 440, -200, 2000);
203 
204  sprintf(histo, "CaloTowersTask_energy_HcalPlusEcalPlusHO_HB");
205  meTotEnergy_HB = ibooker.book1D(histo, histo, 400, 0., 2000.);
206 
207  sprintf(histo, "CaloTowersTask_map_energy_HB");
208  mapEnergy_HB = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
209  sprintf(histo, "CaloTowersTask_map_energy_HCAL_HB");
210  mapEnergyHcal_HB = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
211  sprintf(histo, "CaloTowersTask_map_energy_ECAL_HB");
212  mapEnergyEcal_HB = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
213 
214  sprintf(histo, "CaloTowersTask_phi_MET_HB");
215  phiMET_HB = ibooker.book1D(histo, histo, 72, -3.1415926535898, 3.1415926535898);
216  }
217  }
218 
219  if (isub == 2 || isub == 0) {
220  //All cell histos are used
221  sprintf(histo, "number_of_bad_cells_Hcal_HE");
222  numBadCellsHcal_HE = ibooker.book1D(histo, histo, 5, 0, 5);
223  sprintf(histo, "number_of_recovered_cells_Hcal_HE");
224  numRcvCellsHcal_HE = ibooker.book1D(histo, histo, 5, 0, 5);
225  sprintf(histo, "number_of_problematic_cells_Hcal_HE");
226  numPrbCellsHcal_HE = ibooker.book1D(histo, histo, 5, 0, 5);
227 
228  //These are the five oldest CaloTower histos used: NTowers, E in HCAL/ECAL, MET and SET
229  //-------------------------------------------------------------------------------------------
230  sprintf(histo, "CaloTowersTask_energy_HCAL_HE");
231  meEnergyHcal_HE = ibooker.book1D(histo, histo, 1240, -200, 6000);
232 
233  sprintf(histo, "CaloTowersTask_energy_ECAL_HE");
234  meEnergyEcal_HE = ibooker.book1D(histo, histo, 1240, -200, 6000);
235 
236  sprintf(histo, "CaloTowersTask_number_of_fired_towers_HE");
237  meNumFiredTowers_HE = ibooker.book1D(histo, histo, 1000, 0, 2000);
238 
239  sprintf(histo, "CaloTowersTask_MET_HE");
240  MET_HE = ibooker.book1D(histo, histo, 1000, 0., 1000.);
241 
242  sprintf(histo, "CaloTowersTask_SET_HE");
243  SET_HE = ibooker.book1D(histo, histo, 2000, 0., 2000.);
244  //-------------------------------------------------------------------------------------------
245 
246  //Timing histos and profiles -- all six are necessary
247  //-------------------------------------------------------------------------------------------
248  sprintf(histo, "CaloTowersTask_EM_Timing_HE");
249  emTiming_HE = ibooker.book1D(histo, histo, 110, -120., 100.);
250 
251  sprintf(histo, "CaloTowersTask_HAD_Timing_HE");
252  hadTiming_HE = ibooker.book1D(histo, histo, 70, -48., 92.);
253 
254  //Energy-Timing histos are divided into low and normal to reduce memory usage
255  //EM
256  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_Low_HE");
257  emEnergyTiming_Low_HE = ibooker.book2D(histo, histo, 160, 0., 160., 110, -120., 100.);
258 
259  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_HE");
260  emEnergyTiming_HE = ibooker.book2D(histo, histo, 200, 0., 800., 110, -120., 100.);
261 
262  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_profile_Low_HE");
263  emEnergyTiming_profile_Low_HE = ibooker.bookProfile(histo, histo, 160, 0., 160., 110, -120., 100.);
264 
265  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_profile_HE");
266  emEnergyTiming_profile_HE = ibooker.bookProfile(histo, histo, 200, 0., 800., 110, -120., 100.);
267 
268  //HAD
269  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_Low_HE");
270  hadEnergyTiming_Low_HE = ibooker.book2D(histo, histo, 160, 0., 160., 70, -48., 92.);
271 
272  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_HE");
273  hadEnergyTiming_HE = ibooker.book2D(histo, histo, 200, 0., 800., 70, -48., 92.);
274 
275  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_profile_Low_HE");
276  hadEnergyTiming_profile_Low_HE = ibooker.bookProfile(histo, histo, 160, 0., 160., 70, -48., 92.);
277 
278  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_profile_HE");
279  hadEnergyTiming_profile_HE = ibooker.bookProfile(histo, histo, 200, 0., 800., 70, -48., 92.);
280  //-------------------------------------------------------------------------------------------
281 
282  //Everything else is not drawn
283  if (useAllHistos_) {
284  sprintf(histo, "CaloTowersTask_sum_of_energy_HCAL_vs_ECAL_HE");
285  meEnergyHcalvsEcal_HE = ibooker.book2D(histo, histo, 500, 0., 500., 500, 0., 500.);
286 
287  sprintf(histo, "CaloTowersTask_energy_OUTER_HE");
288  meEnergyHO_HE = ibooker.book1D(histo, histo, 440, -200, 2000);
289 
290  sprintf(histo, "CaloTowersTask_energy_of_ECAL_component_of_tower_HE");
291  meEnergyEcalTower_HE = ibooker.book1D(histo, histo, 1100, -200, 2000);
292 
293  sprintf(histo, "CaloTowersTask_energy_of_HCAL_component_of_tower_HE");
294  meEnergyHcalTower_HE = ibooker.book1D(histo, histo, 1100, -200, 2000);
295 
296  sprintf(histo, "CaloTowersTask_energy_HcalPlusEcalPlusHO_HE");
297  meTotEnergy_HE = ibooker.book1D(histo, histo, 400, 0., 2000.);
298 
299  sprintf(histo, "CaloTowersTask_map_energy_HE");
300  mapEnergy_HE = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
301  sprintf(histo, "CaloTowersTask_map_energy_HCAL_HE");
302  mapEnergyHcal_HE = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
303  sprintf(histo, "CaloTowersTask_map_energy_ECAL_HE");
304  mapEnergyEcal_HE = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
305 
306  sprintf(histo, "CaloTowersTask_phi_MET_HE");
307  phiMET_HE = ibooker.book1D(histo, histo, 72, -3.1415926535898, 3.1415926535898);
308  }
309  }
310 
311  if (isub == 3 || isub == 0) {
312  //All cell histos are used
313  sprintf(histo, "number_of_bad_cells_Hcal_HF");
314  numBadCellsHcal_HF = ibooker.book1D(histo, histo, 5, 0, 5);
315  sprintf(histo, "number_of_recovered_cells_Hcal_HF");
316  numRcvCellsHcal_HF = ibooker.book1D(histo, histo, 5, 0, 5);
317  sprintf(histo, "number_of_problematic_cells_Hcal_HF");
318  numPrbCellsHcal_HF = ibooker.book1D(histo, histo, 5, 0, 5);
319 
320  //These are the five oldest CaloTower histos used: NTowers, E in HCAL/ECAL, MET and SET
321  //-------------------------------------------------------------------------------------------
322  sprintf(histo, "CaloTowersTask_energy_HCAL_HF");
323  meEnergyHcal_HF = ibooker.book1D(histo, histo, 4040, -200, 20000);
324 
325  sprintf(histo, "CaloTowersTask_energy_ECAL_HF");
326  meEnergyEcal_HF = ibooker.book1D(histo, histo, 2440, -200, 12000);
327 
328  sprintf(histo, "CaloTowersTask_number_of_fired_towers_HF");
329  meNumFiredTowers_HF = ibooker.book1D(histo, histo, 1000, 0, 2000);
330 
331  sprintf(histo, "CaloTowersTask_MET_HF");
332  MET_HF = ibooker.book1D(histo, histo, 500, 0., 500.);
333 
334  sprintf(histo, "CaloTowersTask_SET_HF");
335  SET_HF = ibooker.book1D(histo, histo, 2000, 0., 2000.);
336  //-------------------------------------------------------------------------------------------
337 
338  //Timing histos and profiles -- all six are necessary
339  //-------------------------------------------------------------------------------------------
340  sprintf(histo, "CaloTowersTask_EM_Timing_HF");
341  emTiming_HF = ibooker.book1D(histo, histo, 110, -120., 100.);
342 
343  sprintf(histo, "CaloTowersTask_HAD_Timing_HF");
344  hadTiming_HF = ibooker.book1D(histo, histo, 70, -48., 92.);
345 
346  //EM
347  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_HF");
348  emEnergyTiming_HF = ibooker.book2D(histo, histo, 150, 0., 300., 110, -120., 100.);
349 
350  sprintf(histo, "CaloTowersTask_EM_Energy_Timing_profile_HF");
351  emEnergyTiming_profile_HF = ibooker.bookProfile(histo, histo, 150, 0., 300., 110, -120., 100.);
352 
353  //HAD (requires two different sets of histograms to lower RAM usage)
354  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_Low_HF");
355  hadEnergyTiming_Low_HF = ibooker.book2D(histo, histo, 40, 0., 40., 70, -48., 92.);
356 
357  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_HF");
358  hadEnergyTiming_HF = ibooker.book2D(histo, histo, 200, 0., 600., 70, -48., 92.);
359 
360  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_profile_Low_HF");
361  hadEnergyTiming_profile_Low_HF = ibooker.bookProfile(histo, histo, 40, 0., 40., 70, -48., 92.);
362 
363  sprintf(histo, "CaloTowersTask_HAD_Energy_Timing_profile_HF");
364  hadEnergyTiming_profile_HF = ibooker.bookProfile(histo, histo, 200, 0., 600., 70, -48., 92.);
365  //-------------------------------------------------------------------------------------------
366 
367  //Everything else is not drawn
368  if (useAllHistos_) {
369  sprintf(histo, "CaloTowersTask_sum_of_energy_HCAL_vs_ECAL_HF");
370  meEnergyHcalvsEcal_HF = ibooker.book2D(histo, histo, 500, 0., 500., 500, 0., 500.);
371 
372  sprintf(histo, "CaloTowersTask_energy_OUTER_HF");
373  meEnergyHO_HF = ibooker.book1D(histo, histo, 440, -200, 2000);
374 
375  sprintf(histo, "CaloTowersTask_energy_of_ECAL_component_of_tower_HF");
376  meEnergyEcalTower_HF = ibooker.book1D(histo, histo, 440, -200, 2000);
377 
378  sprintf(histo, "CaloTowersTask_energy_of_HCAL_component_of_tower_HF");
379  meEnergyHcalTower_HF = ibooker.book1D(histo, histo, 440, -200, 2000);
380 
381  sprintf(histo, "CaloTowersTask_energy_HcalPlusEcalPlusHO_HF");
382  meTotEnergy_HF = ibooker.book1D(histo, histo, 400, 0., 2000.);
383 
384  sprintf(histo, "CaloTowersTask_map_energy_HF");
385  mapEnergy_HF = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
386  sprintf(histo, "CaloTowersTask_map_energy_HCAL_HF");
387  mapEnergyHcal_HF = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
388  sprintf(histo, "CaloTowersTask_map_energy_ECAL_HF");
389  mapEnergyEcal_HF = ibooker.book2D(histo, histo, 83, -41.5, 41.5, 72, 0., 72.);
390 
391  sprintf(histo, "CaloTowersTask_phi_MET_HF");
392  phiMET_HF = ibooker.book1D(histo, histo, 72, -3.1415926535898, 3.1415926535898);
393  }
394  }
395 }
396 
398  nevent++;
399 
400  // bool MC = false; // UNUSED
401  double phi_MC = 9999.;
402  double eta_MC = 9999.;
403 
404  if (imc != 0) {
406  event.getByToken(tok_evt_, evtMC); // generator in late 310_preX
407  if (!evtMC.isValid()) {
408  std::cout << "no HepMCProduct found" << std::endl;
409  } else {
410  // MC=true; // UNUSED
411  // std::cout << "*** source HepMCProduct found"<< std::endl;
412  }
413 
414  // MC particle with highest pt is taken as a direction reference
415  double maxPt = -99999.;
416  int npart = 0;
417  const HepMC::GenEvent* myGenEvent = evtMC->GetEvent();
418  for (HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end();
419  ++p) {
420  double phip = (*p)->momentum().phi();
421  double etap = (*p)->momentum().eta();
422  // phi_MC = phip;
423  // eta_MC = etap;
424  double pt = (*p)->momentum().perp();
425  if (pt > maxPt) {
426  npart++;
427  maxPt = pt;
428  phi_MC = phip;
429  eta_MC = etap;
430  }
431  }
432  // std::cout << "*** Max pT = " << maxPt << std::endl;
433  }
434 
436  event.getByToken(tok_calo_, towers);
438 
439  double met;
440  double phimet;
441 
442  // ieta scan
443  double partR = 0.3;
444  double Rmin = 9999.;
445  double Econe = 0.;
446  double Hcone = 0.;
447  double Ee1 = 0.;
448  double Eh1 = 0.;
449  double ieta_MC = 9999;
450  double iphi_MC = 9999;
451  // double etaM = 9999.;
452 
453  // HB
454  double sumEnergyHcal_HB = 0.;
455  double sumEnergyEcal_HB = 0.;
456  double sumEnergyHO_HB = 0.;
457  Int_t numFiredTowers_HB = 0;
458  double metx_HB = 0.;
459  double mety_HB = 0.;
460  double metz_HB = 0.;
461  double sEt_HB = 0.;
462  // HE
463  double sumEnergyHcal_HE = 0.;
464  double sumEnergyEcal_HE = 0.;
465  double sumEnergyHO_HE = 0.;
466  Int_t numFiredTowers_HE = 0;
467  double metx_HE = 0.;
468  double mety_HE = 0.;
469  double metz_HE = 0.;
470  double sEt_HE = 0.;
471  // HF
472  double sumEnergyHcal_HF = 0.;
473  double sumEnergyEcal_HF = 0.;
474  double sumEnergyHO_HF = 0.;
475  Int_t numFiredTowers_HF = 0;
476  double metx_HF = 0.;
477  double mety_HF = 0.;
478  double metz_HF = 0.;
479  double sEt_HF = 0.;
480 
481  for (cal = towers->begin(); cal != towers->end(); ++cal) {
482  double eE = cal->emEnergy();
483  double eH = cal->hadEnergy();
484  double eHO = cal->outerEnergy();
485  double etaT = cal->eta();
486  double phiT = cal->phi();
487  double en = cal->energy();
488  double etT = cal->et();
489  double had_tm = cal->hcalTime();
490  double em_tm = cal->ecalTime();
491 
492  int numBadEcalCells = cal->numBadEcalCells();
493  int numRcvEcalCells = cal->numRecoveredEcalCells();
494  int numPrbEcalCells = cal->numProblematicEcalCells();
495 
496  int numBadHcalCells = cal->numBadHcalCells();
497  int numRcvHcalCells = cal->numRecoveredHcalCells();
498  int numPrbHcalCells = cal->numProblematicHcalCells();
499 
500  math::RhoEtaPhiVector mom(cal->et(), cal->eta(), cal->phi());
501  // Vector mom = cal->momentum();
502 
503  // cell properties
504  CaloTowerDetId idT = cal->id();
505  int ieta = idT.ieta();
506  int iphi = idT.iphi();
507 
508  // ecal: 0 EcalBarrel 1 EcalEndcap
509  // hcal: 0 hcalBarrel 1 HcalEndcap 2 HcalForward
510  std::vector<int> inEcals(2), inHcals(3);
511  unsigned int constitSize = cal->constituentsSize();
512  for (unsigned int ic = 0; ic < constitSize; ic++) {
513  DetId detId = cal->constituent(ic);
514  if (detId.det() == DetId::Ecal) {
515  if (detId.subdetId() == EcalBarrel)
516  inEcals[0] = 1;
517  else if (detId.subdetId() == EcalEndcap)
518  inEcals[1] = 1;
519  }
520  if (detId.det() == DetId::Hcal) {
521  if (HcalDetId(detId).subdet() == HcalBarrel)
522  inHcals[0] = 1;
523  else if (HcalDetId(detId).subdet() == HcalEndcap)
524  inHcals[1] = 1;
525  else if (HcalDetId(detId).subdet() == HcalForward)
526  inHcals[2] = 1;
527  }
528  }
529  //All cell histos are used
530  if (inEcals[0]) {
531  numBadCellsEcal_EB->Fill(numBadEcalCells);
532  numRcvCellsEcal_EB->Fill(numRcvEcalCells);
533  numPrbCellsEcal_EB->Fill(numPrbEcalCells);
534  }
535  if (inEcals[1]) {
536  numBadCellsEcal_EE->Fill(numBadEcalCells);
537  numRcvCellsEcal_EE->Fill(numRcvEcalCells);
538  numPrbCellsEcal_EE->Fill(numPrbEcalCells);
539  }
540 
541  if (imc != 0) {
542  double r = dR(eta_MC, phi_MC, etaT, phiT);
543 
544  if (r < partR) {
545  Econe += eE;
546  Hcone += eH;
547 
548  // closest to MC
549  if (r < Rmin) {
550  if (fabs(eta_MC) < 3.0 && (ieta > 29 || ieta < -29)) {
551  ;
552  } else {
553  Rmin = r;
554  ieta_MC = ieta;
555  iphi_MC = iphi;
556  Ee1 = eE;
557  Eh1 = eH;
558  }
559  }
560  }
561  }
562 
563  //Ntowers is used in EndJob, occupancy_map is used for occupancy vs ieta
564  Ntowers_vs_ieta->Fill(double(ieta), 1.);
565  occupancy_map->Fill(double(ieta), double(iphi));
566 
567  if ((isub == 0 || isub == 1) && (fabs(etaT) < etaMax[0] && fabs(etaT) >= etaMin[0])) {
568  //All cell histos are used
569  numBadCellsHcal_HB->Fill(numBadHcalCells);
570  numRcvCellsHcal_HB->Fill(numRcvHcalCells);
571  numPrbCellsHcal_HB->Fill(numPrbHcalCells);
572 
573  //Map energy histos are not used
574  if (useAllHistos_) {
575  mapEnergy_HB->Fill(double(ieta), double(iphi), en);
576  mapEnergyHcal_HB->Fill(double(ieta), double(iphi), eH);
577  mapEnergyEcal_HB->Fill(double(ieta), double(iphi), eE);
578  }
579  // std::cout << " e_ecal = " << eE << std::endl;
580 
581  // simple sums
582  sumEnergyHcal_HB += eH;
583  sumEnergyEcal_HB += eE;
584  sumEnergyHO_HB += eHO;
585 
586  numFiredTowers_HB++;
587 
588  //Not used
589  if (useAllHistos_) {
592  }
593 
594  // MET, SET & phimet
595  // double etT = cal->et();
596  metx_HB += mom.x();
597  mety_HB += mom.y(); //etT * sin(phiT);
598  sEt_HB += etT;
599 
600  //Timing (all histos are used)
601  emTiming_HB->Fill(em_tm);
602  hadTiming_HB->Fill(had_tm);
603 
604  emEnergyTiming_Low_HB->Fill(eE, em_tm);
605  emEnergyTiming_HB->Fill(eE, em_tm);
606  emEnergyTiming_High_HB->Fill(eE, em_tm);
608  emEnergyTiming_profile_HB->Fill(eE, em_tm);
610 
611  hadEnergyTiming_Low_HB->Fill(eH, had_tm);
612  hadEnergyTiming_HB->Fill(eH, had_tm);
613  hadEnergyTiming_High_HB->Fill(eH, had_tm);
615  hadEnergyTiming_profile_HB->Fill(eH, had_tm);
617  }
618 
619  if ((isub == 0 || isub == 2) && (fabs(etaT) < etaMax[1] && fabs(etaT) >= etaMin[1])) {
620  //All cell histos are used
621  numBadCellsHcal_HE->Fill(numBadHcalCells);
622  numRcvCellsHcal_HE->Fill(numRcvHcalCells);
623  numPrbCellsHcal_HE->Fill(numPrbHcalCells);
624 
625  //Map energy histos are not used
626  if (useAllHistos_) {
627  mapEnergy_HE->Fill(double(ieta), double(iphi), en);
628  mapEnergyHcal_HE->Fill(double(ieta), double(iphi), eH);
629  mapEnergyEcal_HE->Fill(double(ieta), double(iphi), eE);
630  }
631  // std::cout << " e_ecal = " << eE << std::endl;
632 
633  // simple sums
634  sumEnergyHcal_HE += eH;
635  sumEnergyEcal_HE += eE;
636  sumEnergyHO_HE += eHO;
637 
638  numFiredTowers_HE++;
639 
640  //Not used
641  if (useAllHistos_) {
644  }
645  // MET, SET & phimet
646  // double etT = cal->et();
647  metx_HE += mom.x();
648  mety_HE += mom.y(); //etT * sin(phiT);
649  sEt_HE += etT;
650 
651  //Timing (all histos are used)
652  emTiming_HE->Fill(em_tm);
653  hadTiming_HE->Fill(had_tm);
654 
655  emEnergyTiming_Low_HE->Fill(eE, em_tm);
656  emEnergyTiming_HE->Fill(eE, em_tm);
658  emEnergyTiming_profile_HE->Fill(eE, em_tm);
659 
660  hadEnergyTiming_Low_HE->Fill(eH, had_tm);
661  hadEnergyTiming_HE->Fill(eH, had_tm);
663  hadEnergyTiming_profile_HE->Fill(eH, had_tm);
664  }
665 
666  if ((isub == 0 || isub == 3) && (fabs(etaT) < etaMax[2] && fabs(etaT) >= etaMin[2])) {
667  //All cell histos are used
668  numBadCellsHcal_HF->Fill(numBadHcalCells);
669  numRcvCellsHcal_HF->Fill(numRcvHcalCells);
670  numPrbCellsHcal_HF->Fill(numPrbHcalCells);
671 
672  //Map energy histos are not used
673  if (useAllHistos_) {
674  mapEnergy_HF->Fill(double(ieta), double(iphi), en);
675  mapEnergyHcal_HF->Fill(double(ieta), double(iphi), eH);
676  mapEnergyEcal_HF->Fill(double(ieta), double(iphi), eE);
677  }
678  // std::cout << " e_ecal = " << eE << std::endl;
679 
680  // simple sums
681  sumEnergyHcal_HF += eH;
682  sumEnergyEcal_HF += eE;
683  sumEnergyHO_HF += eHO;
684 
685  numFiredTowers_HF++;
686 
687  //Not used
688  if (useAllHistos_) {
691  }
692  // MET, SET & phimet
693  // double etT = cal->et();
694  metx_HF += mom.x();
695  mety_HF += mom.y(); //etT * sin(phiT);
696  sEt_HF += etT;
697 
698  //Timing (all histos are used)
699  emTiming_HF->Fill(em_tm);
700  hadTiming_HF->Fill(had_tm);
701  emEnergyTiming_HF->Fill(eE, em_tm);
702  emEnergyTiming_profile_HF->Fill(eE, em_tm);
703 
704  hadEnergyTiming_Low_HF->Fill(eH, had_tm);
705  hadEnergyTiming_HF->Fill(eH, had_tm);
707  hadEnergyTiming_profile_HF->Fill(eH, had_tm);
708  }
709 
710  } // end of Towers cycle
711 
712  //These are the six single pion histos
713  emean_vs_ieta_E->Fill(double(ieta_MC), Econe);
714  emean_vs_ieta_H->Fill(double(ieta_MC), Hcone);
715  emean_vs_ieta_EH->Fill(double(ieta_MC), Econe + Hcone);
716  emean_vs_ieta_E1->Fill(double(ieta_MC), Ee1);
717  emean_vs_ieta_H1->Fill(double(ieta_MC), Eh1);
718  emean_vs_ieta_EH1->Fill(double(ieta_MC), Ee1 + Eh1);
719 
720  //Map histos are not used except the last one in EndJob
721  if (useAllHistos_) {
722  mapEnergy_E->Fill(double(ieta_MC), double(iphi_MC), Ee1);
723  mapEnergy_H->Fill(double(ieta_MC), double(iphi_MC), Eh1);
724  mapEnergy_EH->Fill(double(ieta_MC), double(iphi_MC), Ee1 + Eh1);
725  }
726  mapEnergy_N->Fill(double(ieta_MC), double(iphi_MC), 1.);
727 
728  if (isub == 0 || isub == 1) {
729  met = sqrt(metx_HB * metx_HB + mety_HB * mety_HB);
730  Vector metv(metx_HB, mety_HB, metz_HB);
731  phimet = metv.phi();
732 
733  //Five oldest drawn histos first; the rest are not used
734  meEnergyHcal_HB->Fill(sumEnergyHcal_HB);
735  meEnergyEcal_HB->Fill(sumEnergyEcal_HB);
736  meNumFiredTowers_HB->Fill(numFiredTowers_HB);
737  MET_HB->Fill(met);
738  SET_HB->Fill(sEt_HB);
739 
740  if (useAllHistos_) {
741  meEnergyHcalvsEcal_HB->Fill(sumEnergyEcal_HB, sumEnergyHcal_HB);
742  meEnergyHO_HB->Fill(sumEnergyHO_HB);
743  meTotEnergy_HB->Fill(sumEnergyHcal_HB + sumEnergyEcal_HB + sumEnergyHO_HB);
744  phiMET_HB->Fill(phimet);
745  }
746  }
747 
748  if (isub == 0 || isub == 2) {
749  met = sqrt(metx_HE * metx_HE + mety_HE * mety_HE);
750  Vector metv(metx_HE, mety_HE, metz_HE);
751  phimet = metv.phi();
752 
753  //Five oldest drawn histos first; the rest are not used
754  meEnergyHcal_HE->Fill(sumEnergyHcal_HE);
755  meEnergyEcal_HE->Fill(sumEnergyEcal_HE);
756  meNumFiredTowers_HE->Fill(numFiredTowers_HE);
757  MET_HE->Fill(met);
758  SET_HE->Fill(sEt_HE);
759 
760  if (useAllHistos_) {
761  meEnergyHcalvsEcal_HE->Fill(sumEnergyEcal_HE, sumEnergyHcal_HE);
762  meEnergyHO_HE->Fill(sumEnergyHO_HE);
763  meTotEnergy_HE->Fill(sumEnergyHcal_HE + sumEnergyEcal_HE + sumEnergyHO_HE);
764  phiMET_HE->Fill(phimet);
765  }
766  }
767 
768  if (isub == 0 || isub == 3) {
769  met = sqrt(metx_HF * metx_HF + mety_HF * mety_HF);
770  Vector metv(metx_HF, mety_HF, metz_HF);
771  phimet = metv.phi();
772 
773  //Five oldest drawn histos first; the rest are not used
774  meEnergyHcal_HF->Fill(sumEnergyHcal_HF);
775  meEnergyEcal_HF->Fill(sumEnergyEcal_HF);
776  meNumFiredTowers_HF->Fill(numFiredTowers_HF);
777  MET_HF->Fill(met);
778  SET_HF->Fill(sEt_HF);
779 
780  if (useAllHistos_) {
781  meEnergyHcalvsEcal_HF->Fill(sumEnergyEcal_HF, sumEnergyHcal_HF);
782  meEnergyHO_HF->Fill(sumEnergyHO_HF);
783  meTotEnergy_HF->Fill(sumEnergyHcal_HF + sumEnergyEcal_HF + sumEnergyHO_HF);
784  phiMET_HF->Fill(phimet);
785  }
786  }
787 }
788 
789 double CaloTowersValidation::dR(double eta1, double phi1, double eta2, double phi2) {
790  double PI = 3.1415926535898;
791  double deltaphi = phi1 - phi2;
792  if (phi2 > phi1) {
793  deltaphi = phi2 - phi1;
794  }
795  if (deltaphi > PI) {
796  deltaphi = 2. * PI - deltaphi;
797  }
798  double deltaeta = eta2 - eta1;
799  double tmp = sqrt(deltaeta * deltaeta + deltaphi * deltaphi);
800  return tmp;
801 }
802 
MonitorElement * emean_vs_ieta_E1
double dR(double eta1, double phi1, double eta2, double phi2)
MonitorElement * emean_vs_ieta_H1
MonitorElement * mapEnergyEcal_HE
MonitorElement * phiMET_HF
MonitorElement * hadEnergyTiming_profile_Low_HE
MonitorElement * emEnergyTiming_HE
MonitorElement * meEnergyHcalTower_HB
edm::EDGetTokenT< CaloTowerCollection > tok_calo_
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
MonitorElement * mapEnergy_HE
MonitorElement * meTotEnergy_HF
MonitorElement * hadTiming_HE
MonitorElement * hadEnergyTiming_profile_HF
MonitorElement * mapEnergyEcal_HB
MonitorElement * hadEnergyTiming_profile_HB
MonitorElement * mapEnergy_HF
MonitorElement * meEnergyHcalvsEcal_HE
std::vector< CaloTower >::const_iterator const_iterator
MonitorElement * meEnergyEcal_HB
MonitorElement * meTotEnergy_HB
MonitorElement * numPrbCellsHcal_HE
MonitorElement * hadEnergyTiming_profile_High_HB
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
double npart
Definition: HydjetWrapper.h:46
MonitorElement * meNumFiredTowers_HF
MonitorElement * phiMET_HE
MonitorElement * mapEnergyHcal_HB
MonitorElement * hadEnergyTiming_profile_HE
MonitorElement * meNumFiredTowers_HE
MonitorElement * hadTiming_HB
RhoEtaPhiVectorD RhoEtaPhiVector
spatial vector with cylindrical internal representation using pseudorapidity
Definition: Vector3D.h:33
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
MonitorElement * emTiming_HB
MonitorElement * hadEnergyTiming_Low_HE
MonitorElement * numBadCellsHcal_HB
MonitorElement * numBadCellsEcal_EE
MonitorElement * hadEnergyTiming_profile_Low_HF
T getUntrackedParameter(std::string const &, T const &) const
void Fill(long long x)
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
MonitorElement * numRcvCellsEcal_EB
MonitorElement * meEnergyHcalTower_HF
MonitorElement * meEnergyEcalTower_HB
MonitorElement * numPrbCellsEcal_EB
MonitorElement * numBadCellsEcal_EB
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:399
MonitorElement * emean_vs_ieta_EH
T sqrt(T t)
Definition: SSEVec.h:19
MonitorElement * emEnergyTiming_High_HB
MonitorElement * mapEnergyHcal_HE
MonitorElement * phiMET_HB
MonitorElement * hadEnergyTiming_profile_Low_HB
MonitorElement * emTiming_HF
MonitorElement * emEnergyTiming_Low_HE
MonitorElement * mapEnergy_E
MonitorElement * numBadCellsHcal_HF
MonitorElement * numPrbCellsHcal_HB
MonitorElement * meEnergyEcalTower_HE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
MonitorElement * meEnergyHcal_HF
MonitorElement * occupancy_vs_ieta
MonitorElement * numPrbCellsHcal_HF
MonitorElement * meEnergyEcalTower_HF
MonitorElement * meEnergyHcalvsEcal_HF
MonitorElement * hadEnergyTiming_High_HB
MonitorElement * emEnergyTiming_HF
MonitorElement * mapEnergy_H
MonitorElement * emTiming_HE
MonitorElement * emEnergyTiming_profile_Low_HB
MonitorElement * hadEnergyTiming_HF
MonitorElement * numRcvCellsEcal_EE
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:37
MonitorElement * meEnergyHO_HE
MonitorElement * numBadCellsHcal_HE
Log< level::Info, false > LogInfo
MonitorElement * hadTiming_HF
Definition: DetId.h:17
MonitorElement * numRcvCellsHcal_HE
MonitorElement * meEnergyHcal_HE
MonitorElement * meEnergyEcal_HF
MonitorElement * meEnergyHcalTower_HE
edm::EDGetTokenT< edm::HepMCProduct > tok_evt_
MonitorElement * hadEnergyTiming_HB
maxPt
Definition: PV_cfg.py:223
MonitorElement * numRcvCellsHcal_HB
MonitorElement * emEnergyTiming_HB
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
MonitorElement * emEnergyTiming_profile_HF
MonitorElement * numRcvCellsHcal_HF
MonitorElement * numPrbCellsEcal_EE
MonitorElement * hadEnergyTiming_Low_HB
MonitorElement * meEnergyHO_HF
bool isValid() const
Definition: HandleBase.h:70
void analyze(edm::Event const &e, edm::EventSetup const &c) override
MonitorElement * meEnergyHcal_HB
MonitorElement * emEnergyTiming_Low_HB
MonitorElement * meNumFiredTowers_HB
MonitorElement * Ntowers_vs_ieta
MonitorElement * emean_vs_ieta_EH1
MonitorElement * meEnergyEcal_HE
MonitorElement * occupancy_map
MonitorElement * hadEnergyTiming_Low_HF
MonitorElement * meTotEnergy_HE
MonitorElement * mapEnergyHcal_HF
MonitorElement * emEnergyTiming_profile_Low_HE
MonitorElement * hadEnergyTiming_HE
MonitorElement * emean_vs_ieta_E
MonitorElement * emean_vs_ieta_H
MonitorElement * meEnergyHcalvsEcal_HB
MonitorElement * emEnergyTiming_profile_HE
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
MonitorElement * meEnergyHO_HB
tmp
align.sh
Definition: createJobs.py:716
MonitorElement * emEnergyTiming_profile_HB
MonitorElement * mapEnergy_EH
MonitorElement * emEnergyTiming_profile_High_HB
const double Rmin[kNumberCalorimeter]
math::RhoEtaPhiVector Vector
MonitorElement * mapEnergy_N
CaloTowersValidation(edm::ParameterSet const &conf)
MonitorElement * mapEnergyEcal_HF
Definition: event.py:1
Definition: Run.h:45
MonitorElement * mapEnergy_HB