ATLAS Offline Software
Loading...
Searching...
No Matches
InDetPerfPlot_TrkInJet.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
10
12
15#include <algorithm>
16#include <numeric>
18
19using namespace IDPVM;
20
21
22InDetPerfPlot_TrkInJet::InDetPerfPlot_TrkInJet(InDetPlotBase* pParent, const std::string & sDir, bool bookFakeAndEff) :
23 InDetPlotBase(pParent, sDir),
24 m_doFakeAndEff(bookFakeAndEff) {}
25
26void
28
29 //Hits vs dR
30 book(m_nInnerMostPixelHits_vs_dR, "nInnerMostPixelHits_vs_dR");
31 book(m_nNextToInnerMostPixelHits_vs_dR, "nNextToInnerMostPixelHits_vs_dR");
32 book(m_nPixelHits_vs_dR, "nPixelHits_vs_dR");
33 book(m_nSCTHits_vs_dR, "nSCTHits_vs_dR");
34 book(m_nTRTHits_vs_dR, "nTRTHits_vs_dR");
35 book(m_nPixelHoles_vs_dR, "nPixelHoles_vs_dR");
36 book(m_nSCTHoles_vs_dR, "nSCTHoles_vs_dR");
37 book(m_nTRTHighThresholdHits_vs_dR, "nTRTHighThresholdHits_vs_dR");
38 if (m_iDetailLevel >= 100){
39 book(m_nInnerMostPixelOutliers_vs_dR, "nInnerMostPixelOutliers_vs_dR");
40 book(m_nInnerMostPixelSharedHits_vs_dR, "nInnerMostPixelSharedHits_vs_dR");
41 book(m_nInnerMostPixelSplitHits_vs_dR, "nInnerMostPixelSplitHits_vs_dR");
42 book(m_nExpectedInnerMostPixelHits_vs_dR, "nExpectedInnerMostPixelHits_vs_dR");
43 book(m_nExpectedNextToInnerMostPixelHits_vs_dR, "nExpectedNextToInnerMostPixelHits_vs_dR");
44 book(m_nPixelOutliers_vs_dR, "nPixelOutliers_vs_dR");
45 book(m_nPixelContribLayers_vs_dR, "nPixelContribLayers_vs_dR");
46 book(m_nPixelSharedHits_vs_dR, "nPixelSharedHits_vs_dR");
47 book(m_nPixelSplitHits_vs_dR, "nPixelSplitHits_vs_dR");
48 book(m_nPixelGangedHits_vs_dR, "nPixelGangedHits_vs_dR");
49 book(m_nPixelGangedHitsFlaggedFakes_vs_dR, "nPixelGangedHitsFlaggedFakes_vs_dR");
50 book(m_nSCTOutliers_vs_dR, "nSCTOutliers_vs_dR");
51 book(m_nSCTDoubleHoles_vs_dR, "nSCTDoubleHoles_vs_dR");
52 book(m_nSCTSharedHits_vs_dR, "nSCTSharedHits_vs_dR");
53 book(m_nTRTOutliers_vs_dR, "nTRTOutliers_vs_dR");
54 book(m_nTRTHighThresholdOutliers_vs_dR, "nTRTHighThresholdOutliers_vs_dR");
55 book(m_nPixelDeadSensors_vs_dR, "nPixelDeadSensors_vs_dR");
56 book(m_nSCTDeadSensors_vs_dR, "nSCTDeadSensors_vs_dR");
57 }
58
59
60 book(m_reco_d0_vs_dR, "reco_d0_vs_dR");
61 book(m_reco_z0_vs_dR, "reco_z0_vs_dR");
62 book(m_reco_z0sin_vs_dR, "reco_z0sin_vs_dR");
63
64 book(m_reco_phi_vs_dR, "reco_phi_vs_dR");
65 book(m_reco_theta_vs_dR, "reco_theta_vs_dR");
66 book(m_reco_eta_vs_dR, "reco_eta_vs_dR");
67 book(m_reco_pt_vs_dR, "reco_pt_vs_dR");
68 book(m_reco_lowpt_vs_dR, "reco_lowpt_vs_dR");
69 book(m_reco_track_pt_vs_jet_pt, "reco_track_pt_vs_jet_pt");
70
71 book(m_reco_chi2Overndof_vs_dR, "reco_chi2Overndof_vs_dR");
72 if (m_doFakeAndEff){
73 book(m_efficiency_vs_dR, "efficiency_vs_dR");
74 book(m_efficiency_vs_smalldR, "efficiency_vs_smalldR");
75 book(m_efficiency_vs_jetpT, "efficiency_vs_jetpT");
76
77 book(m_fakerate_vs_dR, "fakerate_vs_dR");
78 book(m_fakerate_vs_smalldR, "fakerate_vs_smalldR");
79 book(m_fakerate_vs_jetpT, "fakerate_vs_jetpT");
80
81 book(m_truth_track_phi_vs_dR, "truth_track_phi_vs_dR");
82 book(m_truth_track_eta_vs_dR, "truth_track_eta_vs_dR");
83 book(m_truth_track_pt_vs_dR, "truth_track_pt_vs_dR");
84 book(m_truth_track_pt_vs_jet_pt, "truth_track_pt_vs_jet_pt");
85 }
86
87}
88
89
90void
92
93 float dR = jet.p4().DeltaR(trk.p4());
94
95 uint8_t iInnerMostPixelHits(0), iNextToInnerMostPixelHits(0), iPixHits(0), iSctHits(0), iTrtHits(0);
96 uint8_t iPixHoles(0), iSCTHoles(0), iTrtHTHits(0);
97 if (trk.summaryValue(iInnerMostPixelHits, xAOD::numberOfInnermostPixelLayerHits)) {
98 fillHisto(m_nInnerMostPixelHits_vs_dR, dR, iInnerMostPixelHits,weight);
99 }
100 if (trk.summaryValue(iNextToInnerMostPixelHits, xAOD::numberOfNextToInnermostPixelLayerHits)) {
101 fillHisto(m_nNextToInnerMostPixelHits_vs_dR, dR, iNextToInnerMostPixelHits,weight);
102 }
103 if (trk.summaryValue(iPixHits, xAOD::numberOfPixelHits)) {
104 fillHisto(m_nPixelHits_vs_dR, dR, iPixHits,weight);
105 }
106 if (trk.summaryValue(iSctHits, xAOD::numberOfSCTHits)) {
107 fillHisto(m_nSCTHits_vs_dR, dR, iSctHits,weight);
108 }
109 if (trk.summaryValue(iTrtHits, xAOD::numberOfTRTHits)) {
110 fillHisto(m_nTRTHits_vs_dR, dR, iTrtHits,weight);
111 }
112 if (trk.summaryValue(iPixHoles, xAOD::numberOfPixelHoles)) {
113 fillHisto(m_nPixelHoles_vs_dR, dR, iPixHoles,weight);
114 }
115 if (trk.summaryValue(iSCTHoles, xAOD::numberOfSCTHoles)) {
116 fillHisto(m_nSCTHoles_vs_dR, dR, iSCTHoles,weight);
117 }
119 fillHisto(m_nTRTHighThresholdHits_vs_dR, dR, iTrtHTHits,weight);
120 }
121 // expert plots
122 if (m_iDetailLevel >= 100) {
123 uint8_t iInnerMostPixelOutliers(0), iInnerMostPixelShared(0), iInnerMostPixelSplit(0);
124 uint8_t iExpectedInnerMostPixelHits(0), iExpectedNextToInnerMostPixelHits(0);
125 uint8_t iPixelOutliers(0), iPixelContribLayers(0), iPixelShared(0), iPixelSplit(0), iPixelGanged(0), iPixelGangedFakes(0);
126 uint8_t iSCTOutliers(0), iSCTDoubleHoles(0), iSCTShared(0);
127 uint8_t iTRTOutliers(0), iTRTHTOutliers(0);
128 uint8_t iPixelDeadSensors(0), iSCTDeadSensors(0);
129
130 if (trk.summaryValue(iInnerMostPixelOutliers, xAOD::numberOfInnermostPixelLayerOutliers)) {
131 fillHisto(m_nInnerMostPixelOutliers_vs_dR, dR, iInnerMostPixelOutliers,weight);
132 }
133 if (trk.summaryValue(iInnerMostPixelShared, xAOD::numberOfInnermostPixelLayerSharedHits)) {
134 fillHisto(m_nInnerMostPixelSharedHits_vs_dR, dR, iInnerMostPixelShared,weight);
135 }
136 if (trk.summaryValue(iInnerMostPixelSplit, xAOD::numberOfInnermostPixelLayerSplitHits)) {
137 fillHisto(m_nInnerMostPixelSplitHits_vs_dR, dR, iInnerMostPixelSplit,weight);
138 }
139 if (trk.summaryValue(iExpectedInnerMostPixelHits, xAOD::expectInnermostPixelLayerHit)) {
140 fillHisto(m_nExpectedInnerMostPixelHits_vs_dR, dR, iExpectedInnerMostPixelHits,weight);
141 }
142 if (trk.summaryValue(iExpectedNextToInnerMostPixelHits, xAOD::expectNextToInnermostPixelLayerHit)) {
143 fillHisto(m_nExpectedNextToInnerMostPixelHits_vs_dR, dR, iExpectedNextToInnerMostPixelHits,weight);
144 }
145 if (trk.summaryValue(iPixelOutliers, xAOD::numberOfPixelOutliers)) {
146 fillHisto(m_nPixelOutliers_vs_dR, dR, iPixelOutliers, weight);
147 }
148 if (trk.summaryValue(iPixelContribLayers, xAOD::numberOfContribPixelLayers)) {
149 fillHisto(m_nPixelContribLayers_vs_dR, dR, iPixelContribLayers,weight);
150 }
151 if (trk.summaryValue(iPixelShared, xAOD::numberOfPixelSharedHits)) {
152 fillHisto(m_nPixelSharedHits_vs_dR, dR, iPixelShared,weight);
153 }
154 if (trk.summaryValue(iPixelSplit, xAOD::numberOfPixelSplitHits)) {
155 fillHisto(m_nPixelSplitHits_vs_dR, dR, iPixelSplit,weight);
156 }
157 if (trk.summaryValue(iPixelGanged, xAOD::numberOfGangedPixels)) {
158 fillHisto(m_nPixelGangedHits_vs_dR, dR, iPixelGanged, weight);
159 }
160 if (trk.summaryValue(iPixelGangedFakes, xAOD::numberOfGangedFlaggedFakes)) {
161 fillHisto(m_nPixelGangedHitsFlaggedFakes_vs_dR, dR, iPixelGangedFakes, weight);
162 }
163 if (trk.summaryValue(iSCTOutliers, xAOD::numberOfSCTOutliers)) {
164 fillHisto(m_nSCTOutliers_vs_dR, dR, iSCTOutliers,weight);
165 }
166 if (trk.summaryValue(iSCTDoubleHoles, xAOD::numberOfSCTDoubleHoles)) {
167 fillHisto(m_nSCTDoubleHoles_vs_dR, dR, iSCTDoubleHoles,weight);
168 }
169 if (trk.summaryValue(iSCTShared, xAOD::numberOfSCTSharedHits)) {
170 fillHisto(m_nSCTSharedHits_vs_dR, dR, iSCTShared,weight);
171 }
172 if (trk.summaryValue(iTRTOutliers, xAOD::numberOfTRTOutliers)) {
173 fillHisto(m_nTRTOutliers_vs_dR, dR, iTRTOutliers,weight);
174 }
175 if (trk.summaryValue(iTRTHTOutliers, xAOD::numberOfTRTHighThresholdOutliers)) {
176 fillHisto(m_nTRTHighThresholdOutliers_vs_dR, dR, iTRTHTOutliers,weight);
177 }
178 if (trk.summaryValue(iPixelDeadSensors, xAOD::numberOfPixelDeadSensors)) {
179 fillHisto(m_nPixelDeadSensors_vs_dR, dR, iPixelDeadSensors,weight);
180 }
181 if (trk.summaryValue(iSCTDeadSensors, xAOD::numberOfSCTDeadSensors)) {
182 fillHisto(m_nSCTDeadSensors_vs_dR, dR, iSCTDeadSensors,weight);
183 }
184
185 }
186
187 //Track Parameters
188 float pt = trk.pt() / Gaudi::Units::GeV;
189 float eta = trk.eta();
190 float phi = trk.phi0();
191
192 float chi2 = trk.chiSquared();
193 float ndof = trk.numberDoF();
194 float chi2Overndof = ndof > 0 ? chi2 / ndof : 0;
195
196 float jet_pt = jet.pt() / Gaudi::Units::GeV;
197
198 fillHisto(m_reco_d0_vs_dR, dR, trk.d0(),weight);
199 fillHisto(m_reco_z0_vs_dR, dR, trk.z0(),weight);
200 fillHisto(m_reco_z0sin_vs_dR, dR, trk.z0()* trk.theta(),weight);
201 fillHisto(m_reco_phi_vs_dR, dR, phi,weight);
202 fillHisto(m_reco_theta_vs_dR, dR, trk.theta(),weight);
203 fillHisto(m_reco_eta_vs_dR, dR, eta,weight);
204 fillHisto(m_reco_pt_vs_dR, dR, pt,weight);
205 fillHisto(m_reco_lowpt_vs_dR, dR, pt,weight);
206 fillHisto(m_reco_chi2Overndof_vs_dR, dR, chi2Overndof,weight);
207 fillHisto(m_reco_track_pt_vs_jet_pt, jet_pt, pt, weight);
208
209}
210
211void
212InDetPerfPlot_TrkInJet::fillEfficiency(const xAOD::TruthParticle& truth, const xAOD::Jet& jet, const bool isGood, float weight) {
213 if (!m_doFakeAndEff) return;
214 float dR = jet.p4().DeltaR(truth.p4());
215 float jetpT = jet.pt() / Gaudi::Units::GeV;
216 fillHisto(m_efficiency_vs_dR, dR, isGood, weight);
217 fillHisto(m_efficiency_vs_smalldR, dR, isGood, weight);
218 fillHisto(m_efficiency_vs_jetpT, jetpT, isGood, weight);
219 // truth info
220 fillTruth(truth, jet, weight);
221}
222
223void
225 if (!m_doFakeAndEff) return;
226 float dR = jet.p4().DeltaR(truth.p4());
227 float jetpT = jet.pt() / Gaudi::Units::GeV;
228 float trackpT = truth.pt() / Gaudi::Units::GeV;
229 float trackEta = truth.eta();
230 float trackPhi = truth.phi();
231
232 fillHisto(m_truth_track_phi_vs_dR, dR, trackPhi, weight);
233 fillHisto(m_truth_track_eta_vs_dR, dR, trackEta, weight);
234 fillHisto(m_truth_track_pt_vs_dR, dR, trackpT, weight);
235 fillHisto(m_truth_track_pt_vs_jet_pt, jetpT, trackpT, weight);
236}
237
238void
239InDetPerfPlot_TrkInJet::fillFakeRate(const xAOD::TrackParticle& trk, const xAOD::Jet& jet, const bool isFake, float weight) {
240 if (!m_doFakeAndEff) return;
241 float dR = jet.p4().DeltaR(trk.p4());
242 float jetpT = jet.pt() / Gaudi::Units::GeV;
243
244 fillHisto(m_fakerate_vs_dR, dR, isFake, weight);
245 fillHisto(m_fakerate_vs_smalldR, dR, isFake, weight);
246 fillHisto(m_fakerate_vs_jetpT, jetpT, isFake, weight);
247}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
TProfile * m_nExpectedNextToInnerMostPixelHits_vs_dR
void fill(const xAOD::TrackParticle &trk, const xAOD::Jet &jet, float weight=1.0)
void fillEfficiency(const xAOD::TruthParticle &trk, const xAOD::Jet &jet, const bool isEfficient, float weight)
TProfile * m_nPixelGangedHitsFlaggedFakes_vs_dR
void fillTruth(const xAOD::TruthParticle &truth, const xAOD::Jet &jet, float weight)
InDetPerfPlot_TrkInJet(InDetPlotBase *pParent, const std::string &sDir, bool bookFakeAndEff=true)
void fillFakeRate(const xAOD::TrackParticle &trk, const xAOD::Jet &jet, const bool isFake, float weight)
static void fillHisto(TProfile *pTprofile, const float bin, const float weight, const float weight2=1.0)
void book(Htype *&pHisto, const std::string &histoIdentifier, const std::string &nameOverride="", const std::string &folder="default")
Helper method to book histograms using an identifier string.
InDetPlotBase(InDetPlotBase *pParent, const std::string &dirName)
Constructor taking parent node and directory name for plots.
int m_iDetailLevel
Definition PlotBase.h:101
float z0() const
Returns the parameter.
float theta() const
Returns the parameter, which has range 0 to .
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
float d0() const
Returns the parameter.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
float chiSquared() const
Returns the of the overall track fit.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
float phi0() const
Returns the parameter, which has range to .
virtual double pt() const override final
The transverse momentum ( ) 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.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
double chi2(TH1 *h0, TH1 *h1)
Class to retrieve associated truth from a track, implementing a cached response.
Jet_v1 Jet
Definition of the current "jet version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TruthParticle_v1 TruthParticle
Typedef to implementation.
@ numberOfGangedPixels
number of pixels which have a ganged ambiguity [unit8_t].
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfContribPixelLayers
number of contributing layers of the pixel detector [unit8_t].
@ numberOfTRTHighThresholdOutliers
number of TRT high threshold outliers (only xenon counted) [unit8_t].
@ numberOfPixelSplitHits
number of Pixel all-layer hits split by cluster splitting [unit8_t].
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
@ numberOfPixelOutliers
these are the pixel outliers, including the b-layer [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ numberOfInnermostPixelLayerSplitHits
number of Pixel 0th layer barrel hits split by cluster splitting
@ numberOfGangedFlaggedFakes
number of Ganged Pixels flagged as fakes [unit8_t].
@ numberOfInnermostPixelLayerOutliers
number of 0th layer barrel outliers
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfSCTDoubleHoles
number of Holes in both sides of a SCT module [unit8_t].
@ numberOfSCTOutliers
number of SCT outliers [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].