ATLAS Offline Software
SoftElectronDecoratorAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 
10 
14 
15 
16 namespace FlavorTagDiscriminants {
17 
19  const std::string& name, ISvcLocator* loc )
20  : AthReentrantAlgorithm(name, loc) {}
21 
23  ATH_MSG_DEBUG( "Initializing " << name() << "... " );
24 
25  // Initialize Container keys
26  ATH_MSG_DEBUG( "Initializing containers:" );
29 
31  ATH_CHECK( m_VertexContainerKey.initialize() );
32 
33  // Prepare decorators
40 
41  // Initialize decorators
42  ATH_MSG_DEBUG( "Initializing decorators:" );
43  ATH_MSG_DEBUG( " ** " << m_dec_electron_et );
47  ATH_MSG_DEBUG( " ** " << m_dec_electron_z0 );
49 
56 
57  return StatusCode::SUCCESS;
58  }
59 
60  StatusCode SoftElectronDecoratorAlg::execute(const EventContext& ctx) const {
61  ATH_MSG_DEBUG( "Executing " << name() << "... " );
62 
64 
65  // read collections
67  ATH_CHECK( electrons.isValid() );
68  ATH_MSG_DEBUG( "Retrieved " << electrons->size() << " electrons..." );
70  ATH_CHECK( primary_vertices.isValid() );
71  ATH_MSG_DEBUG( "Retrieved " << primary_vertices->size() << " primary vertices..." );
72 
73  // instantiate decorators
75  SG::WriteDecorHandle<EC, float> dec_electron_deltaPOverP(m_dec_electron_deltaPOverP, ctx);
76  SG::WriteDecorHandle<EC, float> dec_electron_isoPtOverPt(m_dec_electron_isoPtOverPt, ctx);
77  SG::WriteDecorHandle<EC, float> dec_electron_energyOverP(m_dec_electron_energyOverP, ctx);
79  SG::WriteDecorHandle<EC, float> dec_electron_z0_significance(m_dec_electron_z0_significance, ctx);
80 
81  // get the primary vertex
82  const xAOD::Vertex* pv = primary(*primary_vertices);
83 
84  for (const auto el : *electrons)
85  {
86  // kinematic vars
87  float el_et = -1;
88  float el_qoverp = -1;
89  // tracking vars
90  float el_z0 = -1;
91  float el_z0_sig = -1;
92  // additional var (x1)
93  float el_iso_pt = -1;
94  // tracking dnn
95  float el_dpop = -1;
96  // kinematic vars
97  float el_pt = el->pt();
98 
99  float energy = el->caloCluster()->e();
100  auto track = el->trackParticle();
101  el_et = energy / std::cosh(track->eta());
102 
103  // tracking vars
104  el_z0 = track->z0() + (track->vz() - pv->z());
105  el_z0_sig = el_z0 / std::sqrt(track->definingParametersCovMatrixDiagVec().at(1));
106 
107  // additional vars
108  el_iso_pt = m_pt_varcone30(*el) / el_pt;
109  // tracking dnn
110  unsigned int index;
111  el_qoverp = track->qOverP();
112  if (track->indexOfParameterAtPosition(index, xAOD::LastMeasurement))
113  {
114  double refittedTrack_LMqoverp = track->charge() / std::sqrt(std::pow(track->parameterPX(index), 2) +
115  std::pow(track->parameterPY(index), 2) +
116  std::pow(track->parameterPZ(index), 2));
117  el_dpop = 1 - el_qoverp / (refittedTrack_LMqoverp);
118  }
119 
120  // kinematic var
121  dec_electron_et(*el) = el_et;
122  // track var
123  dec_electron_z0(*el) = el_z0;
124  dec_electron_z0_significance(*el) = el_z0_sig;
125  // additional var (x1)
126  dec_electron_isoPtOverPt(*el) = el_iso_pt;
127  // dnn tracking
128  dec_electron_deltaPOverP(*el) = el_dpop;
129  // track cluster
130  dec_electron_energyOverP(*el) = energy * std::abs(track->qOverP());
131  }
132  return StatusCode::SUCCESS;
133  }
134 
136  if (vertices.size() == 0) {
137  throw std::runtime_error("no primary vertices");
138  }
139  for ( const xAOD::Vertex *vertex : vertices ) {
140  if ( vertex->vertexType() == xAOD::VxType::PriVtx ) {
141  return vertex;
142  }
143  }
144  // if we find nothing else this should be the beam spot
145  return vertices.front();
146  }
147 }
148 
149 
150 
151 
FlavorTagDiscriminants
This file contains "getter" functions used for accessing tagger inputs from the EDM.
Definition: AssociationEnums.h:11
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_z0_significance
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_z0_significance
Definition: SoftElectronDecoratorAlg.h:58
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
xAOD::LastMeasurement
@ LastMeasurement
Parameter defined at the position of the last measurement.
Definition: TrackingPrimitives.h:215
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
FlavorTagDiscriminants::SoftElectronDecoratorAlg::initialize
virtual StatusCode initialize() override
Definition: SoftElectronDecoratorAlg.cxx:22
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_energyOverP
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_energyOverP
Definition: SoftElectronDecoratorAlg.h:50
EgammaxAODHelpers.h
plotIsoValidation.el_pt
el_pt
Definition: plotIsoValidation.py:163
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
ElectronContainer.h
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_deltaPOverP
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_deltaPOverP
Definition: SoftElectronDecoratorAlg.h:42
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
FlavorTagDiscriminants::SoftElectronDecoratorAlg::primary
const xAOD::Vertex * primary(const xAOD::VertexContainer &vertices) const
Definition: SoftElectronDecoratorAlg.cxx:135
WriteDecorHandle.h
Handle class for adding a decoration to an object.
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_ElectronContainerKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronContainerKey
Definition: SoftElectronDecoratorAlg.h:29
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FlavorTagDiscriminants::SoftElectronDecoratorAlg::SoftElectronDecoratorAlg
SoftElectronDecoratorAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SoftElectronDecoratorAlg.cxx:18
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
xAOD::ElectronContainer
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/ElectronContainer.h:17
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_VertexContainerKey
SG::ReadHandleKey< xAOD::VertexContainer > m_VertexContainerKey
Definition: SoftElectronDecoratorAlg.h:32
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
FlavorTagDiscriminants::SoftElectronDecoratorAlg::execute
virtual StatusCode execute(const EventContext &) const override
Definition: SoftElectronDecoratorAlg.cxx:60
SoftElectronDecoratorAlg.h
TrackParticle.h
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
DeMoScan.index
string index
Definition: DeMoScan.py:362
SG::WriteDecorHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_z0
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_z0
Definition: SoftElectronDecoratorAlg.h:54
python.changerun.pv
pv
Definition: changerun.py:81
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_et
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_et
Definition: SoftElectronDecoratorAlg.h:38
ReadDecorHandle.h
Handle class for reading a decoration on an object.
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
TRT_PAI_gasdata::EC
const float EC[NC]
Energy levels for Carbon.
Definition: TRT_PAI_gasdata.h:241
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_dec_electron_isoPtOverPt
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_isoPtOverPt
Definition: SoftElectronDecoratorAlg.h:46
FlavorTagDiscriminants::SoftElectronDecoratorAlg::m_pt_varcone30
SG::AuxElement::ConstAccessor< float > m_pt_varcone30
Definition: SoftElectronDecoratorAlg.h:62