19 const std::string& name, ISvcLocator* loc )
49 return StatusCode::SUCCESS;
60 ATH_MSG_DEBUG(
"Retrieved " << electrons->size() <<
" electrons..." );
63 ATH_MSG_DEBUG(
"Retrieved " << primary_vertices->size() <<
" primary vertices..." );
76 for (
const auto el : *electrons)
89 float el_pt = el->pt();
91 float energy = el->caloCluster()->e();
92 auto track = el->trackParticle();
93 el_et = energy / std::cosh(track->eta());
96 el_z0 = track->z0() + (track->vz() - pv->z());
97 el_z0_sig = el_z0 / std::sqrt(track->definingParametersCovMatrixDiagVec().at(1));
103 el_qoverp = track->qOverP();
106 double refittedTrack_LMqoverp = track->charge() / std::sqrt(std::pow(track->parameterPX(
index), 2) +
107 std::pow(track->parameterPY(
index), 2) +
108 std::pow(track->parameterPZ(
index), 2));
109 el_dpop = 1 - el_qoverp / (refittedTrack_LMqoverp);
113 dec_electron_et(*el) = el_et;
115 dec_electron_z0(*el) = el_z0;
116 dec_electron_z0_significance(*el) = el_z0_sig;
118 dec_electron_isoPtOverPt(*el) = el_iso_pt;
120 dec_electron_deltaPOverP(*el) = el_dpop;
122 dec_electron_energyOverP(*el) = energy * std::abs(track->qOverP());
124 return StatusCode::SUCCESS;
128 if (vertices.
size() == 0) {
129 throw std::runtime_error(
"no primary vertices");
137 return vertices.
front();
#define ATH_CHECK
Evaluate an expression and check for errors.
Handle class for reading a decoration on an object.
Handle class for adding a decoration to an object.
An algorithm that can be simultaneously executed in multiple threads.
const T * front() const
Access the first element in the collection as an rvalue.
size_type size() const noexcept
Returns the number of elements in the collection.
SG::AuxElement::ConstAccessor< float > m_pt_varcone30
SG::ReadHandleKey< xAOD::VertexContainer > m_VertexContainerKey
const xAOD::Vertex * primary(const xAOD::VertexContainer &vertices) const
virtual StatusCode initialize() override
virtual StatusCode execute(const EventContext &) const override
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_deltaPOverP
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronContainerKey
SoftElectronDecoratorAlg(const std::string &name, ISvcLocator *pSvcLocator)
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_isoPtOverPt
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_z0
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_energyOverP
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_z0_significance
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_dec_electron_et
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Handle class for adding a decoration to an object.
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
@ LastMeasurement
Parameter defined at the position of the last measurement.