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  const HepMC::GenEvent* myGenEvent = evtMC->GetEvent();
417  for (HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end();
418  ++p) {
419  double phip = (*p)->momentum().phi();
420  double etap = (*p)->momentum().eta();
421  // phi_MC = phip;
422  // eta_MC = etap;
423  double pt = (*p)->momentum().perp();
424  if (pt > maxPt) {
425  maxPt = pt;
426  phi_MC = phip;
427  eta_MC = etap;
428  }
429  }
430  // std::cout << "*** Max pT = " << maxPt << std::endl;
431  }
432 
434  event.getByToken(tok_calo_, towers);
436 
437  double met;
438  double phimet;
439 
440  // ieta scan
441  double partR = 0.3;
442  double Rmin = 9999.;
443  double Econe = 0.;
444  double Hcone = 0.;
445  double Ee1 = 0.;
446  double Eh1 = 0.;
447  double ieta_MC = 9999;
448  double iphi_MC = 9999;
449  // double etaM = 9999.;
450 
451  // HB
452  double sumEnergyHcal_HB = 0.;
453  double sumEnergyEcal_HB = 0.;
454  double sumEnergyHO_HB = 0.;
455  Int_t numFiredTowers_HB = 0;
456  double metx_HB = 0.;
457  double mety_HB = 0.;
458  double metz_HB = 0.;
459  double sEt_HB = 0.;
460  // HE
461  double sumEnergyHcal_HE = 0.;
462  double sumEnergyEcal_HE = 0.;
463  double sumEnergyHO_HE = 0.;
464  Int_t numFiredTowers_HE = 0;
465  double metx_HE = 0.;
466  double mety_HE = 0.;
467  double metz_HE = 0.;
468  double sEt_HE = 0.;
469  // HF
470  double sumEnergyHcal_HF = 0.;
471  double sumEnergyEcal_HF = 0.;
472  double sumEnergyHO_HF = 0.;
473  Int_t numFiredTowers_HF = 0;
474  double metx_HF = 0.;
475  double mety_HF = 0.;
476  double metz_HF = 0.;
477  double sEt_HF = 0.;
478 
479  for (cal = towers->begin(); cal != towers->end(); ++cal) {
480  double eE = cal->emEnergy();
481  double eH = cal->hadEnergy();
482  double eHO = cal->outerEnergy();
483  double etaT = cal->eta();
484  double phiT = cal->phi();
485  double en = cal->energy();
486  double etT = cal->et();
487  double had_tm = cal->hcalTime();
488  double em_tm = cal->ecalTime();
489 
490  int numBadEcalCells = cal->numBadEcalCells();
491  int numRcvEcalCells = cal->numRecoveredEcalCells();
492  int numPrbEcalCells = cal->numProblematicEcalCells();
493 
494  int numBadHcalCells = cal->numBadHcalCells();
495  int numRcvHcalCells = cal->numRecoveredHcalCells();
496  int numPrbHcalCells = cal->numProblematicHcalCells();
497 
498  math::RhoEtaPhiVector mom(cal->et(), cal->eta(), cal->phi());
499  // Vector mom = cal->momentum();
500 
501  // cell properties
502  CaloTowerDetId idT = cal->id();
503  int ieta = idT.ieta();
504  int iphi = idT.iphi();
505 
506  // ecal: 0 EcalBarrel 1 EcalEndcap
507  // hcal: 0 hcalBarrel 1 HcalEndcap 2 HcalForward
508  std::vector<int> inEcals(2), inHcals(3);
509  unsigned int constitSize = cal->constituentsSize();
510  for (unsigned int ic = 0; ic < constitSize; ic++) {
511  DetId detId = cal->constituent(ic);
512  if (detId.det() == DetId::Ecal) {
513  if (detId.subdetId() == EcalBarrel)
514  inEcals[0] = 1;
515  else if (detId.subdetId() == EcalEndcap)
516  inEcals[1] = 1;
517  }
518  if (detId.det() == DetId::Hcal) {
519  if (HcalDetId(detId).subdet() == HcalBarrel)
520  inHcals[0] = 1;
521  else if (HcalDetId(detId).subdet() == HcalEndcap)
522  inHcals[1] = 1;
523  else if (HcalDetId(detId).subdet() == HcalForward)
524  inHcals[2] = 1;
525  }
526  }
527  //All cell histos are used
528  if (inEcals[0]) {
529  numBadCellsEcal_EB->Fill(numBadEcalCells);
530  numRcvCellsEcal_EB->Fill(numRcvEcalCells);
531  numPrbCellsEcal_EB->Fill(numPrbEcalCells);
532  }
533  if (inEcals[1]) {
534  numBadCellsEcal_EE->Fill(numBadEcalCells);
535  numRcvCellsEcal_EE->Fill(numRcvEcalCells);
536  numPrbCellsEcal_EE->Fill(numPrbEcalCells);
537  }
538 
539  if (imc != 0) {
540  double r = dR(eta_MC, phi_MC, etaT, phiT);
541 
542  if (r < partR) {
543  Econe += eE;
544  Hcone += eH;
545 
546  // closest to MC
547  if (r < Rmin) {
548  if (fabs(eta_MC) < 3.0 && (ieta > 29 || ieta < -29)) {
549  ;
550  } else {
551  Rmin = r;
552  ieta_MC = ieta;
553  iphi_MC = iphi;
554  Ee1 = eE;
555  Eh1 = eH;
556  }
557  }
558  }
559  }
560 
561  //Ntowers is used in EndJob, occupancy_map is used for occupancy vs ieta
562  Ntowers_vs_ieta->Fill(double(ieta), 1.);
563  occupancy_map->Fill(double(ieta), double(iphi));
564 
565  if ((isub == 0 || isub == 1) && (fabs(etaT) < etaMax[0] && fabs(etaT) >= etaMin[0])) {
566  //All cell histos are used
567  numBadCellsHcal_HB->Fill(numBadHcalCells);
568  numRcvCellsHcal_HB->Fill(numRcvHcalCells);
569  numPrbCellsHcal_HB->Fill(numPrbHcalCells);
570 
571  //Map energy histos are not used
572  if (useAllHistos_) {
573  mapEnergy_HB->Fill(double(ieta), double(iphi), en);
574  mapEnergyHcal_HB->Fill(double(ieta), double(iphi), eH);
575  mapEnergyEcal_HB->Fill(double(ieta), double(iphi), eE);
576  }
577  // std::cout << " e_ecal = " << eE << std::endl;
578 
579  // simple sums
580  sumEnergyHcal_HB += eH;
581  sumEnergyEcal_HB += eE;
582  sumEnergyHO_HB += eHO;
583 
584  numFiredTowers_HB++;
585 
586  //Not used
587  if (useAllHistos_) {
590  }
591 
592  // MET, SET & phimet
593  // double etT = cal->et();
594  metx_HB += mom.x();
595  mety_HB += mom.y(); //etT * sin(phiT);
596  sEt_HB += etT;
597 
598  //Timing (all histos are used)
599  emTiming_HB->Fill(em_tm);
600  hadTiming_HB->Fill(had_tm);
601 
602  emEnergyTiming_Low_HB->Fill(eE, em_tm);
603  emEnergyTiming_HB->Fill(eE, em_tm);
604  emEnergyTiming_High_HB->Fill(eE, em_tm);
606  emEnergyTiming_profile_HB->Fill(eE, em_tm);
608 
609  hadEnergyTiming_Low_HB->Fill(eH, had_tm);
610  hadEnergyTiming_HB->Fill(eH, had_tm);
611  hadEnergyTiming_High_HB->Fill(eH, had_tm);
613  hadEnergyTiming_profile_HB->Fill(eH, had_tm);
615  }
616 
617  if ((isub == 0 || isub == 2) && (fabs(etaT) < etaMax[1] && fabs(etaT) >= etaMin[1])) {
618  //All cell histos are used
619  numBadCellsHcal_HE->Fill(numBadHcalCells);
620  numRcvCellsHcal_HE->Fill(numRcvHcalCells);
621  numPrbCellsHcal_HE->Fill(numPrbHcalCells);
622 
623  //Map energy histos are not used
624  if (useAllHistos_) {
625  mapEnergy_HE->Fill(double(ieta), double(iphi), en);
626  mapEnergyHcal_HE->Fill(double(ieta), double(iphi), eH);
627  mapEnergyEcal_HE->Fill(double(ieta), double(iphi), eE);
628  }
629  // std::cout << " e_ecal = " << eE << std::endl;
630 
631  // simple sums
632  sumEnergyHcal_HE += eH;
633  sumEnergyEcal_HE += eE;
634  sumEnergyHO_HE += eHO;
635 
636  numFiredTowers_HE++;
637 
638  //Not used
639  if (useAllHistos_) {
642  }
643  // MET, SET & phimet
644  // double etT = cal->et();
645  metx_HE += mom.x();
646  mety_HE += mom.y(); //etT * sin(phiT);
647  sEt_HE += etT;
648 
649  //Timing (all histos are used)
650  emTiming_HE->Fill(em_tm);
651  hadTiming_HE->Fill(had_tm);
652 
653  emEnergyTiming_Low_HE->Fill(eE, em_tm);
654  emEnergyTiming_HE->Fill(eE, em_tm);
656  emEnergyTiming_profile_HE->Fill(eE, em_tm);
657 
658  hadEnergyTiming_Low_HE->Fill(eH, had_tm);
659  hadEnergyTiming_HE->Fill(eH, had_tm);
661  hadEnergyTiming_profile_HE->Fill(eH, had_tm);
662  }
663 
664  if ((isub == 0 || isub == 3) && (fabs(etaT) < etaMax[2] && fabs(etaT) >= etaMin[2])) {
665  //All cell histos are used
666  numBadCellsHcal_HF->Fill(numBadHcalCells);
667  numRcvCellsHcal_HF->Fill(numRcvHcalCells);
668  numPrbCellsHcal_HF->Fill(numPrbHcalCells);
669 
670  //Map energy histos are not used
671  if (useAllHistos_) {
672  mapEnergy_HF->Fill(double(ieta), double(iphi), en);
673  mapEnergyHcal_HF->Fill(double(ieta), double(iphi), eH);
674  mapEnergyEcal_HF->Fill(double(ieta), double(iphi), eE);
675  }
676  // std::cout << " e_ecal = " << eE << std::endl;
677 
678  // simple sums
679  sumEnergyHcal_HF += eH;
680  sumEnergyEcal_HF += eE;
681  sumEnergyHO_HF += eHO;
682 
683  numFiredTowers_HF++;
684 
685  //Not used
686  if (useAllHistos_) {
689  }
690  // MET, SET & phimet
691  // double etT = cal->et();
692  metx_HF += mom.x();
693  mety_HF += mom.y(); //etT * sin(phiT);
694  sEt_HF += etT;
695 
696  //Timing (all histos are used)
697  emTiming_HF->Fill(em_tm);
698  hadTiming_HF->Fill(had_tm);
699  emEnergyTiming_HF->Fill(eE, em_tm);
700  emEnergyTiming_profile_HF->Fill(eE, em_tm);
701 
702  hadEnergyTiming_Low_HF->Fill(eH, had_tm);
703  hadEnergyTiming_HF->Fill(eH, had_tm);
705  hadEnergyTiming_profile_HF->Fill(eH, had_tm);
706  }
707 
708  } // end of Towers cycle
709 
710  //These are the six single pion histos
711  emean_vs_ieta_E->Fill(double(ieta_MC), Econe);
712  emean_vs_ieta_H->Fill(double(ieta_MC), Hcone);
713  emean_vs_ieta_EH->Fill(double(ieta_MC), Econe + Hcone);
714  emean_vs_ieta_E1->Fill(double(ieta_MC), Ee1);
715  emean_vs_ieta_H1->Fill(double(ieta_MC), Eh1);
716  emean_vs_ieta_EH1->Fill(double(ieta_MC), Ee1 + Eh1);
717 
718  //Map histos are not used except the last one in EndJob
719  if (useAllHistos_) {
720  mapEnergy_E->Fill(double(ieta_MC), double(iphi_MC), Ee1);
721  mapEnergy_H->Fill(double(ieta_MC), double(iphi_MC), Eh1);
722  mapEnergy_EH->Fill(double(ieta_MC), double(iphi_MC), Ee1 + Eh1);
723  }
724  mapEnergy_N->Fill(double(ieta_MC), double(iphi_MC), 1.);
725 
726  if (isub == 0 || isub == 1) {
727  met = sqrt(metx_HB * metx_HB + mety_HB * mety_HB);
728  Vector metv(metx_HB, mety_HB, metz_HB);
729  phimet = metv.phi();
730 
731  //Five oldest drawn histos first; the rest are not used
732  meEnergyHcal_HB->Fill(sumEnergyHcal_HB);
733  meEnergyEcal_HB->Fill(sumEnergyEcal_HB);
734  meNumFiredTowers_HB->Fill(numFiredTowers_HB);
735  MET_HB->Fill(met);
736  SET_HB->Fill(sEt_HB);
737 
738  if (useAllHistos_) {
739  meEnergyHcalvsEcal_HB->Fill(sumEnergyEcal_HB, sumEnergyHcal_HB);
740  meEnergyHO_HB->Fill(sumEnergyHO_HB);
741  meTotEnergy_HB->Fill(sumEnergyHcal_HB + sumEnergyEcal_HB + sumEnergyHO_HB);
742  phiMET_HB->Fill(phimet);
743  }
744  }
745 
746  if (isub == 0 || isub == 2) {
747  met = sqrt(metx_HE * metx_HE + mety_HE * mety_HE);
748  Vector metv(metx_HE, mety_HE, metz_HE);
749  phimet = metv.phi();
750 
751  //Five oldest drawn histos first; the rest are not used
752  meEnergyHcal_HE->Fill(sumEnergyHcal_HE);
753  meEnergyEcal_HE->Fill(sumEnergyEcal_HE);
754  meNumFiredTowers_HE->Fill(numFiredTowers_HE);
755  MET_HE->Fill(met);
756  SET_HE->Fill(sEt_HE);
757 
758  if (useAllHistos_) {
759  meEnergyHcalvsEcal_HE->Fill(sumEnergyEcal_HE, sumEnergyHcal_HE);
760  meEnergyHO_HE->Fill(sumEnergyHO_HE);
761  meTotEnergy_HE->Fill(sumEnergyHcal_HE + sumEnergyEcal_HE + sumEnergyHO_HE);
762  phiMET_HE->Fill(phimet);
763  }
764  }
765 
766  if (isub == 0 || isub == 3) {
767  met = sqrt(metx_HF * metx_HF + mety_HF * mety_HF);
768  Vector metv(metx_HF, mety_HF, metz_HF);
769  phimet = metv.phi();
770 
771  //Five oldest drawn histos first; the rest are not used
772  meEnergyHcal_HF->Fill(sumEnergyHcal_HF);
773  meEnergyEcal_HF->Fill(sumEnergyEcal_HF);
774  meNumFiredTowers_HF->Fill(numFiredTowers_HF);
775  MET_HF->Fill(met);
776  SET_HF->Fill(sEt_HF);
777 
778  if (useAllHistos_) {
779  meEnergyHcalvsEcal_HF->Fill(sumEnergyEcal_HF, sumEnergyHcal_HF);
780  meEnergyHO_HF->Fill(sumEnergyHO_HF);
781  meTotEnergy_HF->Fill(sumEnergyHcal_HF + sumEnergyEcal_HF + sumEnergyHO_HF);
782  phiMET_HF->Fill(phimet);
783  }
784  }
785 }
786 
787 double CaloTowersValidation::dR(double eta1, double phi1, double eta2, double phi2) {
788  double PI = 3.1415926535898;
789  double deltaphi = phi1 - phi2;
790  if (phi2 > phi1) {
791  deltaphi = phi2 - phi1;
792  }
793  if (deltaphi > PI) {
794  deltaphi = 2. * PI - deltaphi;
795  }
796  double deltaeta = eta2 - eta1;
797  double tmp = sqrt(deltaeta * deltaeta + deltaphi * deltaphi);
798  return tmp;
799 }
800 
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
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
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:408
MonitorElement * emean_vs_ieta_EH
T sqrt(T t)
Definition: SSEVec.h:23
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
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:224
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:221
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