ATLAS Offline Software
Loading...
Searching...
No Matches
TauCombineMuonRMTausAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7
9
11
12// unnamed namespace for helpers
13namespace {
14 const SG::ConstAccessor<ElementLink<xAOD::TauJetContainer>> linkAcc("originalTauJet");
15}
16
17namespace CP
18{
19
30
31
32 StatusCode TauCombineMuonRMTausAlg::execute (const EventContext& ctx)
33 {
34 for (const auto& sys : m_systematicsList.systematicsVector())
35 {
36 const xAOD::TauJetContainer *taus = nullptr;
37 const xAOD::TauJetContainer *muonrm_taus = nullptr;
38 ANA_CHECK (m_tauHandle.retrieve (taus, sys, ctx));
39 ANA_CHECK (m_MuonRMtauHandle.retrieve (muonrm_taus, sys, ctx));
40 for (const xAOD::TauJet* tau : *taus) m_tauSelectionDecor.set (*tau, false, sys);
41 for (const xAOD::TauJet* tau : *muonrm_taus) m_MuonRMtauSelectionDecor.set (*tau, false, sys);
42 std::vector<const xAOD::TauJet*> combined_taus_vec = TauAnalysisTools::combineTauJetsWithMuonRM (taus, muonrm_taus);
43 // !shallow copy seems to break the subsequent algorithms. Deep copy is needed.
44 auto outputTauCont = std::make_unique<xAOD::TauJetContainer>();
45 auto outputTauContAux = std::make_unique<xAOD::TauJetAuxContainer>();
46 outputTauCont->setStore(outputTauContAux.get());
47 for (const xAOD::TauJet* tau : combined_taus_vec){
48 if(linkAcc.isAvailable(*tau) && !linkAcc(*tau).isValid()){
49 ATH_MSG_WARNING("Invalid originalTauJet link for tau with pT="<<tau->pt());
50 continue;
51 }
52 // both decoration handles share the same decoration name, so
53 // either can be used for taus from either input container
54 m_tauSelectionDecor.set (*tau, true, sys);
55 auto newTau = std::make_unique<xAOD::TauJet>();
56 newTau->makePrivateStore(*tau);
57 if(linkAcc.isAvailable(*tau)){
58 auto link = linkAcc(*tau);
59 setOriginalObjectLink(**link, *newTau);
60 }
61 else setOriginalObjectLink(*tau, *newTau);
62 outputTauCont->push_back(std::move(newTau));
63 }
64 ANA_CHECK (m_outputTauHandle.record (std::move (outputTauCont), std::move (outputTauContAux), sys, ctx));
65
66 }
67 return StatusCode::SUCCESS;
68 }
69}
#define ATH_MSG_WARNING(x,...)
#define ANA_CHECK(EXP)
check whether the given expression was successful
static Double_t taus
SysReadHandle< xAOD::TauJetContainer > m_MuonRMtauHandle
SysWriteDecorHandle< char > m_MuonRMtauSelectionDecor
SysWriteHandle< xAOD::TauJetContainer, xAOD::TauJetAuxContainer > m_outputTauHandle
SysWriteDecorHandle< char > m_tauSelectionDecor
SysReadHandle< xAOD::TauJetContainer > m_tauHandle
virtual::StatusCode execute()
execute this algorithm
Helper class to provide constant type-safe access to aux data.
Select isolated Photons, Electrons and Muons.
std::vector< const xAOD::TauJet * > combineTauJetsWithMuonRM(const xAOD::TauJetContainer *taus_std, const xAOD::TauJetContainer *taus_muonRM)
combine the standard taujets container with the muon removal container
TauJet_v3 TauJet
Definition of the current "tau version".
Definition TauJet.h:17
bool setOriginalObjectLink(const IParticle &original, IParticle &copy)
This function should be used by CP tools when they make a deep copy of an object in their correctedCo...
static const SG::Accessor< std::vector< ElementLink< EventInfoContainer_v1 > > > linkAcc("subEventLink")
TauJetContainer_v3 TauJetContainer
Definition of the current "taujet container version".