ATLAS Offline Software
InDetTrackSmearingTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // ROOT include(s):
6 #include <TRandom.h>
7 #include <TH2F.h>
8 #include <TFile.h>
9 
10 // std includes
11 #include <utility>
12 
13 // EDM include(s):
15 //#include "AthenaBaseComps/AthCheckMacros.h"
16 
18 
19 // Local include(s):
21 
22 namespace {
24 }
25 
26 namespace InDet {
27 
29  {
38  };
39 
41  {
44  // the TRK_RES_[D|Z]0_MEAS_[UP|DOWN] systematics are for advanced users only, who are using TRK_RES_[D|Z]0_MEAS as the nominal point
47  };
48 
49  InDetTrackSmearingTool::InDetTrackSmearingTool( const std::string& name )
50  : InDet::InDetTrackSystematicsTool( name )
51  {
52 
53 #ifndef XAOD_STANDALONE
54  declareInterface<IInDetTrackSmearingTool>(this);
55 #endif
56 
57  declareProperty("Seed", m_seed);
58 
59  declareProperty("calibFileD0Dead", m_calibFileD0Dead = "InDetTrackSystematicsTools/CalibData_21.2_2018-v18/res_diff_d0_vs_pt.hist.root");
60  declareProperty("calibFileZ0Dead", m_calibFileZ0Dead = "InDetTrackSystematicsTools/CalibData_21.2_2018-v18/res_diff_z0_vs_pt.hist.root");
61 
62  declareProperty("calibFileIP_lowpt", m_calibFileIP_lowpt = "InDetTrackSystematicsTools/CalibData_21.2_2018-v18/trackIPAlign_dec2017.root");
63  declareProperty("calibFileIP_highpt_Data16", m_calibFileIP_highpt_Data16 = "InDetTrackSystematicsTools/CalibData_21.2_2018-v18/trackIPAlignTight.root");
64  declareProperty("calibFileIP_highpt_Data17", m_calibFileIP_highpt_Data17 = "InDetTrackSystematicsTools/CalibData_21.2_2018-v19/trackIPAlignTight_data2017.root");
65  declareProperty("calibFileIP_CTIDE", m_calibFileIP_CTIDE = "InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors.root");
66  declareProperty("runNumber", m_runNumber);
67  declareProperty("doCTIDE", m_doCTIDE);
68 
69  }
70 
71 
73 
74  // Greet the user:
75  ATH_MSG_INFO( "Initializing..." );
76 
77  ATH_MSG_INFO( "Using seed of " << m_seed << " to initialize RNG" );
78  m_rnd = std::make_unique<TRandom3>(m_seed);
79 
80  ATH_MSG_INFO( "Using for TRK_RES_D0_DEAD case the calibration file " << PathResolverFindCalibFile(m_calibFileD0Dead) );
81  ATH_MSG_INFO( "Using for TRK_RES_Z0_DEAD case the calibration file " << PathResolverFindCalibFile(m_calibFileZ0Dead) );
82 
83  if (m_doCTIDE) {
84  ATH_MSG_INFO( "Using dedicated CTIDE smearing maps for tracks in jets" );
85  ATH_MSG_INFO( "Using for the full pT range the CTIDE calibration file " << PathResolverFindCalibFile(m_calibFileIP_CTIDE) );
86  } else {
87  ATH_MSG_INFO( "Using the low pT (< 15 GeV) calibration file " << PathResolverFindCalibFile(m_calibFileIP_lowpt) );
88  ATH_MSG_INFO( "Using the high pT (> 15 GeV) Data16 calibration file " << PathResolverFindCalibFile(m_calibFileIP_highpt_Data16) );
89  ATH_MSG_INFO( "Using the high pT (> 15 GeV) Data17 calibration file " << PathResolverFindCalibFile(m_calibFileIP_highpt_Data17) );
90  }
91 
92  // do common initialization (at time of writing, register affecting systematics)
94 
95  // Return gracefully:
96  return StatusCode::SUCCESS;
97  }
98 
99  InDetTrackSmearingTool::~InDetTrackSmearingTool()
100  {
101  delete m_smearD0Dead; m_smearD0Dead = nullptr;
102  delete m_smearZ0Dead; m_smearZ0Dead = nullptr;
103 
104  delete m_smearD0_lowpt; m_smearD0_lowpt = nullptr;
105  delete m_smearZ0_lowpt; m_smearZ0_lowpt = nullptr;
106  delete m_smearD0_lowpt_sys_up; m_smearD0_lowpt_sys_up = nullptr;
107  delete m_smearZ0_lowpt_sys_up; m_smearZ0_lowpt_sys_up = nullptr;
108  delete m_smearD0_lowpt_sys_dw; m_smearD0_lowpt_sys_dw = nullptr;
109  delete m_smearZ0_lowpt_sys_dw; m_smearZ0_lowpt_sys_dw = nullptr;
110 
111  delete m_smearD0_highpt; m_smearD0_highpt = nullptr;
112  delete m_smearZ0_highpt; m_smearZ0_highpt = nullptr;
113  delete m_smearD0_highpt_sys_up; m_smearD0_highpt_sys_up = nullptr;
114  delete m_smearZ0_highpt_sys_up; m_smearZ0_highpt_sys_up = nullptr;
115  delete m_smearD0_highpt_sys_dw; m_smearD0_highpt_sys_dw = nullptr;
116  delete m_smearZ0_highpt_sys_dw; m_smearZ0_highpt_sys_dw = nullptr;
117  }
118 
119  float InDetTrackSmearingTool::GetSmearD0Sigma(const xAOD::TrackParticle& track) const {
120  float pt = 1.e-3*track.pt(); // need to convert pt to GeV
121  float eta = track.eta();
122  float sigma_D0 = 0.f;
123 
124  if ( isActive(TRK_RES_D0_DEAD) ) {
125  float d0Smear = m_smearD0Dead->GetBinContent(std::as_const(m_smearD0Dead)->FindBin(pt));
126  sigma_D0 += d0Smear*d0Smear;
127  }
128 
129  bool isActiveD0Meas = isActive(TRK_RES_D0_MEAS);
130  bool isActiveD0MeasUp = isActive(TRK_RES_D0_MEAS_UP);
131  bool isActiveD0MeasDown = isActive(TRK_RES_D0_MEAS_DOWN);
132 
133  if (isActiveD0Meas + isActiveD0MeasUp + isActiveD0MeasDown > 1) {
134  // this should be checked against in applySystematicVariation
135  throw std::runtime_error( "Multiple incompatible D0 systematics are activated." );
136  } else if (isActiveD0Meas + isActiveD0MeasUp + isActiveD0MeasDown == 0) {
137  // pass-through D0Meas, return sigma_D0 early
138  return std::sqrt(sigma_D0);
139  }
140 
141  TH2* d0hist_lowpt = nullptr;
142  TH2* d0hist_highpt = nullptr;
143 
144  if(isActiveD0Meas) {
145  d0hist_lowpt = m_smearD0_lowpt;
146  d0hist_highpt = m_smearD0_highpt;
147  } else if(isActiveD0MeasUp) {
148  d0hist_lowpt = m_smearD0_lowpt_sys_up;
149  d0hist_highpt = m_smearD0_highpt_sys_up;
150  } else if(isActiveD0MeasDown) {
151  d0hist_lowpt = m_smearD0_lowpt_sys_dw;
152  d0hist_highpt = m_smearD0_highpt_sys_dw;
153  }
154 
155  if (d0hist_lowpt == nullptr) ATH_MSG_ERROR( "d0 lowpt histogram is null!" );
156  if (d0hist_highpt == nullptr) ATH_MSG_ERROR( "d0 highpt histogram is null!" );
157 
158  float d0Smear = 0.f;
159  if (pt < 15) {
160  d0Smear = readHistogram(d0hist_lowpt, pt, eta);
161  } else {
162  d0Smear = readHistogram(d0hist_highpt, pt, eta);
163  }
164 
165  // Apply a minimum smearing in the case where there is an empty bin
166  // TODO: Remove for next round of recommendations
167  if (d0Smear == 0) {
168  d0Smear = 0.002;
169  }
170 
171  sigma_D0 += d0Smear*d0Smear;
172 
173  return std::sqrt(sigma_D0);
174  }
175 
176 
177  float InDetTrackSmearingTool::GetSmearZ0Sigma(const xAOD::TrackParticle& track) const {
178  float pt = 1.e-3*track.pt(); // need to convert pt to GeV
179  float eta = track.eta();
180  float sigma_Z0 = 0.f;
181 
182  if ( isActive(TRK_RES_Z0_DEAD) ) {
183  // the histogram returns a smeared value for z0*sin(theta), so we need to divide by sin(theta)
184  float z0Smear = m_smearZ0Dead->GetBinContent(std::as_const(m_smearZ0Dead)->FindBin(pt))/std::sin(track.theta());
185  sigma_Z0 += z0Smear*z0Smear;
186  }
187 
188 
189  bool isActiveZ0Meas = isActive(TRK_RES_Z0_MEAS);
190  bool isActiveZ0MeasUp = isActive(TRK_RES_Z0_MEAS_UP);
191  bool isActiveZ0MeasDown = isActive(TRK_RES_Z0_MEAS_DOWN);
192 
193  if (isActiveZ0Meas + isActiveZ0MeasUp + isActiveZ0MeasDown > 1) {
194  // this should be checked against in applySystematicVariation
195  throw std::runtime_error( "Multiple incompatible Z0 systematics are activated." );
196  } else if (isActiveZ0Meas + isActiveZ0MeasUp + isActiveZ0MeasDown == 0) {
197  // pass-through Z0Meas, return sigma_Z0 early
198  return std::sqrt(sigma_Z0);
199  }
200 
201  TH2* z0hist_lowpt = nullptr;
202  TH2* z0hist_highpt = nullptr;
203 
204  if(isActiveZ0Meas) {
205  z0hist_lowpt = m_smearZ0_lowpt;
206  z0hist_highpt = m_smearZ0_highpt;
207  } else if(isActiveZ0MeasUp) {
208  z0hist_lowpt = m_smearZ0_lowpt_sys_up;
209  z0hist_highpt = m_smearZ0_highpt_sys_up;
210  } else if(isActiveZ0MeasDown) {
211  z0hist_lowpt = m_smearZ0_lowpt_sys_dw;
212  z0hist_highpt = m_smearZ0_highpt_sys_dw;
213  }
214 
215  if (z0hist_lowpt == nullptr) ATH_MSG_ERROR( "z0 lowpt histogram is null!" );
216  if (z0hist_highpt == nullptr) ATH_MSG_ERROR( "z0 highpt histogram is null!" );
217 
218  float z0Smear = 0.f;
219  if (pt < 15) {
220  z0Smear = readHistogram(z0hist_lowpt, pt, eta);
221  } else {
222  z0Smear = readHistogram(z0hist_highpt, pt, eta);
223  }
224 
225  // Apply a minimum smearing in the case where there is an empty bin
226  // TODO: Remove for next round of recommendations
227  if (z0Smear == 0) {
228  z0Smear = 0.03;
229  }
230 
231  sigma_Z0 += z0Smear*z0Smear;
232 
233  return std::sqrt(sigma_Z0);
234  }
235 
236 CP::CorrectionCode InDetTrackSmearingTool::applyCorrection( xAOD::TrackParticle& track ) {
237 
238  [[maybe_unused]] static const bool firstTime = [&]() {
239  if ( ! firstCall().isSuccess() ) { // this will check data vs. MC and run number.
240  throw std::runtime_error("Error calling InDetTrackBiasingTool::firstCall");
241  }
242  return false;
243  }();
244 
245  float sigmaD0 = GetSmearD0Sigma( track );
246  float sigmaZ0 = GetSmearZ0Sigma( track );
247 
248  static const SG::AuxElement::Accessor< float > accD0( "d0" );
249  static const SG::AuxElement::Accessor< float > accZ0( "z0" );
250 
251  //NB: only call the RNG if the widths are greater than 0
252  if ( sigmaD0 > 0. ) accD0( track ) = m_rnd->Gaus( track.d0(), sigmaD0 );
253  if ( sigmaZ0 > 0. ) accZ0( track ) = m_rnd->Gaus( track.z0(), sigmaZ0 );
254 
255  return CP::CorrectionCode::Ok;
256  }
257 
258  StatusCode InDetTrackSmearingTool::initHistograms(int runNumber)
259  {
260 
261  // For now, the Dead and lowpt histograms can be initialized without knowing the run number
262  ATH_CHECK( initObject<TH1>(m_smearD0Dead, m_calibFileD0Dead, "res_pt_d0_0") );
263  ATH_CHECK( initObject<TH1>(m_smearZ0Dead, m_calibFileZ0Dead, "res_pt_z0_0") );
264 
265  // determine maps based on which year to use
266  bool useData17Maps = false;
267  if (runNumber <= 0) {
268  ATH_MSG_WARNING( "Run number not set." );
269  }
270  if (runNumber >= 311481) {
271  ATH_MSG_INFO( "runNumber corresponds to 2017/2018 - using the Data17 smearing maps where appropriate" );
272  useData17Maps = true;
273  } else {
274  ATH_MSG_INFO( "using the Data16 smearing maps where appropriate" );
275  }
276 
277  std::string rootfileName_lowpt;
278  std::string rootfileName_highpt;
279 
280  if (m_doCTIDE) {
281 
282  // tool configured for tracks in jets
283  // same map for lowpt and highpt
284 
285  rootfileName_lowpt = m_calibFileIP_CTIDE;
286  rootfileName_highpt = m_calibFileIP_CTIDE;
287 
288  ATH_CHECK( initObject<TH2>(m_smearD0_lowpt, rootfileName_lowpt, "d0quaddiff_Pt_Eta" ) );
289  ATH_CHECK( initObject<TH2>(m_smearZ0_lowpt, rootfileName_lowpt, "z0quaddiff_Pt_Eta" ) );
290  ATH_CHECK( initObject<TH2>(m_smearD0_lowpt_sys_up, rootfileName_lowpt, "d0quaddiff_Pt_Eta_up" ) );
291  ATH_CHECK( initObject<TH2>(m_smearZ0_lowpt_sys_up, rootfileName_lowpt, "z0quaddiff_Pt_Eta_up" ) );
292  ATH_CHECK( initObject<TH2>(m_smearD0_lowpt_sys_dw, rootfileName_lowpt, "d0quaddiff_Pt_Eta_down" ) );
293  ATH_CHECK( initObject<TH2>(m_smearZ0_lowpt_sys_dw, rootfileName_lowpt, "z0quaddiff_Pt_Eta_down" ) );
294  ATH_CHECK( initObject<TH2>(m_smearD0_highpt, rootfileName_highpt, "d0quaddiff_Pt_Eta" ) );
295  ATH_CHECK( initObject<TH2>(m_smearZ0_highpt, rootfileName_highpt, "z0quaddiff_Pt_Eta" ) );
296  ATH_CHECK( initObject<TH2>(m_smearD0_highpt_sys_up, rootfileName_highpt, "d0quaddiff_Pt_Eta_up" ) );
297  ATH_CHECK( initObject<TH2>(m_smearZ0_highpt_sys_up, rootfileName_highpt, "z0quaddiff_Pt_Eta_up" ) );
298  ATH_CHECK( initObject<TH2>(m_smearD0_highpt_sys_dw, rootfileName_highpt, "d0quaddiff_Pt_Eta_down" ) );
299  ATH_CHECK( initObject<TH2>(m_smearZ0_highpt_sys_dw, rootfileName_highpt, "z0quaddiff_Pt_Eta_down" ) );
300 
301  } else {
302 
303  // nominally use the minbias and Zmumu maps
304 
305  // for now, the minbias maps used for lowpt don't have a year dependence
306  rootfileName_lowpt = m_calibFileIP_lowpt;
307  ATH_CHECK( initObject<TH2>(m_smearD0_lowpt, rootfileName_lowpt, "d0quaddiff_comb_Pt_Eta" ) );
308  ATH_CHECK( initObject<TH2>(m_smearZ0_lowpt, rootfileName_lowpt, "z0quaddiff_comb_Pt_Eta" ) );
309  ATH_CHECK( initObject<TH2>(m_smearD0_lowpt_sys_up, rootfileName_lowpt, "d0quaddiff_comb_Pt_Eta_sys_up" ) );
310  ATH_CHECK( initObject<TH2>(m_smearZ0_lowpt_sys_up, rootfileName_lowpt, "z0quaddiff_comb_Pt_Eta_sys_up" ) );
311  ATH_CHECK( initObject<TH2>(m_smearD0_lowpt_sys_dw, rootfileName_lowpt, "d0quaddiff_comb_Pt_Eta_sys_dw" ) );
312  ATH_CHECK( initObject<TH2>(m_smearZ0_lowpt_sys_dw, rootfileName_lowpt, "z0quaddiff_comb_Pt_Eta_sys_dw" ) );
313 
314  // Zmumu maps for highpt
315  if (useData17Maps) {
316  rootfileName_highpt = m_calibFileIP_highpt_Data17;
317  } else {
318  rootfileName_highpt = m_calibFileIP_highpt_Data16;
319  }
320  ATH_CHECK( initObject<TH2>(m_smearD0_highpt, rootfileName_highpt, "quad_diff/d0quaddiff_comb_Pt_Eta" ) );
321  ATH_CHECK( initObject<TH2>(m_smearZ0_highpt, rootfileName_highpt, "quad_diff/z0quaddiff_comb_Pt_Eta" ) );
322  ATH_CHECK( initObject<TH2>(m_smearD0_highpt_sys_up, rootfileName_highpt, "quad_diff/d0quaddiff_comb_Pt_Eta_sys_up" ) );
323  ATH_CHECK( initObject<TH2>(m_smearZ0_highpt_sys_up, rootfileName_highpt, "quad_diff/z0quaddiff_comb_Pt_Eta_sys_up" ) );
324  ATH_CHECK( initObject<TH2>(m_smearD0_highpt_sys_dw, rootfileName_highpt, "quad_diff/d0quaddiff_comb_Pt_Eta_sys_dw" ) );
325  ATH_CHECK( initObject<TH2>(m_smearZ0_highpt_sys_dw, rootfileName_highpt, "quad_diff/z0quaddiff_comb_Pt_Eta_sys_dw" ) );
326 
327  }
328 
329  return StatusCode::SUCCESS;
330  }
331 
332  StatusCode InDetTrackSmearingTool::firstCall()
333  {
334 
335  const xAOD::EventInfo* ei = nullptr;
336  auto sc = evtStore()->retrieve( ei, "EventInfo" );
337  if ( ! sc.isSuccess() ) {
338  if (m_runNumber <= 0) {
339  ATH_MSG_ERROR( "Unable to retrieve from event store. Manually set run number." );
340  return StatusCode::FAILURE;
341  }
342  }
343 
344  auto runNumber = ei->runNumber();
345  if (m_runNumber > 0) {
346  if ( m_runNumber != runNumber ) {
347  ATH_MSG_WARNING( "Manually-set run number (" << m_runNumber <<
348  ") does not match that from the event store (" << runNumber << ")." );
349  ATH_MSG_WARNING( "Will use the manually set run number, but you must make sure this is the desired behaviour!" );
350  }
351  runNumber = m_runNumber;
352  }
353  return initHistograms( runNumber );
354  }
355 
356  CP::CorrectionCode InDetTrackSmearingTool::correctedCopy( const xAOD::TrackParticle& in,
358  {
359  return TrackCorrTool_t::correctedCopy(in, out);
360  }
361 
362  CP::CorrectionCode InDetTrackSmearingTool::applyContainerCorrection( xAOD::TrackParticleContainer& cont )
363  {
364  return TrackCorrTool_t::applyContainerCorrection(cont);
365  }
366 
367  bool InDetTrackSmearingTool::isAffectedBySystematic( const CP::SystematicVariation& syst ) const
368  {
369  return InDetTrackSystematicsTool::isAffectedBySystematic( syst );
370  }
371 
372  CP::SystematicSet InDetTrackSmearingTool::affectingSystematics() const
373  {
374  return SmearingSystematics;
375  }
376 
377  CP::SystematicSet InDetTrackSmearingTool::recommendedSystematics() const
378  {
379  // return InDetTrackSystematicsTool::recommendedSystematics();
380  return RecommendedSystematics;
381  }
382 
383  StatusCode InDetTrackSmearingTool::applySystematicVariation( const CP::SystematicSet& systs )
384  {
385  // should do check in here and return StatusCode::FAILURE if LOOSE and TIGHT versions are set simultaneously
386  return InDetTrackSystematicsTool::applySystematicVariation(systs);
387  }
388 
389  float InDetTrackSmearingTool::readHistogram(TH2* histogram, float pt, float eta) const {
390  // safety measure:
391  if( eta>2.499 ) eta= 2.499;
392  if( eta<-2.499 ) eta=-2.499;
393  if ( pt < histogram->GetXaxis()->GetXmin() ) {
394  pt = histogram->GetXaxis()->GetXmin() + 0.01;
395  }
396  if ( pt >= histogram->GetXaxis()->GetXmax() ) {
397  pt = histogram->GetXaxis()->GetXmax() - 0.01;
398  }
399 
400  int bin = histogram->FindFixBin(pt, eta);
401  float val = histogram->GetBinContent(bin);
402  return val;
403  }
404 
405 } // namespace InDet
406 
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
RootHelpers::FindBin
Int_t FindBin(const TAxis *axis, const double x)
Definition: RootHelpers.cxx:14
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
initialize
void initialize()
Definition: run_EoverP.cxx:894
InDet::TRK_RES_Z0_MEAS_UP
@ TRK_RES_Z0_MEAS_UP
Definition: InDetTrackSystematics.h:19
test_pyathena.pt
pt
Definition: test_pyathena.py:11
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
bin
Definition: BinsDiffFromStripMedian.h:43
CP::SystematicVariation
Definition: SystematicVariation.h:47
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
InDet::TRK_RES_D0_MEAS_DOWN
@ TRK_RES_D0_MEAS_DOWN
Definition: InDetTrackSystematics.h:20
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::TrackSystematicMap
static const std::unordered_map< InDet::TrackSystematic, CP::SystematicVariation, std::hash< int > > TrackSystematicMap
Definition: InDetTrackSystematics.h:56
InDet::TRK_RES_Z0_MEAS_DOWN
@ TRK_RES_Z0_MEAS_DOWN
Definition: InDetTrackSystematics.h:21
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
CP::CorrectionTool< xAOD::TrackParticleContainer >
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
InDet::TRK_RES_D0_MEAS
@ TRK_RES_D0_MEAS
Definition: InDetTrackSystematics.h:16
InDet::RecommendedSystematics
static const CP::SystematicSet RecommendedSystematics
Definition: InDetTrackSmearingTool.cxx:40
InDet::TRK_RES_Z0_DEAD
@ TRK_RES_Z0_DEAD
Definition: InDetTrackSystematics.h:23
EventInfo.h
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
InDet::SmearingSystematics
static const CP::SystematicSet SmearingSystematics
Definition: InDetTrackSmearingTool.cxx:28
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
CP::CorrectionCode::Ok
@ Ok
The correction was done successfully.
Definition: CorrectionCode.h:38
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
InDet::TRK_RES_D0_DEAD
@ TRK_RES_D0_DEAD
Definition: InDetTrackSystematics.h:22
InDet::TRK_RES_Z0_MEAS
@ TRK_RES_Z0_MEAS
Definition: InDetTrackSystematics.h:17
CP::CorrectionCode
Return value from object correction CP tools.
Definition: CorrectionCode.h:31
InDetTrackSmearingTool.h
InDet::TRK_RES_D0_MEAS_UP
@ TRK_RES_D0_MEAS_UP
Definition: InDetTrackSystematics.h:18
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
histogram
std::string histogram
Definition: chains.cxx:52