diff --git a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py index 87d0f6a7782a22a4b3669831e043b1526ad86873..5d3302dabf45d24eb5dac3f3a3ba0225e2234a7b 100644 --- a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py +++ b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py @@ -403,11 +403,11 @@ def getPi0ClusterCreator(): from tauRecTools.tauRecToolsConf import TauPi0ClusterCreator TauPi0ClusterCreator = TauPi0ClusterCreator(name = _name, - InputPi0ClusterContainerName = 'TauPi0SubtractedClusters', - OutputPi0ClusterContainerName = 'TauPi0Clusters', - NeutralPFOContainerName= 'TauNeutralParticleFlowObjects', - HadronicClusterPFOContainerName = 'TauHadronicParticleFlowObjects', - ) + Key_Pi0ClusterContainer="TauPi0SubtractedClusters", + Key_neutralPFOOutputContainer="TauPi0Clusters", + Key_pi0ClusterOutputContainer="TauNeutralParticleFlowObjects", + Key_hadronicPFOOutputContainer="TauHadronicParticleFlowObjects" + ) cached_instances[_name] = TauPi0ClusterCreator return TauPi0ClusterCreator diff --git a/Reconstruction/tauRec/python/TauRecBuilder.py b/Reconstruction/tauRec/python/TauRecBuilder.py index a70aab4785eecd96a56e6ea07550b39f1ca74869..9d2d81af79df29f7af29a410adff45bbb3324107 100644 --- a/Reconstruction/tauRec/python/TauRecBuilder.py +++ b/Reconstruction/tauRec/python/TauRecBuilder.py @@ -138,8 +138,14 @@ class TauRecCoreBuilder ( TauRecConfigured ) : #tools.append(tauRec.TauConversionAlgorithms.getPhotonConversionTool()) #tools.append(tauRec.TauConversionAlgorithms.getTauConversionFinderTool()) - #tools.append(taualgs.getContainerLock()) + # tools.append(taualgs.getContainerLock()) + ### TauRecPi0EflowProcessor ### + # Tools in this section were originally in TauRecPi0EflowProcessor + if self.doPi0Clus: tools.append(taualgs.getPi0ClusterCreator()) + + ############################### + from tauRec.tauRecFlags import tauFlags tools+=tauFlags.tauRecToolsDevToolList() TauRecConfigured.AddToolsToToolSvc(self, tools) diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx index 622969b5d67b334ab6af84363b880f871c28cc8f..4b7da959f337c1bdc458fc87d055362361b8c04d 100644 --- a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx +++ b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx @@ -29,22 +29,14 @@ using std::string; TauPi0ClusterCreator::TauPi0ClusterCreator( const string& name) : TauRecToolBase(name) - , m_inputPi0ClusterContainerName("TauPi0SubtractedClusters") - , m_outputPi0ClusterContainerName("TauPi0Clusters") , m_neutralPFOContainer(0) - , m_neutralPFOContainerName("TauNeutralParticleFlowObjects") , m_neutralPFOAuxStore(0) , m_hadronicClusterPFOContainer(0) - , m_hadronicClusterPFOContainerName("TauHadronicParticleFlowObjects") , m_hadronicClusterPFOAuxStore(0) , m_clusterEtCut(500.) - , m_pOutputPi0CaloClusterContainer(0) + , m_pi0CaloClusterContainer(0) + , m_pi0CaloClusterAuxContainer(0) { - - declareProperty("InputPi0ClusterContainerName", m_inputPi0ClusterContainerName); - declareProperty("OutputPi0ClusterContainerName", m_outputPi0ClusterContainerName); - declareProperty("NeutralPFOContainerName", m_neutralPFOContainerName); - declareProperty("HadronicClusterPFOContainerName", m_hadronicClusterPFOContainerName); declareProperty("ClusterEtCut", m_clusterEtCut); declareProperty("AODMode", m_AODmode=false); } @@ -60,7 +52,13 @@ TauPi0ClusterCreator::~TauPi0ClusterCreator() StatusCode TauPi0ClusterCreator::initialize() { - return StatusCode::SUCCESS; + + ATH_CHECK( m_pi0ClusterInputContainer.initialize() ); + ATH_CHECK( m_neutralPFOOutputContainer.initialize() ); + ATH_CHECK( m_pi0ClusterOutputContainer.initialize() ); + ATH_CHECK( m_hadronicPFOOutputContainer.initialize() ); + + return StatusCode::SUCCESS; } StatusCode TauPi0ClusterCreator::finalize() @@ -73,44 +71,27 @@ StatusCode TauPi0ClusterCreator::eventInitialize() // create new CaloClusterContainer // this container will later persistified // so it will get ownership of the objects - ATH_MSG_VERBOSE("record container " << m_outputPi0ClusterContainerName); //--------------------------------------------------------------------- // Create container for Pi0 //--------------------------------------------------------------------- - m_pOutputPi0CaloClusterContainer = CaloClusterStoreHelper::makeContainer(&*evtStore(), - m_outputPi0ClusterContainerName, - msg() - ); + m_pi0CaloClusterContainer = new xAOD::CaloClusterContainer(); + m_pi0CaloClusterAuxContainer = new xAOD::CaloClusterAuxContainer(); + m_pi0CaloClusterContainer->setStore(m_pi0CaloClusterAuxContainer); + //--------------------------------------------------------------------- // Create neutral PFO container //--------------------------------------------------------------------- - if(!m_AODmode){ - m_neutralPFOContainer = new xAOD::PFOContainer(); - m_neutralPFOAuxStore = new xAOD::PFOAuxContainer(); - m_neutralPFOContainer->setStore(m_neutralPFOAuxStore); - CHECK( evtStore()->record(m_neutralPFOContainer, m_neutralPFOContainerName ) ); - CHECK( evtStore()->record( m_neutralPFOAuxStore, m_neutralPFOContainerName + "Aux." ) ); - } - else { - CHECK( evtStore()->retrieve(m_neutralPFOContainer, m_neutralPFOContainerName) ); - CHECK( evtStore()->retrieve(m_neutralPFOAuxStore, m_neutralPFOContainerName+"Aux.") ); - } + m_neutralPFOContainer = new xAOD::PFOContainer(); + m_neutralPFOAuxStore = new xAOD::PFOAuxContainer(); + m_neutralPFOContainer->setStore(m_neutralPFOAuxStore); //--------------------------------------------------------------------- // Create hadronic cluster PFO container //--------------------------------------------------------------------- - if(!m_AODmode){ - m_hadronicClusterPFOContainer = new xAOD::PFOContainer(); - m_hadronicClusterPFOAuxStore = new xAOD::PFOAuxContainer(); - m_hadronicClusterPFOContainer->setStore(m_hadronicClusterPFOAuxStore); - CHECK( evtStore()->record(m_hadronicClusterPFOContainer, m_hadronicClusterPFOContainerName ) ); - CHECK( evtStore()->record( m_hadronicClusterPFOAuxStore, m_hadronicClusterPFOContainerName + "Aux." ) ); - } - else{ - CHECK( evtStore()->record(m_hadronicClusterPFOContainer, m_hadronicClusterPFOContainerName) ); - CHECK( evtStore()->record(m_hadronicClusterPFOAuxStore, m_hadronicClusterPFOContainerName + "Aux.") ); - } + m_hadronicClusterPFOContainer = new xAOD::PFOContainer(); + m_hadronicClusterPFOAuxStore = new xAOD::PFOAuxContainer(); + m_hadronicClusterPFOContainer->setStore(m_hadronicClusterPFOAuxStore); return StatusCode::SUCCESS; } @@ -140,7 +121,12 @@ StatusCode TauPi0ClusterCreator::execute(xAOD::TauJet& pTau) // retrieve the CaloClusterContainer created by the CaloClusterMaker //--------------------------------------------------------------------- const xAOD::CaloClusterContainer *pPi0ClusterContainer; - CHECK( evtStore()->retrieve(pPi0ClusterContainer, m_inputPi0ClusterContainerName) ); + SG::ReadHandle<xAOD::CaloClusterContainer> pi0ClusterInHandle( m_pi0ClusterInputContainer ); + if (!pi0ClusterInHandle.isValid()) { + ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << pi0ClusterInHandle.key()); + return StatusCode::FAILURE; + } + pPi0ClusterContainer = pi0ClusterInHandle.cptr(); //--------------------------------------------------------------------- // TODO: May want to use tau vertex in the future to calculate some cluster moments (DELTA_THETA, etc.). @@ -176,7 +162,7 @@ StatusCode TauPi0ClusterCreator::execute(xAOD::TauJet& pTau) xAOD::CaloCluster* pPi0Cluster = new xAOD::CaloCluster( *(*clusterItr) ); // store pi0 calo cluster in the output container - m_pOutputPi0CaloClusterContainer->push_back(pPi0Cluster); + m_pi0CaloClusterContainer->push_back(pPi0Cluster); // Calculate input variables for fake supression. // Do this before applying the vertex correction, @@ -235,7 +221,7 @@ StatusCode TauPi0ClusterCreator::execute(xAOD::TauJet& pTau) // Set PFO variables ElementLink<xAOD::CaloClusterContainer> clusElementLink; - clusElementLink.toContainedElement( *m_pOutputPi0CaloClusterContainer, pPi0Cluster ); + clusElementLink.toContainedElement( *m_pi0CaloClusterContainer, pPi0Cluster ); neutralPFO->setClusterLink( clusElementLink ); neutralPFO->setP4( (float) pPi0Cluster->pt(), (float) pPi0Cluster->eta(), (float) pPi0Cluster->phi(), (float) pPi0Cluster->m()); @@ -302,10 +288,25 @@ StatusCode TauPi0ClusterCreator::eventFinalize() //---------------------------------------------------------------------- // Register cluster container in StoreGate //---------------------------------------------------------------------- - CHECK( CaloClusterStoreHelper::finalizeClusters(&(*evtStore()), - m_pOutputPi0CaloClusterContainer, - m_outputPi0ClusterContainerName, - msg())); + //CHECK( CaloClusterStoreHelper::finalizeClusters(&(*evtStore()), + //m_pOutputPi0CaloClusterContainer, + // m_outputPi0ClusterContainerName, + // msg())); + + // write PFO container + SG::WriteHandle<xAOD::PFOContainer> neutralPFOHandle( m_neutralPFOOutputContainer ); + ATH_MSG_INFO(" write: " << neutralPFOHandle.key() << " = " << "..." ); + ATH_CHECK(neutralPFOHandle.record(std::unique_ptr<xAOD::PFOContainer>{m_neutralPFOContainer}, std::unique_ptr<xAOD::PFOAuxContainer>{m_neutralPFOAuxStore})); + + // write PFO container + SG::WriteHandle<xAOD::PFOContainer> hadronicPFOHandle( m_hadronicPFOOutputContainer ); + ATH_MSG_INFO(" write: " << hadronicPFOHandle.key() << " = " << "..." ); + ATH_CHECK(hadronicPFOHandle.record(std::unique_ptr<xAOD::PFOContainer>{m_hadronicClusterPFOContainer}, std::unique_ptr<xAOD::PFOAuxContainer>{m_hadronicClusterPFOAuxStore})); + + // write calo cluster + SG::WriteHandle<xAOD::CaloClusterContainer> pi0ClusHandle( m_pi0ClusterOutputContainer ); + ATH_MSG_INFO(" write: " << pi0ClusHandle.key() << " = " << "..." ); + ATH_CHECK(pi0ClusHandle.record(std::unique_ptr<xAOD::CaloClusterContainer>{m_pi0CaloClusterContainer}, std::unique_ptr<xAOD::CaloClusterAuxContainer>{m_pi0CaloClusterAuxContainer})); return StatusCode::SUCCESS; } diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h index f6d7d6153d16b4e0d966abf413025b617fab62ac..f4ff1daaa1a8822641e10a10e578176ebb60b6a6 100644 --- a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h +++ b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h @@ -1,4 +1,4 @@ -/* +1;4205;0c/* Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ @@ -9,6 +9,7 @@ #include <vector> #include "tauRecTools/TauRecToolBase.h" #include "xAODPFlow/PFOAuxContainer.h" +#include "xAODCaloEvent/CaloClusterAuxContainer.h" /** @@ -66,22 +67,12 @@ private: /** @brief get hadronic cluster PFOs*/ bool setHadronicClusterPFOs(xAOD::TauJet& pTau); - /** @brief input cluster container of pi0 candidates */ - // TODO: input cluster container name - std::string m_inputPi0ClusterContainerName; - - /** @brief output cluster container of pi0 candidates */ - // TODO: output cluster container name - std::string m_outputPi0ClusterContainerName; - - /** @brief new neutral PFO container and name */ + /** @brief new neutral PFO container */ xAOD::PFOContainer* m_neutralPFOContainer; - std::string m_neutralPFOContainerName; xAOD::PFOAuxContainer* m_neutralPFOAuxStore; - /** @brief new hadronic cluster PFO container and name */ + /** @brief new hadronic cluster PFO container */ xAOD::PFOContainer* m_hadronicClusterPFOContainer; - std::string m_hadronicClusterPFOContainerName; xAOD::PFOAuxContainer* m_hadronicClusterPFOAuxStore; @@ -92,7 +83,14 @@ private: bool m_AODmode; /** @brief output cluster container */ - xAOD::CaloClusterContainer* m_pOutputPi0CaloClusterContainer; + xAOD::CaloClusterContainer* m_pi0CaloClusterContainer; + xAOD::CaloClusterAuxContainer* m_pi0CaloClusterAuxContainer; + + + SG::ReadHandleKey<xAOD::CaloClusterContainer> m_pi0ClusterInputContainer{this,"Key_Pi0ClusterContainer", "TauPi0SubtractedClusters", "input pi0 cluster"}; + SG::WriteHandleKey<xAOD::PFOContainer> m_neutralPFOOutputContainer{this,"Key_neutralPFOOutputContainer", "TauNeutralParticleFlowObjects", "tau neutral pfo out key"}; + SG::WriteHandleKey<xAOD::CaloClusterContainer> m_pi0ClusterOutputContainer{this,"Key_pi0ClusterOutputContainer", "TauPi0Clusters", "tau pi0cluster output"}; + SG::WriteHandleKey<xAOD::PFOContainer> m_hadronicPFOOutputContainer{this,"Key_hadronicPFOOutputContainer", "TauHadronicParticleFlowObjects", "tau hadronic pfo out key"}; };