ATLAS Offline Software
TauTruthDecorationsAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 
8 
9 //
10 // includes
11 //
12 
17 
18 //
19 // method implementations
20 //
21 
22 namespace CP
23 {
24 
26  initialize ()
27  {
30  for (const auto& decorationName : m_doubleDecorations) {
32  ANA_CHECK( m_doubleWriteHandles.back().second->initialize(m_systematicsList, m_tauHandle));
33  }
34  for (const auto& decorationName : m_floatDecorations) {
36  ANA_CHECK( m_floatWriteHandles.back().second->initialize(m_systematicsList, m_tauHandle));
37  }
38  for (const auto& decorationName : m_intDecorations) {
39  m_intWriteHandles.push_back(std::make_pair(std::make_unique<SG::AuxElement::ConstAccessor<int>>(decorationName), std::make_unique<CP::SysWriteDecorHandle<int>>(m_prefix+decorationName, this)));
40  ANA_CHECK( m_intWriteHandles.back().second->initialize(m_systematicsList, m_tauHandle));
41  }
42  for (const auto& decorationName : m_charDecorations) {
44  ANA_CHECK( m_charWriteHandles.back().second->initialize(m_systematicsList, m_tauHandle));
45  }
48  return StatusCode::SUCCESS;
49  }
50 
51 
52 
54  execute ()
55  {
56  for (const auto& sys : m_systematicsList.systematicsVector())
57  {
58  const xAOD::TauJetContainer *taus = nullptr;
60  for (const xAOD::TauJet *tau : *taus)
61  {
62  const xAOD::TruthParticle* truthParticle = xAOD::TauHelpers::getTruthParticle(tau);
63  if (truthParticle == nullptr) continue;
64 
65  for (auto& [acc, writeHandle] : m_doubleWriteHandles) {
66  if (truthParticle == nullptr or !acc->isAvailable(*truthParticle)) {
67  writeHandle->set(*tau, -999., sys);
68  } else {
69  writeHandle->set(*tau, acc->operator()(*truthParticle), sys);
70  }
71  }
72 
73  for (auto& [acc, writeHandle] : m_floatWriteHandles) {
74  if (truthParticle == nullptr or !acc->isAvailable(*truthParticle)) {
75  writeHandle->set(*tau, -999., sys);
76  } else {
77  writeHandle->set(*tau, acc->operator()(*truthParticle), sys);
78  }
79  }
80 
81  for (auto& [acc, writeHandle] : m_intWriteHandles) {
82  if (truthParticle == nullptr or !acc->isAvailable(*truthParticle)) {
83  writeHandle->set(*tau, -999, sys);
84  } else {
85  writeHandle->set(*tau, acc->operator()(*truthParticle), sys);
86  }
87  }
88 
89  for (auto& [acc, writeHandle] : m_charWriteHandles) {
90  if (truthParticle == nullptr or !acc->isAvailable(*truthParticle)) {
91  writeHandle->set(*tau, 0, sys);
92  } else {
93  writeHandle->set(*tau, acc->operator()(*truthParticle), sys);
94  }
95  }
96 
98  }
99  }
100  return StatusCode::SUCCESS;
101  }
102 }
CP::SysWriteDecorHandle::set
void set(const SG::AuxElement &object, const T &value, const CP::SystematicSet &sys) const
set the object decoration for the given systematic
TauAnalysisTools::getTruthDecayMode
xAOD::TauJetParameters::DecayMode getTruthDecayMode(const xAOD::TruthParticle &xTruthTau)
Get the Truth Decay Mode from TruthTau particle.
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:223
CP::TauTruthDecorationsAlg::m_doubleDecorations
Gaudi::Property< std::vector< std::string > > m_doubleDecorations
the decoration for the tau scale factor
Definition: TauTruthDecorationsAlg.h:49
CP::TauTruthDecorationsAlg::m_prefix
Gaudi::Property< std::string > m_prefix
Definition: TauTruthDecorationsAlg.h:53
make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: SkimmingToolEXOT5.cxx:23
CP::TauTruthDecorationsAlg::initialize
StatusCode initialize() override
Definition: TauTruthDecorationsAlg.cxx:26
TruthParticleContainer.h
CP::TauTruthDecorationsAlg::m_tauHandle
SysReadHandle< xAOD::TauJetContainer > m_tauHandle
the tau collection we run on
Definition: TauTruthDecorationsAlg.h:39
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
CP::SysReadHandle::retrieve
::StatusCode retrieve(const T *&object, const CP::SystematicSet &sys) const
retrieve the object for the given name
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
CP::SysListHandle::systematicsVector
const std::vector< CP::SystematicSet > & systematicsVector() const
the list of systematics to loop over
Definition: SysListHandle.cxx:96
CP::TauTruthDecorationsAlg::m_floatDecorations
Gaudi::Property< std::vector< std::string > > m_floatDecorations
Definition: TauTruthDecorationsAlg.h:50
CP
Select isolated Photons, Electrons and Muons.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:48
CP::TauTruthDecorationsAlg::m_charWriteHandles
std::vector< std::pair< std::unique_ptr< SG::AuxElement::ConstAccessor< char > >, std::unique_ptr< SysWriteDecorHandle< char > > > > m_charWriteHandles
Definition: TauTruthDecorationsAlg.h:59
mapkey::sys
@ sys
Definition: TElectronEfficiencyCorrectionTool.cxx:42
CP::SysReadHandle::initialize
StatusCode initialize(SysListHandle &sysListHandle)
initialize this handle
CP::SysListHandle::initialize
::StatusCode initialize()
intialize this property
Definition: SysListHandle.cxx:69
xAOD::TauHelpers::getTruthParticle
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle *, bool debug=false)
return the truthParticle associated to the given IParticle (if any)
Definition: TauxAODHelpers.cxx:10
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
CP::SysWriteDecorHandle::initialize
StatusCode initialize(SysListHandle &sysListHandle, const ISysHandleBase &objectHandle)
initialize this handle
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
CP::TauTruthDecorationsAlg::execute
StatusCode execute() override
Definition: TauTruthDecorationsAlg.cxx:54
CP::TauTruthDecorationsAlg::m_intDecorations
Gaudi::Property< std::vector< std::string > > m_intDecorations
Definition: TauTruthDecorationsAlg.h:51
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
CP::TauTruthDecorationsAlg::m_intWriteHandles
std::vector< std::pair< std::unique_ptr< SG::AuxElement::ConstAccessor< int > >, std::unique_ptr< SysWriteDecorHandle< int > > > > m_intWriteHandles
Definition: TauTruthDecorationsAlg.h:58
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
CP::TauTruthDecorationsAlg::m_truthDecayModeDecoration
SysWriteDecorHandle< int > m_truthDecayModeDecoration
Definition: TauTruthDecorationsAlg.h:61
TauTruthDecorationsAlg.h
CP::SysReadSelectionHandle::initialize
StatusCode initialize(SysListHandle &sysListHandle, const ISysHandleBase &objectHandle)
initialize the accessor
Definition: SysReadSelectionHandle.cxx:34
CP::TauTruthDecorationsAlg::m_preselection
SysReadSelectionHandle m_preselection
the preselection we apply to our input
Definition: TauTruthDecorationsAlg.h:44
CP::TauTruthDecorationsAlg::m_floatWriteHandles
std::vector< std::pair< std::unique_ptr< SG::AuxElement::ConstAccessor< float > >, std::unique_ptr< SysWriteDecorHandle< float > > > > m_floatWriteHandles
Definition: TauTruthDecorationsAlg.h:57
CP::TauTruthDecorationsAlg::m_systematicsList
SysListHandle m_systematicsList
the systematics list we run
Definition: TauTruthDecorationsAlg.h:35
CP::TauTruthDecorationsAlg::m_doubleWriteHandles
std::vector< std::pair< std::unique_ptr< SG::AuxElement::ConstAccessor< double > >, std::unique_ptr< SysWriteDecorHandle< float > > > > m_doubleWriteHandles
Definition: TauTruthDecorationsAlg.h:56
CP::SysWriteDecorHandle< float >
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
HelperFunctions.h
CP::TauTruthDecorationsAlg::m_charDecorations
Gaudi::Property< std::vector< std::string > > m_charDecorations
Definition: TauTruthDecorationsAlg.h:52
AuxElement.h
Base class for elements of a container that can have aux data.