diff --git a/Reconstruction/tauRec/python/tauRecFlags.py b/Reconstruction/tauRec/python/tauRecFlags.py index fef5f98b99b6b5e7fbf646d50b3c6b9a62cacc70..3e9f8fa0b4e9f312581eb5fc34d6903762a213bf 100644 --- a/Reconstruction/tauRec/python/tauRecFlags.py +++ b/Reconstruction/tauRec/python/tauRecFlags.py @@ -88,7 +88,7 @@ class tauRecRNNTrackClassificationConfig(JobProperty): """ statusOn=True allowedTypes=['string'] - StoredValue=["TauTrackRNN_offline_BLSTM_v1.json"] + StoredValue=["TauTrackRNN_LSTM_L40_Sum_v0.json"] class tauRecSeedMaxEta(JobProperty): """ max allowed abs_eta of jet seed diff --git a/Reconstruction/tauRec/src/TauProcessorAlg.cxx b/Reconstruction/tauRec/src/TauProcessorAlg.cxx index c14f633e7f5a762679ba449eeca0c7b868b20248..bcfd12998e958f5ad6e059db524cfaa643da23ca 100644 --- a/Reconstruction/tauRec/src/TauProcessorAlg.cxx +++ b/Reconstruction/tauRec/src/TauProcessorAlg.cxx @@ -173,9 +173,6 @@ StatusCode TauProcessorAlg::execute() { xAOD::TauJet* pTau = new xAOD::TauJet(); pContainer->push_back( pTau ); pTau->setJet(pSeedContainer, pSeed); - - // This sets one track and link. Need to have at least 1 track linked to retrieve track container - setEmptyTauTrack(pTau, pTauTrackCont); //----------------------------------------------------------------- // Loop stops when Failure indicated by one of the tools @@ -184,16 +181,22 @@ StatusCode TauProcessorAlg::execute() { for (ToolHandle<ITauToolBase>& tool : m_tools) { ATH_MSG_DEBUG("ProcessorAlg Invoking tool " << tool->name()); - if (tool->type() == "TauVertexFinder" ) { - sc = tool->executeVertexFinder(*pTau); - } - else if ( tool->type() == "TauTrackFinder") { - sc = tool->executeTrackFinder(*pTau); - } - else if ( tool->name().find("ShotFinder") != std::string::npos){ + if (tool->type() == "TauVertexFinder" ) { + sc = tool->executeVertexFinder(*pTau); + } + else if ( tool->type() == "TauTrackFinder") { + sc = tool->executeTrackFinder(*pTau, *pTauTrackCont); + } + else if ( tool->type() == "tauRecTools::TauTrackClassifier") { + sc = tool->executeTrackClassifier(*pTau, *pTauTrackCont); + } + else if ( tool->type() == "tauRecTools::TauTrackRNNClassifier") { + sc = tool->executeRNNTrackClassifier(*pTau, *pTauTrackCont); + } + else if ( tool->type() == "TauShotFinder"){ sc = tool->executeShotFinder(*pTau, *tauShotClusContainer, *tauShotPFOContainer); } - else if ( tool->name().find("Pi0ClusterFinder") != std::string::npos){ + else if ( tool->type() == "TauPi0CreateROI"){ sc = tool->executePi0CreateROI(*pTau, *Pi0CellContainer, addedCellsMap); } else { @@ -227,15 +230,3 @@ StatusCode TauProcessorAlg::execute() { return StatusCode::SUCCESS; } -void TauProcessorAlg::setEmptyTauTrack(xAOD::TauJet* &pTau, - xAOD::TauTrackContainer* tauTrackContainer) -{ - // Make a new tau track, add to container - xAOD::TauTrack* pTrack = new xAOD::TauTrack(); - tauTrackContainer->push_back(pTrack); - - // Create an element link for that track - ElementLink<xAOD::TauTrackContainer> linkToTauTrack; - linkToTauTrack.toContainedElement(*tauTrackContainer, pTrack); - pTau->addTauTrackLink(linkToTauTrack); -} diff --git a/Reconstruction/tauRec/src/TauRunnerAlg.cxx b/Reconstruction/tauRec/src/TauRunnerAlg.cxx index eccf6f11699f8fab98d3d1fa0a26ee9d89da81b6..9932035bf7879987ae02b1e6007b680c2edc7699 100644 --- a/Reconstruction/tauRec/src/TauRunnerAlg.cxx +++ b/Reconstruction/tauRec/src/TauRunnerAlg.cxx @@ -175,22 +175,22 @@ StatusCode TauRunnerAlg::execute() { for (ToolHandle<ITauToolBase>& tool : m_tools) { ATH_MSG_DEBUG("RunnerAlg Invoking tool " << tool->name()); - if ( tool->name().find("Pi0ClusterCreator") != std::string::npos){ - sc = tool->executePi0ClusterCreator(*pTau, *neutralPFOContainer, *hadronicClusterPFOContainer, *pi0CaloClusterContainer, *pPi0ClusterContainer); - } - else if ( tool->name().find("VertexVariables") != std::string::npos){ + if ( tool->type() == "TauPi0ClusterCreator"){ + sc = tool->executePi0ClusterCreator(*pTau, *neutralPFOContainer, *hadronicClusterPFOContainer, *pi0CaloClusterContainer, *pPi0ClusterContainer); + } + else if ( tool->type() == "TauVertexVariables"){ sc = tool->executeVertexVariables(*pTau, *pSecVtxContainer); } - else if ( tool->name().find("Pi0ClusterScaler") != std::string::npos){ + else if ( tool->type() == "TauPi0ClusterScaler"){ sc = tool->executePi0ClusterScaler(*pTau, *neutralPFOContainer, *chargedPFOContainer); } - else if ( tool->name().find("Pi0ScoreCalculator") != std::string::npos){ + else if ( tool->type() == "TauPi0ScoreCalculator"){ sc = tool->executePi0nPFO(*pTau, *neutralPFOContainer); } - else if ( tool->name().find("Pi0Selector") != std::string::npos){ + else if ( tool->type() == "TauPi0Selector"){ sc = tool->executePi0nPFO(*pTau, *neutralPFOContainer); } - else if ( tool->name().find("PanTau") != std::string::npos){ + else if ( tool->type() == "PanTau::PanTauProcessor"){ sc = tool->executePanTau(*pTau, *pi0Container); } else { diff --git a/Reconstruction/tauRecTools/Root/TauRecToolBase.cxx b/Reconstruction/tauRecTools/Root/TauRecToolBase.cxx index bb42ed93834101d2ea4bf72432c09d651f88554b..a04300b96c7d7051940ffcbaf02a9fb4c6fb7e9f 100644 --- a/Reconstruction/tauRecTools/Root/TauRecToolBase.cxx +++ b/Reconstruction/tauRecTools/Root/TauRecToolBase.cxx @@ -154,7 +154,17 @@ StatusCode TauRecToolBase::executeVertexFinder(xAOD::TauJet&, const xAOD::Vertex return StatusCode::FAILURE; } -StatusCode TauRecToolBase::executeTrackFinder(xAOD::TauJet&, const xAOD::TrackParticleContainer*) { +StatusCode TauRecToolBase::executeTrackFinder(xAOD::TauJet&, xAOD::TauTrackContainer&, const xAOD::TrackParticleContainer*) { + ATH_MSG_ERROR("function not implemented"); + return StatusCode::FAILURE; +} + +StatusCode TauRecToolBase::executeTrackClassifier(xAOD::TauJet&, xAOD::TauTrackContainer&) const{ + ATH_MSG_ERROR("function not implemented"); + return StatusCode::FAILURE; +} + +StatusCode TauRecToolBase::executeRNNTrackClassifier(xAOD::TauJet&, xAOD::TauTrackContainer&){ ATH_MSG_ERROR("function not implemented"); return StatusCode::FAILURE; } diff --git a/Reconstruction/tauRecTools/Root/TauTrackClassifier.cxx b/Reconstruction/tauRecTools/Root/TauTrackClassifier.cxx index 04fd8719b09beabaacaed80e73be60f0466a8768..707628fa60318be4074d8b67033fcf45c0c9de9f 100644 --- a/Reconstruction/tauRecTools/Root/TauTrackClassifier.cxx +++ b/Reconstruction/tauRecTools/Root/TauTrackClassifier.cxx @@ -61,20 +61,11 @@ StatusCode TauTrackClassifier::finalize() return StatusCode::SUCCESS; } - + //______________________________________________________________________________ -StatusCode TauTrackClassifier::execute(xAOD::TauJet& xTau) const +StatusCode TauTrackClassifier::executeTrackClassifier(xAOD::TauJet& xTau, xAOD::TauTrackContainer& tauTrackCon) const { - // Get track container via link from tau - instead of using read handle (not written to store yet) - // Check that size > 0 - ElementLink< xAOD::TauTrackContainer > link; - xAOD::TauTrackContainer* tauTrackCon = 0; - if (xTau.allTauTrackLinks().size() > 0) { - link = xTau.allTauTrackLinks().at(0);//we don't care about this specific link, just the container - tauTrackCon = link.getDataNonConstPtr(); - } - - std::vector<xAOD::TauTrack*> vTracks = xAOD::TauHelpers::allTauTracksNonConst(&xTau, tauTrackCon); + std::vector<xAOD::TauTrack*> vTracks = xAOD::TauHelpers::allTauTracksNonConst(&xTau, &tauTrackCon); for (xAOD::TauTrack* xTrack : vTracks) { // reset all track flags and set status to unclassified diff --git a/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx b/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx index 7845aec15cbc45b568b2f91b6d6e898536011cef..57c393848427a5c686151a7dcd1c0caf6e2a03ba 100644 --- a/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx +++ b/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx @@ -46,18 +46,9 @@ StatusCode TauTrackRNNClassifier::initialize() } //______________________________________________________________________________ -StatusCode TauTrackRNNClassifier::execute(xAOD::TauJet& xTau) const -{ - // Get track container via link from tau - instead of using read handle (not written to store yet) - // Check that size > 0 - ElementLink< xAOD::TauTrackContainer > link; - xAOD::TauTrackContainer* tauTrackCon = nullptr; - if (xTau.allTauTrackLinks().size() > 0) { - link = xTau.allTauTrackLinks().at(0); //we don't care about this specific link, just the container - tauTrackCon = link.getDataNonConstPtr(); - } - - std::vector<xAOD::TauTrack*> vTracks = xAOD::TauHelpers::allTauTracksNonConst(&xTau, tauTrackCon); +StatusCode TauTrackRNNClassifier::executeRNNTrackClassifier(xAOD::TauJet& xTau, xAOD::TauTrackContainer& tauTrackCon){ + + std::vector<xAOD::TauTrack*> vTracks = xAOD::TauHelpers::allTauTracksNonConst(&xTau, &tauTrackCon); for (xAOD::TauTrack* xTrack : vTracks) { diff --git a/Reconstruction/tauRecTools/src/TauTrackFinder.cxx b/Reconstruction/tauRecTools/src/TauTrackFinder.cxx index 587dbc7a97fb9a8490e074eed0a302e887543ef2..ef2c932447b497e2701a93f9a30f41fbad5db8ec 100644 --- a/Reconstruction/tauRecTools/src/TauTrackFinder.cxx +++ b/Reconstruction/tauRecTools/src/TauTrackFinder.cxx @@ -47,15 +47,7 @@ StatusCode TauTrackFinder::finalize() { } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::TrackParticleContainer* trackContainer) { - - ElementLink< xAOD::TauTrackContainer > link = pTau.allTauTrackLinksNonConst().at(0);//we don't care about this specific link, just the container - xAOD::TauTrackContainer* tauTrackCon = link.getDataNonConstPtr(); - - // Added an empty track and link in the processor alg, required so that the above will work for the very first tau - // Does that once per tau in the processor alg, so remove the last track and link once per tau here - (&(pTau.allTauTrackLinksNonConst()) )->pop_back(); - tauTrackCon->pop_back(); +StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackCon, const xAOD::TrackParticleContainer* trackContainer) { std::vector<const xAOD::TrackParticle*> tauTracks; std::vector<const xAOD::TrackParticle*> wideTracks; @@ -99,7 +91,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::Tr { alreadyUsed = false; //loop over all up-to-now core tracks - for( const xAOD::TauTrack* tau_trk : (*tauTrackCon) ) { + for( const xAOD::TauTrack* tau_trk : (tauTrackCon) ) { if(! tau_trk->flagWithMask( (1<<xAOD::TauJetParameters::TauTrackFlag::coreTrack) | (1<<xAOD::TauJetParameters::TauTrackFlag::passTrkSelector))) continue; //originally it was coreTrack&passTrkSelector if( (*track_it) == tau_trk->track()) alreadyUsed = true; } @@ -123,7 +115,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::Tr charge += trackParticle->charge(); xAOD::TauTrack* track = new xAOD::TauTrack(); - tauTrackCon->push_back(track); + tauTrackCon.push_back(track); ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle; linkToTrackParticle.toContainedElement(*trackParticleCont, trackParticle); @@ -137,7 +129,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::Tr track->setFlag(xAOD::TauJetParameters::TauTrackFlag::unclassified, true); ElementLink<xAOD::TauTrackContainer> linkToTauTrack; - linkToTauTrack.toContainedElement(*tauTrackCon, track); + linkToTauTrack.toContainedElement(tauTrackCon, track); pTau.addTauTrackLink(linkToTauTrack); ATH_MSG_VERBOSE(name() << " added core track nr: " << i @@ -157,7 +149,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::Tr ); xAOD::TauTrack* track = new xAOD::TauTrack(); - tauTrackCon->push_back(track); + tauTrackCon.push_back(track); ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle; linkToTrackParticle.toContainedElement(*trackParticleCont, trackParticle); @@ -172,7 +164,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::Tr track->setFlag(xAOD::TauJetParameters::TauTrackFlag::unclassified, true); ElementLink<xAOD::TauTrackContainer> linkToTauTrack; - linkToTauTrack.toContainedElement(*tauTrackCon, track); + linkToTauTrack.toContainedElement(tauTrackCon, track); pTau.addTauTrackLink(linkToTauTrack); } @@ -190,7 +182,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::Tr ); xAOD::TauTrack* track = new xAOD::TauTrack(); - tauTrackCon->push_back(track); + tauTrackCon.push_back(track); ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle; linkToTrackParticle.toContainedElement(*trackParticleCont, trackParticle); @@ -203,7 +195,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, const xAOD::Tr track->setFlag(xAOD::TauJetParameters::TauTrackFlag::unclassified, true); ElementLink<xAOD::TauTrackContainer> linkToTauTrack; - linkToTauTrack.toContainedElement(*tauTrackCon, track); + linkToTauTrack.toContainedElement(tauTrackCon, track); pTau.addTauTrackLink(linkToTauTrack); } diff --git a/Reconstruction/tauRecTools/src/TauTrackFinder.h b/Reconstruction/tauRecTools/src/TauTrackFinder.h index 1dc276a568e23410a2c3b999ff1af17b1def3531..bd84a382d880a9734510e43db40bf59dc8d11fff 100644 --- a/Reconstruction/tauRecTools/src/TauTrackFinder.h +++ b/Reconstruction/tauRecTools/src/TauTrackFinder.h @@ -58,7 +58,7 @@ public: //! Algorithm functions //------------------------------------------------------------- virtual StatusCode initialize() override; - virtual StatusCode executeTrackFinder(xAOD::TauJet& pTau, const xAOD::TrackParticleContainer* trackContainer = nullptr) override; + virtual StatusCode executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackCon, const xAOD::TrackParticleContainer* trackContainer = nullptr) override; virtual StatusCode finalize() override; private: diff --git a/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h b/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h index 93d406be781993efde06f33c97e2e8bf2531a2ab..56c467c91b88185359fb772f9aeb2b88a2423593 100644 --- a/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h +++ b/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h @@ -51,7 +51,9 @@ class ITauToolBase : virtual public asg::IAsgTool virtual StatusCode executeVertexFinder(xAOD::TauJet& pTau, const xAOD::VertexContainer* vertexContainer = nullptr, const xAOD::TrackParticleContainer* trackContainer = nullptr) = 0; - virtual StatusCode executeTrackFinder(xAOD::TauJet& pTau, const xAOD::TrackParticleContainer* trackContainer = nullptr) = 0; + virtual StatusCode executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer, const xAOD::TrackParticleContainer* trackContainer = nullptr) = 0; + virtual StatusCode executeTrackClassifier(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer) const = 0; + virtual StatusCode executeRNNTrackClassifier(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer) = 0; virtual StatusCode executeShotFinder(xAOD::TauJet& pTau, xAOD::CaloClusterContainer& shotClusterContainer, xAOD::PFOContainer& PFOContainer ) = 0; #ifndef XAOD_ANALYSIS virtual StatusCode executePi0CreateROI(xAOD::TauJet& pTau, CaloCellContainer& caloCellContainer, std::vector<CaloCell*>& map ) = 0; diff --git a/Reconstruction/tauRecTools/tauRecTools/TauRecToolBase.h b/Reconstruction/tauRecTools/tauRecTools/TauRecToolBase.h index 58a8b232ed77addec60a1467e594656d779a7f6e..f910f820fbead16e91e9372fa6daab7b822df669 100644 --- a/Reconstruction/tauRecTools/tauRecTools/TauRecToolBase.h +++ b/Reconstruction/tauRecTools/tauRecTools/TauRecToolBase.h @@ -43,7 +43,9 @@ class TauRecToolBase : public asg::AsgTool, virtual public ITauToolBase { virtual StatusCode executeVertexFinder(xAOD::TauJet& pTau, const xAOD::VertexContainer* vertexContainer = nullptr, const xAOD::TrackParticleContainer* trackContainer = nullptr) override; - virtual StatusCode executeTrackFinder(xAOD::TauJet& pTau, const xAOD::TrackParticleContainer* trackContainer = nullptr) override; + virtual StatusCode executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer, const xAOD::TrackParticleContainer* trackContainer = nullptr) override; + virtual StatusCode executeTrackClassifier(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer) const override; + virtual StatusCode executeRNNTrackClassifier(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer) override; virtual StatusCode executeShotFinder(xAOD::TauJet& pTau, xAOD::CaloClusterContainer& shotClusterContainer, xAOD::PFOContainer& PFOContainer ) override; #ifndef XAOD_ANALYSIS virtual StatusCode executePi0CreateROI(xAOD::TauJet& pTau, CaloCellContainer& caloCellContainer, std::vector<CaloCell*>& map ) override; diff --git a/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h b/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h index 5d37f45e3230d507997d8fad191161eb118abe10..3c296e293165fcb5ce376b7e1803386166956476 100644 --- a/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h +++ b/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h @@ -42,7 +42,7 @@ public: ~TauTrackClassifier(); virtual StatusCode initialize() override; - virtual StatusCode execute(xAOD::TauJet& pTau) const override; + virtual StatusCode executeTrackClassifier(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer ) const override; virtual StatusCode finalize() override; private: diff --git a/Reconstruction/tauRecTools/tauRecTools/TauTrackRNNClassifier.h b/Reconstruction/tauRecTools/tauRecTools/TauTrackRNNClassifier.h index 18bfa0c59cccf3d76f802dc407799298fa836234..79c6e4bcef8aaece328bd17909788374fc6f50fb 100644 --- a/Reconstruction/tauRecTools/tauRecTools/TauTrackRNNClassifier.h +++ b/Reconstruction/tauRecTools/tauRecTools/TauTrackRNNClassifier.h @@ -53,9 +53,9 @@ public: // retrieve all track classifier sub tools virtual StatusCode initialize() override; // pass all tracks in the tau cone to all track classifier sub tools - virtual StatusCode execute(xAOD::TauJet& pTau) const override; + virtual StatusCode executeRNNTrackClassifier(xAOD::TauJet& pTau, xAOD::TauTrackContainer& tauTrackContainer) override; -private: + private: ToolHandleArray<TrackRNN> m_vClassifier {this, "Classifiers", {}}; }; // class TauTrackRNNClassifier