CMS 3D CMS Logo

EgammaSuperClusters.cc
Go to the documentation of this file.
2 
6 
8 
13 
15 
17 
19  : MCTruthCollectionToken_(consumes<edm::HepMCProduct>(ps.getParameter<edm::InputTag>("MCTruthCollection"))),
20  barrelRawSuperClusterCollectionToken_(
21  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("barrelRawSuperClusterCollection"))),
22  barrelCorSuperClusterCollectionToken_(
23  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("barrelCorSuperClusterCollection"))),
24  endcapRawSuperClusterCollectionToken_(
25  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("endcapRawSuperClusterCollection"))),
26  endcapPreSuperClusterCollectionToken_(
27  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("endcapPreSuperClusterCollection"))),
28  endcapCorSuperClusterCollectionToken_(
29  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("endcapCorSuperClusterCollection"))),
30  barrelRecHitCollectionToken_(
31  consumes<EcalRecHitCollection>(ps.getParameter<edm::InputTag>("barrelRecHitCollection"))),
32  endcapRecHitCollectionToken_(
33  consumes<EcalRecHitCollection>(ps.getParameter<edm::InputTag>("endcapRecHitCollection"))),
34  hsSize_(ps, "Size"),
35  hsNumBC_(ps, "NumBC"),
36  hsET_(ps, "ET"),
37  hsEta_(ps, "Eta"),
38  hsPhi_(ps, "Phi"),
39  hsS1toS9_(ps, "S1toS9"),
40  hsS25toE_(ps, "S25toE"),
41  hsEoverTruth_(ps, "EoverTruth"),
42  hsdeltaR_(ps, "deltaR"),
43  hsphiWidth_(ps, "phiWidth"),
44  hsetaWidth_(ps, "etaWidth"),
45  hspreshowerE_(ps, "preshowerE"),
46  hsR_(ps, "R"),
47  hist_EB_RawSC_Size_(nullptr),
48  hist_EE_RawSC_Size_(nullptr),
49  hist_EB_CorSC_Size_(nullptr),
50  hist_EE_CorSC_Size_(nullptr),
51  hist_EE_PreSC_Size_(nullptr),
52  hist_EB_RawSC_NumBC_(nullptr),
53  hist_EE_RawSC_NumBC_(nullptr),
54  hist_EB_CorSC_NumBC_(nullptr),
55  hist_EE_CorSC_NumBC_(nullptr),
56  hist_EE_PreSC_NumBC_(nullptr),
57  hist_EB_RawSC_ET_(nullptr),
58  hist_EE_RawSC_ET_(nullptr),
59  hist_EB_CorSC_ET_(nullptr),
60  hist_EE_CorSC_ET_(nullptr),
61  hist_EE_PreSC_ET_(nullptr),
62  hist_EB_RawSC_Eta_(nullptr),
63  hist_EE_RawSC_Eta_(nullptr),
64  hist_EB_CorSC_Eta_(nullptr),
65  hist_EE_CorSC_Eta_(nullptr),
66  hist_EE_PreSC_Eta_(nullptr),
67  hist_EB_RawSC_Phi_(nullptr),
68  hist_EE_RawSC_Phi_(nullptr),
69  hist_EB_CorSC_Phi_(nullptr),
70  hist_EE_CorSC_Phi_(nullptr),
71  hist_EE_PreSC_Phi_(nullptr),
72  hist_EB_RawSC_S1toS9_(nullptr),
73  hist_EE_RawSC_S1toS9_(nullptr),
74  hist_EB_CorSC_S1toS9_(nullptr),
75  hist_EE_CorSC_S1toS9_(nullptr),
76  hist_EE_PreSC_S1toS9_(nullptr),
77  hist_EB_RawSC_S25toE_(nullptr),
78  hist_EE_RawSC_S25toE_(nullptr),
79  hist_EB_CorSC_S25toE_(nullptr),
80  hist_EE_CorSC_S25toE_(nullptr),
81  hist_EE_PreSC_S25toE_(nullptr),
82  hist_EB_RawSC_EoverTruth_(nullptr),
83  hist_EE_RawSC_EoverTruth_(nullptr),
84  hist_EB_CorSC_EoverTruth_(nullptr),
85  hist_EE_CorSC_EoverTruth_(nullptr),
86  hist_EE_PreSC_EoverTruth_(nullptr),
87  hist_EB_RawSC_deltaR_(nullptr),
88  hist_EE_RawSC_deltaR_(nullptr),
89  hist_EB_CorSC_deltaR_(nullptr),
90  hist_EE_CorSC_deltaR_(nullptr),
91  hist_EE_PreSC_deltaR_(nullptr),
92  hist_EE_PreSC_preshowerE_(nullptr),
93  hist_EE_CorSC_preshowerE_(nullptr),
94  hist_EE_CorSC_phiWidth_(nullptr),
95  hist_EB_CorSC_phiWidth_(nullptr),
96  hist_EE_CorSC_etaWidth_(nullptr),
97  hist_EB_CorSC_etaWidth_(nullptr),
98  hist_EB_CorSC_ET_vs_Eta_(nullptr),
99  hist_EB_CorSC_ET_vs_Phi_(nullptr),
100  hist_EE_CorSC_ET_vs_Eta_(nullptr),
101  hist_EE_CorSC_ET_vs_Phi_(nullptr),
102  hist_EE_CorSC_ET_vs_R_(nullptr) {}
103 
105 
107  _ibooker.setCurrentFolder("EcalClusterV/EcalSuperClusters/");
108 
109  // Number of SuperClusters
110  //
112  _ibooker.book1D("hist_EB_RawSC_Size_", "# Raw SuperClusters in Barrel", hsSize_.bins, hsSize_.min, hsSize_.max);
114  _ibooker.book1D("hist_EE_RawSC_Size_", "# Raw SuperClusters in Endcap", hsSize_.bins, hsSize_.min, hsSize_.max);
115  hist_EB_CorSC_Size_ = _ibooker.book1D(
116  "hist_EB_CorSC_Size_", "# Corrected SuperClusters in Barrel", hsSize_.bins, hsSize_.min, hsSize_.max);
117  hist_EE_CorSC_Size_ = _ibooker.book1D(
118  "hist_EE_CorSC_Size_", "# Corrected SuperClusters in Endcap", hsSize_.bins, hsSize_.min, hsSize_.max);
119  hist_EE_PreSC_Size_ = _ibooker.book1D(
120  "hist_EE_PreSC_Size_", "# SuperClusters with Preshower in Endcap", hsSize_.bins, hsSize_.min, hsSize_.max);
121 
122  // Number of BasicClusters in SuperCluster
123  //
124  hist_EB_RawSC_NumBC_ = _ibooker.book1D("hist_EB_RawSC_NumBC_",
125  "# of Basic Clusters in Raw Super Clusters in Barrel",
126  hsNumBC_.bins,
127  hsNumBC_.min,
128  hsNumBC_.max);
129  hist_EE_RawSC_NumBC_ = _ibooker.book1D("hist_EE_RawSC_NumBC_",
130  "# of Basic Clusters in Raw Super Clusters in Endcap",
131  hsNumBC_.bins,
132  hsNumBC_.min,
133  hsNumBC_.max);
134  hist_EB_CorSC_NumBC_ = _ibooker.book1D("hist_EB_CorSC_NumBC_",
135  "# of Basic Clusters in Corrected SuperClusters in Barrel",
136  hsNumBC_.bins,
137  hsNumBC_.min,
138  hsNumBC_.max);
139  hist_EE_CorSC_NumBC_ = _ibooker.book1D("hist_EE_CorSC_NumBC_",
140  "# of Basic Clusters in Corrected SuperClusters in Endcap",
141  hsNumBC_.bins,
142  hsNumBC_.min,
143  hsNumBC_.max);
144  hist_EE_PreSC_NumBC_ = _ibooker.book1D("hist_EE_PreSC_NumBC_",
145  "# of Basic Clusters in SuperClusters with Preshower in Endcap",
146  hsNumBC_.bins,
147  hsNumBC_.min,
148  hsNumBC_.max);
149 
150  // ET distribution of SuperClusters
151  //
153  _ibooker.book1D("hist_EB_RawSC_ET_", "ET of Raw SuperClusters in Barrel", hsET_.bins, hsET_.min, hsET_.max);
155  _ibooker.book1D("hist_EE_RawSC_ET_", "ET of Raw SuperClusters in Endcap", hsET_.bins, hsET_.min, hsET_.max);
157  _ibooker.book1D("hist_EB_CorSC_ET_", "ET of Corrected SuperClusters in Barrel", hsET_.bins, hsET_.min, hsET_.max);
159  _ibooker.book1D("hist_EE_CorSC_ET_", "ET of Corrected SuperClusters in Endcap", hsET_.bins, hsET_.min, hsET_.max);
160  hist_EE_PreSC_ET_ = _ibooker.book1D(
161  "hist_EE_PreSC_ET_", "ET of SuperClusters with Preshower in Endcap", hsET_.bins, hsET_.min, hsET_.max);
162 
163  // Eta distribution of SuperClusters
164  //
166  _ibooker.book1D("hist_EB_RawSC_Eta_", "Eta of Raw SuperClusters in Barrel", hsEta_.bins, hsEta_.min, hsEta_.max);
168  _ibooker.book1D("hist_EE_RawSC_Eta_", "Eta of Raw SuperClusters in Endcap", hsEta_.bins, hsEta_.min, hsEta_.max);
169  hist_EB_CorSC_Eta_ = _ibooker.book1D(
170  "hist_EB_CorSC_Eta_", "Eta of Corrected SuperClusters in Barrel", hsEta_.bins, hsEta_.min, hsEta_.max);
171  hist_EE_CorSC_Eta_ = _ibooker.book1D(
172  "hist_EE_CorSC_Eta_", "Eta of Corrected SuperClusters in Endcap", hsEta_.bins, hsEta_.min, hsEta_.max);
173  hist_EE_PreSC_Eta_ = _ibooker.book1D(
174  "hist_EE_PreSC_Eta_", "Eta of SuperClusters with Preshower in Endcap", hsEta_.bins, hsEta_.min, hsEta_.max);
175 
176  // Phi distribution of SuperClusters
177  //
179  _ibooker.book1D("hist_EB_RawSC_Phi_", "Phi of Raw SuperClusters in Barrel", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
181  _ibooker.book1D("hist_EE_RawSC_Phi_", "Phi of Raw SuperClusters in Endcap", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
182  hist_EB_CorSC_Phi_ = _ibooker.book1D(
183  "hist_EB_CorSC_Phi_", "Phi of Corrected SuperClusters in Barrel", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
184  hist_EE_CorSC_Phi_ = _ibooker.book1D(
185  "hist_EE_CorSC_Phi_", "Phi of Corrected SuperClusters in Endcap", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
186  hist_EE_PreSC_Phi_ = _ibooker.book1D(
187  "hist_EE_PreSC_Phi_", "Phi of SuperClusters with Preshower in Endcap", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
188 
189  // S1/S9 distribution of SuperClusters
190  //
191  hist_EB_RawSC_S1toS9_ = _ibooker.book1D(
192  "hist_EB_RawSC_S1toS9_", "S1/S9 of Raw Super Clusters in Barrel", hsS1toS9_.bins, hsS1toS9_.min, hsS1toS9_.max);
193  hist_EE_RawSC_S1toS9_ = _ibooker.book1D(
194  "hist_EE_RawSC_S1toS9_", "S1/S9 of Raw Super Clusters in Endcap", hsS1toS9_.bins, hsS1toS9_.min, hsS1toS9_.max);
195  hist_EB_CorSC_S1toS9_ = _ibooker.book1D("hist_EB_CorSC_S1toS9_",
196  "S1/S9 of Corrected SuperClusters in Barrel",
197  hsS1toS9_.bins,
198  hsS1toS9_.min,
199  hsS1toS9_.max);
200  hist_EE_CorSC_S1toS9_ = _ibooker.book1D("hist_EE_CorSC_S1toS9_",
201  "S1/S9 of Corrected SuperClusters in Endcap",
202  hsS1toS9_.bins,
203  hsS1toS9_.min,
204  hsS1toS9_.max);
205  hist_EE_PreSC_S1toS9_ = _ibooker.book1D("hist_EE_PreSC_S1toS9_",
206  "S1/S9 of SuperClusters with Preshower in Endcap",
207  hsS1toS9_.bins,
208  hsS1toS9_.min,
209  hsS1toS9_.max);
210 
211  // S25/E distribution of SuperClusters
212  //
213  hist_EB_RawSC_S25toE_ = _ibooker.book1D(
214  "hist_EB_RawSC_S25toE_", "S25/E of Raw Super Clusters in Barrel", hsS25toE_.bins, hsS25toE_.min, hsS25toE_.max);
215  hist_EE_RawSC_S25toE_ = _ibooker.book1D(
216  "hist_EE_RawSC_S25toE_", "S25/E of Raw Super Clusters in Endcap", hsS25toE_.bins, hsS25toE_.min, hsS25toE_.max);
217  hist_EB_CorSC_S25toE_ = _ibooker.book1D("hist_EB_CorSC_S25toE_",
218  "S25/E of Corrected SuperClusters in Barrel",
219  hsS25toE_.bins,
220  hsS25toE_.min,
221  hsS25toE_.max);
222  hist_EE_CorSC_S25toE_ = _ibooker.book1D("hist_EE_CorSC_S25toE_",
223  "S25/E of Corrected SuperClusters in Endcap",
224  hsS25toE_.bins,
225  hsS25toE_.min,
226  hsS25toE_.max);
227  hist_EE_PreSC_S25toE_ = _ibooker.book1D("hist_EE_PreSC_S25toE_",
228  "S25/E of SuperClusters with Preshower in Endcap",
229  hsS25toE_.bins,
230  hsS25toE_.min,
231  hsS25toE_.max);
232 
233  // E/E(true) distribution of SuperClusters
234  //
235  hist_EB_RawSC_EoverTruth_ = _ibooker.book1D("hist_EB_RawSC_EoverTruth_",
236  "E/True E of Raw SuperClusters in Barrel",
240  hist_EE_RawSC_EoverTruth_ = _ibooker.book1D("hist_EE_RawSC_EoverTruth_",
241  "E/True E of Raw SuperClusters in Endcap",
245  hist_EB_CorSC_EoverTruth_ = _ibooker.book1D("hist_EB_CorSC_EoverTruth_",
246  "E/True E of Corrected SuperClusters in Barrel",
250  hist_EE_CorSC_EoverTruth_ = _ibooker.book1D("hist_EE_CorSC_EoverTruth_",
251  "E/True E of Corrected SuperClusters in Endcap",
255  hist_EE_PreSC_EoverTruth_ = _ibooker.book1D("hist_EE_PreSC_EoverTruth_",
256  "E/True E of SuperClusters with Preshower in Endcap",
260 
261  // dR distribution of SuperClusters from truth
262  //
263  hist_EB_RawSC_deltaR_ = _ibooker.book1D("hist_EB_RawSC_deltaR_",
264  "dR to MC truth of Raw Super Clusters in Barrel",
265  hsdeltaR_.bins,
266  hsdeltaR_.min,
267  hsdeltaR_.max);
268  hist_EE_RawSC_deltaR_ = _ibooker.book1D("hist_EE_RawSC_deltaR_",
269  "dR to MC truth of Raw Super Clusters in Endcap",
270  hsdeltaR_.bins,
271  hsdeltaR_.min,
272  hsdeltaR_.max);
273  hist_EB_CorSC_deltaR_ = _ibooker.book1D("hist_EB_CorSC_deltaR_",
274  "dR to MC truth of Corrected SuperClusters in Barrel",
275  hsdeltaR_.bins,
276  hsdeltaR_.min,
277  hsdeltaR_.max);
278  hist_EE_CorSC_deltaR_ = _ibooker.book1D("hist_EE_CorSC_deltaR_",
279  "dR to MC truth of Corrected SuperClusters in Endcap",
280  hsdeltaR_.bins,
281  hsdeltaR_.min,
282  hsdeltaR_.max);
283  hist_EE_PreSC_deltaR_ = _ibooker.book1D("hist_EE_PreSC_deltaR_",
284  "dR to MC truth of SuperClusters with Preshower in Endcap",
285  hsdeltaR_.bins,
286  hsdeltaR_.min,
287  hsdeltaR_.max);
288 
289  // phi width stored in corrected SuperClusters
290  hist_EB_CorSC_phiWidth_ = _ibooker.book1D("hist_EB_CorSC_phiWidth_",
291  "phiWidth of Corrected Super Clusters in Barrel",
294  hsphiWidth_.max);
295  hist_EE_CorSC_phiWidth_ = _ibooker.book1D("hist_EE_CorSC_phiWidth_",
296  "phiWidth of Corrected Super Clusters in Endcap",
299  hsphiWidth_.max);
300 
301  // eta width stored in corrected SuperClusters
302  hist_EB_CorSC_etaWidth_ = _ibooker.book1D("hist_EB_CorSC_etaWidth_",
303  "etaWidth of Corrected Super Clusters in Barrel",
306  hsetaWidth_.max);
307  hist_EE_CorSC_etaWidth_ = _ibooker.book1D("hist_EE_CorSC_etaWidth_",
308  "etaWidth of Corrected Super Clusters in Endcap",
311  hsetaWidth_.max);
312 
313  // preshower energy
314  hist_EE_PreSC_preshowerE_ = _ibooker.book1D("hist_EE_PreSC_preshowerE_",
315  "preshower energy in Super Clusters with Preshower in Endcap",
319  hist_EE_CorSC_preshowerE_ = _ibooker.book1D("hist_EE_CorSC_preshowerE_",
320  "preshower energy in Corrected Super Clusters with Preshower in Endcap",
324 
325  //
326  hist_EB_CorSC_ET_vs_Eta_ = _ibooker.book2D("hist_EB_CorSC_ET_vs_Eta_",
327  "Corr Super Cluster ET versus Eta in Barrel",
328  hsET_.bins,
329  hsET_.min,
330  hsET_.max,
331  hsEta_.bins,
332  hsEta_.min,
333  hsEta_.max);
334 
335  hist_EB_CorSC_ET_vs_Phi_ = _ibooker.book2D("hist_EB_CorSC_ET_vs_Phi_",
336  "Corr Super Cluster ET versus Phi in Barrel",
337  hsET_.bins,
338  hsET_.min,
339  hsET_.max,
340  hsPhi_.bins,
341  hsPhi_.min,
342  hsPhi_.max);
343 
344  hist_EE_CorSC_ET_vs_Eta_ = _ibooker.book2D("hist_EE_CorSC_ET_vs_Eta_",
345  "Corr Super Cluster ET versus Eta in Endcap",
346  hsET_.bins,
347  hsET_.min,
348  hsET_.max,
349  hsEta_.bins,
350  hsEta_.min,
351  hsEta_.max);
352 
353  hist_EE_CorSC_ET_vs_Phi_ = _ibooker.book2D("hist_EE_CorSC_ET_vs_Phi_",
354  "Corr Super Cluster ET versus Phi in Endcap",
355  hsET_.bins,
356  hsET_.min,
357  hsET_.max,
358  hsPhi_.bins,
359  hsPhi_.min,
360  hsPhi_.max);
361 
362  hist_EE_CorSC_ET_vs_R_ = _ibooker.book2D("hist_EE_CorSC_ET_vs_R_",
363  "Corr Super Cluster ET versus Radius in Endcap",
364  hsET_.bins,
365  hsET_.min,
366  hsET_.max,
367  hsR_.bins,
368  hsR_.min,
369  hsR_.max);
370 }
371 
373  bool skipMC = false;
374  bool skipBarrel = false;
375  bool skipEndcap = false;
376 
377  //
378  // Get MCTRUTH
379  //
381  evt.getByToken(MCTruthCollectionToken_, pMCTruth);
382  if (!pMCTruth.isValid()) {
383  edm::LogError("EgammaSuperClusters") << "Error! can't get MC collection ";
384  skipMC = true;
385  }
386  const HepMC::GenEvent *genEvent = pMCTruth->GetEvent();
387 
388  if (skipMC)
389  return;
390 
391  //
392  // Get the BARREL products
393  //
394  edm::Handle<reco::SuperClusterCollection> pBarrelRawSuperClusters;
395  evt.getByToken(barrelRawSuperClusterCollectionToken_, pBarrelRawSuperClusters);
396  if (!pBarrelRawSuperClusters.isValid()) {
397  edm::LogError("EgammaSuperClusters") << "Error! can't get collection Raw SC";
398  skipBarrel = true;
399  }
400 
401  edm::Handle<reco::SuperClusterCollection> pBarrelCorSuperClusters;
402  evt.getByToken(barrelCorSuperClusterCollectionToken_, pBarrelCorSuperClusters);
403  if (!pBarrelCorSuperClusters.isValid()) {
404  edm::LogError("EgammaSuperClusters") << "Error! can't get collection Cor SC";
405  skipBarrel = true;
406  }
407 
408  edm::Handle<EBRecHitCollection> pBarrelRecHitCollection;
409  evt.getByToken(barrelRecHitCollectionToken_, pBarrelRecHitCollection);
410  if (!pBarrelRecHitCollection.isValid()) {
411  skipBarrel = true;
412  }
413  edm::Handle<EERecHitCollection> pEndcapRecHitCollection;
414  evt.getByToken(endcapRecHitCollectionToken_, pEndcapRecHitCollection);
415  if (!pEndcapRecHitCollection.isValid()) {
416  skipEndcap = true;
417  }
418 
419  if (skipBarrel || skipEndcap)
420  return;
421 
423 
424  // Get the BARREL collections
425  const reco::SuperClusterCollection *barrelRawSuperClusters = pBarrelRawSuperClusters.product();
426  const reco::SuperClusterCollection *barrelCorSuperClusters = pBarrelCorSuperClusters.product();
427 
428  // Number of entries in collections
429  hist_EB_RawSC_Size_->Fill(barrelRawSuperClusters->size());
430  hist_EB_CorSC_Size_->Fill(barrelCorSuperClusters->size());
431 
432  // Do RAW BARREL SuperClusters
433  for (reco::SuperClusterCollection::const_iterator aClus = barrelRawSuperClusters->begin();
434  aClus != barrelRawSuperClusters->end();
435  aClus++) {
436  // kinematics
437  hist_EB_RawSC_NumBC_->Fill(aClus->clustersSize());
438  hist_EB_RawSC_ET_->Fill(aClus->energy() / std::cosh(aClus->position().eta()));
439  hist_EB_RawSC_Eta_->Fill(aClus->position().eta());
440  hist_EB_RawSC_Phi_->Fill(aClus->position().phi());
441 
442  // cluster shape
443  const reco::CaloClusterPtr seed = aClus->seed();
444  hist_EB_RawSC_S1toS9_->Fill(lazyTool.eMax(*seed) / lazyTool.e3x3(*seed));
445  hist_EB_RawSC_S25toE_->Fill(lazyTool.e5x5(*seed) / aClus->energy());
446 
447  // truth
448  double dRClosest = 999.9;
449  double energyClosest = 0;
450  closestMCParticle(genEvent, *aClus, dRClosest, energyClosest);
451 
452  if (dRClosest < 0.1) {
453  hist_EB_RawSC_EoverTruth_->Fill(aClus->energy() / energyClosest);
454  hist_EB_RawSC_deltaR_->Fill(dRClosest);
455  }
456  }
457 
458  // Do CORRECTED BARREL SuperClusters
459  for (reco::SuperClusterCollection::const_iterator aClus = barrelCorSuperClusters->begin();
460  aClus != barrelCorSuperClusters->end();
461  aClus++) {
462  // kinematics
463  hist_EB_CorSC_NumBC_->Fill(aClus->clustersSize());
464  hist_EB_CorSC_ET_->Fill(aClus->energy() / std::cosh(aClus->position().eta()));
465  hist_EB_CorSC_Eta_->Fill(aClus->position().eta());
466  hist_EB_CorSC_Phi_->Fill(aClus->position().phi());
467 
468  hist_EB_CorSC_ET_vs_Eta_->Fill(aClus->energy() / std::cosh(aClus->position().eta()), aClus->eta());
469  hist_EB_CorSC_ET_vs_Phi_->Fill(aClus->energy() / std::cosh(aClus->position().eta()), aClus->phi());
470 
471  // cluster shape
472  const reco::CaloClusterPtr seed = aClus->seed();
473  hist_EB_CorSC_S1toS9_->Fill(lazyTool.eMax(*seed) / lazyTool.e3x3(*seed));
474  hist_EB_CorSC_S25toE_->Fill(lazyTool.e5x5(*seed) / aClus->energy());
475 
476  // correction variables
477  hist_EB_CorSC_phiWidth_->Fill(aClus->phiWidth());
478  hist_EB_CorSC_etaWidth_->Fill(aClus->etaWidth());
479 
480  // truth
481  double dRClosest = 999.9;
482  double energyClosest = 0;
483  closestMCParticle(genEvent, *aClus, dRClosest, energyClosest);
484 
485  if (dRClosest < 0.1) {
486  hist_EB_CorSC_EoverTruth_->Fill(aClus->energy() / energyClosest);
487  hist_EB_CorSC_deltaR_->Fill(dRClosest);
488  }
489  }
490 
491  //
492  // Get the ENDCAP products
493  //
494  edm::Handle<reco::SuperClusterCollection> pEndcapRawSuperClusters;
495  evt.getByToken(endcapRawSuperClusterCollectionToken_, pEndcapRawSuperClusters);
496  if (!pEndcapRawSuperClusters.isValid()) {
497  edm::LogError("EgammaSuperClusters") << "Error! can't get collection Raw EE SC";
498  }
499 
500  edm::Handle<reco::SuperClusterCollection> pEndcapPreSuperClusters;
501  evt.getByToken(endcapPreSuperClusterCollectionToken_, pEndcapPreSuperClusters);
502  if (!pEndcapPreSuperClusters.isValid()) {
503  edm::LogError("EgammaSuperClusters") << "Error! can't get collection Pre EE SC";
504  }
505 
506  edm::Handle<reco::SuperClusterCollection> pEndcapCorSuperClusters;
507  evt.getByToken(endcapCorSuperClusterCollectionToken_, pEndcapCorSuperClusters);
508  if (!pEndcapCorSuperClusters.isValid()) {
509  edm::LogError("EgammaSuperClusters") << "Error! can't get collection Cor EE SC";
510  }
511 
512  // Get the ENDCAP collections
513  const reco::SuperClusterCollection *endcapRawSuperClusters = pEndcapRawSuperClusters.product();
514  const reco::SuperClusterCollection *endcapPreSuperClusters = pEndcapPreSuperClusters.product();
515  const reco::SuperClusterCollection *endcapCorSuperClusters = pEndcapCorSuperClusters.product();
516 
517  // Number of entries in collections
518  hist_EE_RawSC_Size_->Fill(endcapRawSuperClusters->size());
519  hist_EE_PreSC_Size_->Fill(endcapPreSuperClusters->size());
520  hist_EE_CorSC_Size_->Fill(endcapCorSuperClusters->size());
521 
522  // Do RAW ENDCAP SuperClusters
523  for (reco::SuperClusterCollection::const_iterator aClus = endcapRawSuperClusters->begin();
524  aClus != endcapRawSuperClusters->end();
525  aClus++) {
526  hist_EE_RawSC_NumBC_->Fill(aClus->clustersSize());
527  hist_EE_RawSC_ET_->Fill(aClus->energy() / std::cosh(aClus->position().eta()));
528  hist_EE_RawSC_Eta_->Fill(aClus->position().eta());
529  hist_EE_RawSC_Phi_->Fill(aClus->position().phi());
530 
531  const reco::CaloClusterPtr seed = aClus->seed();
532  hist_EE_RawSC_S1toS9_->Fill(lazyTool.eMax(*seed) / lazyTool.e3x3(*seed));
533  hist_EE_RawSC_S25toE_->Fill(lazyTool.e5x5(*seed) / aClus->energy());
534 
535  // truth
536  double dRClosest = 999.9;
537  double energyClosest = 0;
538  closestMCParticle(genEvent, *aClus, dRClosest, energyClosest);
539 
540  if (dRClosest < 0.1) {
541  hist_EE_RawSC_EoverTruth_->Fill(aClus->energy() / energyClosest);
542  hist_EE_RawSC_deltaR_->Fill(dRClosest);
543  }
544  }
545 
546  // Do ENDCAP SuperClusters with PRESHOWER
547  for (reco::SuperClusterCollection::const_iterator aClus = endcapPreSuperClusters->begin();
548  aClus != endcapPreSuperClusters->end();
549  aClus++) {
550  hist_EE_PreSC_NumBC_->Fill(aClus->clustersSize());
551  hist_EE_PreSC_ET_->Fill(aClus->energy() / std::cosh(aClus->position().eta()));
552  hist_EE_PreSC_Eta_->Fill(aClus->position().eta());
553  hist_EE_PreSC_Phi_->Fill(aClus->position().phi());
554  hist_EE_PreSC_preshowerE_->Fill(aClus->preshowerEnergy());
555 
556  const reco::CaloClusterPtr seed = aClus->seed();
557  hist_EE_PreSC_S1toS9_->Fill(lazyTool.eMax(*seed) / lazyTool.e3x3(*seed));
558  hist_EE_PreSC_S25toE_->Fill(lazyTool.e5x5(*seed) / aClus->energy());
559 
560  // truth
561  double dRClosest = 999.9;
562  double energyClosest = 0;
563  closestMCParticle(genEvent, *aClus, dRClosest, energyClosest);
564 
565  if (dRClosest < 0.1) {
566  hist_EE_PreSC_EoverTruth_->Fill(aClus->energy() / energyClosest);
567  hist_EE_PreSC_deltaR_->Fill(dRClosest);
568  }
569  }
570 
571  // Do CORRECTED ENDCAP SuperClusters
572  for (reco::SuperClusterCollection::const_iterator aClus = endcapCorSuperClusters->begin();
573  aClus != endcapCorSuperClusters->end();
574  aClus++) {
575  hist_EE_CorSC_NumBC_->Fill(aClus->clustersSize());
576  hist_EE_CorSC_ET_->Fill(aClus->energy() / std::cosh(aClus->position().eta()));
577  hist_EE_CorSC_Eta_->Fill(aClus->position().eta());
578  hist_EE_CorSC_Phi_->Fill(aClus->position().phi());
579  hist_EE_CorSC_preshowerE_->Fill(aClus->preshowerEnergy());
580 
581  hist_EE_CorSC_ET_vs_Eta_->Fill(aClus->energy() / std::cosh(aClus->position().eta()), aClus->eta());
582  hist_EE_CorSC_ET_vs_Phi_->Fill(aClus->energy() / std::cosh(aClus->position().eta()), aClus->phi());
583  hist_EE_CorSC_ET_vs_R_->Fill(aClus->energy() / std::cosh(aClus->position().eta()),
584  std::sqrt(std::pow(aClus->x(), 2) + std::pow(aClus->y(), 2)));
585 
586  // correction variables
587  hist_EE_CorSC_phiWidth_->Fill(aClus->phiWidth());
588  hist_EE_CorSC_etaWidth_->Fill(aClus->etaWidth());
589 
590  const reco::CaloClusterPtr seed = aClus->seed();
591  hist_EE_CorSC_S1toS9_->Fill(lazyTool.eMax(*seed) / lazyTool.e3x3(*seed));
592  hist_EE_CorSC_S25toE_->Fill(lazyTool.e5x5(*seed) / aClus->energy());
593 
594  // truth
595  double dRClosest = 999.9;
596  double energyClosest = 0;
597  closestMCParticle(genEvent, *aClus, dRClosest, energyClosest);
598 
599  if (dRClosest < 0.1) {
600  hist_EE_CorSC_EoverTruth_->Fill(aClus->energy() / energyClosest);
601  hist_EE_CorSC_deltaR_->Fill(dRClosest);
602  }
603  }
604 }
605 
606 //
607 // Closest MC Particle
608 //
610  const reco::SuperCluster &sc,
611  double &dRClosest,
612  double &energyClosest) const {
613  // SuperCluster eta, phi
614  double scEta = sc.eta();
615  double scPhi = sc.phi();
616 
617  // initialize dRClosest to a large number
618  dRClosest = 999.9;
619 
620  // loop over the MC truth particles to find the
621  // closest to the superCluster in dR space
622  for (HepMC::GenEvent::particle_const_iterator currentParticle = genEvent->particles_begin();
623  currentParticle != genEvent->particles_end();
624  currentParticle++) {
625  if ((*currentParticle)->status() == 1) {
626  // need GenParticle in ECAL co-ordinates
627  HepMC::FourVector vtx = (*currentParticle)->production_vertex()->position();
628  double phiTrue = (*currentParticle)->momentum().phi();
629  double etaTrue = ecalEta((*currentParticle)->momentum().eta(), vtx.z() / 10., vtx.perp() / 10.);
630 
631  double dPhi = reco::deltaPhi(phiTrue, scPhi);
632  double dEta = scEta - etaTrue;
633  double deltaR = std::sqrt(dPhi * dPhi + dEta * dEta);
634 
635  if (deltaR < dRClosest) {
636  dRClosest = deltaR;
637  energyClosest = (*currentParticle)->momentum().e();
638  }
639 
640  } // end if stable particle
641 
642  } // end loop on get particles
643 }
644 
645 //
646 // Compute Eta in the ECAL co-ordinate system
647 //
648 float EgammaSuperClusters::ecalEta(float EtaParticle, float Zvertex, float plane_Radius) const {
649  const float R_ECAL = 136.5;
650  const float Z_Endcap = 328.0;
651  const float etaBarrelEndcap = 1.479;
652 
653  if (EtaParticle != 0.) {
654  float Theta = 0.0;
655  float ZEcal = (R_ECAL - plane_Radius) * sinh(EtaParticle) + Zvertex;
656 
657  if (ZEcal != 0.0)
658  Theta = atan(R_ECAL / ZEcal);
659  if (Theta < 0.0)
660  Theta = Theta + Geom::pi();
661 
662  float ETA = -log(tan(0.5 * Theta));
663 
664  if (fabs(ETA) > etaBarrelEndcap) {
665  float Zend = Z_Endcap;
666  if (EtaParticle < 0.0)
667  Zend = -Zend;
668  float Zlen = Zend - Zvertex;
669  float RR = Zlen / sinh(EtaParticle);
670  Theta = atan((RR + plane_Radius) / Zend);
671  if (Theta < 0.0)
672  Theta = Theta + Geom::pi();
673  ETA = -log(tan(0.5 * Theta));
674  }
675 
676  return ETA;
677  } else {
678  edm::LogWarning("") << "[EgammaSuperClusters::ecalEta] Warning: Eta equals "
679  "to zero, not correcting";
680  return EtaParticle;
681  }
682 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
MonitorElement * hist_EE_CorSC_ET_vs_Phi_
MonitorElement * hist_EE_CorSC_ET_vs_R_
MonitorElement * hist_EE_PreSC_ET_
edm::EDGetTokenT< reco::SuperClusterCollection > endcapRawSuperClusterCollectionToken_
MonitorElement * hist_EB_CorSC_ET_
MonitorElement * hist_EB_CorSC_NumBC_
MonitorElement * hist_EE_CorSC_etaWidth_
MonitorElement * hist_EE_PreSC_EoverTruth_
MonitorElement * hist_EE_CorSC_Eta_
MonitorElement * hist_EB_RawSC_Size_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
MonitorElement * hist_EE_RawSC_NumBC_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
int bins
Definition: HistSpec.h:9
MonitorElement * hist_EB_RawSC_S1toS9_
MonitorElement * hist_EB_RawSC_ET_
#define nullptr
double max
Definition: HistSpec.h:8
MonitorElement * hist_EE_CorSC_EoverTruth_
MonitorElement * hist_EE_CorSC_deltaR_
MonitorElement * hist_EB_RawSC_Phi_
MonitorElement * hist_EE_RawSC_ET_
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:168
float ecalEta(float, float, float) const
void Fill(long long x)
MonitorElement * hist_EB_CorSC_phiWidth_
MonitorElement * hist_EE_PreSC_S1toS9_
edm::EDGetTokenT< reco::SuperClusterCollection > endcapPreSuperClusterCollectionToken_
double min
Definition: HistSpec.h:7
MonitorElement * hist_EB_RawSC_Eta_
#define ETA
MonitorElement * hist_EB_CorSC_deltaR_
MonitorElement * hist_EE_RawSC_S1toS9_
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
MonitorElement * hist_EB_CorSC_S25toE_
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
MonitorElement * hist_EE_CorSC_S1toS9_
edm::EDGetTokenT< EcalRecHitCollection > endcapRecHitCollectionToken_
MonitorElement * hist_EE_RawSC_deltaR_
edm::EDGetTokenT< edm::HepMCProduct > MCTruthCollectionToken_
T sqrt(T t)
Definition: SSEVec.h:18
MonitorElement * hist_EE_PreSC_Phi_
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
static float etaBarrelEndcap
MonitorElement * hist_EB_CorSC_ET_vs_Eta_
edm::EDGetTokenT< reco::SuperClusterCollection > barrelRawSuperClusterCollectionToken_
MonitorElement * hist_EB_CorSC_EoverTruth_
MonitorElement * hist_EB_CorSC_etaWidth_
MonitorElement * hist_EE_CorSC_ET_
bool isValid() const
Definition: HandleBase.h:74
void analyze(const edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< reco::SuperClusterCollection > endcapCorSuperClusterCollectionToken_
MonitorElement * hist_EE_PreSC_deltaR_
MonitorElement * hist_EE_CorSC_Size_
MonitorElement * hist_EE_PreSC_preshowerE_
MonitorElement * hist_EB_CorSC_Phi_
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:38
T const * product() const
Definition: Handle.h:74
MonitorElement * hist_EB_CorSC_S1toS9_
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:109
MonitorElement * hist_EB_CorSC_Size_
MonitorElement * hist_EE_CorSC_Phi_
edm::EDGetTokenT< reco::SuperClusterCollection > barrelCorSuperClusterCollectionToken_
MonitorElement * hist_EB_RawSC_EoverTruth_
MonitorElement * hist_EE_RawSC_EoverTruth_
EgammaSuperClusters(const edm::ParameterSet &)
MonitorElement * hist_EB_RawSC_S25toE_
MonitorElement * hist_EE_PreSC_Eta_
MonitorElement * hist_EB_CorSC_Eta_
fixed size matrix
MonitorElement * hist_EB_RawSC_NumBC_
HLT enums.
MonitorElement * hist_EE_CorSC_preshowerE_
MonitorElement * hist_EE_RawSC_Size_
static float Z_Endcap
MonitorElement * hist_EE_CorSC_NumBC_
MonitorElement * hist_EE_CorSC_S25toE_
constexpr double pi()
Definition: Pi.h:31
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:171
MonitorElement * hist_EE_RawSC_S25toE_
edm::EDGetTokenT< EcalRecHitCollection > barrelRecHitCollectionToken_
MonitorElement * hist_EE_CorSC_ET_vs_Eta_
void closestMCParticle(HepMC::GenEvent const *, reco::SuperCluster const &, double &, double &) const
MonitorElement * hist_EE_PreSC_NumBC_
MonitorElement * hist_EE_PreSC_S25toE_
static float R_ECAL
MonitorElement * hist_EE_RawSC_Eta_
MonitorElement * hist_EE_PreSC_Size_
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
MonitorElement * hist_EB_RawSC_deltaR_
MonitorElement * hist_EE_RawSC_Phi_
Definition: Run.h:45
MonitorElement * hist_EB_CorSC_ET_vs_Phi_
MonitorElement * hist_EE_CorSC_phiWidth_