CMS 3D CMS Logo

EgammaSuperClusters.cc
Go to the documentation of this file.
2 
6 
11 
13 
15 
17  : MCTruthCollectionToken_(consumes<edm::HepMCProduct>(ps.getParameter<edm::InputTag>("MCTruthCollection"))),
18  barrelRawSuperClusterCollectionToken_(
19  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("barrelRawSuperClusterCollection"))),
20  barrelCorSuperClusterCollectionToken_(
21  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("barrelCorSuperClusterCollection"))),
22  endcapRawSuperClusterCollectionToken_(
23  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("endcapRawSuperClusterCollection"))),
24  endcapPreSuperClusterCollectionToken_(
25  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("endcapPreSuperClusterCollection"))),
26  endcapCorSuperClusterCollectionToken_(
27  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("endcapCorSuperClusterCollection"))),
28  barrelRecHitCollectionToken_(
29  consumes<EcalRecHitCollection>(ps.getParameter<edm::InputTag>("barrelRecHitCollection"))),
30  endcapRecHitCollectionToken_(
31  consumes<EcalRecHitCollection>(ps.getParameter<edm::InputTag>("endcapRecHitCollection"))),
32  ecalClusterToolsESGetTokens_{consumesCollector()},
33  hsSize_(ps, "Size"),
34  hsNumBC_(ps, "NumBC"),
35  hsET_(ps, "ET"),
36  hsEta_(ps, "Eta"),
37  hsPhi_(ps, "Phi"),
38  hsS1toS9_(ps, "S1toS9"),
39  hsS25toE_(ps, "S25toE"),
40  hsEoverTruth_(ps, "EoverTruth"),
41  hsdeltaR_(ps, "deltaR"),
42  hsphiWidth_(ps, "phiWidth"),
43  hsetaWidth_(ps, "etaWidth"),
44  hspreshowerE_(ps, "preshowerE"),
45  hsR_(ps, "R"),
46  hist_EB_RawSC_Size_(nullptr),
47  hist_EE_RawSC_Size_(nullptr),
48  hist_EB_CorSC_Size_(nullptr),
49  hist_EE_CorSC_Size_(nullptr),
50  hist_EE_PreSC_Size_(nullptr),
51  hist_EB_RawSC_NumBC_(nullptr),
52  hist_EE_RawSC_NumBC_(nullptr),
53  hist_EB_CorSC_NumBC_(nullptr),
54  hist_EE_CorSC_NumBC_(nullptr),
55  hist_EE_PreSC_NumBC_(nullptr),
56  hist_EB_RawSC_ET_(nullptr),
57  hist_EE_RawSC_ET_(nullptr),
58  hist_EB_CorSC_ET_(nullptr),
59  hist_EE_CorSC_ET_(nullptr),
60  hist_EE_PreSC_ET_(nullptr),
61  hist_EB_RawSC_Eta_(nullptr),
62  hist_EE_RawSC_Eta_(nullptr),
63  hist_EB_CorSC_Eta_(nullptr),
64  hist_EE_CorSC_Eta_(nullptr),
65  hist_EE_PreSC_Eta_(nullptr),
66  hist_EB_RawSC_Phi_(nullptr),
67  hist_EE_RawSC_Phi_(nullptr),
68  hist_EB_CorSC_Phi_(nullptr),
69  hist_EE_CorSC_Phi_(nullptr),
70  hist_EE_PreSC_Phi_(nullptr),
71  hist_EB_RawSC_S1toS9_(nullptr),
72  hist_EE_RawSC_S1toS9_(nullptr),
73  hist_EB_CorSC_S1toS9_(nullptr),
74  hist_EE_CorSC_S1toS9_(nullptr),
75  hist_EE_PreSC_S1toS9_(nullptr),
76  hist_EB_RawSC_S25toE_(nullptr),
77  hist_EE_RawSC_S25toE_(nullptr),
78  hist_EB_CorSC_S25toE_(nullptr),
79  hist_EE_CorSC_S25toE_(nullptr),
80  hist_EE_PreSC_S25toE_(nullptr),
81  hist_EB_RawSC_EoverTruth_(nullptr),
82  hist_EE_RawSC_EoverTruth_(nullptr),
83  hist_EB_CorSC_EoverTruth_(nullptr),
84  hist_EE_CorSC_EoverTruth_(nullptr),
85  hist_EE_PreSC_EoverTruth_(nullptr),
86  hist_EB_RawSC_deltaR_(nullptr),
87  hist_EE_RawSC_deltaR_(nullptr),
88  hist_EB_CorSC_deltaR_(nullptr),
89  hist_EE_CorSC_deltaR_(nullptr),
90  hist_EE_PreSC_deltaR_(nullptr),
91  hist_EE_PreSC_preshowerE_(nullptr),
92  hist_EE_CorSC_preshowerE_(nullptr),
93  hist_EE_CorSC_phiWidth_(nullptr),
94  hist_EB_CorSC_phiWidth_(nullptr),
95  hist_EE_CorSC_etaWidth_(nullptr),
96  hist_EB_CorSC_etaWidth_(nullptr),
97  hist_EB_CorSC_ET_vs_Eta_(nullptr),
98  hist_EB_CorSC_ET_vs_Phi_(nullptr),
99  hist_EE_CorSC_ET_vs_Eta_(nullptr),
100  hist_EE_CorSC_ET_vs_Phi_(nullptr),
101  hist_EE_CorSC_ET_vs_R_(nullptr) {}
102 
104 
106  _ibooker.setCurrentFolder("EcalClusterV/EcalSuperClusters/");
107 
108  // Number of SuperClusters
109  //
111  _ibooker.book1D("hist_EB_RawSC_Size_", "# Raw SuperClusters in Barrel", hsSize_.bins, hsSize_.min, hsSize_.max);
113  _ibooker.book1D("hist_EE_RawSC_Size_", "# Raw SuperClusters in Endcap", hsSize_.bins, hsSize_.min, hsSize_.max);
114  hist_EB_CorSC_Size_ = _ibooker.book1D(
115  "hist_EB_CorSC_Size_", "# Corrected SuperClusters in Barrel", hsSize_.bins, hsSize_.min, hsSize_.max);
116  hist_EE_CorSC_Size_ = _ibooker.book1D(
117  "hist_EE_CorSC_Size_", "# Corrected SuperClusters in Endcap", hsSize_.bins, hsSize_.min, hsSize_.max);
118  hist_EE_PreSC_Size_ = _ibooker.book1D(
119  "hist_EE_PreSC_Size_", "# SuperClusters with Preshower in Endcap", hsSize_.bins, hsSize_.min, hsSize_.max);
120 
121  // Number of BasicClusters in SuperCluster
122  //
123  hist_EB_RawSC_NumBC_ = _ibooker.book1D("hist_EB_RawSC_NumBC_",
124  "# of Basic Clusters in Raw Super Clusters in Barrel",
125  hsNumBC_.bins,
126  hsNumBC_.min,
127  hsNumBC_.max);
128  hist_EE_RawSC_NumBC_ = _ibooker.book1D("hist_EE_RawSC_NumBC_",
129  "# of Basic Clusters in Raw Super Clusters in Endcap",
130  hsNumBC_.bins,
131  hsNumBC_.min,
132  hsNumBC_.max);
133  hist_EB_CorSC_NumBC_ = _ibooker.book1D("hist_EB_CorSC_NumBC_",
134  "# of Basic Clusters in Corrected SuperClusters in Barrel",
135  hsNumBC_.bins,
136  hsNumBC_.min,
137  hsNumBC_.max);
138  hist_EE_CorSC_NumBC_ = _ibooker.book1D("hist_EE_CorSC_NumBC_",
139  "# of Basic Clusters in Corrected SuperClusters in Endcap",
140  hsNumBC_.bins,
141  hsNumBC_.min,
142  hsNumBC_.max);
143  hist_EE_PreSC_NumBC_ = _ibooker.book1D("hist_EE_PreSC_NumBC_",
144  "# of Basic Clusters in SuperClusters with Preshower in Endcap",
145  hsNumBC_.bins,
146  hsNumBC_.min,
147  hsNumBC_.max);
148 
149  // ET distribution of SuperClusters
150  //
152  _ibooker.book1D("hist_EB_RawSC_ET_", "ET of Raw SuperClusters in Barrel", hsET_.bins, hsET_.min, hsET_.max);
154  _ibooker.book1D("hist_EE_RawSC_ET_", "ET of Raw SuperClusters in Endcap", hsET_.bins, hsET_.min, hsET_.max);
156  _ibooker.book1D("hist_EB_CorSC_ET_", "ET of Corrected SuperClusters in Barrel", hsET_.bins, hsET_.min, hsET_.max);
158  _ibooker.book1D("hist_EE_CorSC_ET_", "ET of Corrected SuperClusters in Endcap", hsET_.bins, hsET_.min, hsET_.max);
159  hist_EE_PreSC_ET_ = _ibooker.book1D(
160  "hist_EE_PreSC_ET_", "ET of SuperClusters with Preshower in Endcap", hsET_.bins, hsET_.min, hsET_.max);
161 
162  // Eta distribution of SuperClusters
163  //
165  _ibooker.book1D("hist_EB_RawSC_Eta_", "Eta of Raw SuperClusters in Barrel", hsEta_.bins, hsEta_.min, hsEta_.max);
167  _ibooker.book1D("hist_EE_RawSC_Eta_", "Eta of Raw SuperClusters in Endcap", hsEta_.bins, hsEta_.min, hsEta_.max);
168  hist_EB_CorSC_Eta_ = _ibooker.book1D(
169  "hist_EB_CorSC_Eta_", "Eta of Corrected SuperClusters in Barrel", hsEta_.bins, hsEta_.min, hsEta_.max);
170  hist_EE_CorSC_Eta_ = _ibooker.book1D(
171  "hist_EE_CorSC_Eta_", "Eta of Corrected SuperClusters in Endcap", hsEta_.bins, hsEta_.min, hsEta_.max);
172  hist_EE_PreSC_Eta_ = _ibooker.book1D(
173  "hist_EE_PreSC_Eta_", "Eta of SuperClusters with Preshower in Endcap", hsEta_.bins, hsEta_.min, hsEta_.max);
174 
175  // Phi distribution of SuperClusters
176  //
178  _ibooker.book1D("hist_EB_RawSC_Phi_", "Phi of Raw SuperClusters in Barrel", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
180  _ibooker.book1D("hist_EE_RawSC_Phi_", "Phi of Raw SuperClusters in Endcap", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
181  hist_EB_CorSC_Phi_ = _ibooker.book1D(
182  "hist_EB_CorSC_Phi_", "Phi of Corrected SuperClusters in Barrel", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
183  hist_EE_CorSC_Phi_ = _ibooker.book1D(
184  "hist_EE_CorSC_Phi_", "Phi of Corrected SuperClusters in Endcap", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
185  hist_EE_PreSC_Phi_ = _ibooker.book1D(
186  "hist_EE_PreSC_Phi_", "Phi of SuperClusters with Preshower in Endcap", hsPhi_.bins, hsPhi_.min, hsPhi_.max);
187 
188  // S1/S9 distribution of SuperClusters
189  //
190  hist_EB_RawSC_S1toS9_ = _ibooker.book1D(
191  "hist_EB_RawSC_S1toS9_", "S1/S9 of Raw Super Clusters in Barrel", hsS1toS9_.bins, hsS1toS9_.min, hsS1toS9_.max);
192  hist_EE_RawSC_S1toS9_ = _ibooker.book1D(
193  "hist_EE_RawSC_S1toS9_", "S1/S9 of Raw Super Clusters in Endcap", hsS1toS9_.bins, hsS1toS9_.min, hsS1toS9_.max);
194  hist_EB_CorSC_S1toS9_ = _ibooker.book1D("hist_EB_CorSC_S1toS9_",
195  "S1/S9 of Corrected SuperClusters in Barrel",
196  hsS1toS9_.bins,
197  hsS1toS9_.min,
198  hsS1toS9_.max);
199  hist_EE_CorSC_S1toS9_ = _ibooker.book1D("hist_EE_CorSC_S1toS9_",
200  "S1/S9 of Corrected SuperClusters in Endcap",
201  hsS1toS9_.bins,
202  hsS1toS9_.min,
203  hsS1toS9_.max);
204  hist_EE_PreSC_S1toS9_ = _ibooker.book1D("hist_EE_PreSC_S1toS9_",
205  "S1/S9 of SuperClusters with Preshower in Endcap",
206  hsS1toS9_.bins,
207  hsS1toS9_.min,
208  hsS1toS9_.max);
209 
210  // S25/E distribution of SuperClusters
211  //
212  hist_EB_RawSC_S25toE_ = _ibooker.book1D(
213  "hist_EB_RawSC_S25toE_", "S25/E of Raw Super Clusters in Barrel", hsS25toE_.bins, hsS25toE_.min, hsS25toE_.max);
214  hist_EE_RawSC_S25toE_ = _ibooker.book1D(
215  "hist_EE_RawSC_S25toE_", "S25/E of Raw Super Clusters in Endcap", hsS25toE_.bins, hsS25toE_.min, hsS25toE_.max);
216  hist_EB_CorSC_S25toE_ = _ibooker.book1D("hist_EB_CorSC_S25toE_",
217  "S25/E of Corrected SuperClusters in Barrel",
218  hsS25toE_.bins,
219  hsS25toE_.min,
220  hsS25toE_.max);
221  hist_EE_CorSC_S25toE_ = _ibooker.book1D("hist_EE_CorSC_S25toE_",
222  "S25/E of Corrected SuperClusters in Endcap",
223  hsS25toE_.bins,
224  hsS25toE_.min,
225  hsS25toE_.max);
226  hist_EE_PreSC_S25toE_ = _ibooker.book1D("hist_EE_PreSC_S25toE_",
227  "S25/E of SuperClusters with Preshower in Endcap",
228  hsS25toE_.bins,
229  hsS25toE_.min,
230  hsS25toE_.max);
231 
232  // E/E(true) distribution of SuperClusters
233  //
234  hist_EB_RawSC_EoverTruth_ = _ibooker.book1D("hist_EB_RawSC_EoverTruth_",
235  "E/True E of Raw SuperClusters in Barrel",
239  hist_EE_RawSC_EoverTruth_ = _ibooker.book1D("hist_EE_RawSC_EoverTruth_",
240  "E/True E of Raw SuperClusters in Endcap",
244  hist_EB_CorSC_EoverTruth_ = _ibooker.book1D("hist_EB_CorSC_EoverTruth_",
245  "E/True E of Corrected SuperClusters in Barrel",
249  hist_EE_CorSC_EoverTruth_ = _ibooker.book1D("hist_EE_CorSC_EoverTruth_",
250  "E/True E of Corrected SuperClusters in Endcap",
254  hist_EE_PreSC_EoverTruth_ = _ibooker.book1D("hist_EE_PreSC_EoverTruth_",
255  "E/True E of SuperClusters with Preshower in Endcap",
259 
260  // dR distribution of SuperClusters from truth
261  //
262  hist_EB_RawSC_deltaR_ = _ibooker.book1D("hist_EB_RawSC_deltaR_",
263  "dR to MC truth of Raw Super Clusters in Barrel",
264  hsdeltaR_.bins,
265  hsdeltaR_.min,
266  hsdeltaR_.max);
267  hist_EE_RawSC_deltaR_ = _ibooker.book1D("hist_EE_RawSC_deltaR_",
268  "dR to MC truth of Raw Super Clusters in Endcap",
269  hsdeltaR_.bins,
270  hsdeltaR_.min,
271  hsdeltaR_.max);
272  hist_EB_CorSC_deltaR_ = _ibooker.book1D("hist_EB_CorSC_deltaR_",
273  "dR to MC truth of Corrected SuperClusters in Barrel",
274  hsdeltaR_.bins,
275  hsdeltaR_.min,
276  hsdeltaR_.max);
277  hist_EE_CorSC_deltaR_ = _ibooker.book1D("hist_EE_CorSC_deltaR_",
278  "dR to MC truth of Corrected SuperClusters in Endcap",
279  hsdeltaR_.bins,
280  hsdeltaR_.min,
281  hsdeltaR_.max);
282  hist_EE_PreSC_deltaR_ = _ibooker.book1D("hist_EE_PreSC_deltaR_",
283  "dR to MC truth of SuperClusters with Preshower in Endcap",
284  hsdeltaR_.bins,
285  hsdeltaR_.min,
286  hsdeltaR_.max);
287 
288  // phi width stored in corrected SuperClusters
289  hist_EB_CorSC_phiWidth_ = _ibooker.book1D("hist_EB_CorSC_phiWidth_",
290  "phiWidth of Corrected Super Clusters in Barrel",
293  hsphiWidth_.max);
294  hist_EE_CorSC_phiWidth_ = _ibooker.book1D("hist_EE_CorSC_phiWidth_",
295  "phiWidth of Corrected Super Clusters in Endcap",
298  hsphiWidth_.max);
299 
300  // eta width stored in corrected SuperClusters
301  hist_EB_CorSC_etaWidth_ = _ibooker.book1D("hist_EB_CorSC_etaWidth_",
302  "etaWidth of Corrected Super Clusters in Barrel",
305  hsetaWidth_.max);
306  hist_EE_CorSC_etaWidth_ = _ibooker.book1D("hist_EE_CorSC_etaWidth_",
307  "etaWidth of Corrected Super Clusters in Endcap",
310  hsetaWidth_.max);
311 
312  // preshower energy
313  hist_EE_PreSC_preshowerE_ = _ibooker.book1D("hist_EE_PreSC_preshowerE_",
314  "preshower energy in Super Clusters with Preshower in Endcap",
318  hist_EE_CorSC_preshowerE_ = _ibooker.book1D("hist_EE_CorSC_preshowerE_",
319  "preshower energy in Corrected Super Clusters with Preshower in Endcap",
323 
324  //
325  hist_EB_CorSC_ET_vs_Eta_ = _ibooker.book2D("hist_EB_CorSC_ET_vs_Eta_",
326  "Corr Super Cluster ET versus Eta in Barrel",
327  hsET_.bins,
328  hsET_.min,
329  hsET_.max,
330  hsEta_.bins,
331  hsEta_.min,
332  hsEta_.max);
333 
334  hist_EB_CorSC_ET_vs_Phi_ = _ibooker.book2D("hist_EB_CorSC_ET_vs_Phi_",
335  "Corr Super Cluster ET versus Phi in Barrel",
336  hsET_.bins,
337  hsET_.min,
338  hsET_.max,
339  hsPhi_.bins,
340  hsPhi_.min,
341  hsPhi_.max);
342 
343  hist_EE_CorSC_ET_vs_Eta_ = _ibooker.book2D("hist_EE_CorSC_ET_vs_Eta_",
344  "Corr Super Cluster ET versus Eta in Endcap",
345  hsET_.bins,
346  hsET_.min,
347  hsET_.max,
348  hsEta_.bins,
349  hsEta_.min,
350  hsEta_.max);
351 
352  hist_EE_CorSC_ET_vs_Phi_ = _ibooker.book2D("hist_EE_CorSC_ET_vs_Phi_",
353  "Corr Super Cluster ET versus Phi in Endcap",
354  hsET_.bins,
355  hsET_.min,
356  hsET_.max,
357  hsPhi_.bins,
358  hsPhi_.min,
359  hsPhi_.max);
360 
361  hist_EE_CorSC_ET_vs_R_ = _ibooker.book2D("hist_EE_CorSC_ET_vs_R_",
362  "Corr Super Cluster ET versus Radius in Endcap",
363  hsET_.bins,
364  hsET_.min,
365  hsET_.max,
366  hsR_.bins,
367  hsR_.min,
368  hsR_.max);
369 }
370 
372  bool skipMC = false;
373  bool skipBarrel = false;
374  bool skipEndcap = false;
375 
376  //
377  // Get MCTRUTH
378  //
380  evt.getByToken(MCTruthCollectionToken_, pMCTruth);
381  if (!pMCTruth.isValid()) {
382  edm::LogError("EgammaSuperClusters") << "Error! can't get MC collection ";
383  skipMC = true;
384  }
385  const HepMC::GenEvent *genEvent = pMCTruth->GetEvent();
386 
387  if (skipMC)
388  return;
389 
390  //
391  // Get the BARREL products
392  //
393  edm::Handle<reco::SuperClusterCollection> pBarrelRawSuperClusters;
394  evt.getByToken(barrelRawSuperClusterCollectionToken_, pBarrelRawSuperClusters);
395  if (!pBarrelRawSuperClusters.isValid()) {
396  edm::LogError("EgammaSuperClusters") << "Error! can't get collection Raw SC";
397  skipBarrel = true;
398  }
399 
400  edm::Handle<reco::SuperClusterCollection> pBarrelCorSuperClusters;
401  evt.getByToken(barrelCorSuperClusterCollectionToken_, pBarrelCorSuperClusters);
402  if (!pBarrelCorSuperClusters.isValid()) {
403  edm::LogError("EgammaSuperClusters") << "Error! can't get collection Cor SC";
404  skipBarrel = true;
405  }
406 
407  edm::Handle<EBRecHitCollection> pBarrelRecHitCollection;
408  evt.getByToken(barrelRecHitCollectionToken_, pBarrelRecHitCollection);
409  if (!pBarrelRecHitCollection.isValid()) {
410  skipBarrel = true;
411  }
412  edm::Handle<EERecHitCollection> pEndcapRecHitCollection;
413  evt.getByToken(endcapRecHitCollectionToken_, pEndcapRecHitCollection);
414  if (!pEndcapRecHitCollection.isValid()) {
415  skipEndcap = true;
416  }
417 
418  if (skipBarrel || skipEndcap)
419  return;
420 
421  EcalClusterLazyTools lazyTool(
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:26
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_
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
MonitorElement * hist_EB_RawSC_Size_
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_
T const * product() const
Definition: Handle.h:70
double max
Definition: HistSpec.h:8
MonitorElement * hist_EE_CorSC_EoverTruth_
MonitorElement * hist_EE_CorSC_deltaR_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:526
MonitorElement * hist_EB_RawSC_Phi_
Log< level::Error, false > LogError
static constexpr float R_ECAL
MonitorElement * hist_EE_RawSC_ET_
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:184
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_
void Fill(long long x)
ESData get(edm::EventSetup const &eventSetup) const
#define ETA
MonitorElement * hist_EB_CorSC_deltaR_
MonitorElement * hist_EE_RawSC_S1toS9_
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:23
MonitorElement * hist_EE_PreSC_Phi_
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
MonitorElement * hist_EB_CorSC_ET_vs_Eta_
edm::EDGetTokenT< reco::SuperClusterCollection > barrelRawSuperClusterCollectionToken_
MonitorElement * hist_EB_CorSC_EoverTruth_
MonitorElement * hist_EB_CorSC_etaWidth_
static constexpr float etaBarrelEndcap
MonitorElement * hist_EE_CorSC_ET_
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:37
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_
MonitorElement * hist_EB_CorSC_S1toS9_
MonitorElement * hist_EB_CorSC_Size_
MonitorElement * hist_EE_CorSC_Phi_
edm::EDGetTokenT< reco::SuperClusterCollection > barrelCorSuperClusterCollectionToken_
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 * hist_EB_RawSC_EoverTruth_
MonitorElement * hist_EE_RawSC_EoverTruth_
EgammaSuperClusters(const edm::ParameterSet &)
bool isValid() const
Definition: HandleBase.h:70
MonitorElement * hist_EB_RawSC_S25toE_
MonitorElement * hist_EE_PreSC_Eta_
MonitorElement * hist_EB_CorSC_Eta_
EcalClusterLazyTools::ESGetTokens ecalClusterToolsESGetTokens_
fixed size matrix
MonitorElement * hist_EB_RawSC_NumBC_
HLT enums.
MonitorElement * hist_EE_CorSC_preshowerE_
MonitorElement * hist_EE_RawSC_Size_
void closestMCParticle(HepMC::GenEvent const *, reco::SuperCluster const &, double &, double &) const
MonitorElement * hist_EE_CorSC_NumBC_
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:181
MonitorElement * hist_EE_CorSC_S25toE_
Log< level::Warning, false > LogWarning
constexpr double pi()
Definition: Pi.h:31
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 * hist_EE_RawSC_S25toE_
edm::EDGetTokenT< EcalRecHitCollection > barrelRecHitCollectionToken_
MonitorElement * hist_EE_CorSC_ET_vs_Eta_
MonitorElement * hist_EE_PreSC_NumBC_
MonitorElement * hist_EE_PreSC_S25toE_
MonitorElement * hist_EE_RawSC_Eta_
MonitorElement * hist_EE_PreSC_Size_
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
MonitorElement * hist_EB_RawSC_deltaR_
MonitorElement * hist_EE_RawSC_Phi_
static constexpr float Z_Endcap
Definition: Run.h:45
MonitorElement * hist_EB_CorSC_ET_vs_Phi_
float ecalEta(float, float, float) const
MonitorElement * hist_EE_CorSC_phiWidth_