ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
JetTagging
FlavorTagDiscriminants
src
SoftElectronDecoratorAlg.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/SoftElectronDecoratorAlg.h
"
7
8
#include "
StoreGate/WriteDecorHandle.h
"
9
#include "
StoreGate/ReadDecorHandle.h
"
10
11
#include "
xAODTracking/TrackParticle.h
"
12
#include "
xAODEgamma/ElectronContainer.h
"
13
#include "
xAODEgamma/EgammaxAODHelpers.h
"
14
15
16
namespace
FlavorTagDiscriminants
{
17
18
SoftElectronDecoratorAlg::SoftElectronDecoratorAlg
(
19
const
std::string& name, ISvcLocator* loc )
20
:
AthReentrantAlgorithm
(name, loc) {}
21
22
StatusCode
SoftElectronDecoratorAlg::initialize
() {
23
ATH_MSG_DEBUG
(
"Initializing "
<< name() <<
"... "
);
24
25
// Initialize Container keys
26
ATH_MSG_DEBUG
(
"Initializing containers:"
);
27
ATH_MSG_DEBUG
(
" ** "
<<
m_ElectronContainerKey
);
28
ATH_MSG_DEBUG
(
" ** "
<<
m_VertexContainerKey
);
29
30
ATH_CHECK
(
m_ElectronContainerKey
.initialize() );
31
ATH_CHECK
(
m_VertexContainerKey
.initialize() );
32
33
// Initialize decorators
34
ATH_MSG_DEBUG
(
"Initializing decorators:"
);
35
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_electron_et
);
36
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_electron_deltaPOverP
);
37
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_electron_isoPtOverPt
);
38
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_electron_energyOverP
);
39
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_electron_z0
);
40
ATH_MSG_DEBUG
(
" ** "
<<
m_dec_electron_z0_significance
);
41
42
ATH_CHECK
(
m_dec_electron_et
.initialize() );
43
ATH_CHECK
(
m_dec_electron_deltaPOverP
.initialize() );
44
ATH_CHECK
(
m_dec_electron_isoPtOverPt
.initialize() );
45
ATH_CHECK
(
m_dec_electron_energyOverP
.initialize() );
46
ATH_CHECK
(
m_dec_electron_z0
.initialize() );
47
ATH_CHECK
(
m_dec_electron_z0_significance
.initialize() );
48
49
ATH_CHECK
(
m_pt_varcone30_key
.initialize() );
50
51
return
StatusCode::SUCCESS;
52
}
53
54
StatusCode
SoftElectronDecoratorAlg::execute
(
const
EventContext& ctx)
const
{
55
ATH_MSG_DEBUG
(
"Executing "
<< name() <<
"... "
);
56
57
using
EC =
xAOD::ElectronContainer
;
58
59
// read collections
60
SG::ReadHandle<EC>
electrons(
m_ElectronContainerKey
,ctx);
61
ATH_CHECK
( electrons.isValid() );
62
ATH_MSG_DEBUG
(
"Retrieved "
<< electrons->size() <<
" electrons..."
);
63
SG::ReadHandle<xAOD::VertexContainer>
primary_vertices(
m_VertexContainerKey
,ctx);
64
ATH_CHECK
( primary_vertices.
isValid
() );
65
ATH_MSG_DEBUG
(
"Retrieved "
<< primary_vertices->size() <<
" primary vertices..."
);
66
67
// instantiate decorators
68
SG::WriteDecorHandle<EC, float>
dec_electron_et(
m_dec_electron_et
, ctx);
69
SG::WriteDecorHandle<EC, float>
dec_electron_deltaPOverP(
m_dec_electron_deltaPOverP
, ctx);
70
SG::WriteDecorHandle<EC, float>
dec_electron_isoPtOverPt(
m_dec_electron_isoPtOverPt
, ctx);
71
SG::WriteDecorHandle<EC, float>
dec_electron_energyOverP(
m_dec_electron_energyOverP
, ctx);
72
SG::WriteDecorHandle<EC, float>
dec_electron_z0(
m_dec_electron_z0
, ctx);
73
SG::WriteDecorHandle<EC, float>
dec_electron_z0_significance(
m_dec_electron_z0_significance
, ctx);
74
75
SG::ReadDecorHandle<EC, float>
pt_varcone30(
m_pt_varcone30_key
, ctx);
76
77
// get the primary vertex
78
const
xAOD::Vertex
* pv =
primary
(*primary_vertices);
79
80
for
(
const
auto
el : *electrons)
81
{
82
// kinematic vars
83
float
el_et = -1;
84
float
el_qoverp = -1;
85
// tracking vars
86
float
el_z0 = -1;
87
float
el_z0_sig = -1;
88
// additional var (x1)
89
float
el_iso_pt = -1;
90
// tracking dnn
91
float
el_dpop = -1;
92
// kinematic vars
93
float
el_pt = el->pt();
94
95
float
energy = el->caloCluster()->e();
96
auto
track = el->trackParticle();
97
el_et = energy / std::cosh(track->eta());
98
99
// tracking vars
100
el_z0 = track->z0() + (track->vz() - pv->z());
101
el_z0_sig = el_z0 / std::sqrt(track->definingParametersCovMatrixDiagVec().at(1));
102
103
// additional vars
104
el_iso_pt = pt_varcone30(*el) / el_pt;
105
// tracking dnn
106
unsigned
int
index
;
107
el_qoverp = track->qOverP();
108
if
(track->indexOfParameterAtPosition(
index
,
xAOD::LastMeasurement
))
109
{
110
double
refittedTrack_LMqoverp = track->charge() / std::sqrt(std::pow(track->parameterPX(
index
), 2) +
111
std::pow(track->parameterPY(
index
), 2) +
112
std::pow(track->parameterPZ(
index
), 2));
113
el_dpop = 1 - el_qoverp / (refittedTrack_LMqoverp);
114
}
115
116
// kinematic var
117
dec_electron_et(*el) = el_et;
118
// track var
119
dec_electron_z0(*el) = el_z0;
120
dec_electron_z0_significance(*el) = el_z0_sig;
121
// additional var (x1)
122
dec_electron_isoPtOverPt(*el) = el_iso_pt;
123
// dnn tracking
124
dec_electron_deltaPOverP(*el) = el_dpop;
125
// track cluster
126
dec_electron_energyOverP(*el) = energy * std::abs(track->qOverP());
127
}
128
return
StatusCode::SUCCESS;
129
}
130
131
const
xAOD::Vertex
*
SoftElectronDecoratorAlg::primary
(
const
xAOD::VertexContainer
& vertices)
const
{
132
if
(vertices.
size
() == 0) {
133
throw
std::runtime_error(
"no primary vertices"
);
134
}
135
for
(
const
xAOD::Vertex
*vertex : vertices ) {
136
if
( vertex->vertexType() ==
xAOD::VxType::PriVtx
) {
137
return
vertex;
138
}
139
}
140
// if we find nothing else this should be the beam spot
141
return
vertices.
front
();
142
}
143
}
144
145
146
147
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
EgammaxAODHelpers.h
ElectronContainer.h
TrackParticle.h
SoftElectronDecoratorAlg.h
ReadDecorHandle.h
Handle class for reading a decoration on an object.
WriteDecorHandle.h
Handle class for adding a decoration to an object.
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
DataVector::front
const T * front() const
Access the first element in the collection as an rvalue.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_VertexContainerKey
SG::ReadHandleKey< xAOD::VertexContainer > m_VertexContainerKey
Definition
SoftElectronDecoratorAlg.h:32
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_pt_varcone30_key
SG::ReadDecorHandleKey< xAOD::ElectronContainer > m_pt_varcone30_key
Definition
SoftElectronDecoratorAlg.h:62
FlavorTagDiscriminants::SoftElectronDecoratorAlg::primary
const xAOD::Vertex * primary(const xAOD::VertexContainer &vertices) const
Definition
SoftElectronDecoratorAlg.cxx:131
FlavorTagDiscriminants::SoftElectronDecoratorAlg::initialize
virtual StatusCode initialize() override
Definition
SoftElectronDecoratorAlg.cxx:22
FlavorTagDiscriminants::SoftElectronDecoratorAlg::execute
virtual StatusCode execute(const EventContext &) const override
Definition
SoftElectronDecoratorAlg.cxx:54
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_deltaPOverP
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_deltaPOverP
Definition
SoftElectronDecoratorAlg.h:42
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_ElectronContainerKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronContainerKey
Definition
SoftElectronDecoratorAlg.h:29
FlavorTagDiscriminants::SoftElectronDecoratorAlg::SoftElectronDecoratorAlg
SoftElectronDecoratorAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition
SoftElectronDecoratorAlg.cxx:18
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_isoPtOverPt
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_isoPtOverPt
Definition
SoftElectronDecoratorAlg.h:46
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_z0
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_z0
Definition
SoftElectronDecoratorAlg.h:54
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_energyOverP
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_energyOverP
Definition
SoftElectronDecoratorAlg.h:50
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_z0_significance
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_z0_significance
Definition
SoftElectronDecoratorAlg.h:58
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_et
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_et
Definition
SoftElectronDecoratorAlg.h:38
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition
StoreGate/StoreGate/ReadDecorHandle.h:94
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
index
Definition
index.py:1
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition
TrackingPrimitives.h:590
xAOD::ElectronContainer
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
Definition
Event/xAOD/xAODEgamma/xAODEgamma/ElectronContainer.h:17
xAOD::VertexContainer
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Definition
VertexContainer.h:14
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition
Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
xAOD::LastMeasurement
@ LastMeasurement
Parameter defined at the position of the last measurement.
Definition
TrackingPrimitives.h:216
Generated on
for ATLAS Offline Software by
1.17.0