ATLAS Offline Software
Loading...
Searching...
No Matches
TruthTrkExtrapolationPlots.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 <utility>
6
7
8
11
12namespace Trk {
13 TruthTrkExtrapolationPlots::TruthTrkExtrapolationPlots(PlotBase *pParent, const std::string& sDir) : PlotBase(pParent, sDir),
14 m_CaloEntry(this, "", "CaloEntry"),
15 m_MuonEntry(this, "", "MuonEntry"),
16 m_MuonExit(this, "", "MuonExit")
17 {// ,
18 // m_Calo(this,"Scattering/CaloOnly","CaloEntryLayer", "MuonEntryLayer"),
19 // m_MS(this,"/Scattering/MSOnly","MuonEntryLayer", "MuonExitLayer"),
20 // m_IP(this,"/Scattering/IPOnly","IP","CaloEntryLayer"),
21 // m_IP_Calo(this, "/Scattering/IP_Calo","IP","MuonEntryLayer"),
22 // m_Calo_MS(this, "/Scattering/Calo_MS","CaloEntryLayer","MuonExitLayer"),
23 // m_IP_MS(this, "/Scattering/IP_Calo_Ms","IP","MuonExitLayer")
24 }
25
26 void
28 m_CaloEntry.fill(truthprt, "CaloEntryLayer", weight);
29 m_MuonEntry.fill(truthprt, "MuonEntryLayer", weight);
30 m_MuonExit.fill(truthprt, "MuonExitLayer", weight);
31
32 // m_Calo.fill(truthprt,"CaloEntryLayer_","MuonEntryLayer_");
33 // m_MS.fill(truthprt, "MuonEntryLayer_","MuonExitLayer_");
34 // m_IP.fill(truthprt, "","CaloEntryLayer_");
35 // m_IP_Calo.fill(truthprt,"","MuonEntryLayer_");
36 // m_Calo_MS.fill(truthprt,"CaloEntryLayer_","MuonExitLayer_");
37 // m_IP_MS.fill(truthprt, "","MuonExitLayer_");
38 }
39
40 ExtrLayerPlots::ExtrLayerPlots(PlotBase *pParent, const std::string& sDir, std::string sLayerName) : PlotBase(pParent, sDir),
41 m_sLayerName(std::move(sLayerName)),
43 pt{},eta{},phi{},theta{}{
44 //nop
45 }
46
47 void
49 p = Book1D(m_sLayerName + "_p", m_sLayerName + " truth_p;Momentum [GeV];Entries", 100, 0., 400);
50 p_extr = Book1D(m_sLayerName + "_pExtr", m_sLayerName + " truth_p_extr;Momentum [GeV];Entries", 100, 0., 400);
51 dp_truth = Book1D(m_sLayerName + "_dp", m_sLayerName + " truth_dp;Momentum difference p-p_{extr} [GeV];Entries",
52 100, -10, 10);
53
54 // px = Book1D(m_sLayerName+"_truth_px", m_sLayerName+ " truth_px;Momentum [GeV];Entries / 2.5 GeV",200,-250.,250);
55 // py = Book1D(m_sLayerName+"_truth_py", m_sLayerName+ " truth_py;Momentum [GeV];Entries / 2.5 GeV",200,-250.,250);
56 // pz = Book1D(m_sLayerName+"_truth_pz", m_sLayerName+ " truth_pz;Momentum [GeV];Entries / 2.5 GeV",200,-250.,250);
57
58 // px_extr = Book1D(m_sLayerName+"_truth_px_extr", m_sLayerName+ " truth_px_extr;Momentum [GeV];Entries / 2.5
59 // GeV",200,-250.,250);
60 // py_extr = Book1D(m_sLayerName+"_truth_py_extr", m_sLayerName+ " truth_py_extr;Momentum [GeV];Entries / 2.5
61 // GeV",200,-250.,250);
62 // pz_extr = Book1D(m_sLayerName+"_truth_pz_extr", m_sLayerName+ " truth_pz_extr;Momentum [GeV];Entries / 2.5
63 // GeV",200,-250.,250);
64
65 // dpx_truth = Book1D(m_sLayerName+"_truth_dpx", m_sLayerName+ " truth_dpx;Momentum difference
66 // px-px_extr[GeV];Entries / 2.5 GeV",250,-25,25);
67 // dpy_truth = Book1D(m_sLayerName+"_truth_dpy", m_sLayerName+ " truth_dpy;Momentum difference
68 // py-py_extr[GeV];Entries / 2.5 GeV",250,-25,25);
69 // dpz_truth = Book1D(m_sLayerName+"_truth_dpz", m_sLayerName+ " truth_dpz;Momentum difference
70 // pz-pz_extr[GeV];Entries / 2.5 GeV",250,-25,25);
71 // pt = Book1D(m_sLayerName+"_truth_pt", m_sLayerName+ " truth_pt;Transverse Momentum [GeV];Entries / 2.5
72 // GeV",100,0.,250);
73 // eta = Book1D(m_sLayerName+"_truth_eta",m_sLayerName+ " truth_eta;Pseudo-Rapidity;Entries / 0.1",64,-3.2,3.2);
74 // phi = Book1D(m_sLayerName+"_truth_phi",m_sLayerName+ " truth_phi;Azimuthal Angle;Entries / 0.1",64,-3.2,3.2);
75 // theta = Book1D(m_sLayerName+"_truth_theta",m_sLayerName+ " truth_theta;polar Angle;Entries / 0.1",32,0,3.2);
76 }
77
78 void
79 ExtrLayerPlots::fill(const xAOD::TruthParticle &truthprt, const std::string& sNom, float weight) {
80 SG::ConstAccessor<float> pxAcc (sNom + "_px");
81 SG::ConstAccessor<float> pyAcc (sNom + "_py");
82 SG::ConstAccessor<float> pzAcc (sNom + "_pz");
83 if (!pxAcc.isAvailable(truthprt) ||
84 !pyAcc.isAvailable(truthprt) ||
85 !pzAcc.isAvailable(truthprt)) {
86 return;
87 }
88
89 TVector3 vec(pxAcc(truthprt), pyAcc(truthprt), pzAcc(truthprt));
90
91 SG::ConstAccessor<float> px_extrAcc (sNom + "_px_extr");
92 SG::ConstAccessor<float> py_extrAcc (sNom + "_py_extr");
93 SG::ConstAccessor<float> pz_extrAcc (sNom + "_pz_extr");
94 TVector3 vec_extr;
95 if (!px_extrAcc.isAvailable(truthprt) ||
96 !py_extrAcc.isAvailable(truthprt) ||
97 !pz_extrAcc.isAvailable(truthprt)) {
98 return;
99 }
100
101 vec_extr.SetXYZ(px_extrAcc(truthprt), py_extrAcc(truthprt), pz_extrAcc(truthprt));
102
103 p->Fill(vec.Mag() * 0.001, weight);
104 // px->Fill(vec.Px()*0.001);
105 // py->Fill(vec.Py()*0.001);
106 // pz->Fill(vec.Pz()*0.001);
107 p_extr->Fill(vec_extr.Mag() * 0.001, weight);
108 // px_extr->Fill(vec_extr.Px()*0.001);
109 // py_extr->Fill(vec_extr.Py()*0.001);
110 // pz_extr->Fill(vec_extr.Pz()*0.001);
111 dp_truth->Fill((vec.Mag() - vec_extr.Mag()) * 0.001, weight);
112 // dpx_truth->Fill((vec.Px()-vec_extr.Px())*0.001);
113 // dpy_truth->Fill((vec.Py()-vec_extr.Py())*0.001);
114 // dpz_truth->Fill((vec.Pz()-vec_extr.Pz())*0.001);
115 // pt->Fill(vec.Perp()*0.001);
116 // eta->Fill(vec.PseudoRapidity());
117 // phi->Fill(vec.Phi());
118 // theta->Fill(vec.Theta());
119 }
120
121 ExtrRegionPlots::ExtrRegionPlots(PlotBase *pParent, const std::string& sDir, std::string sRegionBegin,
122 std::string sRegionEnd) : PlotBase(pParent, sDir),
123 m_sRegionBegin(std::move(sRegionBegin)),
124 m_sRegionEnd(std::move(sRegionEnd)),
125 dp{},dpt{},dpx{},dpy{},dpz{},dp_extr{},dpx_extr{},dpy_extr{},dpz_extr{},
129 //nop
130 }
131
132 void
134 // histogram definitions for scattering plots
135 // variables within subdetector(s)
136 // energy loss related quantities
137 dp = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dp",
138 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth p: p_{begin} vs p_{end}; #Delta p=p_{begin}-p_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
139 20.);
140 dpt = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dpt",
141 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth pt;#Delta pt=pt_{begin}-pt_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
142 20.);
143 dpx = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dpx",
144 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth px;#Delta px=px_{begin}-px_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
145 20.);
146 dpy = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dpy",
147 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth py;#Delta py=py_{begin}-py_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
148 20.);
149 dpz = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dpz",
150 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth pz;#Delta pz=pz_{begin}-pz_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
151 20.);
152
153 // extrapolated quantities: CaloEntryLayer_p_extr=extrapolated value from IP to CaloEntryLayer using e-loss
154 // parametrization
155 // if comparison to IP, truth_p_extr=truth_p
156 dp_extr = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dp_extr",
157 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth p, extrapolated from IP to current layer; #Delta p=p_extr_{begin}-p_extr_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
158 20.);
159 dpx_extr = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dpx_extr",
160 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth px, extrapolated from IP to current layer; #Delta px=px_extr_{begin}-px_extr_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
161 20.);
162 dpy_extr = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dpy_extr",
163 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth py, extrapolated from IP to current layer; #Delta py=py_extr_{begin}-py_extr_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
164 20.);
165 dpz_extr = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dpz_extr",
166 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in truth pz, extrapolated from IP to current layer; #Delta pz=pz_extr_{begin}-pz_extr_{end} [GeV];Entries / 0.5 GeV", 80, -20.,
167 20.);
168
169 // 2D plots
170 dp_vs_p = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dp_vs_p",
171 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in p (#Delta p=p_{begin}-p_{end}) vs p_{begin};p_{begin} [GeV];#Delta p=p_{begin}-p_{end} [GeV]", 250, 0., 250., 80, 0.,
172 20);
173 dp_vs_phi = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dp_vs_phi",
174 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in p(#Delta p=p_{begin}-p_{end}) vs phi_{begin};phi_{begin};#Delta p=p_{begin}-p_{end} [GeV]", 128, -3.2, 3.2, 80, 0.,
175 20);
176 dp_vs_eta = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dp_vs_eta",
177 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in p(#Delta p=p_{begin}-p_{end}) vs eta_{begin};#eta_{begin};#Delta p=p_{begin}-p_{end} [GeV]", 128, -3.2, 3.2, 80, 0.,
178 20);
179 p_vs_p = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_p_vs_p",
180 m_sRegionBegin + " vs " + m_sRegionEnd + " p_{begin} vs p_{end};p_{begin} [GeV]; p_{end} [GeV]",
181 250, 0., 250, 250, 0., 250);
182 p_extr_vs_p_extr = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_p_extr_vs_p_extr",
183 m_sRegionBegin + " vs " + m_sRegionEnd + " p_{begin extr} vs p_{end extr};p_{begin extr} [GeV]; p_{end extr} [GeV]", 250, 0., 250, 250, 0.,
184 250);
185 dp_extr_vs_eta = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dp_extr_vs_eta",
186 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in p_{extr}(#Delta p_{extr}=p_{begin extr}-p_{end extr}) vs eta_{begin};#eta__{begin};#Delta p_{extr}=p_{begin extr}-p_{end extr} [GeV]", 128, -3.2, 3.2, 80, 0.,
187 20);
188
189 // 3D
190 dp_vs_eta_phi = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dp_vs_eta_phi",
191 m_sRegionBegin + " vs " + m_sRegionEnd + " sum of bin entries: difference in p(#Delta p=p_{begin}-p_{end}) vs eta_{begin} and phi_{begin};#eta__{begin};#phi__{begin};#Delta p=p_{begin}-p_{end} [GeV]", 128, -3.2, 3.2, 128, -3.2,
192 -3.2);
193
194 // measure for multiple scattering
195 dR = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dR",
196 m_sRegionBegin + " vs " + m_sRegionEnd + " dR between the two positions in the detector;pt_{begin}->dR(pt_{end});Entries / 0.05", 100, 0.,
197 0.5);
198 // 2D
199 dR_vs_p = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dR_vs_p",
200 m_sRegionBegin + " vs " + m_sRegionEnd + " dR vs p_{begin};p_{begin} [GeV];_{begin}->dR(p_{end})",
201 250, 0., 250, 100, 0., 0.5);
202 dR_vs_dp = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dR_vs_dp",
203 m_sRegionBegin + " vs " + m_sRegionEnd + " dR vs difference in p;#Delta p=p_{begin}-p_{end} [GeV];p_{begin}->dR(p_{end})", 80, 0., 20, 100, 0.,
204 0.5);
205 dR_vs_eta = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dR_vs_eta",
206 m_sRegionBegin + " vs " + m_sRegionEnd + " dR vs eta;#eta_{begin};p_{begin}->dR(p_{end})", 128,
207 -3.2, 3.2, 100, 0., 0.5);
208 dR_vs_phi = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dR_vs_phi",
209 m_sRegionBegin + " vs " + m_sRegionEnd + " dR vs phi;#phi_{begin};p_{begin}->dR(p_{end})", 128,
210 -3.2, 3.2, 100, 0., 0.5);
211 dR_vs_eta_phi = Book2D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dR_vs_eta_phi",
212 m_sRegionBegin + " vs " + m_sRegionEnd + " sum of bin entries: dR vs eta and phi;#eta_{begin};#phi_{begin};#DeltaR", 128, -3.2, 3.2, 128, -3.2,
213 3.2);
214
215 dphi = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dphi",
216 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in phi;#Delta phi;Entries / 0.05", 100, -0.25,
217 0.25);
218 dtheta = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dtheta",
219 m_sRegionBegin + " vs " + m_sRegionEnd + " difference in theta;#Delta theta;Entries / 0.002", 100,
220 -0.25, 0.25);
221 dAngle = Book1D(m_sRegionBegin + "_vs_" + m_sRegionEnd + "_dAngle",
222 m_sRegionBegin + " vs " + m_sRegionEnd + " total angle difference;#Delta angle;Entries / 0.002",
223 100, -0.25, 0.25);
224 }
225
226 void
227 ExtrRegionPlots::fill(const xAOD::TruthParticle &truthprt, const std::string& sDetBegin, const std::string& sDetEnd, float weight) {
228 SG::ConstAccessor<float> pxBeginAcc (sDetBegin + "_px");
229 SG::ConstAccessor<float> pyBeginAcc (sDetBegin + "_py");
230 SG::ConstAccessor<float> pzBeginAcc (sDetBegin + "_pz");
231 SG::ConstAccessor<float> pxEndAcc (sDetEnd + "_px");
232 SG::ConstAccessor<float> pyEndAcc (sDetEnd + "_py");
233 SG::ConstAccessor<float> pzEndAcc (sDetEnd + "_pz");
234 if (!pxBeginAcc.isAvailable(truthprt) ||
235 !pyBeginAcc.isAvailable(truthprt) ||
236 !pzBeginAcc.isAvailable(truthprt) ||
237 !pxEndAcc.isAvailable(truthprt) ||
238 !pyEndAcc.isAvailable(truthprt) ||
239 !pzEndAcc.isAvailable(truthprt)) {
240 return;
241 }
242
243 TVector3 vecDetBegin(pxBeginAcc(truthprt), pyBeginAcc(truthprt), pzBeginAcc(truthprt));
244 TVector3 vecDetEnd(pxEndAcc(truthprt), pyEndAcc(truthprt), pzEndAcc(truthprt));
245
246
247 // check if IP, since extr is not available there (sDetBegin="")
248 TVector3 vecDetBegin_extr;
249 if (!sDetBegin.empty()) {
250 SG::ConstAccessor<float> px_extrAcc (sDetBegin + "_px_extr");
251 SG::ConstAccessor<float> py_extrAcc (sDetBegin + "_py_extr");
252 SG::ConstAccessor<float> pz_extrAcc (sDetBegin + "_pz_extr");
253 if (!px_extrAcc.isAvailable(truthprt) ||
254 !py_extrAcc.isAvailable(truthprt) ||
255 !pz_extrAcc.isAvailable(truthprt)) {
256 return;
257 }
258
259 vecDetBegin_extr.SetXYZ(px_extrAcc(truthprt), py_extrAcc(truthprt), pz_extrAcc(truthprt));
260 }else {
261 vecDetBegin_extr = vecDetBegin;
262 }
263
264 TVector3 vecDetEnd_extr;
265 if (!sDetEnd.empty()) {
266 SG::ConstAccessor<float> px_extrAcc (sDetEnd + "_px_extr");
267 SG::ConstAccessor<float> py_extrAcc (sDetEnd + "_py_extr");
268 SG::ConstAccessor<float> pz_extrAcc (sDetEnd + "_pz_extr");
269 if (!px_extrAcc.isAvailable(truthprt) ||
270 !py_extrAcc.isAvailable(truthprt) ||
271 !pz_extrAcc.isAvailable(truthprt)) {
272 return;
273 }
274
275 vecDetEnd_extr.SetXYZ(px_extrAcc(truthprt), py_extrAcc(truthprt), pz_extrAcc(truthprt));
276 }else {
277 vecDetEnd_extr = vecDetEnd;
278 }
279
280 dp->Fill((vecDetBegin.Mag() - vecDetEnd.Mag()) * 0.001, weight);
281 dpt->Fill((vecDetBegin.Perp() - vecDetEnd.Perp()) * 0.001, weight);
282 dpx->Fill((vecDetBegin.Px() - vecDetEnd.Px()) * 0.001, weight);
283 dpy->Fill((vecDetBegin.Py() - vecDetEnd.Py()) * 0.001, weight);
284 dpz->Fill((vecDetBegin.Pz() - vecDetEnd.Pz()) * 0.001, weight);
285 dp_extr->Fill((vecDetBegin_extr.Mag() - vecDetEnd_extr.Mag()) * 0.001, weight);
286 dpx_extr->Fill((vecDetBegin_extr.Px() - vecDetEnd_extr.Px()) * 0.001, weight);
287 dpy_extr->Fill((vecDetBegin_extr.Py() - vecDetEnd_extr.Py()) * 0.001, weight);
288 dpz_extr->Fill((vecDetBegin_extr.Pz() - vecDetEnd_extr.Pz()) * 0.001, weight);
289 // 2D
290 dp_vs_p->Fill(vecDetBegin.Mag() * 0.001, (vecDetBegin.Mag() - vecDetEnd.Mag()) * 0.001, weight);
291 dp_vs_phi->Fill(vecDetBegin.Phi(), (vecDetBegin.Mag() - vecDetEnd.Mag()) * 0.001, weight);
292 dp_vs_eta->Fill(vecDetBegin.Eta(), (vecDetBegin.Mag() - vecDetEnd.Mag()) * 0.001, weight);
293 // not sure how to weight this
294 dp_vs_eta_phi->Fill(vecDetBegin.Eta(), vecDetBegin.Phi(), (vecDetBegin.Mag() - vecDetEnd.Mag()) * 0.001);
295 p_vs_p->Fill(vecDetBegin.Mag() * 0.001, vecDetEnd.Mag() * 0.001, weight);
296 p_extr_vs_p_extr->Fill(vecDetBegin_extr.Mag() * 0.001, vecDetEnd_extr.Mag() * 0.001, weight);
297 dp_extr_vs_eta->Fill(vecDetBegin_extr.Eta(), (vecDetBegin_extr.Mag() - vecDetEnd_extr.Mag()) * 0.001, weight);
298
299 // multiple scattering
300 dR->Fill(vecDetBegin.DeltaR(vecDetEnd),weight);
301 // 2D
302 dR_vs_p->Fill(vecDetBegin.Mag() * 0.001, vecDetBegin.DeltaR(vecDetEnd),weight);
303 dR_vs_dp->Fill((vecDetBegin.Mag() - vecDetEnd.Mag()) * 0.001, vecDetBegin.DeltaR(vecDetEnd), weight);
304 dR_vs_eta->Fill(vecDetBegin.Eta(), vecDetBegin.DeltaR(vecDetEnd), weight);
305 dR_vs_phi->Fill(vecDetBegin.Phi(), vecDetBegin.DeltaR(vecDetEnd), weight);
306 // not sure how to weight this
307 dR_vs_eta_phi->Fill(vecDetBegin.Eta(), vecDetBegin.Phi(), vecDetBegin.DeltaR(vecDetEnd) );
308
309 dphi->Fill(vecDetBegin.DeltaPhi(vecDetEnd), weight);
310 dtheta->Fill(vecDetBegin.Theta() - vecDetEnd.Theta(), weight);
311
312 dAngle->Fill(vecDetBegin.Angle(vecDetEnd), weight);
313 }
314}// namespace trk
std::vector< size_t > vec
Helper class to provide constant type-safe access to aux data.
TH1D * Book1D(const std::string &name, const std::string &labels, int nBins, float start, float end, bool prependDir=true)
Book a TH1D histogram.
Definition PlotBase.cxx:94
PlotBase(PlotBase *parent, const std::string &sDir)
Definition PlotBase.cxx:29
TH2F * Book2D(const std::string &name, const std::string &labels, int nBinsX, float startX, float endX, int nBinsY, float startY, float endY, bool prependDir=true)
Book a TH2F histogram.
Definition PlotBase.cxx:123
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
void fill(const xAOD::TruthParticle &truthprt, const std::string &sLayerName, float weight=1.0)
ExtrLayerPlots(PlotBase *pParent, const std::string &sDir, std::string sLayerName)
ExtrRegionPlots(PlotBase *pParent, const std::string &sDir, std::string sRegionBegin, std::string sRegionEnd)
void fill(const xAOD::TruthParticle &truthprt, const std::string &sRegionBegin, const std::string &sRegionEnd, float weight=1.0)
void fill(const xAOD::TruthParticle &truthprt, float weight=1.0)
TruthTrkExtrapolationPlots(PlotBase *pParent, const std::string &sDir)
Ensure that the ATLAS eigen extensions are properly loaded.
STL namespace.
TruthParticle_v1 TruthParticle
Typedef to implementation.