From a267543def2b78a69385e41a6ef58d9240e99f12 Mon Sep 17 00:00:00 2001 From: Jovan Mitrevski <Jovan.Mitrevski@cern.ch> Date: Mon, 29 Jan 2018 16:38:51 +0100 Subject: [PATCH] start adding isolation correction information --- .../IsolationAlgs/python/IsoGetter.py | 4 +- .../IsolationAlgs/src/IsolationBuilder.cxx | 45 ++++++++++++++----- .../IsolationAlgs/src/IsolationBuilder.h | 5 ++- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py b/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py index 4a8e4313c6e..8d5590245ff 100644 --- a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py +++ b/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py @@ -198,13 +198,13 @@ IsoTypesFe = [ IsoCorEg = [ [ isoPar.core57cells, isoPar.ptCorrection ], [ isoPar.core57cells, isoPar.ptCorrection, isoPar.pileupCorrection ], - [ isoPar.coreTrackPtr ] #still hard-coded + [ isoPar.coreTrackPtr ] ] IsoCorMu = [ #[ isoPar.coreCone ], [ isoPar.coreMuon ], [ isoPar.coreCone, isoPar.pileupCorrection ], - [ isoPar.coreTrackPtr ] #still hard-coded + [ isoPar.coreTrackPtr ] ] IsoCorFe = [ [ isoPar.coreCone, isoPar.pileupCorrection ] diff --git a/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.cxx b/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.cxx index 4d2a28d77d9..b21ca85722a 100644 --- a/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.cxx +++ b/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.cxx @@ -12,8 +12,6 @@ // Isolation includes #include "IsolationBuilder.h" - - IsolationBuilder::IsolationBuilder( const std::string& name, ISvcLocator* pSvcLocator ) : ::AthAlgorithm( name, pSvcLocator ) @@ -174,14 +172,16 @@ StatusCode IsolationBuilder::execute() return StatusCode::SUCCESS; } -IsolationBuilder::CaloIsoHelpHandles::CaloIsoHelpHandles(const IsolationBuilder::CaloIsoHelpKey& keys) +IsolationBuilder::CaloIsoHelpHandles::CaloIsoHelpHandles(const IsolationBuilder::CaloIsoHelpKey& keys) : + corrBitsetDeco(keys.corrBitsetDeco) { for (const auto& key : keys.isoDeco) { isoDeco.emplace_back(key); } } -IsolationBuilder::TrackIsoHelpHandles::TrackIsoHelpHandles(const IsolationBuilder::TrackIsoHelpKey& keys) +IsolationBuilder::TrackIsoHelpHandles::TrackIsoHelpHandles(const IsolationBuilder::TrackIsoHelpKey& keys) : + corrBitsetDeco(keys.corrBitsetDeco) { for (const auto& key : keys.isoDeco) { isoDeco.emplace_back(key); @@ -258,8 +258,17 @@ StatusCode IsolationBuilder::initializeIso(std::set<xAOD::Iso::IsolationFlavour> continue; } + std::string bitsetName = prefix + xAOD::Iso::toString(isoFlav) + "CorrBitset"; + if (customConfig != "") { + bitsetName += "_" + customConfig; + } + if (isoFlav == xAOD::Iso::etcone || isoFlav == xAOD::Iso::topoetcone || isoFlav == xAOD::Iso::neflowisol) { - + + cisoH.corrBitsetDeco = bitsetName; + ATH_CHECK(cisoH.corrBitsetDeco.initialize()); + + for (size_t corrType = 0; corrType < corInts[flavor].size(); corrType++) { const auto cor = static_cast<unsigned int>(corInts[flavor][corrType]); cisoH.CorrList.calobitset.set(cor); @@ -287,7 +296,15 @@ StatusCode IsolationBuilder::initializeIso(std::set<xAOD::Iso::IsolationFlavour> return StatusCode::FAILURE; } } else if (isoFlav == xAOD::Iso::ptcone) { - tisoH.CorrList.trackbitset.set(static_cast<unsigned int>(xAOD::Iso::coreTrackPtr)); + + tisoH.corrBitsetDeco = bitsetName; + ATH_CHECK(tisoH.corrBitsetDeco.initialize()); + + for (size_t corrType = 0; corrType < corInts[flavor].size(); corrType++) { + const auto cor = static_cast<unsigned int>(corInts[flavor][corrType]); + tisoH.CorrList.trackbitset.set(cor); + } + if (trackIsoMap) { trackIsoMap->push_back(std::make_pair(isoFlav,tisoH)); } else { @@ -336,6 +353,10 @@ StatusCode IsolationBuilder::executeCaloIso(const std::vector<std::pair<xAOD::Is ATH_MSG_DEBUG("custom Iso " << xAOD::Iso::toCString(keys.isoTypes[i]) << " = " << iso/1e3); (handles.isoDeco[i])(*part) = iso; } + // corrections + (handles.corrBitsetDeco)(*part) = keys.CorrList.calobitset.to_ulong(); + + // not that nice. I expect a single core correction (e.g. for topoetcone, not coreMuon and coreCone together...) if (keys.addCoreCorr) { SG::WriteDecorHandle<xAOD::IParticleContainer, float> coreCorisoDeco(keys.coreCorisoDeco); @@ -352,15 +373,15 @@ StatusCode IsolationBuilder::executeCaloIso(const std::vector<std::pair<xAOD::Is if (CaloIsoResult.coreCorrections[icc].find(xAOD::Iso::coreEnergy) != CaloIsoResult.coreCorrections[icc].end()) { coreCorisoDeco(*part) = CaloIsoResult.coreCorrections[icc][xAOD::Iso::coreEnergy]; } else { - ATH_MSG_WARNING("Cannot find the core energy correction for custom flavour " << xAOD::Iso::toCString(flav)); + ATH_MSG_WARNING("Cannot find the core energy correction for flavor " << xAOD::Iso::toCString(flav)); } } else { - ATH_MSG_WARNING("Cannot find the core correction for custom flavour " << xAOD::Iso::toCString(flav)); + ATH_MSG_WARNING("Cannot find the core correction for flavor " << xAOD::Iso::toCString(flav)); } } } } else { - ATH_MSG_ERROR("Call to CaloIsolationTool failed for custom flavour " << xAOD::Iso::toCString(flav)); + ATH_MSG_ERROR("Call to CaloIsolationTool failed for flavor " << xAOD::Iso::toCString(flav)); return StatusCode::RECOVERABLE; } } @@ -397,8 +418,12 @@ StatusCode IsolationBuilder::executeTrackIso(const std::vector<std::pair<xAOD::I (handles.isoDeco[i])(*part) = iso; (handles.isoDecoV[i])(*part) = isoV; } + + // corrections + (handles.corrBitsetDeco)(*part) = keys.CorrList.trackbitset.to_ulong(); + } else { - ATH_MSG_ERROR("Call to TrackIsolationTool failed for custom flavour " << xAOD::Iso::toCString(flav)); + ATH_MSG_ERROR("Call to TrackIsolationTool failed for flavor " << xAOD::Iso::toCString(flav)); return StatusCode::RECOVERABLE; } } diff --git a/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.h b/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.h index de89ad30dd5..b492985b908 100644 --- a/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.h +++ b/Reconstruction/RecoAlgs/IsolationAlgs/src/IsolationBuilder.h @@ -163,6 +163,7 @@ class IsolationBuilder SG::WriteDecorHandleKey<xAOD::IParticleContainer> coreCorisoDeco; std::vector<xAOD::Iso::IsolationType> isoTypes; xAOD::CaloCorrection CorrList; + SG::WriteDecorHandleKey<xAOD::IParticleContainer> corrBitsetDeco; }; std::vector<std::pair<xAOD::Iso::IsolationFlavour,CaloIsoHelpKey> > m_elCaloIso; @@ -175,6 +176,7 @@ class IsolationBuilder std::vector<SG::WriteDecorHandleKey<xAOD::IParticleContainer> > isoDecoV; std::vector<xAOD::Iso::IsolationType> isoTypes; xAOD::TrackCorrection CorrList; + SG::WriteDecorHandleKey<xAOD::IParticleContainer> corrBitsetDeco; }; std::vector<std::pair<xAOD::Iso::IsolationFlavour,TrackIsoHelpKey> > m_elTrackIso; @@ -186,7 +188,7 @@ class IsolationBuilder CaloIsoHelpHandles(const CaloIsoHelpKey& keys); std::vector<SG::WriteDecorHandle<xAOD::IParticleContainer, float> > isoDeco; - // SG::WriteDecorHandle<xAOD::IParticleContainer, float> coreCorisoDeco; // try moving it + SG::WriteDecorHandle<xAOD::IParticleContainer, uint32_t> corrBitsetDeco; }; @@ -196,6 +198,7 @@ class IsolationBuilder std::vector<SG::WriteDecorHandle<xAOD::IParticleContainer, float> > isoDeco; std::vector<SG::WriteDecorHandle<xAOD::IParticleContainer, float> > isoDecoV; + SG::WriteDecorHandle<xAOD::IParticleContainer, uint32_t> corrBitsetDeco; }; -- GitLab