ATLAS Offline Software
DiTauBuilder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 
9 #include "xAODJet/JetContainer.h"
12 
13 #include "StoreGate/WriteHandle.h"
14 #include "StoreGate/ReadHandle.h"
15 
16 
17 DiTauBuilder::DiTauBuilder( const std::string& name, ISvcLocator* pSvcLocator ) :
18  AthReentrantAlgorithm( name, pSvcLocator ),
19  m_minPt(10000),
20  m_maxEta(2.5),
21  m_Rjet(1.0),
22  m_Rsubjet(0.2),
23  m_Rcore(0.1),
24  m_tools(this)
25 {
26  declareProperty("minPt", m_minPt);
27  declareProperty("maxEta", m_maxEta);
28  declareProperty("Rjet", m_Rjet);
29  declareProperty("Rsubjet", m_Rsubjet);
30  declareProperty("Rcore", m_Rcore);
31  declareProperty("Tools", m_tools );
32 
33 }
34 
35 
36 DiTauBuilder::~DiTauBuilder() = default;
37 
38 
40  ATH_MSG_INFO ("Initializing " << name() << "...");
41 
42  // no tools allocated
43  if (m_tools.empty()) {
44  ATH_MSG_ERROR("no tools given!");
45  return StatusCode::FAILURE;
46  }
47 
48  // list allocated tools
49  ATH_CHECK( m_tools.retrieve() );
50  ToolHandleArray<DiTauToolBase> ::iterator itT = m_tools.begin();
51  ToolHandleArray<DiTauToolBase> ::iterator itTE = m_tools.end();
52  ATH_MSG_INFO("List of tools in execution sequence:");
53  ATH_MSG_INFO("------------------------------------");
54 
55  unsigned int tool_count = 0;
56 
57  for (; itT != itTE; ++itT) {
58  if (itT->retrieve().isFailure()) {
59  ATH_MSG_WARNING("Cannot find tool named <" << *itT << ">");
60  } else {
61  ++tool_count;
62  ATH_MSG_INFO((*itT)->type() << " - " << (*itT)->name());
63  }
64  }
65  ATH_MSG_INFO(" ");
66  ATH_MSG_INFO("------------------------------------");
67 
68  if (tool_count == 0) {
69  ATH_MSG_ERROR("could not allocate any tool!");
70  return StatusCode::FAILURE;
71  }
72 
73  ATH_CHECK( m_diTauContainerName.initialize() );
74  ATH_CHECK( m_seedJetName.initialize() );
75 
76  return StatusCode::SUCCESS;
77 }
78 
79 
81  ATH_MSG_INFO ("Finalizing " << name() << "...");
82 
83  return StatusCode::SUCCESS;
84 }
85 
86 
87 StatusCode DiTauBuilder::execute(const EventContext& ctx) const {
88  ATH_MSG_DEBUG ("Executing " << name() << "...");
89 
90  // preparing DiTau Candidate Container and storage in DiTauData
91 
92  DiTauCandidateData rDiTauData;
93 
94  auto pContainer = std::make_unique<xAOD::DiTauJetContainer>();
95  auto pAuxContainer = std::make_unique<xAOD::DiTauJetAuxContainer>();
96  pContainer->setStore(pAuxContainer.get());
97 
98  // set properties of DiTau Candidate
99  rDiTauData.xAODDiTau = nullptr;
100  rDiTauData.xAODDiTauContainer = pContainer.get();
101  rDiTauData.diTauAuxContainer = pAuxContainer.get();
102  rDiTauData.seed = nullptr;
103  rDiTauData.seedContainer = nullptr;
104 
105  rDiTauData.Rjet = m_Rjet;
106  rDiTauData.Rsubjet = m_Rsubjet;
107  rDiTauData.Rcore = m_Rcore;
108 
110  ATH_CHECK( diTauContainerH.record (std::move (pContainer),
111  std::move (pAuxContainer)) );
112 
113  // retrieve di-tau seed jets and loop over seeds
114 
116 
117  rDiTauData.seedContainer = pSeedContainer.get();
118 
119  for (const auto* seed: *pSeedContainer) {
120  ATH_MSG_DEBUG("Seed pt: "<< seed->pt() << " eta: "<< seed->eta());
121 
122  // seed cuts
123  if (std::abs(seed->pt()) < m_minPt) continue;
124  if (std::abs(seed->eta()) > m_maxEta) continue;
125 
126  // cuts passed
127  rDiTauData.seed = seed;
128 
129  // create new di-tau candidate
130  rDiTauData.xAODDiTau = new xAOD::DiTauJet();
131  rDiTauData.xAODDiTauContainer->push_back(rDiTauData.xAODDiTau);
132 
133  // handle di-tau candidate
134  StatusCode sc = StatusCode::SUCCESS;
135  for (const auto& tool: m_tools) {
136  sc = tool->execute(&rDiTauData, ctx);
137  if (sc.isFailure()) break;
138  }
139 
140  if (sc.isSuccess()) {
141  ATH_MSG_DEBUG("all tools executed successfully. Di-Tau candidate registered.");
142  }
143  else {
144  ATH_MSG_DEBUG("seed failed a di-tau criterion. Thrown away.");
145  rDiTauData.xAODDiTauContainer->pop_back();
146  }
147  }
148 
149  // // TODO: tool finalizers needed here
150  // sc = StatusCode::SUCCESS;
151 
152  rDiTauData.xAODDiTau = nullptr;
153 
154  ATH_MSG_DEBUG("end execute()");
155  return StatusCode::SUCCESS;
156 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
DiTauCandidateData::seedContainer
const xAOD::JetContainer * seedContainer
Definition: DiTauCandidateData.h:22
DiTauBuilder::execute
virtual StatusCode execute(const EventContext &) const override
Definition: DiTauBuilder.cxx:87
DiTauBuilder::m_seedJetName
SG::ReadHandleKey< xAOD::JetContainer > m_seedJetName
Definition: DiTauBuilder.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
DiTauToolBase.h
DiTauCandidateData::diTauAuxContainer
xAOD::DiTauJetAuxContainer * diTauAuxContainer
Definition: DiTauCandidateData.h:19
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
xAOD::DiTauJet
DiTauJet_v1 DiTauJet
Definition of the current version.
Definition: DiTauJet.h:17
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
DiTauCandidateData.h
DiTauBuilder::~DiTauBuilder
virtual ~DiTauBuilder()
DiTauBuilder::m_tools
ToolHandleArray< DiTauToolBase > m_tools
Definition: DiTauBuilder.h:40
DiTauBuilder.h
DiTauBuilder::initialize
virtual StatusCode initialize() override
Definition: DiTauBuilder.cxx:39
DataVector::get
const T * get(size_type n) const
Access an element, as an rvalue.
DiTauCandidateData::Rsubjet
float Rsubjet
Definition: DiTauCandidateData.h:27
DiTauJetContainer.h
DiTauCandidateData::xAODDiTau
xAOD::DiTauJet * xAODDiTau
Definition: DiTauCandidateData.h:17
DiTauJetAuxContainer.h
DiTauBuilder::m_diTauContainerName
SG::WriteHandleKey< xAOD::DiTauJetContainer > m_diTauContainerName
Definition: DiTauBuilder.h:31
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
WriteHandle.h
Handle class for recording to StoreGate.
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::ReadHandle::get
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
DiTauBuilder::m_Rsubjet
float m_Rsubjet
Definition: DiTauBuilder.h:38
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DiTauCandidateData::Rcore
float Rcore
Definition: DiTauCandidateData.h:28
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
DiTauCandidateData::xAODDiTauContainer
xAOD::DiTauJetContainer * xAODDiTauContainer
Definition: DiTauCandidateData.h:18
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
DiTauBuilder::m_maxEta
float m_maxEta
Definition: DiTauBuilder.h:36
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
DiTauBuilder::finalize
virtual StatusCode finalize() override
Definition: DiTauBuilder.cxx:80
JetContainer.h
DiTauBuilder::m_minPt
float m_minPt
Definition: DiTauBuilder.h:35
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DataVector::pop_back
void pop_back()
Remove the last element from the collection.
DiTauCandidateData::seed
const xAOD::Jet * seed
Definition: DiTauCandidateData.h:21
DiTauBuilder::m_Rjet
float m_Rjet
Definition: DiTauBuilder.h:37
DiTauCandidateData::Rjet
float Rjet
Definition: DiTauCandidateData.h:26
DiTauCandidateData
Definition: DiTauCandidateData.h:15
DiTauBuilder::m_Rcore
float m_Rcore
Definition: DiTauBuilder.h:39
ReadHandle.h
Handle class for reading from StoreGate.
DiTauBuilder::DiTauBuilder
DiTauBuilder(const std::string &name, ISvcLocator *pSvcLocator)
Definition: DiTauBuilder.cxx:17