ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Reconstruction
egamma
egammaValidation
src
TruthPhotonHistograms.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TruthPhotonHistograms.h
"
6
7
#include "
AsgTools/AnaToolHandle.h
"
8
#include "GaudiKernel/ITHistSvc.h"
9
#include "
xAODBase/IParticle.h
"
10
#include "
xAODTruth/TruthParticle.h
"
11
#include "
xAODTruth/TruthVertex.h
"
12
#include "
xAODTruth/xAODTruthHelpers.h
"
13
#include "
xAODEgamma/Photon.h
"
14
#include "
xAODEgamma/EgammaTruthxAODHelpers.h
"
15
16
#include "TH1D.h"
17
#include "TH2D.h"
18
19
using namespace
egammaMonitoring
;
20
21
StatusCode
TruthPhotonHistograms::initializePlots
() {
22
23
ATH_CHECK
(
ParticleHistograms::initializePlots
());
24
25
const
char
* fN =
m_name
.c_str();
26
27
histoMap
[
"convRadius_all"
] =
new
TH1D(Form(
"%s_convRadius_all"
,fN),
";Conversion Radius [mm]; Conversion Radius Events"
, 200, 0, 2000);
28
histoMap
[
"convRadius"
] =
new
TH1D(Form(
"%s_convRadius"
,fN),
";Conversion Radius [mm]; Conversion Radius Events"
, 14,
m_cR_bins
);
29
histoMap
[
"convRadius_15GeV"
] =
new
TH1D(Form(
"%s_convRadius_15GeV"
,fN),
";Conversion Radius [mm]; Conversion Radius Events"
, 14,
m_cR_bins
);
30
histoMap
[
"convRadiusTrueVsReco"
] =
new
TH1D(Form(
"%s_convRadiusTrueVsReco"
,fN),
";R^{reco}_{conv. vtx} - R^{true}_{conv. vtx} [mm]; Events"
, 100, -200, 200);
31
32
histoMap
[
"pileup"
] =
new
TH1D(Form(
"%s_pileup"
,fN),
";mu; mu Events"
, 35, 0., 70.);
33
histoMap
[
"pileup_15GeV"
] =
new
TH1D(Form(
"%s_pileup_15GeV"
,fN),
";mu; mu Events"
, 35, 0., 70.);
34
histoMap
[
"onebin"
] =
new
TH1D(Form(
"%s_onebin"
,fN),
"; ; Events"
, 1, 0., 1.);
35
histoMap
[
"onebin_15GeV"
] =
new
TH1D(Form(
"%s_onebin_15GeV"
,fN),
"; ; Events"
, 1, 0., 1.);
36
37
histoMap
[
"resolution_e"
] =
new
TH1D(Form(
"%s_resolution_e"
,fN),
"; E_{reco} / E_{true} - 1; Events"
, 40, -0.2, 0.2);
38
histoMap
[
"resolution_eta"
] =
new
TH1D(Form(
"%s_resolution_eta"
,fN),
"; #eta_{reco} - #eta_{true}; Events"
, 20, -0.05, 0.05);
39
histoMap
[
"resolution_phi"
] =
new
TH1D(Form(
"%s_resolution_phi"
,fN),
"; #phi_{reco} - #phi_{true}; Events"
, 20, -0.05, 0.05);
40
41
histo2DMap
[
"resolution_e_vs_pT"
] =
new
TH2D(Form(
"%s_resolution_e_vs_pT"
,fN),
";p_{T} [GeV];E_{reco} / E_{true} - 1"
, 40, 0, 200, 160, -0.2, 0.2);
42
histo2DMap
[
"resolution_e_vs_eta"
] =
new
TH2D(Form(
"%s_resolution_e_vs_eta"
,fN),
";|#eta|;E_{reco} / E_{true} - 1"
, 25, 0, 2.5, 160, -0.2, 0.2);
43
44
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"convRadius_all"
,
histoMap
[
"convRadius_all"
]));
45
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"convRadius"
,
histoMap
[
"convRadius"
]));
46
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"convRadius_15GeV"
,
histoMap
[
"convRadius_15GeV"
]));
47
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"convRadiusTrueVsReco"
,
histoMap
[
"convRadiusTrueVsReco"
]));
48
49
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"pileup"
,
histoMap
[
"pileup"
]));
50
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"pileup_15GeV"
,
histoMap
[
"pileup_15GeV"
]));
51
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"onebin"
,
histoMap
[
"onebin"
]));
52
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"onebin_15GeV"
,
histoMap
[
"onebin_15GeV"
]));
53
54
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"resolution_e"
,
histoMap
[
"resolution_e"
]));
55
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"resolution_eta"
,
histoMap
[
"resolution_eta"
]));
56
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"resolution_phi"
,
histoMap
[
"resolution_phi"
]));
57
58
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"resolution_e_vs_pT"
,
histo2DMap
[
"resolution_e_vs_pT"
]));
59
ATH_CHECK
(
m_rootHistSvc
->regHist(
m_folder
+
"resolution_e_vs_eta"
,
histo2DMap
[
"resolution_e_vs_eta"
]));
60
61
return
StatusCode::SUCCESS;
62
63
}
64
65
void
TruthPhotonHistograms::fill
(
const
xAOD::IParticle
& phrec) {
66
TruthPhotonHistograms::fill
(phrec,0.);
67
}
68
69
void
TruthPhotonHistograms::fill
(
const
xAOD::IParticle
& phrec,
float
mu) {
70
71
ParticleHistograms::fill
(phrec);
72
73
const
xAOD::TruthParticle
*truth =
xAOD::TruthHelpers::getTruthParticle
(phrec);
74
75
float
trueR = -999;
76
if
(truth) {
77
if
(truth->
pdgId
() == 22 && truth->
hasDecayVtx
()) {
78
trueR = truth->
decayVtx
()->
perp
();
79
}
80
}
81
82
histoMap
[
"convRadius_all"
]->Fill(trueR);
83
histoMap
[
"convRadius"
]->Fill(trueR);
84
histoMap
[
"pileup"
]->Fill(mu);
85
histoMap
[
"onebin"
]->Fill(0.5);
86
87
if
(phrec.
pt
()/1000. > 15) {
88
histoMap
[
"convRadius_15GeV"
]->Fill(trueR);
89
histoMap
[
"pileup_15GeV"
]->Fill(mu);
90
histoMap
[
"onebin_15GeV"
]->Fill(0.5);
91
}
92
93
// access reco photon from the xAOD::TruthParticle (can't use the IParticle* here)
94
const
auto
*truthParticle =
dynamic_cast<
const
xAOD::TruthParticle
*
>
(&phrec);
95
if
(truth && truthParticle) {
96
const
xAOD::Photon
*photon =
xAOD::EgammaHelpers::getRecoPhoton
(truthParticle);
97
98
if
(photon) {
99
float
res_e = photon->e()/truth->
e
() - 1.;
100
float
res_eta = photon->eta() - truth->
eta
();
101
float
res_phi = photon->phi() - truth->
phi
();
102
float
recoR =
xAOD::EgammaHelpers::conversionRadius
(photon);
103
104
// Resolution histograms only make sense if there was a reco particle !
105
// And for resolution on R, only if true conv, reco conv
106
if
(recoR < 1000 && trueR > 0)
107
histoMap
[
"convRadiusTrueVsReco"
]->Fill(recoR - trueR);
108
109
histoMap
[
"resolution_e"
]->Fill(res_e);
110
histoMap
[
"resolution_eta"
]->Fill(res_eta);
111
histoMap
[
"resolution_phi"
]->Fill(res_phi);
112
113
histo2DMap
[
"resolution_e_vs_pT"
]->Fill(phrec.
pt
()/1000., res_e);
114
histo2DMap
[
"resolution_e_vs_eta"
]->Fill(std::abs(phrec.
eta
()), res_e);
115
116
}
117
}
118
119
120
}
// fill
AnaToolHandle.h
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
EgammaTruthxAODHelpers.h
IParticle.h
Photon.h
TruthParticle.h
TruthPhotonHistograms.h
TruthVertex.h
egammaMonitoring::IHistograms::m_folder
std::string m_folder
Definition
IHistograms.h:47
egammaMonitoring::IHistograms::m_rootHistSvc
SmartIF< ITHistSvc > m_rootHistSvc
Definition
IHistograms.h:48
egammaMonitoring::IHistograms::m_name
std::string m_name
Definition
IHistograms.h:45
egammaMonitoring::IHistograms::histoMap
std::map< std::string, TH1D * > histoMap
Definition
IHistograms.h:42
egammaMonitoring::ParticleHistograms::initializePlots
StatusCode initializePlots()
Definition
ParticleHistograms.cxx:13
egammaMonitoring::ParticleHistograms::fill
void fill(const xAOD::IParticle &egamma)
Definition
ParticleHistograms.cxx:41
egammaMonitoring::TruthPhotonHistograms::fill
void fill(const xAOD::IParticle &)
Definition
TruthPhotonHistograms.cxx:65
egammaMonitoring::TruthPhotonHistograms::initializePlots
StatusCode initializePlots()
Definition
TruthPhotonHistograms.cxx:21
egammaMonitoring::TruthPhotonHistograms::m_cR_bins
float m_cR_bins[15]
Definition
TruthPhotonHistograms.h:35
egammaMonitoring::TruthPhotonHistograms::histo2DMap
std::map< std::string, TH2D * > histo2DMap
Definition
TruthPhotonHistograms.h:24
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition
Event/xAOD/xAODBase/xAODBase/IParticle.h:41
xAOD::IParticle::eta
virtual double eta() const =0
The pseudorapidity ( ) of the particle.
xAOD::IParticle::pt
virtual double pt() const =0
The transverse momentum ( ) of the particle.
xAOD::TruthParticle_v1::pdgId
int pdgId() const
PDG ID code.
xAOD::TruthParticle_v1::decayVtx
const TruthVertex_v1 * decayVtx() const
The decay vertex of this particle.
xAOD::TruthParticle_v1::hasDecayVtx
bool hasDecayVtx() const
Check for a decay vertex on this particle.
xAOD::TruthParticle_v1::e
virtual double e() const override final
The total energy of the particle.
xAOD::TruthParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition
TruthParticle_v1.cxx:169
xAOD::TruthParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle.
Definition
TruthParticle_v1.cxx:176
xAOD::TruthVertex_v1::perp
float perp() const
Vertex transverse distance from the beam line.
Definition
TruthVertex_v1.cxx:164
egammaMonitoring
Definition
ClusterHistograms.h:19
xAOD::EgammaHelpers::getRecoPhoton
const xAOD::Photon * getRecoPhoton(const xAOD::TruthParticle *particle)
return the reco photon associated to the given TruthParticle (if any)
Definition
EgammaTruthxAODHelpers.cxx:54
xAOD::EgammaHelpers::conversionRadius
float conversionRadius(const xAOD::Vertex *vx)
return the conversion radius or 9999.
Definition
PhotonxAODHelpers.cxx:58
xAOD::TruthHelpers::getTruthParticle
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
Return the truthParticle associated to the given IParticle (if any).
Definition
xAODTruthHelpers.cxx:25
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition
Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
xAOD::Photon
Photon_v1 Photon
Definition of the current "egamma version".
Definition
Event/xAOD/xAODEgamma/xAODEgamma/Photon.h:17
xAODTruthHelpers.h
Generated on
for ATLAS Offline Software by
1.17.0