ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
JetTagging
FlavorTagDiscriminants
src
TrackLeptonDecoratorAlg.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
6
#include "
FlavorTagDiscriminants/TrackLeptonDecoratorAlg.h
"
7
8
#include "
StoreGate/WriteDecorHandle.h
"
9
#include "
StoreGate/ReadDecorHandle.h
"
10
11
#include "
xAODTracking/TrackParticleContainer.h
"
12
13
#include "
xAODEgamma/ElectronxAODHelpers.h
"
14
#include "
ElectronPhotonSelectorTools/ElectronSelectorHelpers.h
"
15
16
17
namespace
FlavorTagDiscriminants
{
18
19
TrackLeptonDecoratorAlg::TrackLeptonDecoratorAlg
(
20
const
std::string& name, ISvcLocator* loc )
21
:
AthReentrantAlgorithm
(name, loc) {}
22
23
StatusCode
TrackLeptonDecoratorAlg::initialize
() {
24
ATH_MSG_INFO
(
"Inizializing "
<< name() <<
"... "
);
25
26
// Initialize Container keys
27
ATH_MSG_DEBUG
(
"Inizializing containers:"
);
28
ATH_MSG_DEBUG
(
" ** "
<<
m_TrackContainerKey
);
29
ATH_MSG_DEBUG
(
" ** "
<<
m_ElectronContainerKey
);
30
ATH_MSG_DEBUG
(
" ** "
<<
m_MuonContainerKey
);
31
32
ATH_CHECK
(
m_TrackContainerKey
.initialize() );
33
ATH_CHECK
(
m_ElectronContainerKey
.initialize() );
34
ATH_CHECK
(
m_MuonContainerKey
.initialize() );
35
36
// Initialise electron ID tool
37
ATH_CHECK
(
m_electronID_tool
.retrieve());
38
39
// Initialise muon ID tool
40
ATH_CHECK
(
m_muonID_tool
.retrieve());
41
42
// Initialize decorators
43
ATH_MSG_DEBUG
(
"Inizializing decorators:"
);
44
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_lepton_id
);
45
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_muon_quality
);
46
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_muon_qOverPratio
);
47
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_muon_momentumBalanceSignificance
);
48
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_muon_scatteringNeighbourSignificance
);
49
50
ATH_CHECK
(
m_dec_lepton_id
.initialize() );
51
ATH_CHECK
(
m_dec_muon_quality
.initialize() );
52
ATH_CHECK
(
m_dec_muon_qOverPratio
.initialize() );
53
ATH_CHECK
(
m_dec_muon_momentumBalanceSignificance
.initialize() );
54
ATH_CHECK
(
m_dec_muon_scatteringNeighbourSignificance
.initialize() );
55
56
return
StatusCode::SUCCESS;
57
}
58
59
StatusCode
TrackLeptonDecoratorAlg::execute
(
const
EventContext& ctx)
const
{
60
ATH_MSG_DEBUG
(
"Executing "
<< name() <<
"... "
);
61
62
// read collections
63
SG::ReadHandle<xAOD::TrackParticleContainer>
tracks(
64
m_TrackContainerKey
,ctx);
65
CHECK
( tracks.
isValid
() );
66
ATH_MSG_DEBUG
(
"Retrieved "
<< tracks->size() <<
" tracks..."
);
67
SG::ReadHandle<xAOD::ElectronContainer>
electrons(
68
m_ElectronContainerKey
,ctx);
69
CHECK
( tracks.
isValid
() );
70
ATH_MSG_DEBUG
(
"Retrieved "
<< electrons->size() <<
" electrons..."
);
71
SG::ReadHandle<xAOD::MuonContainer>
muons(
72
m_MuonContainerKey
,ctx);
73
CHECK
( tracks.
isValid
() );
74
ATH_MSG_DEBUG
(
"Retrieved "
<< muons->size() <<
" muons..."
);
75
76
using
TPC =
xAOD::TrackParticleContainer
;
77
SG::WriteDecorHandle<TPC, char>
decor_lepton_id(
m_dec_lepton_id
, ctx);
78
SG::WriteDecorHandle<TPC, char>
decor_muon_quality(
m_dec_muon_quality
, ctx);
79
SG::WriteDecorHandle<TPC, float>
decor_muon_qOverPratio(
m_dec_muon_qOverPratio
, ctx);
80
SG::WriteDecorHandle<TPC, float>
decor_muon_momentumBalanceSignificance(
m_dec_muon_momentumBalanceSignificance
, ctx);
81
SG::WriteDecorHandle<TPC, float>
decor_muon_scatteringNeighbourSignificance(
m_dec_muon_scatteringNeighbourSignificance
, ctx);
82
83
// give all tracks a default starting value
84
for
(
const
xAOD::TrackParticle
* track : *tracks ) {
85
decor_lepton_id(*track) = 0;
86
decor_muon_quality(*track) = -1;
87
decor_muon_qOverPratio(*track) = -99.;
88
decor_muon_momentumBalanceSignificance(*track) = -99.;
89
decor_muon_scatteringNeighbourSignificance(*track) = -99.;
90
}
91
92
// loop over electrons
93
for
(
const
auto
electron : *electrons ) {
94
95
// get associated InDet track (not the GSF track which is likely to have improved parameters,
96
// more info: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/EGammaD3PDtoxAOD#TrackParticle)
97
const
xAOD::TrackParticle
* track =
xAOD::EgammaHelpers::getOriginalTrackParticle
(electron);
98
if
( !track ) {
continue
; }
99
100
// apply electron ID requirement
101
bool
LH_selection =
bool
{
m_electronID_tool
->accept(electron)};
102
if
(!LH_selection) {
continue
; }
103
104
// decorate the track
105
decor_lepton_id(*track) = -11 * electron->charge();
106
}
107
108
// loop over muons - do it last in case we have a track that was used in the
109
// reconstruction of an electron and a muon (which can happen in rare cases)
110
for
(
const
auto
muon : *muons ) {
111
112
if
( !
m_muonID_tool
->accept(*muon) ) {
113
continue
;
114
}
115
// get associated InDet track
116
auto
track = muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
117
if
( !track) {
continue
; }
118
119
// get associated muon spectrometer track
120
auto
ms_track = muon->trackParticle(xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle);
121
if
(!ms_track) {
continue
; }
122
123
float
momBalSig = 0.;
124
float
scatNeighSig = 0.;
125
muon->parameter(momBalSig, xAOD::Muon::ParamDef::momentumBalanceSignificance);
126
muon->parameter(scatNeighSig, xAOD::Muon::ParamDef::scatteringNeighbourSignificance);
127
128
// decorate the track
129
decor_lepton_id(*track) = -13 * muon->charge();
130
decor_muon_quality(*track) =
static_cast<
int
>
(
m_muonID_tool
->getQuality(*muon));
131
decor_muon_qOverPratio(*track) = track->qOverP() / ms_track->qOverP();
132
decor_muon_momentumBalanceSignificance(*track) = momBalSig;
133
decor_muon_scatteringNeighbourSignificance(*track) = scatNeighSig;
134
}
135
136
return
StatusCode::SUCCESS;
137
}
138
139
}
140
141
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition
Control/AthenaKernel/AthenaKernel/errorcheck.h:422
ElectronSelectorHelpers.h
ElectronxAODHelpers.h
TrackParticleContainer.h
ReadDecorHandle.h
Handle class for reading a decoration on an object.
WriteDecorHandle.h
Handle class for adding a decoration to an object.
TrackLeptonDecoratorAlg.h
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_dec_muon_qOverPratio
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_muon_qOverPratio
Definition
TrackLeptonDecoratorAlg.h:59
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_dec_lepton_id
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_lepton_id
Definition
TrackLeptonDecoratorAlg.h:55
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_electronID_tool
ToolHandle< IAsgElectronLikelihoodTool > m_electronID_tool
Definition
TrackLeptonDecoratorAlg.h:38
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_muonID_tool
ToolHandle< CP::IMuonSelectionTool > m_muonID_tool
Definition
TrackLeptonDecoratorAlg.h:41
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::initialize
virtual StatusCode initialize() override
Definition
TrackLeptonDecoratorAlg.cxx:23
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_ElectronContainerKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronContainerKey
Definition
TrackLeptonDecoratorAlg.h:47
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::execute
virtual StatusCode execute(const EventContext &) const override
Definition
TrackLeptonDecoratorAlg.cxx:59
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_dec_muon_momentumBalanceSignificance
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_muon_momentumBalanceSignificance
Definition
TrackLeptonDecoratorAlg.h:61
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_dec_muon_quality
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_muon_quality
Definition
TrackLeptonDecoratorAlg.h:57
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::TrackLeptonDecoratorAlg
TrackLeptonDecoratorAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition
TrackLeptonDecoratorAlg.cxx:19
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_dec_muon_scatteringNeighbourSignificance
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_muon_scatteringNeighbourSignificance
Definition
TrackLeptonDecoratorAlg.h:63
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_TrackContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackContainerKey
Definition
TrackLeptonDecoratorAlg.h:44
FlavorTagDiscriminants::TrackLeptonDecoratorAlg::m_MuonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_MuonContainerKey
Definition
TrackLeptonDecoratorAlg.h:50
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition
StoreGate/StoreGate/WriteDecorHandle.h:100
FlavorTagDiscriminants
Definition
CaloChargedFlowDecoratorAlg.h:15
xAOD::EgammaHelpers::getOriginalTrackParticle
const xAOD::TrackParticle * getOriginalTrackParticle(const xAOD::Electron *el)
Helper function for getting the "Original" Track Particle (i.e before GSF) via the electron.
Definition
ElectronxAODHelpers.cxx:11
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition
Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
xAOD::TrackParticleContainer
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Definition
Event/xAOD/xAODTracking/xAODTracking/TrackParticleContainer.h:14
Generated on
for ATLAS Offline Software by
1.17.0