diff --git a/Reconstruction/tauRecTools/Root/CombinedP4FromRecoTaus.cxx b/Reconstruction/tauRecTools/Root/CombinedP4FromRecoTaus.cxx index 42c6c0bd2a5bc1669458bc7e9e2b0dcb5b3c785a..65d54aed6a266c0bd3a46d380dde12b7c23855fc 100644 --- a/Reconstruction/tauRecTools/Root/CombinedP4FromRecoTaus.cxx +++ b/Reconstruction/tauRecTools/Root/CombinedP4FromRecoTaus.cxx @@ -20,6 +20,7 @@ //C++ includes #include <math.h> #include <string.h> +#include <CxxUtils/make_unique.h> //_____________________________________________________________________________ CombinedP4FromRecoTaus::CombinedP4FromRecoTaus(const std::string& name) : diff --git a/Reconstruction/tauRecTools/Root/TauProcessorTool.cxx b/Reconstruction/tauRecTools/Root/TauProcessorTool.cxx index 5a1351f769efe6932e71081cc7c31f54fdb38f0c..f729d0026240fc7e78c11385ce4ae1aaf749cec0 100644 --- a/Reconstruction/tauRecTools/Root/TauProcessorTool.cxx +++ b/Reconstruction/tauRecTools/Root/TauProcessorTool.cxx @@ -222,107 +222,129 @@ StatusCode TauProcessorTool::execute(){ #ifdef XAOD_ANALYSIS //perhaps this should be ROOTCORE typedef std::vector< ElementLink< xAOD::PFOContainer > > PFOLinks_t; + typedef std::vector< ElementLink< xAOD::TauTrackContainer > > TauTrackLinks_t; const xAOD::PFOContainer* hadronicPFOs(0); const xAOD::PFOContainer* chargedPFOs(0); const xAOD::PFOContainer* neutralPFOs(0); - // const xAOD::PFOContainer* shotPFOs(0); + const xAOD::PFOContainer* shotPFOs(0); + const xAOD::TauTrackContainer* tauTracks(0); if(evtStore()->contains<xAOD::PFOContainer>("TauHadronicParticleFlowObjectsFix")) ATH_CHECK(evtStore()->retrieve(hadronicPFOs, "TauHadronicParticleFlowObjectsFix")); - else - ATH_CHECK(evtStore()->retrieve(hadronicPFOs, "TauHadronicParticleFlowObjects")); if(evtStore()->contains<xAOD::PFOContainer>("TauChargedParticleFlowObjectsFix")) ATH_CHECK(evtStore()->retrieve(chargedPFOs, "TauChargedParticleFlowObjectsFix")); - else - ATH_CHECK(evtStore()->retrieve(chargedPFOs, "TauChargedParticleFlowObjects")); if(evtStore()->contains<xAOD::PFOContainer>("TauNeutralParticleFlowObjectsFix")) ATH_CHECK(evtStore()->retrieve(neutralPFOs, "TauNeutralParticleFlowObjectsFix")); - else - ATH_CHECK(evtStore()->retrieve(neutralPFOs, "TauNeutralParticleFlowObjects")); - // if(evtStore()->contains<xAOD::PFOContainer>("TauShotParticleFlowObjectsFix")) - // ATH_CHECK(evtStore()->retrieve(shotPFOs, "TauShotParticleFlowObjectsFix")); - // else - // ATH_CHECK(evtStore()->retrieve(neutralPFOs, "TauShotParticleFlowObjects")); + if(evtStore()->contains<xAOD::PFOContainer>("TauShotParticleFlowObjectsFix")) + ATH_CHECK(evtStore()->retrieve(shotPFOs, "TauShotParticleFlowObjectsFix")); + + if(evtStore()->contains<xAOD::TauTrackContainer>("TauTracksFix")) + ATH_CHECK(evtStore()->retrieve(tauTracks, "TauTracksFix")); for(xAOD::TauJet* tau : *pContainer ) { - const PFOLinks_t hadronicPFOLinks=tau->hadronicPFOLinks(); - PFOLinks_t new_hadronicPFOLinks; - for( auto link : hadronicPFOLinks ){ - ElementLink< xAOD::PFOContainer > new_link; - new_link.toContainedElement( *hadronicPFOs, hadronicPFOs->at(link.index()) ); - new_hadronicPFOLinks.push_back(new_link); + if (hadronicPFOs) { + const PFOLinks_t hadronicPFOLinks=tau->hadronicPFOLinks(); + PFOLinks_t new_hadronicPFOLinks; + for( const auto& link : hadronicPFOLinks ){ + ElementLink< xAOD::PFOContainer > new_link; + new_link.toContainedElement( *hadronicPFOs, hadronicPFOs->at(link.index()) ); + new_hadronicPFOLinks.push_back(new_link); + } + tau->setHadronicPFOLinks(new_hadronicPFOLinks); } - tau->setHadronicPFOLinks(new_hadronicPFOLinks); - - const PFOLinks_t chargedPFOLinks=tau->chargedPFOLinks(); - PFOLinks_t new_chargedPFOLinks; - for( auto link : chargedPFOLinks ){ - ElementLink< xAOD::PFOContainer > new_link; - new_link.toContainedElement( *chargedPFOs, chargedPFOs->at(link.index()) ); - new_chargedPFOLinks.push_back(new_link); + + if (chargedPFOs){ + const PFOLinks_t chargedPFOLinks=tau->chargedPFOLinks(); + PFOLinks_t new_chargedPFOLinks; + for( const auto& link : chargedPFOLinks ){ + ElementLink< xAOD::PFOContainer > new_link; + new_link.toContainedElement( *chargedPFOs, chargedPFOs->at(link.index()) ); + new_chargedPFOLinks.push_back(new_link); + } + tau->setChargedPFOLinks(new_chargedPFOLinks); } - tau->setChargedPFOLinks(new_chargedPFOLinks); - + + if (neutralPFOs){ const PFOLinks_t neutralPFOLinks=tau->neutralPFOLinks(); PFOLinks_t new_neutralPFOLinks; - for( auto link : neutralPFOLinks ){ + for( const auto& link : neutralPFOLinks ){ ElementLink< xAOD::PFOContainer > new_link; new_link.toContainedElement( *neutralPFOs, neutralPFOs->at(link.index()) ); new_neutralPFOLinks.push_back(new_link); } tau->setNeutralPFOLinks(new_neutralPFOLinks); - - const PFOLinks_t pi0PFOLinks=tau->pi0PFOLinks(); - PFOLinks_t new_pi0PFOLinks; - for( auto link : pi0PFOLinks ){ - ElementLink< xAOD::PFOContainer > new_link; - new_link.toContainedElement( *neutralPFOs, neutralPFOs->at(link.index()) ); - new_pi0PFOLinks.push_back(new_link); + } + + if (neutralPFOs){ + const PFOLinks_t pi0PFOLinks=tau->pi0PFOLinks(); + PFOLinks_t new_pi0PFOLinks; + for( const auto& link : pi0PFOLinks ){ + ElementLink< xAOD::PFOContainer > new_link; + new_link.toContainedElement( *neutralPFOs, neutralPFOs->at(link.index()) ); + new_pi0PFOLinks.push_back(new_link); + } + tau->setPi0PFOLinks(new_pi0PFOLinks); } - tau->setPi0PFOLinks(new_pi0PFOLinks); - - const PFOLinks_t protoChargedPFOLinks=tau->protoChargedPFOLinks(); - PFOLinks_t new_protoChargedPFOLinks; - for( auto link : protoChargedPFOLinks ){ - ElementLink< xAOD::PFOContainer > new_link; - new_link.toContainedElement( *chargedPFOs, chargedPFOs->at(link.index()) ); - new_protoChargedPFOLinks.push_back(new_link); + + if (chargedPFOs){ + const PFOLinks_t protoChargedPFOLinks=tau->protoChargedPFOLinks(); + PFOLinks_t new_protoChargedPFOLinks; + for( const auto& link : protoChargedPFOLinks ){ + ElementLink< xAOD::PFOContainer > new_link; + new_link.toContainedElement( *chargedPFOs, chargedPFOs->at(link.index()) ); + new_protoChargedPFOLinks.push_back(new_link); + } + tau->setProtoChargedPFOLinks(new_protoChargedPFOLinks); } - tau->setProtoChargedPFOLinks(new_protoChargedPFOLinks); - - const PFOLinks_t protoNeutralPFOLinks=tau->protoNeutralPFOLinks(); - PFOLinks_t new_protoNeutralPFOLinks; - for( auto link : protoNeutralPFOLinks ){ - ElementLink< xAOD::PFOContainer > new_link; - new_link.toContainedElement( *neutralPFOs, neutralPFOs->at(link.index()) ); - new_protoNeutralPFOLinks.push_back(new_link); + + if (neutralPFOs){ + const PFOLinks_t protoNeutralPFOLinks=tau->protoNeutralPFOLinks(); + PFOLinks_t new_protoNeutralPFOLinks; + for( const auto& link : protoNeutralPFOLinks ){ + ElementLink< xAOD::PFOContainer > new_link; + new_link.toContainedElement( *neutralPFOs, neutralPFOs->at(link.index()) ); + new_protoNeutralPFOLinks.push_back(new_link); + } + tau->setProtoNeutralPFOLinks(new_protoNeutralPFOLinks); } - tau->setProtoNeutralPFOLinks(new_protoNeutralPFOLinks); - - const PFOLinks_t protoPi0PFOLinks=tau->protoPi0PFOLinks(); - PFOLinks_t new_protoPi0PFOLinks; - for( auto link : protoPi0PFOLinks ){ - ElementLink< xAOD::PFOContainer > new_link; - new_link.toContainedElement( *neutralPFOs, neutralPFOs->at(link.index()) ); - new_protoPi0PFOLinks.push_back(new_link); + + if (neutralPFOs){ + const PFOLinks_t protoPi0PFOLinks=tau->protoPi0PFOLinks(); + PFOLinks_t new_protoPi0PFOLinks; + for( const auto& link : protoPi0PFOLinks ){ + ElementLink< xAOD::PFOContainer > new_link; + new_link.toContainedElement( *neutralPFOs, neutralPFOs->at(link.index()) ); + new_protoPi0PFOLinks.push_back(new_link); + } + tau->setProtoPi0PFOLinks(new_protoPi0PFOLinks); + } + + if (shotPFOs){ + const PFOLinks_t shotPFOLinks=tau->shotPFOLinks(); + PFOLinks_t new_shotPFOLinks; + for( const auto& link : shotPFOLinks ){ + ElementLink< xAOD::PFOContainer > new_link; + new_link.toContainedElement( *shotPFOs, shotPFOs->at(link.index()) ); + new_shotPFOLinks.push_back(new_link); + } + tau->setShotPFOLinks(new_shotPFOLinks); } - tau->setProtoPi0PFOLinks(new_protoPi0PFOLinks); - - // const PFOLinks_t shotPFOLinks=tau->shotPFOLinks(); - // PFOLinks_t new_shotPFOLinks; - // for( auto link : shotPFOLinks ){ - // ElementLink< xAOD::PFOContainer > new_link; - // new_link.toContainedElement( *shotPFOs, shotPFOs->at(link.index()) ); - // new_shotPFOLinks.push_back(new_link); - // } - // tau->setShotPFOLinks(new_shotPFOLinks); - + if (tauTracks){ + const TauTrackLinks_t tauTrackLinks=tau->allTauTrackLinks(); + TauTrackLinks_t new_tauTrackLinks; + for( const auto& link : tauTrackLinks ){ + ElementLink< xAOD::TauTrackContainer > new_link; + new_link.toContainedElement( *tauTracks, tauTracks->at(link.index()) ); + new_tauTrackLinks.push_back(new_link); + } + tau->setAllTauTrackLinks(new_tauTrackLinks); + } } #endif diff --git a/Reconstruction/tauRecTools/tauRecTools/ToolsDef.h b/Reconstruction/tauRecTools/tauRecTools/ToolsDef.h index 8bfacb614297dca7f3366e64b28e4fb8fa0224e8..2c490598947d3512b910aad7e228032026e4d618 100644 --- a/Reconstruction/tauRecTools/tauRecTools/ToolsDef.h +++ b/Reconstruction/tauRecTools/tauRecTools/ToolsDef.h @@ -18,6 +18,7 @@ #include "tauRecTools/TauJetBDTEvaluator.h" #include "tauRecTools/TauIDVarCalculator.h" #include "tauRecTools/TauEleOLRDecorator.h" +#include "tauRecTools/TauProcessorTool.h" REGISTER_TOOL(TauCalibrateLC) REGISTER_TOOL(TauCommonCalcVars) @@ -35,3 +36,4 @@ REGISTER_TOOL(TauWPDecorator) REGISTER_TOOL(TauJetBDTEvaluator) REGISTER_TOOL(TauEleOLRDecorator) REGISTER_TOOL(TauIDVarCalculator) +REGISTER_TOOL(TauProcessorTool)