ATLAS Offline Software
Loading...
Searching...
No Matches
EgammaMonitoring.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "EgammaMonitoring.h"
6
7#include "GaudiKernel/SystemOfUnits.h"
8
9#include "TH1D.h"
10#include "TH2D.h"
11#include "TH3D.h"
12#include "TProfile.h"
13
15#include "xAODEgamma/Egamma.h"
17#include "xAODEgamma/Electron.h"
18#include "xAODEgamma/Photon.h"
22
23EgammaMonitoring::EgammaMonitoring(const std::string &name,
24 ISvcLocator *pSvcLocator)
25 : AthAlgorithm(name, pSvcLocator) {}
26
27// ******
28
30 ATH_MSG_INFO("******************** Running over " << m_sampleType
31 << " ******************");
32 ATH_CHECK( (rootHistSvc = service("THistSvc")).isValid() );
33
34 showerShapesAll = std::make_unique<egammaMonitoring::ShowerShapesHistograms>(
35 "showerShapesAll", "Shower Shapes ", "/MONITORING/showerShapesAll/",
37
39 std::make_unique<egammaMonitoring::ShowerShapesHistograms>(
40 "showerShapes10GeV", "Shower Shapes - 10 GeV",
41 "/MONITORING/showerShapes10GeV/", rootHistSvc);
42
43 isolationAll = std::make_unique<egammaMonitoring::IsolationHistograms>(
44 "isolationAll", "Isolation ", "/MONITORING/isolationAll/", rootHistSvc);
45
46 ATH_CHECK(showerShapesAll->initializePlots());
47 ATH_CHECK(showerShapes10GeV->initializePlots());
48 ATH_CHECK(isolationAll->initializePlots(m_sampleType == "electron"));
49
50 if ("dataZ" != m_sampleType) {
51 clusterAll = std::make_unique<egammaMonitoring::ClusterHistograms>(
52 "clustersAll", "Clusters", "/MONITORING/clusterAll/", rootHistSvc);
53
54 cluster10GeV = std::make_unique<egammaMonitoring::ClusterHistograms>(
55 "clusters10GeV", "Clusters - 10 GeV", "/MONITORING/cluster10GeV/",
57
58 clusterPromptAll = std::make_unique<egammaMonitoring::ClusterHistograms>(
59 "clustersPromptAll", "Clusters from Prompt",
60 "/MONITORING/clusterPromptAll/", rootHistSvc);
61
62 clusterPrompt10GeV = std::make_unique<egammaMonitoring::ClusterHistograms>(
63 "clustersPrompt10GeV", "Clusters from Prompt - 10 GeV",
64 "/MONITORING/clusterPrompt10GeV/", rootHistSvc);
65
66 ATH_CHECK(clusterAll->initializePlots());
67 ATH_CHECK(cluster10GeV->initializePlots());
68 ATH_CHECK(clusterPromptAll->initializePlots());
69 ATH_CHECK(clusterPrompt10GeV->initializePlots());
70 } else {
71 m_clusterReco = std::make_unique<egammaMonitoring::RecoClusterHistograms>(
72 "clustersReco", "Clusters from Z->ee candidates in data",
73 "/MONITORING/recoCluster/", rootHistSvc);
75 std::make_unique<egammaMonitoring::RecoElectronHistograms>(
76 "recoElectronAll", "Reco electrons from Z->ee candidates in data",
77 "/MONITORING/recoZElectron/", rootHistSvc);
78 m_diElectron = std::make_unique<egammaMonitoring::DiObjectHistograms>(
79 "diElectrons", "Z->ee candidates in data", "/MONITORING/diElectrons/",
81 ATH_CHECK(m_clusterReco->initializePlots());
82 recoElectronAll->isData();
83 ATH_CHECK(recoElectronAll->initializePlots());
84 ATH_CHECK(m_diElectron->initializePlots());
85 }
86
87 if ("electron" == m_sampleType) {
88
90 std::make_unique<egammaMonitoring::RecoElectronHistograms>(
91 "recoElectronAll", "Electrons Reco Electron",
92 "/MONITORING/recoElectronAll/", rootHistSvc);
93
95 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
96 "truthElectronAll", "All Truth Electrons",
97 "/MONITORING/truthElectronAll/", rootHistSvc);
98
100 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
101 "truthPromptElectronAll", "All Truth Prompt Electrons",
102 "/MONITORING/truthPromptElectronAll/", rootHistSvc);
103
105 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
106 "truthElectronRecoElectronAll", "Truth Electrons Reco Electron",
107 "/MONITORING/truthElectronRecoElectronAll/", rootHistSvc);
108
110 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
111 "truthPromptElectronWithTrack", "Truth Prompt Electrons With Track",
112 "/MONITORING/truthPromptElectronWithTrack/", rootHistSvc);
113
115 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
116 "truthPromptElectronWithGSFTrack",
117 "Truth Prompt Electrons With GSFTrack",
118 "/MONITORING/truthPromptElectronWithGSFTrack/", rootHistSvc);
119
121 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
122 "truthPromptElectronWithReco",
123 "Truth Prompt Electrons With GSFTrack or just with a fwd cluster",
124 "/MONITORING/truthPromptElectronWithReco/", rootHistSvc);
125
127 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
128 "truthPromptElectronWithRecoTrack",
129 "Truth Prompt Electrons With GSFTrack",
130 "/MONITORING/truthPromptElectronWithRecoTrack/", rootHistSvc);
131
133 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
134 "truthRecoElectronLooseLH", "LLH Electrons Reco Electron",
135 "/MONITORING/truthRecoElectronLooseLH/", rootHistSvc);
136
138 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
139 "truthRecoElectronMediumLH", "MLH Electrons Reco Electron",
140 "/MONITORING/truthRecoElectronMediumLH/", rootHistSvc);
141
143 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
144 "truthRecoElectronTightLH", "TLH Electrons Reco Electron",
145 "/MONITORING/truthRecoElectronTightLH/", rootHistSvc);
146
147 if (!m_FwdElectronsKey.empty()) {
148 recoElectronAll->hasFwd();
149 truthElectronAll->hasFwd();
150 truthPromptElectronAll->hasFwd();
156 truthRecoElectronLoose->hasFwd();
157 truthRecoElectronMedium->hasFwd();
158 truthRecoElectronTight->hasFwd();
159 }
160
161 ATH_CHECK(recoElectronAll->initializePlots());
162 ATH_CHECK(truthRecoElectronLoose->initializePlots());
163 ATH_CHECK(truthRecoElectronMedium->initializePlots());
164 ATH_CHECK(truthRecoElectronTight->initializePlots());
165 ATH_CHECK(truthElectronAll->initializePlots(true));
166 ATH_CHECK(truthPromptElectronAll->initializePlots(true));
167 ATH_CHECK(truthElectronRecoElectronAll->initializePlots());
168 ATH_CHECK(truthPromptElectronWithTrack->initializePlots(true));
169 ATH_CHECK(truthPromptElectronWithGSFTrack->initializePlots(true));
170 ATH_CHECK(truthPromptElectronWithReco->initializePlots());
172 } // electron Hists
173
174 if ("gamma" == m_sampleType) {
175
176 // all reco photons
177 recoPhotonAll = std::make_unique<egammaMonitoring::RecoPhotonHistograms>(
178 "recoPhotonAll", "Reco Photon", "/MONITORING/recoPhotonAll/",
180 ATH_CHECK(recoPhotonAll->initializePlots());
181
182 clusterConvPhoton = std::make_unique<egammaMonitoring::ClusterHistograms>(
183 "clusterConvPhoton", "Clusters from Converted Photons",
184 "/MONITORING/clusterConvPhoton/", rootHistSvc);
185
186 clusterConvPhotonSi = std::make_unique<egammaMonitoring::ClusterHistograms>(
187 "clusterConvPhotonSi", "Clusters from Converted Photons - Si",
188 "/MONITORING/clusterConvPhotonSi/", rootHistSvc);
189
191 std::make_unique<egammaMonitoring::ClusterHistograms>(
192 "clusterConvPhotonSiSi", "Clusters from Converted Photons - SiSi",
193 "/MONITORING/clusterConvPhotonSiSi/", rootHistSvc);
194
195 clusterUnconvPhoton = std::make_unique<egammaMonitoring::ClusterHistograms>(
196 "clusterUnconvPhoton", "Clusters from Converted Photons",
197 "/MONITORING/clusterUnconvPhoton/", rootHistSvc);
198
199 // Cluster information
200 ATH_CHECK(clusterConvPhoton->initializePlots());
201 ATH_CHECK(clusterConvPhotonSi->initializePlots());
202 ATH_CHECK(clusterConvPhotonSiSi->initializePlots());
203 ATH_CHECK(clusterUnconvPhoton->initializePlots());
204
205 if (m_hasTRT) {
207 std::make_unique<egammaMonitoring::ClusterHistograms>(
208 "clusterConvPhotonTRT", "Clusters from Converted Photons - TRT",
209 "/MONITORING/clusterConvPhotonTRT/", rootHistSvc);
210
212 std::make_unique<egammaMonitoring::ClusterHistograms>(
213 "clusterConvPhotonTRTTRT",
214 "Clusters from Converted Photons - TRTTRT",
215 "/MONITORING/clusterConvPhotonTRTTRT/", rootHistSvc);
216
218 std::make_unique<egammaMonitoring::ClusterHistograms>(
219 "clusterConvPhotonSiTRT",
220 "Clusters from Converted Photons - SiTRT",
221 "/MONITORING/clusterConvPhotonSiTRT/", rootHistSvc);
222
224 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
225 "truthConvRecoConv1TRT", "truthConvRecoConv1TRT",
226 "/MONITORING/truthConvRecoConv1TRT/", rootHistSvc);
227
229 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
230 "truthConvRecoConv2TRT", "truthConvRecoConv2TRT",
231 "/MONITORING/truthConvRecoConv2TRT/", rootHistSvc);
232
234 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
235 "truthConvRecoConv2SiTRT", "truthConvRecoConv2SiTRT",
236 "/MONITORING/truthConvRecoConv2SiTRT/", rootHistSvc);
237
239 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
240 "truthUnconvRecoConv1TRT", "truthUnconvRecoConv1TRT",
241 "/MONITORING/truthUnconvRecoConv1TRT/", rootHistSvc);
242
244 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
245 "truthUnconvRecoConv2TRT", "truthUnconvRecoConv2TRT",
246 "/MONITORING/truthUnconvRecoConv2TRT/", rootHistSvc);
247
249 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
250 "truthUnconvRecoConv2SiTRT", "truthUnconvRecoConv2SiTRT",
251 "/MONITORING/truthUnconvRecoConv2SiTRT/", rootHistSvc);
252
253 ATH_CHECK(truthPhotonConvRecoConv1TRT->initializePlots());
254 ATH_CHECK(truthPhotonConvRecoConv2TRT->initializePlots());
255 ATH_CHECK(truthPhotonConvRecoConv2SiTRT->initializePlots());
256 ATH_CHECK(truthPhotonUnconvRecoConv1TRT->initializePlots());
257 ATH_CHECK(truthPhotonUnconvRecoConv2TRT->initializePlots());
258 ATH_CHECK(truthPhotonUnconvRecoConv2SiTRT->initializePlots());
259 ATH_CHECK(clusterConvPhotonTRT->initializePlots());
260 ATH_CHECK(clusterConvPhotonTRTTRT->initializePlots());
261 ATH_CHECK(clusterConvPhotonSiTRT->initializePlots());
262 }
263
264 // All truth
265 truthPhotonAll = std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
266 "truthPhotonAll", "truthPhotonAll", "/MONITORING/truthPhotonAll/",
268
270 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
271 "truthPhotonAllUnconv", "truthPhotonAllUnconv",
272 "/MONITORING/truthPhotonAllUnconv/", rootHistSvc);
273
275 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
276 "truthPhotonAllConv", "truthPhotonAllConv",
277 "/MONITORING/truthPhotonAllConv/", rootHistSvc);
278
280 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
281 "truthPhotonAllLateConv", "truthPhotonAllLateConv",
282 "/MONITORING/truthPhotonAllLateConv/", rootHistSvc);
283
284 // Reco and truth-matched
286 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
287 "truthPhotonRecoPhoton", "truthPhotonRecoPhoton",
288 "/MONITORING/truthPhotonRecoPhoton/", rootHistSvc);
289
291 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
292 "truthPhotonRecoPhotonOrElectron",
293 "truthPhotonRecoPhotonOrElectron",
294 "/MONITORING/truthPhotonRecoPhotonOrElectron/", rootHistSvc);
295
297 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
298 "truthConvPhoton", "truthConvPhoton",
299 "/MONITORING/truthConvPhoton/", rootHistSvc);
300
302 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
303 "truthConvRecoConv", "truthConvRecoConv",
304 "/MONITORING/truthConvRecoConv/", rootHistSvc);
305
307 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
308 "truthConvRecoConv1Si", "truthConvRecoConv1Si",
309 "/MONITORING/truthConvRecoConv1Si/", rootHistSvc);
310
312 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
313 "truthConvRecoConv2Si", "truthConvRecoConv2Si",
314 "/MONITORING/truthConvRecoConv2Si/", rootHistSvc);
315
317 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
318 "truthConvRecoUnconv", "truthConvRecoUnconv",
319 "/MONITORING/truthConvRecoUnconv/", rootHistSvc);
320
322 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
323 "truthUnconvPhoton", "truthUnconvPhoton",
324 "/MONITORING/truthUnconvPhoton/", rootHistSvc);
325
327 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
328 "truthUnconvRecoConv", "truthUnconvRecoConv",
329 "/MONITORING/truthUnconvRecoConv/", rootHistSvc);
330
332 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
333 "truthUnconvRecoConv1Si", "truthUnconvRecoConv1Si",
334 "/MONITORING/truthUnconvRecoConv1Si/", rootHistSvc);
335
337 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
338 "truthUnconvRecoConv2Si", "truthUnconvRecoConv2Si",
339 "/MONITORING/truthUnconvRecoConv2Si/", rootHistSvc);
340
342 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
343 "truthUnconvRecoUnconv", "truthUnconvRecoUnconv",
344 "/MONITORING/truthUnconvRecoUnconv/", rootHistSvc);
345
347 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
348 "recoPhotonUnconvLoose", "Loose Photons Reco Photon",
349 "/MONITORING/recoPhotonUnconvLoose/", rootHistSvc);
350
352 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
353 "recoPhotonUnconvTight", "Tight Photons Reco Photon",
354 "/MONITORING/recoPhotonUnconvTight/", rootHistSvc);
355
357 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
358 "recoPhotonConvLoose", "Loose Photons Reco Photon",
359 "/MONITORING/recoPhotonConvLoose/", rootHistSvc);
360
362 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
363 "recoPhotonConvTight", "Tight Photons Reco Photon",
364 "/MONITORING/recoPhotonConvTight/", rootHistSvc);
365
367 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
368 "recoPhotonUnconvIsoFixedCutTight",
369 "Isolation Fixed Cut Tight Photons Reco Photon",
370 "/MONITORING/recoPhotonUnconvIsoFixedCutTight/", rootHistSvc);
371
373 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
374 "recoPhotonUnconvIsoFixedCutTightCaloOnly",
375 "Isolation Fixed Cut Tight Calo Only Photons Reco Photon",
376 "/MONITORING/recoPhotonUnconvIsoFixedCutTightCaloOnly/",
378
380 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
381 "recoPhotonUnconvIsoFixedCutLoose",
382 "Isolation Fixed Cut Loose Photons Reco Photon",
383 "/MONITORING/recoPhotonUnconvIsoFixedCutLoose/", rootHistSvc);
384
386 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
387 "recoPhotonConvIsoFixedCutTight",
388 "Isolation Fixed Cut Tight Photons Reco Photon",
389 "/MONITORING/recoPhotonConvIsoFixedCutTight/", rootHistSvc);
390
392 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
393 "recoPhotonConvIsoFixedCutTightCaloOnly",
394 "Isolation Fixed Cut Tight Calo Only Photons Reco Photon",
395 "/MONITORING/recoPhotonConvIsoFixedCutTightCaloOnly/", rootHistSvc);
396
398 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
399 "recoPhotonConvIsoFixedCutLoose",
400 "Isolation Fixed Cut Loose Photons Reco Photon",
401 "/MONITORING/recoPhotonConvIsoFixedCutLoose/", rootHistSvc);
402
403 // for the track monitoring, consider
404 // 4 track types (TRTSA or not, highpt or not) and
405 // 4 truth matching types (all / e / not e / pion / no truth match)
406 static const std::string typeMatch[5] = {"", "MatchElectron", "NotElectron",
407 "MatchPion", "NotMatched"};
408 static const std::string typeTrk[2] = {"", "TRT"};
409 static const std::string ptTrk[2] = {"", "highpT"};
410 static const std::string ctypeMatch[5] = {
411 "", " match to electrons", " not matched to electrons",
412 " match to pions", " not matched"};
413 static const std::string ctypeTrk[2] = {"", " TRTSA"};
414 static const std::string cptTrk[2] = {"", " pT > 3 GeV"};
415
416 for (int im = 0; im < 5; im++) {
417 std::string mN = typeMatch[im];
418 for (int it = 0; it < (m_hasTRT ? 2 : 1); it++) {
419 std::string tN = typeTrk[it];
420 for (int ip = 0; ip < 2; ip++) {
421 std::string pN = ptTrk[ip];
422
423 std::string nN =
424 "InDetTracks" + typeTrk[it] + typeMatch[im] + ptTrk[ip];
425 std::string fN = "/MONITORING/" + nN + "/";
426 std::string cN =
427 "InDet Tracks" + ctypeTrk[it] + ctypeMatch[im] + cptTrk[ip];
428
429 ATH_MSG_INFO("Creating histograms for " << nN);
430 mapTrkHistograms[nN] =
431 std::make_unique<egammaMonitoring::TrackHistograms>(
432 nN.c_str(), cN.c_str(), fN.c_str(), rootHistSvc);
433 ATH_CHECK(mapTrkHistograms[nN]->initializePlots());
434 }
435 }
436 }
437
438 ATH_CHECK(truthPhotonAll->initializePlots());
439 ATH_CHECK(truthPhotonAllUnconv->initializePlots());
440 ATH_CHECK(truthPhotonAllConv->initializePlots());
441 ATH_CHECK(truthPhotonAllLateConv->initializePlots());
442 ATH_CHECK(truthPhotonRecoPhoton->initializePlots());
443 ATH_CHECK(truthPhotonRecoPhotonOrElectron->initializePlots());
444
445 ATH_CHECK(truthPhotonConvPhoton->initializePlots());
446 ATH_CHECK(truthPhotonConvRecoConv->initializePlots());
447 ATH_CHECK(truthPhotonConvRecoConv1Si->initializePlots());
448 ATH_CHECK(truthPhotonConvRecoConv2Si->initializePlots());
449 ATH_CHECK(truthPhotonConvRecoUnconv->initializePlots());
450
451 ATH_CHECK(truthPhotonUnconvPhoton->initializePlots());
452 ATH_CHECK(truthPhotonUnconvRecoConv->initializePlots());
453 ATH_CHECK(truthPhotonUnconvRecoConv1Si->initializePlots());
454 ATH_CHECK(truthPhotonUnconvRecoConv2Si->initializePlots());
455 ATH_CHECK(truthPhotonUnconvRecoUnconv->initializePlots());
456
457 ATH_CHECK(recoPhotonUnconvLoose->initializePlots());
458 ATH_CHECK(recoPhotonUnconvTight->initializePlots());
459 ATH_CHECK(recoPhotonConvLoose->initializePlots());
460 ATH_CHECK(recoPhotonConvTight->initializePlots());
464 ATH_CHECK(recoPhotonConvIsoFixedCutTight->initializePlots());
466 ATH_CHECK(recoPhotonConvIsoFixedCutLoose->initializePlots());
467
468 } // gamma Hists
469
470 if (m_sampleType != "gamma") {
471 ATH_CHECK(m_ElectronsKey.initialize());
472 ATH_CHECK(m_GSFTrackParticlesKey.initialize());
473 }
474
475 if ("electron" == m_sampleType) {
476 //*****************ID selectors (3 levels)********************
477 ATH_CHECK(m_Loose_Ele.retrieve());
478 ATH_CHECK(m_Medium_Ele.retrieve());
479 ATH_CHECK(m_Tight_Ele.retrieve());
480
481 ATH_CHECK(m_FwdElectronsKey.initialize(!m_FwdElectronsKey.empty()));
482
483 if (!m_FwdElectronsKey.empty()) {
484 m_dR1 = new TH1D("dR1", ";#Delta R;Events", 1000, 0, 0.1);
485 ATH_CHECK(rootHistSvc->regHist("/MONITORING/Check/dR1", m_dR1));
486 m_dR2 = new TH1D("dR2", ";#Delta R;Events", 1000, 0, 0.1);
487 ATH_CHECK(rootHistSvc->regHist("/MONITORING/Check/dR2", m_dR2));
488
489 ATH_CHECK(m_Loose_FwdEle.retrieve());
490 ATH_CHECK(m_Medium_FwdEle.retrieve());
491 ATH_CHECK(m_Tight_FwdEle.retrieve());
492 }
493 }
494
495 if ("gamma" == m_sampleType) {
496 //*****************ID selectors (2 levels)********************
497 ATH_CHECK(m_Loose_Photon.retrieve());
498 ATH_CHECK(m_Tight_Photon.retrieve());
499
500 //*****************Iso Requirements********************
501 ATH_CHECK(m_IsoFixedCutTight.retrieve());
503 ATH_CHECK(m_IsoFixedCutLoose.retrieve());
504
505 ATH_CHECK(m_PhotonsKey.initialize());
506 }
507
508 //***************** The handles used whatever the sample********************
509 ATH_CHECK(m_eventInfoKey.initialize());
511
512 if (m_sampleType != "dataZ") {
513 ATH_CHECK(m_egTruthParticlesKey.initialize());
514 ATH_CHECK(m_truthParticlesKey.initialize());
515
516 //*****************MC Truth Classifier Requirement********************
517 ATH_CHECK(m_mcTruthClassifier.retrieve());
518 }
519
520 return StatusCode::SUCCESS;
521}
522
524
525 const EventContext &ctx = Gaudi::Hive::currentContext();
526
527 // Retrieve things from the event store
529 const float mu = eventInfo->averageInteractionsPerCrossing();
530
531 // Retrieve indet track particles
534
535 if ("dataZ" == m_sampleType) {
536 return this->ZeeSelection(mu, ctx);
537 }
538
539 // Retrieve egamma truth particles
542
543 // Retrieve truth particles
546
547 if ("electron" == m_sampleType) {
548
552
553 ATH_MSG_DEBUG("------------ Truth Egamma Container ---------------");
554 for (const auto *egtruth : *egTruthParticles) {
555
556 if (!egtruth)
557 continue;
558
559 const xAOD::Electron *electron =
561
562 if (!electron)
563 continue;
564
565 clusterPromptAll->fill(*electron, mu);
566 if (egtruth->pt() > 10 * Gaudi::Units::GeV) {
567 clusterPrompt10GeV->fill(*electron, mu);
568 }
569 }
570
571 ATH_MSG_DEBUG("------------ Truth Particles Container ---------------");
572 unsigned int promptElectronTruthIndex =
573 std::numeric_limits<unsigned int>::max();
574 for (const auto *truth : *truthParticles) {
575
576 if (!truth) continue;
577 if (std::abs(truth->pdgId()) != 11) continue;
578
579 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
582
583 if (msgLvl(MSG::DEBUG)) {
584
585 bool haspVtx = truth->hasProdVtx();
586 double rProd = -1;
587 if (haspVtx) {
588 const xAOD::TruthVertex *pvtx = truth->prodVtx();
589 rProd = pvtx->perp();
590 }
591 bool hasdVtx = truth->hasDecayVtx();
592 double rDec = -1;
593 if (hasdVtx) {
594 const xAOD::TruthVertex *dvtx = truth->decayVtx();
595 rDec = dvtx->perp();
596 }
597
598 ATH_MSG_DEBUG(" ******** Truth electron found: "
599 << truth << " TO " << TO << " TT " << TT
600 << " Rprod = " << rProd << " Rdec = " << rDec
601 << " eventNumber " << eventInfo->eventNumber());
602 }
603
604 // Check if it is the prompt electron
607 MC::isGenStable(truth)) {
608 truthPromptElectronAll->fill(truth);
609 promptElectronTruthIndex = truth->index();
610 }
611
612 // Check that it is not from geant4 (but electron from photon conversion
613 // are kept)
615 truthElectronAll->fill(truth);
616 }
617
618 ATH_MSG_DEBUG("------------ InDetTracks ---------------");
619
620 for (const auto *tp : *InDetTPs) {
621
622 if (!tp)
623 continue;
624
625 uint8_t nPi = 0;
626 uint8_t nSCT = 0;
627
628 tp->summaryValue(nPi, xAOD::numberOfPixelHits);
629 tp->summaryValue(nSCT, xAOD::numberOfSCTHits);
630
631 if ((nPi + nSCT) < 7) continue;
632
634
635 if (!truth || std::abs(truth->pdgId()) != 11) continue;
636
637 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
642 truth->index() == promptElectronTruthIndex) {
643
644 // we found the track from the prompt electron
645 // let's count it
646 truthPromptElectronWithTrack->fill(truth);
647 break;
648
649 } else {
650 const xAOD::TruthParticle *firstElTruth =
652 if (!firstElTruth)
653 continue;
654 // this is not a prompt electron, we need to check the parents
655 // but we need to make sure that we double count if already found the
656 // track foundPromptElectron will check that
657
658 if (firstElTruth->index() == promptElectronTruthIndex) {
659 truthPromptElectronWithTrack->fill(firstElTruth);
660 break;
661 }
662 }
663 }
664
665 ATH_MSG_DEBUG("------------ GSFTracks ---------------");
666 for (const auto *gsf : *GSFTracks) {
667
668 if (!gsf) continue;
669
671
672 if (!truth) continue;
673
674 uint8_t nPi = 0;
675 uint8_t nSCT = 0;
676
677 gsf->summaryValue(nPi, xAOD::numberOfPixelHits);
678 gsf->summaryValue(nSCT, xAOD::numberOfSCTHits);
679
680 if ((nPi + nSCT) < 7) continue;
681
682 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
687 truth->index() == promptElectronTruthIndex) {
688
689 // we found the track from the prompt electron
690 // let's count it
692 break;
693 } else {
694 const xAOD::TruthParticle *firstElTruth =
696 if (!firstElTruth)
697 continue;
698 ATH_MSG_DEBUG("********----- Getting Mother-----********");
699 ATH_MSG_DEBUG(" STATUS " << firstElTruth << " index "
700 << firstElTruth->index());
701 // this is not a prompt electron, we need to check the parents
702 // but we need to make sure that we double count if already found the
703 // track foundPromptElectron will check that
704 if (firstElTruth->index() == promptElectronTruthIndex) {
705 truthPromptElectronWithGSFTrack->fill(firstElTruth);
706 break;
707 }
708 }
709 }
710
711 ATH_MSG_DEBUG("------------ Reco central electrons ---------------");
712 bool foundPromptElectron = false;
713
714 for (const auto *elrec : *RecoEl) {
715
716 if (!elrec) continue;
717
718 bool toFill = false;
719
720 clusterAll->fill(*elrec, mu);
721 recoElectronAll->fill(*elrec);
722 showerShapesAll->fill(*elrec);
723 isolationAll->fill(*elrec);
724 if (elrec->pt() > 10 * Gaudi::Units::GeV) {
725 cluster10GeV->fill(*elrec, mu);
726 showerShapes10GeV->fill(*elrec);
727 }
728
729 const xAOD::TruthParticle *truth =
731 if (!truth)
732 continue;
733 truthElectronRecoElectronAll->fill(truth, elrec);
734 if (std::abs(truth->pdgId()) != 11 || foundPromptElectron)
735 continue;
736 const xAOD::TruthParticle *elTruth(nullptr);
737 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
742 truth->index() == promptElectronTruthIndex) {
743 toFill = true;
744 elTruth = truth;
745 } else {
747 if (!firstElTruth) continue;
748 // this is not a prompt electron, we need to check the parents
749 // but we need to make sure that we double count if already found the
750 // track foundPromptElectron will check that
751 if (firstElTruth->index() == promptElectronTruthIndex) {
752 toFill = true;
753 elTruth = firstElTruth;
754 }
755 }
756 if (toFill) {
757 foundPromptElectron = true;
758 truthPromptElectronWithReco->fill(elTruth, elrec);
759 truthPromptElectronWithRecoTrack->fill(elTruth, elrec); // yes the same. This is different for fwd
760 if (m_Loose_Ele->accept(elrec)) truthRecoElectronLoose->fill(elTruth, elrec);
761 if (m_Medium_Ele->accept(elrec)) truthRecoElectronMedium->fill(elTruth, elrec);
762 if (m_Tight_Ele->accept(elrec)) truthRecoElectronTight->fill(elTruth, elrec);
763 }
764 } // RecoEl Loop
765
766 if (!m_FwdElectronsKey.empty()) {
768 for (const auto *el : *RecoFwdEl) {
769 // This would be very weird ??
770 if (!el) continue;
771 clusterAll->fill(*el, mu);
772 recoElectronAll->fill(*el);
773 showerShapesAll->fill(*el);
774 if (el->pt() > 10 * Gaudi::Units::GeV) {
775 cluster10GeV->fill(*el, mu);
776 showerShapes10GeV->fill(*el);
777 }
778 bool toFill = false;
779
780 const xAOD::TruthParticle *truth =
782
783 if (!truth)
784 continue;
785 // truthElectronRecoFwdElectronAll->fill(truth, elrec); // to be done
786
787 // if the prompt electron is not too far from the reco candidate, which
788 // might be matched to a photon use this prompt as the matched particle
789 // instead
790 if (std::abs(truth->pdgId()) != 11 &&
791 promptElectronTruthIndex < truthParticles->size()) {
792 const xAOD::TruthParticle *vtruth = truthParticles->at(promptElectronTruthIndex);
793 double dR1 = vtruth->p4().DeltaR(el->caloCluster()->p4());
794 double dR2 = truth->p4().DeltaR(el->caloCluster()->p4());
795 m_dR1->Fill(dR1);
796 m_dR2->Fill(dR2);
797 if (dR1 < 0.05) // threshold to optimize
798 truth = vtruth;
799 }
800
801 if (std::abs(truth->pdgId()) != 11) continue;
802 const xAOD::TruthParticle *elTruth(nullptr);
803 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
806 truth->index() == promptElectronTruthIndex) {
807 toFill = true;
808 elTruth = truth;
809 } else {
810 const xAOD::TruthParticle *firstElTruth =
812 if (!firstElTruth) continue;
813 if (firstElTruth->index() == promptElectronTruthIndex) {
814 toFill = true;
815 elTruth = firstElTruth;
816 }
817 }
818 if (toFill) {
819 if (foundPromptElectron) {
820 ATH_MSG_DEBUG("A fwd electron also reconstructed as central "
821 "true eta = "
822 << elTruth->eta()
823 << " event = " << eventInfo->eventNumber());
824 m_CenFwdOverlap[0]++;
825 if (el->nTrackParticles() > 0)
826 m_CenFwdOverlap[1]++;
827 } else {
828 foundPromptElectron = true;
829 truthPromptElectronWithReco->fill(elTruth, el);
830 if (el->nTrackParticles() > 0)
831 truthPromptElectronWithRecoTrack->fill(elTruth, el);
832 if (m_Loose_FwdEle->accept(el))
833 truthRecoElectronLoose->fill(elTruth, el);
834 if (m_Medium_FwdEle->accept(el))
835 truthRecoElectronMedium->fill(elTruth, el);
836 if (m_Tight_FwdEle->accept(el))
837 truthRecoElectronTight->fill(elTruth, el);
838 }
839 }
840 } // loop on fwdEl
841 }
842
843 } // if electron
844
845 if ("gamma" == m_sampleType) {
846
847 ATH_MSG_DEBUG("------------ Photons ---------------");
849
850 for (const auto *phrec : *RecoPh) {
851
852 if (!phrec)
853 continue;
854
855 recoPhotonAll->fill(*phrec);
856 isolationAll->fill(*phrec);
857 showerShapesAll->fill(*phrec);
858 clusterAll->fill(*phrec, mu);
859 if (phrec->pt() > 10 * Gaudi::Units::GeV) {
860 cluster10GeV->fill(*phrec, mu);
861 showerShapes10GeV->fill(*phrec);
862 }
863
864 } // RecoPh Loop
865
866 for (const auto *egtruth : *egTruthParticles) {
867
868 if (!egtruth)
869 continue;
870
871 truthPhotonAll->fill(*egtruth, mu);
872
873 bool isTrueConv = xAOD::EgammaHelpers::isTrueConvertedPhoton(egtruth);
874 bool isTrueLateConv =
876 !isTrueConv;
877 const xAOD::Photon *photon = xAOD::EgammaHelpers::getRecoPhoton(egtruth);
878 const xAOD::Electron *electron =
880
881 if (isTrueConv)
882 truthPhotonAllConv->fill(*egtruth, mu);
883 if (isTrueLateConv)
884 truthPhotonAllLateConv->fill(*egtruth, mu);
885 if (!isTrueConv && !isTrueLateConv)
886 truthPhotonAllUnconv->fill(*egtruth, mu);
887
888 if (photon || electron)
889 truthPhotonRecoPhotonOrElectron->fill(*egtruth, mu);
890
891 if (!photon)
892 continue;
893
894 truthPhotonRecoPhoton->fill(*egtruth, mu);
895 clusterPromptAll->fill(*photon, mu);
896 if (egtruth->pt() > 10 * Gaudi::Units::GeV) {
897 clusterPrompt10GeV->fill(*photon, mu);
898 }
899
900 bool isRecoConv = xAOD::EgammaHelpers::isConvertedPhoton(photon);
903
904 if (isTrueConv) {
905
906 truthPhotonConvPhoton->fill(*egtruth, mu);
907
908 if (isRecoConv) {
909
910 truthPhotonConvRecoConv->fill(*egtruth, mu);
911
912 clusterConvPhoton->fill(*photon, mu);
913
914 if (convType == xAOD::EgammaParameters::singleSi) {
915 truthPhotonConvRecoConv1Si->fill(*egtruth, mu);
916 clusterConvPhotonSi->fill(*photon, mu);
917 } else if (convType == xAOD::EgammaParameters::singleTRT) {
918 truthPhotonConvRecoConv1TRT->fill(*egtruth, mu);
919 clusterConvPhotonTRT->fill(*photon, mu);
920 } else if (convType == xAOD::EgammaParameters::doubleSi) {
921 truthPhotonConvRecoConv2Si->fill(*egtruth, mu);
922 clusterConvPhotonSiSi->fill(*photon, mu);
923 } else if (convType == xAOD::EgammaParameters::doubleTRT) {
924 truthPhotonConvRecoConv2TRT->fill(*egtruth, mu);
925 clusterConvPhotonTRTTRT->fill(*photon, mu);
926 } else if (convType == xAOD::EgammaParameters::doubleSiTRT) {
927 truthPhotonConvRecoConv2SiTRT->fill(*egtruth, mu);
928 clusterConvPhotonSiTRT->fill(*photon, mu);
929 }
930
931 if (m_IsoFixedCutTight->accept(*photon))
932 recoPhotonConvIsoFixedCutTight->fill(*egtruth, mu);
933 if (m_IsoFixedCutTightCaloOnly->accept(*photon))
934 recoPhotonConvIsoFixedCutTightCaloOnly->fill(*egtruth, mu);
935 if (m_IsoFixedCutLoose->accept(*photon))
936 recoPhotonConvIsoFixedCutLoose->fill(*egtruth, mu);
937 if (m_Loose_Photon->accept(photon))
938 recoPhotonConvLoose->fill(*egtruth, mu);
939 if (m_Tight_Photon->accept(photon))
940 recoPhotonConvTight->fill(*egtruth, mu);
941 } // isRecoConv
942 else {
943 truthPhotonConvRecoUnconv->fill(*egtruth, mu);
944 clusterUnconvPhoton->fill(*photon, mu);
945 }
946
947 } // isTrueConv
948 // else if (!isTrueLateConv) {
949 else {
950
951 truthPhotonUnconvPhoton->fill(*egtruth, mu);
952
953 if (isRecoConv) {
954 truthPhotonUnconvRecoConv->fill(*egtruth, mu);
955
956 if (convType == xAOD::EgammaParameters::singleSi) {
957 truthPhotonUnconvRecoConv1Si->fill(*egtruth, mu);
958 clusterConvPhotonSi->fill(*photon, mu);
959 } else if (convType == xAOD::EgammaParameters::singleTRT) {
960 truthPhotonUnconvRecoConv1TRT->fill(*egtruth, mu);
961 clusterConvPhotonTRT->fill(*photon, mu);
962 } else if (convType == xAOD::EgammaParameters::doubleSi) {
963 truthPhotonUnconvRecoConv2Si->fill(*egtruth, mu);
964 clusterConvPhotonSiSi->fill(*photon, mu);
965 } else if (convType == xAOD::EgammaParameters::doubleTRT) {
966 truthPhotonUnconvRecoConv2TRT->fill(*egtruth, mu);
967 clusterConvPhotonTRTTRT->fill(*photon, mu);
968 } else if (convType == xAOD::EgammaParameters::doubleSiTRT) {
969 truthPhotonUnconvRecoConv2SiTRT->fill(*egtruth, mu);
970 clusterConvPhotonSiTRT->fill(*photon, mu);
971 }
972 } else
973 truthPhotonUnconvRecoUnconv->fill(*egtruth, mu);
975
976 if (m_IsoFixedCutTight->accept(*photon))
977 recoPhotonUnconvIsoFixedCutTight->fill(*egtruth, mu);
978 if (m_IsoFixedCutTightCaloOnly->accept(*photon))
980 if (m_IsoFixedCutLoose->accept(*photon))
981 recoPhotonUnconvIsoFixedCutLoose->fill(*egtruth, mu);
982 if (m_Loose_Photon->accept(photon))
983 recoPhotonUnconvLoose->fill(*egtruth, mu);
984 if (m_Tight_Photon->accept(photon))
985 recoPhotonUnconvTight->fill(*egtruth, mu);
986 } // !isTrueLateConv
987 } // egtruth Loop
988
989 // loop over InDetTrackParticles
990 for (const auto *tp : *InDetTPs) {
991
992 mapTrkHistograms["InDetTracks"]->fill(*tp, mu);
993 if (matchedToElectron(*tp))
994 mapTrkHistograms["InDetTracksMatchElectron"]->fill(*tp, mu);
995 else {
996 mapTrkHistograms["InDetTracksNotElectron"]->fill(*tp, mu);
997 if (matchedToPion(*tp))
998 mapTrkHistograms["InDetTracksMatchPion"]->fill(*tp, mu);
999 else if (notMatchedToTruth(*tp))
1000 mapTrkHistograms["InDetTracksNotMatched"]->fill(*tp, mu);
1001 }
1002 if (tp->pt() > 3000.) {
1003 mapTrkHistograms["InDetTrackshighpT"]->fill(*tp, mu);
1004 if (matchedToElectron(*tp)) {
1005 mapTrkHistograms["InDetTracksMatchElectronhighpT"]->fill(*tp, mu);
1006 } else {
1007 mapTrkHistograms["InDetTracksNotElectronhighpT"]->fill(*tp, mu);
1008 if (matchedToPion(*tp)) {
1009 mapTrkHistograms["InDetTracksMatchPionhighpT"]->fill(*tp, mu);
1010 } else if (notMatchedToTruth(*tp)) {
1011 mapTrkHistograms["InDetTracksNotMatchedhighpT"]->fill(*tp, mu);
1012 }
1013 }
1014 }
1015
1016 if (m_hasTRT &&
1017 xAOD::EgammaHelpers::numberOfSiHits(tp) == 0) { // TRTSA tracks
1018 mapTrkHistograms["InDetTracksTRT"]->fill(*tp, mu);
1019 if (matchedToElectron(*tp))
1020 mapTrkHistograms["InDetTracksTRTMatchElectron"]->fill(*tp, mu);
1021 else {
1022 mapTrkHistograms["InDetTracksTRTNotElectron"]->fill(*tp, mu);
1023 if (matchedToPion(*tp))
1024 mapTrkHistograms["InDetTracksTRTMatchPion"]->fill(*tp, mu);
1025 else if (notMatchedToTruth(*tp))
1026 mapTrkHistograms["InDetTracksTRTNotMatched"]->fill(*tp, mu);
1027 }
1028 if (tp->pt() > 3000.) {
1029 mapTrkHistograms["InDetTracksTRThighpT"]->fill(*tp, mu);
1030 if (matchedToElectron(*tp))
1031 mapTrkHistograms["InDetTracksTRTMatchElectronhighpT"]->fill(*tp,
1032 mu);
1033 else {
1034 mapTrkHistograms["InDetTracksTRTNotElectronhighpT"]->fill(*tp, mu);
1035 if (matchedToPion(*tp))
1036 mapTrkHistograms["InDetTracksTRTMatchPionhighpT"]->fill(*tp, mu);
1037 else if (notMatchedToTruth(*tp))
1038 mapTrkHistograms["InDetTracksTRTNotMatchedhighpT"]->fill(*tp, mu);
1039 }
1040 }
1041 }
1042
1043 } // loop over InDetTPs
1044
1045 } // if gamma
1046
1047 return StatusCode::SUCCESS;
1048}
1049
1050// ******
1051
1053
1054 if ("electron" == m_sampleType) {
1055
1056 ATH_MSG_INFO("Number of events with electron reconstructed "
1057 "as both Central and Forward "
1058 << m_CenFwdOverlap[0] << " and with a track for the Forward "
1059 << m_CenFwdOverlap[1]);
1060
1061 egammaMonitoring::EfficiencyPlot trackEfficiency(
1062 "trackingEfficiency", "/MONITORING/trackingEfficiency/", rootHistSvc);
1063 ATH_CHECK(trackEfficiency.divide(truthPromptElectronWithTrack.get(),
1064 truthPromptElectronAll.get()));
1066 "GSFEfficiency", "/MONITORING/GSFEfficiency/", rootHistSvc);
1069 egammaMonitoring::EfficiencyPlot matchingEfficiency(
1070 "matchingEfficiency", "/MONITORING/matchingEfficiency/", rootHistSvc);
1071 ATH_CHECK(matchingEfficiency.divide(truthPromptElectronWithRecoTrack.get(),
1073 egammaMonitoring::EfficiencyPlot reconstructionEfficiency(
1074 "reconstructionEfficiency", "/MONITORING/reconstructionEfficiency/",
1075 rootHistSvc);
1076 ATH_CHECK(reconstructionEfficiency.divide(truthPromptElectronWithReco.get(),
1077 truthPromptElectronAll.get()));
1078 egammaMonitoring::EfficiencyPlot recoElectronLooseEfficiency(
1079 "recoElectronLooseLHEfficiency",
1080 "/MONITORING/recoElectronLooseLHEfficiency/", rootHistSvc);
1081 ATH_CHECK(recoElectronLooseEfficiency.divide(truthRecoElectronLoose.get(),
1082 truthPromptElectronAll.get()));
1083 egammaMonitoring::EfficiencyPlot recoElectronMediumEfficiency(
1084 "recoElectronMediumLHEfficiency",
1085 "/MONITORING/recoElectronMediumLHEfficiency/", rootHistSvc);
1086 ATH_CHECK(recoElectronMediumEfficiency.divide(
1088 egammaMonitoring::EfficiencyPlot recoElectronTightEfficiency(
1089 "recoElectronTightLHEfficiency",
1090 "/MONITORING/recoElectronTightLHEfficiency/", rootHistSvc);
1091 ATH_CHECK(recoElectronTightEfficiency.divide(truthRecoElectronTight.get(),
1092 truthPromptElectronAll.get()));
1093
1094 }
1095
1096 else if ("gamma" == m_sampleType) {
1097
1098 egammaMonitoring::EfficiencyPlot truthPhotonRecoPhotonEfficiency(
1099 "truthPhotonRecoPhotonEfficiency",
1100 "/MONITORING/truthPhotonRecoPhotonEfficiency/", rootHistSvc);
1101 ATH_CHECK(truthPhotonRecoPhotonEfficiency.divide(
1103 egammaMonitoring::EfficiencyPlot truthPhotonRecoPhotonOrElectronEfficiency(
1104 "truthPhotonRecoPhotonOrElectronEfficiency",
1105 "/MONITORING/truthPhotonRecoPhotonOrElectronEfficiency/", rootHistSvc);
1106 ATH_CHECK(truthPhotonRecoPhotonOrElectronEfficiency.divide(
1108 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoEfficiency(
1109 "truthPhotonConvRecoEfficiency",
1110 "/MONITORING/truthPhotonConvRecoEfficiency/", rootHistSvc);
1111 ATH_CHECK(truthPhotonConvRecoEfficiency.divide(truthPhotonConvPhoton.get(),
1112 truthPhotonAllConv.get()));
1113 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoEfficiency(
1114 "truthPhotonUnconvRecoEfficiency",
1115 "/MONITORING/truthPhotonUnconvRecoEfficiency/", rootHistSvc);
1116 ATH_CHECK(truthPhotonUnconvRecoEfficiency.divide(
1118 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConvEfficiency(
1119 "truthPhotonConvRecoConvEfficiency",
1120 "/MONITORING/truthPhotonConvRecoConvEfficiency/", rootHistSvc);
1121 ATH_CHECK(truthPhotonConvRecoConvEfficiency.divide(
1123 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv1SiEfficiency(
1124 "truthPhotonConvRecoConv1SiEfficiency",
1125 "/MONITORING/truthPhotonConvRecoConv1SiEfficiency/", rootHistSvc);
1126 ATH_CHECK(truthPhotonConvRecoConv1SiEfficiency.divide(
1128 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv2SiEfficiency(
1129 "truthPhotonConvRecoConv2SiEfficiency",
1130 "/MONITORING/truthPhotonConvRecoConv2SiEfficiency/", rootHistSvc);
1131 ATH_CHECK(truthPhotonConvRecoConv2SiEfficiency.divide(
1133 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoUnconvEfficiency(
1134 "truthPhotonConvRecoUnconvEfficiency",
1135 "/MONITORING/truthPhotonConvRecoUnconvEfficiency/", rootHistSvc);
1136 ATH_CHECK(truthPhotonConvRecoUnconvEfficiency.divide(
1138 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConvEfficiency(
1139 "truthPhotonUnconvRecoConvEfficiency",
1140 "/MONITORING/truthPhotonUnconvRecoConvEfficiency/", rootHistSvc);
1141 ATH_CHECK(truthPhotonUnconvRecoConvEfficiency.divide(
1143 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv1SiEfficiency(
1144 "truthPhotonUnconvRecoConv1SiEfficiency",
1145 "/MONITORING/truthPhotonUnconvRecoConv1SiEfficiency/", rootHistSvc);
1146 ATH_CHECK(truthPhotonUnconvRecoConv1SiEfficiency.divide(
1148 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv2SiEfficiency(
1149 "truthPhotonUnconvRecoConv2SiEfficiency",
1150 "/MONITORING/truthPhotonUnconvRecoConv2SiEfficiency/", rootHistSvc);
1151 ATH_CHECK(truthPhotonUnconvRecoConv2SiEfficiency.divide(
1153 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoUnconvEfficiency(
1154 "truthPhotonUnconvRecoUnconvEfficiency",
1155 "/MONITORING/truthPhotonUnconvRecoUnconvEfficiency/", rootHistSvc);
1156 ATH_CHECK(truthPhotonUnconvRecoUnconvEfficiency.divide(
1158 egammaMonitoring::EfficiencyPlot truthPhotonRecoConvEfficiency(
1159 "truthPhotonRecoConvEfficiency",
1160 "/MONITORING/truthPhotonRecoConvEfficiency/", rootHistSvc);
1161 ATH_CHECK(truthPhotonRecoConvEfficiency.divide(
1163 egammaMonitoring::EfficiencyPlot truthPhotonRecoUnconvEfficiency(
1164 "truthPhotonRecoUnconvEfficiency",
1165 "/MONITORING/truthPhotonRecoUnconvEfficiency/", rootHistSvc);
1166 ATH_CHECK(truthPhotonRecoUnconvEfficiency.divide(
1168 egammaMonitoring::EfficiencyPlot recoPhotonUnconvIsoFixedCutTightEfficiency(
1169 "recoPhotonUnconvIsoFixedCutTightEfficiency",
1170 "/MONITORING/recoPhotonUnconvIsoFixedCutTightEfficiency/", rootHistSvc);
1171 ATH_CHECK(recoPhotonUnconvIsoFixedCutTightEfficiency.divide(
1175 recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency(
1176 "recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency",
1177 "/MONITORING/recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency/",
1178 rootHistSvc);
1179 ATH_CHECK(recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency.divide(
1182 egammaMonitoring::EfficiencyPlot recoPhotonUnconvIsoFixedCutLooseEfficiency(
1183 "recoPhotonUnconvIsoFixedCutLooseEfficiency",
1184 "/MONITORING/recoPhotonUnconvIsoFixedCutLooseEfficiency/", rootHistSvc);
1185 ATH_CHECK(recoPhotonUnconvIsoFixedCutLooseEfficiency.divide(
1188 egammaMonitoring::EfficiencyPlot recoPhotonConvIsoFixedCutTightEfficiency(
1189 "recoPhotonConvIsoFixedCutTightEfficiency",
1190 "/MONITORING/recoPhotonConvIsoFixedCutTightEfficiency/", rootHistSvc);
1191 ATH_CHECK(recoPhotonConvIsoFixedCutTightEfficiency.divide(
1194 recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency(
1195 "recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency",
1196 "/MONITORING/recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency/",
1197 rootHistSvc);
1198 ATH_CHECK(recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency.divide(
1201 egammaMonitoring::EfficiencyPlot recoPhotonConvIsoFixedCutLooseEfficiency(
1202 "recoPhotonConvIsoFixedCutLooseEfficiency",
1203 "/MONITORING/recoPhotonConvIsoFixedCutLooseEfficiency/", rootHistSvc);
1204 ATH_CHECK(recoPhotonConvIsoFixedCutLooseEfficiency.divide(
1206 egammaMonitoring::EfficiencyPlot recoPhotonConvLooseEfficiency(
1207 "recoPhotonConvLooseEfficiency",
1208 "/MONITORING/recoPhotonConvLooseEfficiency/", rootHistSvc);
1209 ATH_CHECK(recoPhotonConvLooseEfficiency.divide(
1211 egammaMonitoring::EfficiencyPlot recoPhotonConvTightEfficiency(
1212 "recoPhotonConvTightEfficiency",
1213 "/MONITORING/recoPhotonConvTightEfficiency/", rootHistSvc);
1214 ATH_CHECK(recoPhotonConvTightEfficiency.divide(
1216 egammaMonitoring::EfficiencyPlot recoPhotonUnconvLooseEfficiency(
1217 "recoPhotonUnconvLooseEfficiency",
1218 "/MONITORING/recoPhotonUnconvLooseEfficiency/", rootHistSvc);
1219 ATH_CHECK(recoPhotonUnconvLooseEfficiency.divide(
1221 egammaMonitoring::EfficiencyPlot recoPhotonUnconvTightEfficiency(
1222 "recoPhotonUnconvTightEfficiency",
1223 "/MONITORING/recoPhotonUnconvTightEfficiency/", rootHistSvc);
1224 ATH_CHECK(recoPhotonUnconvTightEfficiency.divide(
1226
1227 egammaMonitoring::WidthPlot truthPhotonRecoPhotonWidth(
1228 "truthPhotonRecoPhotonWidth", "/MONITORING/truthPhotonRecoPhotonWidth/",
1229 rootHistSvc);
1230 ATH_CHECK(truthPhotonRecoPhotonWidth.fill(truthPhotonRecoPhoton.get()));
1231 egammaMonitoring::WidthPlot truthPhotonConvPhotonWidth(
1232 "truthPhotonConvPhotonWidth", "/MONITORING/truthPhotonConvPhotonWidth/",
1233 rootHistSvc);
1234 ATH_CHECK(truthPhotonConvPhotonWidth.fill(truthPhotonConvPhoton.get()));
1235 egammaMonitoring::WidthPlot truthPhotonConvRecoConvWidth(
1236 "truthPhotonConvRecoConvWidth",
1237 "/MONITORING/truthPhotonConvRecoConvWidth/", rootHistSvc);
1238 ATH_CHECK(truthPhotonConvRecoConvWidth.fill(truthPhotonConvRecoConv.get()));
1239 egammaMonitoring::WidthPlot truthPhotonConvRecoConv1SiWidth(
1240 "truthPhotonConvRecoConv1SiWidth",
1241 "/MONITORING/truthPhotonConvRecoConv1SiWidth/", rootHistSvc);
1242 ATH_CHECK(
1243 truthPhotonConvRecoConv1SiWidth.fill(truthPhotonConvRecoConv1Si.get()));
1244 egammaMonitoring::WidthPlot truthPhotonConvRecoConv2SiWidth(
1245 "truthPhotonConvRecoConv2SiWidth",
1246 "/MONITORING/truthPhotonConvRecoConv2SiWidth/", rootHistSvc);
1247 ATH_CHECK(
1248 truthPhotonConvRecoConv2SiWidth.fill(truthPhotonConvRecoConv2Si.get()));
1249 if (m_hasTRT) {
1250 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv1TRTEfficiency(
1251 "truthPhotonConvRecoConv1TRTEfficiency",
1252 "/MONITORING/truthPhotonConvRecoConv1TRTEfficiency/", rootHistSvc);
1253 ATH_CHECK(truthPhotonConvRecoConv1TRTEfficiency.divide(
1255 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv2TRTEfficiency(
1256 "truthPhotonConvRecoConv2TRTEfficiency",
1257 "/MONITORING/truthPhotonConvRecoConv2TRTEfficiency/", rootHistSvc);
1258 ATH_CHECK(truthPhotonConvRecoConv2TRTEfficiency.divide(
1260 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv2SiTRTEfficiency(
1261 "truthPhotonConvRecoConv2SiTRTEfficiency",
1262 "/MONITORING/truthPhotonConvRecoConv2SiTRTEfficiency/", rootHistSvc);
1263 ATH_CHECK(truthPhotonConvRecoConv2SiTRTEfficiency.divide(
1265 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv1TRTEfficiency(
1266 "truthPhotonUnconvRecoConv1TRTEfficiency",
1267 "/MONITORING/truthPhotonUnconvRecoConv1TRTEfficiency/", rootHistSvc);
1268 ATH_CHECK(truthPhotonUnconvRecoConv1TRTEfficiency.divide(
1270 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv2TRTEfficiency(
1271 "truthPhotonUnconvRecoConv2TRTEfficiency",
1272 "/MONITORING/truthPhotonUnconvRecoConv2TRTEfficiency/", rootHistSvc);
1273 ATH_CHECK(truthPhotonUnconvRecoConv2TRTEfficiency.divide(
1276 truthPhotonUnconvRecoConv2SiTRTEfficiency(
1277 "truthPhotonUnconvRecoConv2SiTRTEfficiency",
1278 "/MONITORING/truthPhotonUnconvRecoConv2SiTRTEfficiency/",
1279 rootHistSvc);
1280 ATH_CHECK(truthPhotonUnconvRecoConv2SiTRTEfficiency.divide(
1283 egammaMonitoring::WidthPlot truthPhotonConvRecoConv1TRTWidth(
1284 "truthPhotonConvRecoConv1TRTWidth",
1285 "/MONITORING/truthPhotonConvRecoConv1TRTWidth/", rootHistSvc);
1286 ATH_CHECK(truthPhotonConvRecoConv1TRTWidth.fill(
1288 egammaMonitoring::WidthPlot truthPhotonConvRecoConv2TRTWidth(
1289 "truthPhotonConvRecoConv2TRTWidth",
1290 "/MONITORING/truthPhotonConvRecoConv2TRTWidth/", rootHistSvc);
1291 ATH_CHECK(truthPhotonConvRecoConv2TRTWidth.fill(
1293 egammaMonitoring::WidthPlot truthPhotonConvRecoConv2SiTRTWidth(
1294 "truthPhotonConvRecoConv2SiTRTWidth",
1295 "/MONITORING/truthPhotonConvRecoConv2SiTRTWidth/", rootHistSvc);
1296 ATH_CHECK(truthPhotonConvRecoConv2SiTRTWidth.fill(
1298 }
1299 egammaMonitoring::WidthPlot truthPhotonConvRecoUnconvWidth(
1300 "truthPhotonConvRecoUnconvWidth",
1301 "/MONITORING/truthPhotonConvRecoUnconvWidth/", rootHistSvc);
1302 ATH_CHECK(
1303 truthPhotonConvRecoUnconvWidth.fill(truthPhotonConvRecoUnconv.get()));
1304 egammaMonitoring::WidthPlot truthPhotonUnconvPhotonWidth(
1305 "truthPhotonUnconvPhotonWidth",
1306 "/MONITORING/truthPhotonUnconvPhotonWidth/", rootHistSvc);
1307 ATH_CHECK(truthPhotonUnconvPhotonWidth.fill(truthPhotonUnconvPhoton.get()));
1308 egammaMonitoring::WidthPlot truthPhotonUnconvRecoConvWidth(
1309 "truthPhotonUnconvRecoConvWidth",
1310 "/MONITORING/truthPhotonUnconvRecoConvWidth/", rootHistSvc);
1311 ATH_CHECK(
1312 truthPhotonUnconvRecoConvWidth.fill(truthPhotonUnconvRecoConv.get()));
1313 egammaMonitoring::WidthPlot truthPhotonUnconvRecoUnconvWidth(
1314 "truthPhotonUnconvRecoUnconvWidth",
1315 "/MONITORING/truthPhotonUnconvRecoUnconvWidth/", rootHistSvc);
1316 ATH_CHECK(truthPhotonUnconvRecoUnconvWidth.fill(
1318 } else if ("dataZ" == m_sampleType) {
1320 }
1321
1322 return StatusCode::SUCCESS;
1323}
1324
1327 return truth && abs(truth->pdgId()) == 11;
1328}
1329
1332 return truth && abs(truth->pdgId()) == 211;
1333}
1334
1339
1340StatusCode EgammaMonitoring::ZeeSelection(float mu, const EventContext &ctx) {
1343 ctx);
1344
1345 const xAOD::Electron *e1 = nullptr, *e2 = nullptr;
1346 double pTL = -9e9, pTSL = -9e9;
1347 for (const auto *el : *RecoEl) {
1348 double pt = el->pt();
1349 if (pt < 15e3)
1350 continue;
1351 if (pt > pTL) {
1352 e2 = e1;
1353 pTSL = pTL;
1354 e1 = el;
1355 pTL = pt;
1356 } else if (pt > pTSL) {
1357 e2 = el;
1358 pTSL = pt;
1359 }
1360 }
1361
1362 if (!e2)
1363 return StatusCode::SUCCESS;
1364
1365 m_diElectron->fill(*e1, *e2, mu);
1366
1367 m_clusterReco->fill(*e1);
1368 m_clusterReco->fill(*e2);
1369 recoElectronAll->fill(*e1);
1370 recoElectronAll->fill(*e2);
1371
1372 showerShapesAll->fill(*e1);
1373 showerShapesAll->fill(*e2);
1374 if (e1->pt() > 10 * Gaudi::Units::GeV)
1375 showerShapes10GeV->fill(*e1);
1376 if (e2->pt() > 10 * Gaudi::Units::GeV)
1377 showerShapes10GeV->fill(*e2);
1378 isolationAll->fill(*e1);
1379 isolationAll->fill(*e2);
1380
1381 return StatusCode::SUCCESS;
1382}
1383
1385
1386 TH1D *hRef = (TH1D *)m_diElectron->histoMap["mass"];
1387 double xmi = 66, xma = 116, eps = 0.01;
1388 int ib1 = hRef->FindBin(xmi + eps);
1389 int ib2 = hRef->FindBin(xma - eps);
1390 TH1D *hmee = new TH1D("mee", ";m_{ee} [GeV];Events / 0.5 GeV", ib2 - ib1 + 1,
1391 xmi, xma);
1392 for (int ib = ib1; ib <= ib2; ib++) {
1393 double c = hRef->GetBinContent(ib);
1394 double ec = hRef->GetBinError(ib);
1395 hmee->SetBinContent(ib - ib1 + 1, c);
1396 hmee->SetBinError(ib - ib1 + 1, ec);
1397 }
1398 ATH_CHECK(rootHistSvc->regHist("/MONITORING/Data/mee", hmee));
1399
1400 TString vsX[3] = {"Et", "Etetale0p8", "Eta"};
1401 TString coo[3] = {"x", "x", "y"};
1402 for (int iL = 0; iL < 5; iL++) {
1403 TH3D *nRef;
1404 if (iL < 4)
1405 nRef = m_clusterReco->m_histo3DMap[Form("hNcellsvseteta_Lr%i", iL)];
1406 else
1407 nRef = recoElectronAll->histo3DMap["eteta_eop"];
1408 for (int iX = 0; iX < 3; iX++) {
1409 if (iL == 4 && iX == 2)
1410 continue;
1411 // nCells vs eta
1412 if (iX == 1) {
1413 int ieta08 = nRef->GetYaxis()->FindBin(0.79);
1414 nRef->GetYaxis()->SetRange(1, ieta08);
1415 } else if (iX == 2) {
1416 nRef->GetYaxis()->SetRange(1, 25);
1417 }
1418 TH2D *nRefvsX = (TH2D *)nRef->Project3D(Form("z%s", coo[iX].Data()));
1419 TString pN;
1420 if (iL < 4)
1421 pN = Form("pn%ivs%s", iL, vsX[iX].Data());
1422 else
1423 pN = Form("pEopvs%s", vsX[iX].Data());
1424 TProfile *pRefvsX = nRefvsX->ProfileX(pN.Data());
1425 pRefvsX->SetTitle(pN.Data());
1426 pRefvsX->GetXaxis()->SetTitle(iX < 2 ? "E_{T} [GeV]" : "|#eta|");
1427 pRefvsX->GetYaxis()->SetTitle(iL < 4 ? Form("nCells_Lr%i", iL) : "E/p");
1428 ATH_CHECK(rootHistSvc->regHist(
1429 Form("/MONITORING/Data/%s", pRefvsX->GetName()), pRefvsX));
1430 delete nRefvsX;
1431 }
1432 }
1433 return StatusCode::SUCCESS;
1434}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
@ Data
Definition BaseObject.h:11
ATLAS-specific HepMC functions.
std::pair< std::vector< unsigned int >, bool > res
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
bool msgLvl(const MSG::Level lvl) const
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronsKey
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv1Si
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv2SiTRT
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv
EgammaMonitoring(const std::string &name, ISvcLocator *pSvcLocator)
std::map< std::string, std::unique_ptr< egammaMonitoring::TrackHistograms > > mapTrkHistograms
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonRecoPhotonOrElectron
Gaudi::Property< bool > m_hasTRT
is it run 3 or run 4 and later ?
std::unique_ptr< egammaMonitoring::RecoElectronHistograms > recoElectronAll
ToolHandle< CP::IIsolationSelectionTool > m_IsoFixedCutTightCaloOnly
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvIsoFixedCutTightCaloOnly
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAllConv
virtual StatusCode finalize()
std::unique_ptr< egammaMonitoring::IsolationHistograms > isolationAll
ToolHandle< IAsgPhotonIsEMSelector > m_Tight_Photon
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvPhoton
ToolHandle< IAsgElectronLikelihoodTool > m_Tight_Ele
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonTRTTRT
std::unique_ptr< egammaMonitoring::ShowerShapesHistograms > showerShapesAll
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_egTruthParticlesKey
static bool notMatchedToTruth(const xAOD::TrackParticle &tp)
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvLoose
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvTight
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticlesKey
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonSiTRT
ToolHandle< IAsgPhotonIsEMSelector > m_Loose_Photon
StatusCode ZeeSelection(float mu, const EventContext &ctx)
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvLoose
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv2SiTRT
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoUnconv
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_GSFTrackParticlesKey
virtual StatusCode execute()
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvIsoFixedCutTight
virtual StatusCode initialize()
SG::ReadHandleKey< xAOD::ElectronContainer > m_FwdElectronsKey
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonSiSi
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthRecoElectronLoose
static bool matchedToPion(const xAOD::TrackParticle &tp)
std::unique_ptr< egammaMonitoring::DiObjectHistograms > m_diElectron
ToolHandle< IAsgElectronLikelihoodTool > m_Medium_Ele
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithGSFTrack
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvIsoFixedCutTightCaloOnly
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvTight
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterPrompt10GeV
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv1TRT
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvPhoton
ToolHandle< IAsgElectronLikelihoodTool > m_Medium_FwdEle
static bool matchedToElectron(const xAOD::TrackParticle &tp)
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvIsoFixedCutLoose
std::unique_ptr< egammaMonitoring::RecoPhotonHistograms > recoPhotonAll
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithRecoTrack
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonTRT
std::unique_ptr< egammaMonitoring::ShowerShapesHistograms > showerShapes10GeV
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithTrack
SmartIF< ITHistSvc > rootHistSvc
Tools and services ///.
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterPromptAll
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterAll
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhoton
ToolHandle< IAsgElectronLikelihoodTool > m_Loose_Ele
Selector tools.
ToolHandle< IAsgElectronLikelihoodTool > m_Tight_FwdEle
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv2Si
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvIsoFixedCutLoose
ToolHandle< CP::IIsolationSelectionTool > m_IsoFixedCutTight
ToolHandle< CP::IIsolationSelectionTool > m_IsoFixedCutLoose
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthElectronAll
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAll
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthElectronRecoElectronAll
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
ToolHandle< IMCTruthClassifier > m_mcTruthClassifier
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthRecoElectronMedium
SG::ReadHandleKey< xAOD::PhotonContainer > m_PhotonsKey
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonRecoPhoton
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAllLateConv
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv1Si
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterUnconvPhoton
std::unique_ptr< egammaMonitoring::RecoClusterHistograms > m_clusterReco
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronAll
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv2Si
Gaudi::Property< std::string > m_sampleType
Sample name ///.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_InDetTrackParticlesKey
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAllUnconv
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv2TRT
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvIsoFixedCutTight
ToolHandle< IAsgElectronLikelihoodTool > m_Loose_FwdEle
std::unique_ptr< egammaMonitoring::ClusterHistograms > cluster10GeV
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithReco
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthRecoElectronTight
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoUnconv
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv1TRT
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonSi
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv2TRT
size_t index() const
Return the index of this element within its container.
StatusCode divide(IHistograms *pass, IHistograms *total)
StatusCode fill(IHistograms *input)
Definition WidthPlot.cxx:24
int pdgId() const
PDG ID code.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
float perp() const
Vertex transverse distance from the beam line.
bool isGenStable(const T &p)
Determine if the particle is stable at the generator (not det-sim) level,.
bool isConvertedPhoton(const xAOD::Egamma *eg, bool excludeTRT=false)
is the object a converted photon
xAOD::EgammaParameters::ConversionType conversionType(const xAOD::Photon *ph)
return the photon conversion type (see EgammaEnums)
bool isTrueConvertedPhoton(const xAOD::Photon *ph, float maxRadius=800.)
is the object matched to a true converted photon with R < maxRadius
const xAOD::TruthParticle * getBkgElectronMother(const xAOD::Electron *el, const bool allTheWayBack=true)
Helper wrapper function for calling the function above extracting the truth from a reco electron.
const xAOD::Photon * getRecoPhoton(const xAOD::TruthParticle *particle)
return the reco photon associated to the given TruthParticle (if any)
std::size_t numberOfSiHits(const xAOD::TrackParticle *tp)
return the number of Si hits in the track particle
const xAOD::Electron * getRecoElectron(const xAOD::TruthParticle *)
return the reco electron associated to the given TruthParticle (if any)
@ singleSi
one track only, with Si hits
@ doubleTRT
two tracks, none with Si hits (TRT only)
@ singleTRT
one track only, no Si hits (TRT only)
@ doubleSi
two tracks, both with Si hits
@ doubleSiTRT
two tracks, only one with Si hits
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
Return the truthParticle associated to the given IParticle (if any)
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition TruthVertex.h:15
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TruthParticle_v1 TruthParticle
Typedef to implementation.
Photon_v1 Photon
Definition of the current "egamma version".
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Electron_v1 Electron
Definition of the current "egamma version".