ATLAS Offline Software
Loading...
Searching...
No Matches
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
9
14
15namespace 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
69 bool isUnlinkedTruth( const xAOD::TrackParticle& track ) {
71 track, "truthParticleLink" );
72 return ( truth == nullptr );
73 }
74
75
77 float getTruthMatchProb( const xAOD::TrackParticle& track ) {
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
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
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
Helper class to provide constant type-safe access to aux data.
Utility methods to access offline object decorations.
Utility methods to access track/truth particles parmeters in a consitent way in this package.
const_reference_type withDefault(const ELT &e, const T &deflt) const
Fetch the variable for one element, as a const reference, with a default.
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
const TrackParticleLinks_t & trackParticleLinks() const
Get all the particles associated with the vertex.
std::vector< ElementLink< xAOD::TrackParticleContainer > > TrackParticleLinks_t
Type for the associated track particles.
Definition Vertex_v1.h:128
VxType::VertexType vertexType() const
The type of the vertex.
const std::vector< float > & trackWeights() const
Get all the track weights.
Eigen::Matrix< double, 3, 1 > Vector3D
Athena include(s).
float getD0TrackInJet(const xAOD::TrackParticle &track, const std::string &quality)
recompute d0 projecting in jet direction w.r.t. origin
unsigned int getEtaBin(const PARTICLE &p, const std::vector< float > &etaBins)
const xAOD::Jet * getLinkedJet(const xAOD::TrackParticle &track, const std::string &quality)
getLinkedJet
const xAOD::Muon * getLinkedMuon(const xAOD::TrackParticle &track, const std::string &quality)
getLinkedMuon
float getTruthMatchProb(const xAOD::TrackParticle &track)
getTruthMatchProb
container_t::const_value_type getLinkedObject(const xAOD::TrackParticle &track, const std::string &decoName)
Templated method to retrieve object linked to a track.
template unsigned int getEtaBin< xAOD::TruthParticle >(const xAOD::TruthParticle &truth, const std::vector< float > &etaBins)
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
const xAOD::Electron * getLinkedElectron(const xAOD::TrackParticle &track, const std::string &quality)
getLinkedElectron
const xAOD::TruthParticle * getLinkedTruth(const xAOD::TrackParticle &track, const float truthProbCut)
getLinkedTruth
bool isUnlinkedTruth(const xAOD::TrackParticle &track)
isUnlinkedTruth
template unsigned int getEtaBin< xAOD::TrackParticle >(const xAOD::TrackParticle &track, const std::vector< float > &etaBins)
const xAOD::TauJet * getLinkedTau(const xAOD::TrackParticle &track, const int requiredNtracks, const std::string &type, const std::string &quality)
getLinkedTau
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Jet_v1 Jet
Definition of the current "jet version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TauJet_v3 TauJet
Definition of the current "tau version".
TruthParticle_v1 TruthParticle
Typedef to implementation.
Muon_v1 Muon
Reference the current persistent version:
Electron_v1 Electron
Definition of the current "egamma version".