diff --git a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py index eef79b922ce303452dbd167df147dea65a9a4a0e..2d78af8def0d58eea38c23c0750f456e4bec0419 100644 --- a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py +++ b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py @@ -297,10 +297,8 @@ def getTauVertexVariables(): VertexFitter = getTauAdaptiveVertexFitter(), #VertexFitter = "Trk::AdaptiveVertexFitter/InDetAdaptiveVxFitterTool", SeedFinder = getTauCrossDistancesSeedFinder(), - runOnAOD = bAODmode, Key_vertexInputContainer = _DefaultVertexContainer, - Key_trackPartInputContainer = _DefaultTrackContainer, # ATM only needed in case old API is used - Key_vertexOutputContainer = "TauSecondaryVertices" + Key_trackPartInputContainer = _DefaultTrackContainer # ATM only needed in case old API is used #OutputLevel = 2 ) diff --git a/Reconstruction/tauRec/python/TauRecRunConfigured.py b/Reconstruction/tauRec/python/TauRecRunConfigured.py index 8898fd34fd0d13effb0f1df0f0e3c736180a3ea3..b87bd17413cb4adb91c22c43879008fbbf34bd7c 100644 --- a/Reconstruction/tauRec/python/TauRecRunConfigured.py +++ b/Reconstruction/tauRec/python/TauRecRunConfigured.py @@ -35,7 +35,8 @@ class TauRecRunConfigured ( Configured ) : Key_tauOutputContainer="TauJets", Key_neutralPFOOutputContainer="TauPi0Clusters", Key_pi0ClusterOutputContainer="TauNeutralParticleFlowObjects", - Key_hadronicPFOOutputContainer="TauHadronicParticleFlowObjects" + Key_hadronicPFOOutputContainer="TauHadronicParticleFlowObjects", + Key_vertexOutputContainer = "TauSecondaryVertices" ) Configured.__init__(self, ignoreExistingDataObject=ignoreExistingDataObject) diff --git a/Reconstruction/tauRec/src/TauRunnerAlg.cxx b/Reconstruction/tauRec/src/TauRunnerAlg.cxx index 8dbcb24b6547bb032d2db83c76ec0637e98ca549..3ca5f355bb68bd9b72d94bb7dae5eaedb2ed3601 100644 --- a/Reconstruction/tauRec/src/TauRunnerAlg.cxx +++ b/Reconstruction/tauRec/src/TauRunnerAlg.cxx @@ -59,10 +59,10 @@ StatusCode TauRunnerAlg::initialize() { ATH_CHECK( m_neutralPFOOutputContainer.initialize() ); ATH_CHECK( m_pi0ClusterOutputContainer.initialize() ); ATH_CHECK( m_hadronicPFOOutputContainer.initialize() ); + ATH_CHECK( m_vertexOutputContainer.initialize() ); StatusCode sc; - //------------------------------------------------------------------------- // Allocate tools //------------------------------------------------------------------------- @@ -162,6 +162,15 @@ StatusCode TauRunnerAlg::execute() { SG::WriteHandle<xAOD::CaloClusterContainer> pi0CaloClusHandle( m_pi0ClusterOutputContainer ); ATH_MSG_DEBUG(" write: " << pi0CaloClusHandle.key() << " = " << "..." ); ATH_CHECK(pi0CaloClusHandle.record(std::unique_ptr<xAOD::CaloClusterContainer>{pi0CaloClusterContainer}, std::unique_ptr<xAOD::CaloClusterAuxContainer>{pi0CaloClusterAuxContainer})); + + // secondary vertices + xAOD::VertexContainer* pSecVtxContainer = new xAOD::VertexContainer(); + xAOD::VertexAuxContainer* pSecVtxAuxContainer = new xAOD::VertexAuxContainer(); + pSecVtxContainer->setStore( pSecVtxAuxContainer ); + SG::WriteHandle<xAOD::VertexContainer> vertOutHandle( m_vertexOutputContainer ); + ATH_MSG_DEBUG(" write: " << vertOutHandle.key() << " = " << "..." ); + ATH_CHECK(vertOutHandle.record(std::unique_ptr<xAOD::VertexContainer>{pSecVtxContainer}, std::unique_ptr<xAOD::VertexAuxContainer>{pSecVtxAuxContainer})); + //------------------------------------------------------------------------- // Initialize tools for this event diff --git a/Reconstruction/tauRec/tauRec/TauRunnerAlg.h b/Reconstruction/tauRec/tauRec/TauRunnerAlg.h index 190329f896f303c48d22bad8b6e0850c7b79250a..d00ca79edaf3f7e51708b22d0029c171be8e568e 100644 --- a/Reconstruction/tauRec/tauRec/TauRunnerAlg.h +++ b/Reconstruction/tauRec/tauRec/TauRunnerAlg.h @@ -21,11 +21,14 @@ #include "xAODCaloEvent/CaloClusterContainer.h" #include "xAODCaloEvent/CaloClusterAuxContainer.h" +#include "xAODTracking/VertexContainer.h" +#include "xAODTracking/VertexAuxContainer.h" /** * @brief Main class for tau candidate processing. */ + class TauRunnerAlg: public AthAlgorithm { public: @@ -55,6 +58,7 @@ class TauRunnerAlg: public AthAlgorithm 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"}; + SG::WriteHandleKey<xAOD::VertexContainer> m_vertexOutputContainer{this,"Key_vertexOutputContainer", "TauSecondaryVertices", "input vertex container key"}; }; diff --git a/Reconstruction/tauRecTools/src/TauVertexVariables.cxx b/Reconstruction/tauRecTools/src/TauVertexVariables.cxx index aeddcca4d3b58ec601c597a32f6dc1106298cb78..df3e35c66ecefc27be60ac976cfefe5c372087ae 100644 --- a/Reconstruction/tauRecTools/src/TauVertexVariables.cxx +++ b/Reconstruction/tauRecTools/src/TauVertexVariables.cxx @@ -27,13 +27,11 @@ TauVertexVariables::TauVertexVariables(const std::string &name ) : TauRecToolBase(name), m_fitTool("Trk::AdaptiveVertexFitter"), - m_SeedFinder("Trk::CrossDistancesSeedFinder"), - m_pSecVtxContainer(0), - m_pSecVtxAuxContainer(0){ + m_SeedFinder("Trk::CrossDistancesSeedFinder") +{ declareProperty("TrackToVertexIPEstimator", m_trackToVertexIPEstimator); declareProperty("VertexFitter", m_fitTool); declareProperty("SeedFinder", m_SeedFinder); - declareProperty("runOnAOD", m_AODmode=false);//AODS are input file } //----------------------------------------------------------------------------- @@ -55,7 +53,6 @@ StatusCode TauVertexVariables::initialize() { ATH_CHECK(m_vertexInputContainer.initialize() ); ATH_CHECK(m_trackPartInputContainer.initialize() ); - ATH_CHECK(m_vertexOutputContainer.initialize() ); return StatusCode::SUCCESS; } @@ -63,34 +60,12 @@ StatusCode TauVertexVariables::initialize() { StatusCode TauVertexVariables::eventInitialize() { bool inTrigger = tauEventData()->inTrigger(); - - // Only store the vertex containers if we are offline? - if(!inTrigger) - { - // Secondary Vertex Container for tau decay vertex - if(!m_AODmode){ - m_pSecVtxContainer = new xAOD::VertexContainer(); - m_pSecVtxAuxContainer = new xAOD::VertexAuxContainer(); - m_pSecVtxContainer->setStore( m_pSecVtxAuxContainer ); - - // CHECK( evtStore()->record( m_pSecVtxContainer, "TauSecondaryVertices" ) ); - // CHECK( evtStore()->record( m_pSecVtxAuxContainer, "TauSecondaryVerticesAux." ) ); - } - else { - // CHECK( evtStore()->retrieve( m_pSecVtxContainer, "TauSecondaryVertices") ); - // CHECK( evtStore()->retrieve( m_pSecVtxAuxContainer, "TauSecondaryVerticesAux.") ); - } - } - + return StatusCode::SUCCESS; } StatusCode TauVertexVariables::eventFinalize() { - - SG::WriteHandle<xAOD::VertexContainer> vertOutHandle( m_vertexOutputContainer ); - ATH_MSG_DEBUG(" write: " << vertOutHandle.key() << " = " << "..." ); - ATH_CHECK(vertOutHandle.record(std::unique_ptr<xAOD::VertexContainer>{m_pSecVtxContainer}, std::unique_ptr<xAOD::VertexAuxContainer>{m_pSecVtxAuxContainer})); return StatusCode::SUCCESS; } @@ -107,7 +82,7 @@ StatusCode TauVertexVariables::finalize() { //----------------------------------------------------------------------------- // Execution //----------------------------------------------------------------------------- -StatusCode TauVertexVariables::execute(xAOD::TauJet& pTau) { +StatusCode TauVertexVariables::executeVertexVariables(xAOD::TauJet& pTau, xAOD::VertexContainer& pSecVtxContainer) { ATH_MSG_DEBUG("executing TauVertexVariables"); @@ -233,7 +208,7 @@ StatusCode TauVertexVariables::execute(xAOD::TauJet& pTau) { xAODvertex = m_fitTool->fit(xaodTracks, seedPoint); if (xAODvertex && !inTrigger) { ATH_MSG_VERBOSE("using new xAOD API: Secondary Vertex found and recorded! x="<<xAODvertex->position().x()<< ", y="<<xAODvertex->position().y()<<", perp="<<xAODvertex->position().perp()); - m_pSecVtxContainer->push_back(xAODvertex); + pSecVtxContainer.push_back(xAODvertex); xAODvertex->setVertexType(xAOD::VxType::NotSpecified); } @@ -249,7 +224,7 @@ StatusCode TauVertexVariables::execute(xAOD::TauJet& pTau) { // Note, we only attach the 2nd vertex if at offline, otherwise, break the trigger persistency if (!inTrigger) { - pTau.setSecondaryVertex(m_pSecVtxContainer, xAODvertex); // set the link to the vertex + pTau.setSecondaryVertex(&pSecVtxContainer, xAODvertex); // set the link to the vertex } else { delete xAODvertex; // delete the vertex when in trigger mode, because we can not save it diff --git a/Reconstruction/tauRecTools/src/TauVertexVariables.h b/Reconstruction/tauRecTools/src/TauVertexVariables.h index 9a1c765c4e4bc221b09eb2e71cf7b408a1974384..76ed2e77c6db4015feb469159ad6ef533878e96b 100644 --- a/Reconstruction/tauRecTools/src/TauVertexVariables.h +++ b/Reconstruction/tauRecTools/src/TauVertexVariables.h @@ -35,11 +35,11 @@ public: ~TauVertexVariables(); virtual StatusCode initialize(); - virtual StatusCode execute(xAOD::TauJet&); + virtual StatusCode execute(xAOD::TauJet&) { return StatusCode::SUCCESS; } virtual StatusCode executeShotFinder(xAOD::TauJet&, xAOD::CaloClusterContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; } virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; } virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; } - virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; } + virtual StatusCode executeVertexVariables(xAOD::TauJet& pTau, xAOD::VertexContainer& pVertexContainer); virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; } virtual StatusCode eventInitialize(); virtual StatusCode finalize(); @@ -54,18 +54,12 @@ public: double trFlightPathSig(const xAOD::TauJet& pTau, const xAOD::Vertex& secVertex); private: - bool m_AODmode; ToolHandle< Trk::ITrackToVertexIPEstimator > m_trackToVertexIPEstimator; ToolHandle< Trk::IVertexFitter > m_fitTool; //!< Pointer to the base class of the fit algtools ToolHandle< Trk::IVertexSeedFinder > m_SeedFinder; - - xAOD::VertexContainer* m_pSecVtxContainer; - xAOD::VertexAuxContainer* m_pSecVtxAuxContainer; SG::ReadHandleKey<xAOD::VertexContainer> m_vertexInputContainer{this,"Key_vertexInputContainer", "PrimaryVertices", "input vertex container key"}; SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackPartInputContainer{this,"Key_trackPartInputContainer", "InDetTrackParticles", "input track particle container key"}; - SG::WriteHandleKey<xAOD::VertexContainer> m_vertexOutputContainer{this,"Key_vertexOutputContainer", "TauSecondaryVertices", "input vertex container key"}; - };