ATLAS Offline Software
OfflineObjectDecorHelper.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 #include "TrackParametersHelper.h"
14 
15 namespace IDTPM {
16 
19  const std::string& quality ) {
20  std::string decoName = "LinkedElectron_" + quality;
21  return getLinkedObject< xAOD::ElectronContainer >( track, decoName );
22  }
23 
24 
27  const std::string& quality ) {
28  std::string decoName = "LinkedMuon_" + quality;
29  return getLinkedObject< xAOD::MuonContainer >( track, decoName );
30  }
31 
32 
35  const int requiredNtracks,
36  const std::string& type,
37  const std::string& quality ) {
38  std::string decoName = "LinkedTau" + type +
39  std::to_string( requiredNtracks ) + "_" + quality;
40  return getLinkedObject< xAOD::TauJetContainer >( track, decoName );
41  }
42 
43 
46  const std::string& quality ) {
47  std::string decoName = "LinkedJet_" + quality;
48  return getLinkedObject< xAOD::JetContainer >( track, decoName );
49  }
50 
51 
54  const std::string& quality ) {
55  const xAOD::Jet* jet = getLinkedJet( track, quality );
56  if( not jet ) return -999.;
57 
58  //Amg::Vector3D nullPos( 0, 0, 0 );
59  Amg::Vector3D jetDirection( jet->px(), jet->py(), jet->pz() );
60  Amg::Vector3D unit = jetDirection.unit();
61 
62  float vs = std::sin( std::atan2( unit.y(), unit.x() ) - track.phi() ) * track.d0();
63  float signD0 = vs>=0. ? 1. : -1.;
64  return signD0 * std::fabs( track.d0() );
65  }
66 
67 
70  const xAOD::TruthParticle* truth = getLinkedObject< xAOD::TruthParticleContainer >(
71  track, "truthParticleLink" );
72  return ( truth == nullptr );
73  }
74 
75 
78  static const SG::ConstAccessor< float > truthMatchProbabilityAcc( "truthMatchProbability" );
79  float prob = truthMatchProbabilityAcc.withDefault( track, -1 );
80  if( std::isnan(prob) ) return -1;
81  return prob;
82  }
83 
86  const float truthProbCut ) {
87  float prob = getTruthMatchProb( track );
88  if( std::isnan(prob) ) return nullptr;
89  if( prob <= truthProbCut ) return nullptr;
90 
91  return getLinkedObject< xAOD::TruthParticleContainer >(
92  track, "truthParticleLink" );
93  }
94 
95  template < typename PARTICLE >
96  unsigned int getEtaBin (const PARTICLE& p, const std::vector<float>& etaBins) {
97  float absEta = std::abs(p.eta());
98  absEta = std::clamp(absEta, etaBins.front(), etaBins.back());
99  const auto pVal = std::lower_bound(etaBins.begin(), etaBins.end(), absEta);
100  const unsigned int bin = std::distance(etaBins.begin(), pVal) - 1;
101  return bin;
102  }
103  template unsigned int getEtaBin < xAOD::TruthParticle >(const xAOD::TruthParticle& truth, const std::vector<float>& etaBins);
104  template unsigned int getEtaBin < xAOD::TrackParticle >(const xAOD::TrackParticle& track, const std::vector<float>& etaBins);
105 
106 
109  std::vector< const xAOD::TrackParticle* >& vtxTracks,
110  std::vector< float >& vtxTrackWeights,
111  const std::vector< const xAOD::TrackParticle* >& selTracks,
112  bool useSelected )
113  {
114  bool success( true );
115 
117  vtxTracks.clear();
118  vtxTrackWeights.clear();
119 
121  if( vtx.vertexType() == xAOD::VxType::NoVtx ) return success;
122 
124  size_t nTracks = vtx.nTrackParticles();
126  std::vector< float > wVec = vtx.trackWeights();
127 
129  if( not( nTracks == elVec.size() and nTracks == wVec.size() ) ) return false; // shouldn't happen
130 
132  for( size_t it=0 ; it<nTracks ; it++ ) {
134  if( not elVec[ it ].isValid() ) {
135  success = false; // shouldn't happen
136  continue;
137  }
138 
139  const xAOD::TrackParticle* thisTrk = *elVec[ it ];
140  float thisTrkW = wVec[ it ];
141 
143  if( useSelected and
144  std::find( selTracks.begin(), selTracks.end(), thisTrk ) == selTracks.end() ) continue;
145 
147  vtxTracks.push_back( thisTrk );
148  vtxTrackWeights.push_back( thisTrkW );
149  } // close associated tracks loop
150 
151  return success;
152  }
153 
154 } // namespace IDTPM
IDTPM::getTruthMatchProb
float getTruthMatchProb(const xAOD::TrackParticle &track)
getTruthMatchProb
Definition: OfflineObjectDecorHelper.cxx:77
xAOD::Vertex_v1::nTrackParticles
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
Definition: Vertex_v1.cxx:270
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
IDTPM::getLinkedTau
const xAOD::TauJet * getLinkedTau(const xAOD::TrackParticle &track, const int requiredNtracks, const std::string &type, const std::string &quality)
getLinkedTau
Definition: OfflineObjectDecorHelper.cxx:34
IDTPM::getEtaBin
unsigned int getEtaBin(const PARTICLE &p, const std::vector< float > &etaBins)
Definition: OfflineObjectDecorHelper.cxx:96
IDTPM::getLinkedTruth
const xAOD::TruthParticle * getLinkedTruth(const xAOD::TrackParticle &track, const float truthProbCut)
getLinkedTruth
Definition: OfflineObjectDecorHelper.cxx:85
xAOD::Vertex_v1::trackParticleLinks
const TrackParticleLinks_t & trackParticleLinks() const
Get all the particles associated with the vertex.
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
xAOD::Vertex_v1::trackWeights
const std::vector< float > & trackWeights() const
Get all the track weights.
skel.it
it
Definition: skel.GENtoEVGEN.py:407
bin
Definition: BinsDiffFromStripMedian.h:43
IDTPM::getLinkedElectron
const xAOD::Electron * getLinkedElectron(const xAOD::TrackParticle &track, const std::string &quality)
getLinkedElectron
Definition: OfflineObjectDecorHelper.cxx:18
SG::ConstAccessor< float >
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:867
covarianceTool.prob
prob
Definition: covarianceTool.py:678
xAOD::Vertex_v1::vertexType
VxType::VertexType vertexType() const
The type of the vertex.
xAOD::VxType::NoVtx
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Definition: TrackingPrimitives.h:571
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
TrackParametersHelper.h
Utility methods to access track/truth particles parmeters in a consitent way in this package.
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
IDTPM::getD0TrackInJet
float getD0TrackInJet(const xAOD::TrackParticle &track, const std::string &quality)
recompute d0 projecting in jet direction w.r.t. origin
Definition: OfflineObjectDecorHelper.cxx:53
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
IDTPM::getLinkedMuon
const xAOD::Muon * getLinkedMuon(const xAOD::TrackParticle &track, const std::string &quality)
getLinkedMuon
Definition: OfflineObjectDecorHelper.cxx:26
xAOD::Vertex_v1::TrackParticleLinks_t
std::vector< ElementLink< xAOD::TrackParticleContainer > > TrackParticleLinks_t
Type for the associated track particles.
Definition: Vertex_v1.h:128
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
xAOD::Electron_v1
Definition: Electron_v1.h:34
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
IDTPM::getVertexTracksAndWeights
bool getVertexTracksAndWeights(const xAOD::Vertex &vtx, std::vector< const xAOD::TrackParticle * > &vtxTracks, std::vector< float > &vtxTrackWeights, const std::vector< const xAOD::TrackParticle * > &selTracks, bool useSelected)
getVertexTracksAndWeights
Definition: OfflineObjectDecorHelper.cxx:108
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:21
python.TrackLeptonConfig.quality
quality
Definition: TrackLeptonConfig.py:16
IDTPM::getLinkedJet
const xAOD::Jet * getLinkedJet(const xAOD::TrackParticle &track, const std::string &quality)
getLinkedJet
Definition: OfflineObjectDecorHelper.cxx:45
TauGNNUtils::Variables::absEta
bool absEta(const xAOD::TauJet &tau, double &out)
Definition: TauGNNUtils.cxx:245
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
OfflineObjectDecorHelper.h
Utility methods to access offline object decorations.
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
IDTPM
Athena include(s).
Definition: IPlotsDefinitionSvc.h:25
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
IDTPM::isUnlinkedTruth
bool isUnlinkedTruth(const xAOD::TrackParticle &track)
isUnlinkedTruth
Definition: OfflineObjectDecorHelper.cxx:69
SG::ConstAccessor::withDefault
const_reference_type withDefault(const ELT &e, const T &deflt) const
Fetch the variable for one element, as a const reference, with a default.