diff --git a/Generators/GeneratorFilters/GeneratorFilters/xAODElectronFilter.h b/Generators/GeneratorFilters/GeneratorFilters/xAODElectronFilter.h index 1eb3cda3e884f03f95e49341f96e174932a37c1c..5f08fe29edde2924c14892e0915a14df0841a9cf 100644 --- a/Generators/GeneratorFilters/GeneratorFilters/xAODElectronFilter.h +++ b/Generators/GeneratorFilters/GeneratorFilters/xAODElectronFilter.h @@ -6,6 +6,7 @@ #define GENERATORFILTERS_XAODELECTRONFILTER_H #include "GeneratorModules/GenFilter.h" +#include "xAODTruth/TruthParticle.h" /// @brief Filters and looks for electrons @@ -21,10 +22,12 @@ class xAODElectronFilter : public GenFilter { public: xAODElectronFilter(const std::string& name, ISvcLocator* pSvcLocator); + virtual StatusCode filterInitialize(); virtual StatusCode filterEvent(); private: + SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthPartContKey{this, "TruthParticleContainerKey", "TruthElectrons"}; DoubleProperty m_Ptmin{this, "Ptcut", 10000.}; DoubleProperty m_EtaRange{this, "Etacut", 10.0}; diff --git a/Generators/GeneratorFilters/src/xAODElectronFilter.cxx b/Generators/GeneratorFilters/src/xAODElectronFilter.cxx index 84f1c7c25557926e40ac476c1e1ba6836d97f932..5c2b1757dd6cfce5158abd93b1dc351618c95374 100644 --- a/Generators/GeneratorFilters/src/xAODElectronFilter.cxx +++ b/Generators/GeneratorFilters/src/xAODElectronFilter.cxx @@ -14,27 +14,26 @@ xAODElectronFilter::xAODElectronFilter(const std::string &name, ISvcLocator *pSv { } +StatusCode xAODElectronFilter::filterInitialize() +{ + ATH_CHECK(m_truthPartContKey.initialize()); + return StatusCode::SUCCESS; +} + StatusCode xAODElectronFilter::filterEvent() { // Retrieve full TruthParticle container - const xAOD::TruthParticleContainer *xTruthParticleContainer; - if (evtStore()->retrieve(xTruthParticleContainer, "TruthElectrons").isFailure()) - { - ATH_MSG_ERROR("No TruthParticle collection with name " - << "TruthElectrons" - << " found in StoreGate!"); + SG::ReadHandle<xAOD::TruthParticleContainer> xTruthParticleContainer{m_truthPartContKey}; + if (!xTruthParticleContainer.isValid()) { + ATH_MSG_ERROR("No TruthParticle collection with name " << m_truthPartContKey.key() << " found in StoreGate!"); return StatusCode::FAILURE; } - unsigned int nParticles = xTruthParticleContainer->size(); - for (unsigned int iPart = 0; iPart < nParticles; ++iPart) - { - const xAOD::TruthParticle *part = (*xTruthParticleContainer)[iPart]; - - //electron + for (const xAOD::TruthParticle* part : *xTruthParticleContainer) { + //electron if (part->pt() >= m_Ptmin && part->abseta() <= m_EtaRange) return StatusCode::SUCCESS; } - + setFilterPassed(false); return StatusCode::SUCCESS; }