ATLAS Offline Software
InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/ResolutionPlots.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "ResolutionPlots.h"
12 #include "../TrackParametersHelper.h"
13 
16 
19 
24  PlotMgr* pParent, const std::string& dirName,
25  const std::string& anaTag, const std::string& trackType ) :
26  PlotMgr( dirName, anaTag, pParent ),
27  m_trackType( trackType ) { }
28 
29 
34 {
35  StatusCode sc = bookPlots();
36  if( sc.isFailure() ) {
37  ATH_MSG_ERROR( "Failed to book resolution plots" );
38  }
39 }
40 
41 
43 {
44  ATH_MSG_DEBUG( "Booking resolution plots in " << getDirectory() );
45 
46  for(unsigned int i=0; i<NPARAMS; i++){
47  ATH_CHECK( retrieveAndBook( m_resHelperEta[i],
48  "resHelper_"+m_trackType+"_eta_" + m_paramProp[i] ) );
49  ATH_CHECK( retrieveAndBook( m_reswidth_vs_eta[i],
50  "resolution_vs_"+m_trackType+"_eta_" + m_paramProp[i] ) );
51  ATH_CHECK( retrieveAndBook( m_resmean_vs_eta[i],
52  "resmean_vs_"+m_trackType+"_eta_" + m_paramProp[i] ) );
53 
54  ATH_CHECK( retrieveAndBook( m_pullHelperEta[i],
55  "pullHelper_"+m_trackType+"_eta_" + m_paramProp[i] ) );
56  ATH_CHECK( retrieveAndBook( m_pullwidth_vs_eta[i],
57  "pullwidth_vs_"+m_trackType+"_eta_" + m_paramProp[i] ) );
58  ATH_CHECK( retrieveAndBook( m_pullmean_vs_eta[i],
59  "pullmean_vs_"+m_trackType+"_eta_" + m_paramProp[i] ) );
60 
61  ATH_CHECK( retrieveAndBook( m_resHelperPt[i],
62  "resHelper_"+m_trackType+"_pt_" + m_paramProp[i] ) );
63  ATH_CHECK( retrieveAndBook( m_reswidth_vs_pt[i],
64  "resolution_vs_"+m_trackType+"_pt_" + m_paramProp[i] ) );
65  ATH_CHECK( retrieveAndBook( m_resmean_vs_pt[i],
66  "resmean_vs_"+m_trackType+"_pt_" + m_paramProp[i] ) );
67  ATH_CHECK( retrieveAndBook(m_corrHelper[i],
68  "corr_"+m_trackType+"_"+m_paramProp[i]));
69  ATH_CHECK( retrieveAndBook( m_pullHelperPt[i],
70  "pullHelper_"+m_trackType+"_pt_" + m_paramProp[i] ) );
71  ATH_CHECK( retrieveAndBook( m_pullwidth_vs_pt[i],
72  "pullwidth_vs_"+m_trackType+"_pt_" + m_paramProp[i] ) );
73  ATH_CHECK( retrieveAndBook( m_pullmean_vs_pt[i],
74  "pullmean_vs_"+m_trackType+"_pt_" + m_paramProp[i] ) );
75  }
76 
77  return StatusCode::SUCCESS;
78 }
79 
80 
84 template< typename REF, typename TEST >
86  const REF& particle_ref, const TEST& track_test, float weight )
87 {
88  float refP[NPARAMS];
89  float testP[NPARAMS];
90  float testErrorP[NPARAMS];
91 
92  refP[D0] = d0(particle_ref);
93  refP[Z0] = z0(particle_ref);
94  refP[QOVERP] = qOverP(particle_ref) * Gaudi::Units::GeV;
95  refP[QOVERPT] = qOverPT(particle_ref) * Gaudi::Units::GeV;
96  refP[THETA] = theta(particle_ref);
97  refP[PHI] = phi(particle_ref);
98  refP[PT] = pT(particle_ref) / Gaudi::Units::GeV;
99  refP[Z0SIN] = z0SinTheta(particle_ref);
100 
101  testP[D0] = d0(track_test);
102  testP[Z0] = z0(track_test);
103  testP[QOVERP] = qOverP(track_test) * Gaudi::Units::GeV;
104  testP[QOVERPT] = qOverPT(track_test) * Gaudi::Units::GeV;
105  testP[THETA] = theta(track_test);
106  testP[PHI] = phi(track_test);
107  testP[PT] = pT(track_test) / Gaudi::Units::GeV;
108  testP[Z0SIN] = z0SinTheta(track_test);
109 
110  testErrorP[D0] = trackParameterError(track_test, Trk::d0);
111  testErrorP[Z0] = trackParameterError(track_test, Trk::z0);
112  testErrorP[QOVERP] = trackParameterError(track_test, Trk::qOverP) * Gaudi::Units::GeV;
113  testErrorP[QOVERPT] = qOverPtError(track_test) * Gaudi::Units::GeV;
114  testErrorP[THETA] = trackParameterError(track_test, Trk::theta);
115  testErrorP[PHI] = trackParameterError(track_test, Trk::phi);
116  testErrorP[PT] = pTError(track_test) / Gaudi::Units::GeV;
117  testErrorP[Z0SIN] = z0SinThetaError(track_test);
118 
119  float eta_ref = eta(particle_ref);
120  float pt_ref = pT(particle_ref) / Gaudi::Units::GeV;
121 
122  for(unsigned int i=0; i<NPARAMS; i++){
123  float residual = testP[i]-refP[i];
124  if(i==PHI) residual = xAOD::P4Helpers::deltaPhi(testP[i], refP[i]);
125  float pull = residual / testErrorP[i];
126 
127  // Relative q/pt resolution
128  if(i==QOVERPT) residual = testP[i]/refP[i] - 1.;
129 
130  ATH_CHECK( fill( m_resHelperEta[i], eta_ref, residual, weight ) );
131  ATH_CHECK( fill( m_resHelperPt[i], pt_ref, residual, weight ) );
132  ATH_CHECK( fill( m_pullHelperEta[i], eta_ref, pull, weight ) );
133  ATH_CHECK( fill( m_pullHelperPt[i], pt_ref, pull, weight ) );
134  ATH_CHECK( fill( m_corrHelper[i], refP[i], testP[i], weight) );
135  }
136 
137  return StatusCode::SUCCESS;
138 }
139 
140 
142  const xAOD::TrackParticle&, const xAOD::TrackParticle&, float weight );
143 
145  const xAOD::TruthParticle&, const xAOD::TrackParticle&, float weight );
146 
148  const xAOD::TrackParticle&, const xAOD::TruthParticle&, float weight );
149 
152  const xAOD::TruthParticle&, const xAOD::TruthParticle&, float weight );
153 
154 
159 {
160  ATH_MSG_DEBUG( "Finalising resolution plots" );
161 
162  IDPVM::ResolutionHelper resolutionHelper;
163 
164  for (unsigned int i = 0; i < NPARAMS; i++) {
165  resolutionHelper.makeResolutions(m_resHelperEta[i],
166  m_reswidth_vs_eta[i], m_resmean_vs_eta[i],
167  nullptr, false,
169  resolutionHelper.makeResolutions(m_resHelperPt[i],
170  m_reswidth_vs_pt[i], m_resmean_vs_pt[i],
171  nullptr, false,
173  }
174 
175 }
IDPVM::ResolutionHelper::iterRMS_convergence
@ iterRMS_convergence
Definition: InnerDetector/InDetValidation/InDetPhysValMonitoring/InDetPhysValMonitoring/ResolutionHelper.h:36
TEST
TEST(CombinationsGeneratorTester, n3k1)
Definition: CombinationsGeneratorTest.cxx:14
IDTPM::trackParameterError
float trackParameterError(const U &p, Trk::ParamDefs param)
Definition: TrackParametersHelper.h:150
IDTPM::qOverPtError
float qOverPtError(const U &p)
Definition: TrackParametersHelper.h:163
ResolutionPlots.h
ClusterSeg::residual
@ residual
Definition: ClusterNtuple.h:20
IDPVM::ResolutionHelper::makeResolutions
void makeResolutions(const TH2 *h_input2D, TH1 *hwidth, TH1 *hmean, TH1 *hproj[], bool saveProjections, IDPVM::ResolutionHelper::methods theMethod=IDPVM::ResolutionHelper::iterRMS_convergence)
extract 1D resolution plots from a 2D "residual vs observable" histogram.
Definition: InnerDetector/InDetValidation/InDetPhysValMonitoring/src/ResolutionHelper.cxx:288
xAODP4Helpers.h
IDTPM::z0
float z0(const U &p)
Definition: TrackParametersHelper.h:62
Trk::z0
@ z0
Definition: ParamDefs.h:70
fillPlots< xAOD::TrackParticle, xAOD::TruthParticle >
template StatusCode IDTPM::ResolutionPlots::fillPlots< xAOD::TrackParticle, xAOD::TruthParticle >(const xAOD::TrackParticle &, const xAOD::TruthParticle &, float weight)
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
IDTPM::ResolutionPlots::initializePlots
void initializePlots()
Book the histograms.
Definition: InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/ResolutionPlots.cxx:33
RoiUtil::PHI
@ PHI
Definition: RoiSerialise.cxx:31
fillPlots< xAOD::TrackParticle, xAOD::TrackParticle >
template StatusCode IDTPM::ResolutionPlots::fillPlots< xAOD::TrackParticle, xAOD::TrackParticle >(const xAOD::TrackParticle &, const xAOD::TrackParticle &, float weight)
Trk::Z0
@ Z0
Definition: ParameterType.h:18
IDPVM::ResolutionHelper
Definition: InnerDetector/InDetValidation/InDetPhysValMonitoring/InDetPhysValMonitoring/ResolutionHelper.h:28
IDTPM::phi
float phi(const U &p)
Accessor utility function for getting the value of phi.
Definition: TrackParametersHelper.h:53
IDTPM::ResolutionPlots::bookPlots
StatusCode bookPlots()
Definition: InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/ResolutionPlots.cxx:42
fillPlots< xAOD::TruthParticle, xAOD::TrackParticle >
template StatusCode IDTPM::ResolutionPlots::fillPlots< xAOD::TruthParticle, xAOD::TrackParticle >(const xAOD::TruthParticle &, const xAOD::TrackParticle &, float weight)
IDTPM::pTError
float pTError(const U &p)
Definition: TrackParametersHelper.h:166
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
IDTPM::z0SinTheta
float z0SinTheta(const U &p)
Definition: TrackParametersHelper.h:65
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
IDTPM::theta
float theta(const U &p)
Definition: TrackParametersHelper.h:49
ResolutionHelper.h
IDTPM::PlotMgr
Definition: PlotMgr.h:32
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
IDTPM::qOverPT
float qOverPT(const U &p)
Definition: TrackParametersHelper.h:122
IDTPM::eta
float eta(const U &p)
Accessor utility function for getting the value of eta.
Definition: TrackParametersHelper.h:40
lumiFormat.i
int i
Definition: lumiFormat.py:92
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
IDTPM::d0
float d0(const U &p)
Definition: TrackParametersHelper.h:74
IDTPM::pT
float pT(const U &p)
Accessor utility function for getting the value of pT.
Definition: TrackParametersHelper.h:30
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IDTPM::ResolutionPlots::finalizePlots
void finalizePlots()
Print out final stats on histograms.
Definition: InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/ResolutionPlots.cxx:158
IDTPM::z0SinThetaError
float z0SinThetaError(const U &p)
Definition: TrackParametersHelper.h:179
IDTPM::ResolutionPlots::ResolutionPlots
ResolutionPlots(PlotMgr *pParent, const std::string &dirName, const std::string &anaTag, const std::string &trackType)
Constructor.
Definition: InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/ResolutionPlots.cxx:23
Trk::d0
@ d0
Definition: ParamDefs.h:69
fillPlots< xAOD::TruthParticle, xAOD::TruthParticle >
template StatusCode IDTPM::ResolutionPlots::fillPlots< xAOD::TruthParticle, xAOD::TruthParticle >(const xAOD::TruthParticle &, const xAOD::TruthParticle &, float weight)
N.B.: not a use-case. Just to avoid compilation errors.
IDTPM::qOverP
float qOverP(const U &p)
Definition: TrackParametersHelper.h:119
lumiFormat.fill
fill
Definition: lumiFormat.py:111
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
Trk::phi
@ phi
Definition: ParamDefs.h:81
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
H5Utils::internal::PT
H5::PredType PT
Definition: H5Traits.cxx:15
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
IDTPM::ResolutionPlots::fillPlots
StatusCode fillPlots(const REF &particle_ref, const TEST &track_test, float weight)
Dedicated fill method (for tracks and/or truth particles)
Definition: InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/ResolutionPlots.cxx:85