ATLAS Offline Software
Loading...
Searching...
No Matches
TruthPhotonHistograms.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8#include "GaudiKernel/ITHistSvc.h"
13#include "xAODEgamma/Photon.h"
15
16#include "TH1D.h"
17#include "TH2D.h"
18
19using namespace egammaMonitoring;
20
22
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
68
69void TruthPhotonHistograms::fill(const xAOD::IParticle& phrec, float mu) {
70
72
74
75 float trueR = -999;
76 if (truth) {
77 if (truth->pdgId() == 22 && truth->hasDecayVtx()) {
78
79 trueR = truth->decayVtx()->perp();
80
81 }
82 }
83
84 histoMap["convRadius_all"]->Fill(trueR);
85 histoMap["convRadius"]->Fill(trueR);
86 histoMap["pileup"]->Fill(mu);
87 histoMap["onebin"]->Fill(0.5);
88
89 if(phrec.pt()/1000. > 15) {
90 histoMap["convRadius_15GeV"]->Fill(trueR);
91 histoMap["pileup_15GeV"]->Fill(mu);
92 histoMap["onebin_15GeV"]->Fill(0.5);
93 }
94
95 // access reco photon from the xAOD::TruthParticle (can't use the IParticle* here)
96 const auto *truthParticle = dynamic_cast<const xAOD::TruthParticle*>(&phrec);
97 if (truthParticle) {
98 const xAOD::Photon *photon = xAOD::EgammaHelpers::getRecoPhoton(truthParticle);
99
100 if (photon) {
101 float res_e = photon->e()/truth->e() - 1.;
102 float res_eta = photon->eta() - truth->eta();
103 float res_phi = photon->phi() - truth->phi();
104 float recoR = xAOD::EgammaHelpers::conversionRadius(photon);
105
106 // Resolution histograms only make sense if there was a reco particle !
107 // And for resolution on R, only if true conv, reco conv
108 if (recoR < 1000 && trueR > 0)
109 histoMap["convRadiusTrueVsReco"]->Fill(recoR - trueR);
110
111 histoMap["resolution_e"]->Fill(res_e);
112 histoMap["resolution_eta"]->Fill(res_eta);
113 histoMap["resolution_phi"]->Fill(res_phi);
114
115 histo2DMap["resolution_e_vs_pT"]->Fill(phrec.pt()/1000., res_e);
116 histo2DMap["resolution_e_vs_eta"]->Fill(std::abs(phrec.eta()), res_e);
117
118 }
119 }
120
121
122} // fill
#define ATH_CHECK
Evaluate an expression and check for errors.
SmartIF< ITHistSvc > m_rootHistSvc
Definition IHistograms.h:48
std::map< std::string, TH1D * > histoMap
Definition IHistograms.h:42
void fill(const xAOD::IParticle &egamma)
std::map< std::string, TH2D * > histo2DMap
Class providing the definition of the 4-vector interface.
virtual double eta() const =0
The pseudorapidity ( ) of the particle.
virtual double pt() const =0
The transverse momentum ( ) of the particle.
int pdgId() const
PDG ID code.
const TruthVertex_v1 * decayVtx() const
The decay vertex of this particle.
bool hasDecayVtx() const
Check for a decay vertex on this particle.
virtual double e() const override final
The total energy of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
virtual double phi() const override final
The azimuthal angle ( ) of the particle.
float perp() const
Vertex transverse distance from the beam line.
const xAOD::Photon * getRecoPhoton(const xAOD::TruthParticle *particle)
return the reco photon associated to the given TruthParticle (if any)
float conversionRadius(const xAOD::Vertex *vx)
return the conversion radius or 9999.
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
Return the truthParticle associated to the given IParticle (if any)
TruthParticle_v1 TruthParticle
Typedef to implementation.
Photon_v1 Photon
Definition of the current "egamma version".