ATLAS Offline Software
L1CaloTriggerTowerDecoratorAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 // TrigT1 common definitions
8 
9 // Local include(s):
11 
12 // EDM include(s):
14 
15 #include <optional>
16 namespace LVL1 {
17 
19  const std::string& name, ISvcLocator* svcLoc)
20  : AthAlgorithm(name, svcLoc),
21  m_caloCellEnergy(""), // disabled by default
22  m_caloCellET(""), // disabled by default
23  m_caloCellEnergyByLayer("CaloCellEnergyByLayer"),
24  m_caloCellETByLayer("CaloCellETByLayer"),
25  m_caloCellsQuality("CaloCellQuality"),
26  m_caloCellEnergyByLayerByReceiver(""), // disabled by default
27  m_caloCellETByLayerByReceiver(""), // disabled by default
28  m_ttTools(this)
29 {
30  declareProperty("DecorName_caloCellEnergy",
31  m_caloCellEnergy, // disabled by default
32  "Decoration name - leave empty to disable");
33  declareProperty("DecorName_caloCellET", m_caloCellET, // disabled by default
34  "Decoration name - leave empty to disable");
35  declareProperty("DecorName_caloCellEnergyByLayer", m_caloCellEnergyByLayer,
36  "Decoration name - leave empty to disable");
37  declareProperty("DecorName_caloCellETByLayer", m_caloCellETByLayer,
38  "Decoration name - leave empty to disable");
39  declareProperty("DecorName_caloCellQuality", m_caloCellsQuality,
40  "Decoration name - leave empty to disable");
42  "DecorName_caloCellEnergyByLayerByReceiver",
44  "Decoration name - leave empty to disable"); // disabled by default
46  "DecorName_caloCellETByLayerByReceiver", m_caloCellETByLayerByReceiver,
47  "Decoration name - leave empty to disable"); // disabled by default
48 
49  declareProperty("TriggerTowerTools", m_ttTools);
50 }
51 
54  "TrigT1CaloCalibTools/L1CaloTriggerTowerDecoratorAlg::initialize()");
55  CHECK(m_ttTools.retrieve());
57 
58  const std::string baseName = m_triggerTowerContainerKey.key();
59 
60  if (!baseName.empty()) {
61  const std::string prefix = baseName + ".";
62  if (!m_caloCellEnergy.empty()) {
64  CHECK(m_caloCellEnergyKey.initialize());
65  }
66  if (!m_caloCellET.empty()) {
68  CHECK(m_caloCellETKey.initialize());
69  }
70  if (!m_caloCellsQuality.empty()) {
72  CHECK(m_caloCellsQualityKey.initialize());
73  }
74  if (!m_caloCellEnergyByLayer.empty()) {
76  CHECK(m_caloCellEnergyByLayerKey.initialize());
77  }
78  if (!m_caloCellETByLayer.empty()) {
80  CHECK(m_caloCellETByLayerKey.initialize());
81  }
82  if (!m_caloCellEnergyByLayerByReceiver.empty()) {
85  }
86  if (!m_caloCellETByLayerByReceiver.empty()) {
89  }
90  }
91 
92  // Return gracefully:
93  return StatusCode::SUCCESS;
94 }
95 
98 {
99  // use decorators to avoid the costly name -> auxid lookup
100 
101  // Shall I proceed?
102  if (!m_triggerTowerContainerKey.empty()) {
103  const EventContext& ctx = Gaudi::Hive::currentContext();
105  ctx);
106  CHECK(m_ttTools->initCaloCells());
107 
108  // We have optional Write Decor handles outside the loop
109  // And bools to check outside/inside the loop.
110  const bool doCellEnergy = !m_caloCellEnergy.empty();
111  const bool doCellET = !m_caloCellET.empty();
112  const bool doCellsQuality = !m_caloCellsQuality.empty();
113  const bool doCellEnergyByLayer = !m_caloCellEnergyByLayer.empty();
114  const bool doCellETByLayer = !m_caloCellETByLayer.empty();
115  const bool doCellEnergyByLayerByReceiver = !m_caloCellEnergyByLayerByReceiver.empty();
116  const bool doCellETByLayerByReceiver = !m_caloCellETByLayerByReceiver.empty();
117  std::optional<SG::WriteDecorHandle<xAOD::TriggerTowerContainer, float>>
118  caloCellEnergyDecorator;
119  std::optional<SG::WriteDecorHandle<xAOD::TriggerTowerContainer, float>>
120  caloCellETDecorator;
121  std::optional<SG::WriteDecorHandle<xAOD::TriggerTowerContainer, float>>
122  caloCellsQualityDecorator;
123  std::optional<
125  caloCellEnergyByLayerDecorator;
126  std::optional<
128  caloCellETByLayerDecorator;
129  std::optional<
131  caloCellEnergyByLayerByReceiverDecorator;
132  std::optional<
134  caloCellETByLayerByReceiverDecorator;
135 
136  if (doCellEnergy) {
137  caloCellEnergyDecorator.emplace(m_caloCellEnergyKey, ctx);
138  }
139  if (doCellET) {
140  caloCellETDecorator.emplace(m_caloCellETKey, ctx);
141  }
142  if (doCellsQuality) {
143  caloCellsQualityDecorator.emplace(m_caloCellsQualityKey, ctx);
144  }
145  if (doCellEnergyByLayer) {
146  caloCellEnergyByLayerDecorator.emplace(m_caloCellEnergyByLayerKey, ctx);
147  }
148  if (doCellETByLayer) {
149  caloCellETByLayerDecorator.emplace(m_caloCellETByLayerKey, ctx);
150  }
151  if (doCellEnergyByLayerByReceiver) {
152  caloCellEnergyByLayerByReceiverDecorator.emplace(m_caloCellEnergyByLayerByReceiverKey, ctx);
153  }
154  if (doCellETByLayerByReceiver) {
155  caloCellETByLayerByReceiverDecorator.emplace(m_caloCellETByLayerByReceiverKey, ctx);
156  }
157  //Loop filling the decorations
158  for (const auto* x : *tts) {
159  if (doCellEnergy) {
160  caloCellEnergyDecorator.value()(*x) = m_ttTools->caloCellsEnergy(*x);
161  }
162  if (doCellET) {
163  caloCellETDecorator.value()(*x) = m_ttTools->caloCellsET(*x);
164  }
165  if (doCellEnergyByLayer) {
166  caloCellEnergyByLayerDecorator.value()(*x) = m_ttTools->caloCellsEnergyByLayer(*x);
167  }
168  if (doCellETByLayer) {
169  caloCellETByLayerDecorator.value()(*x) = m_ttTools->caloCellsETByLayer(*x);
170  }
171  if (doCellsQuality) {
172  caloCellsQualityDecorator.value()(*x) = m_ttTools->caloCellsQuality(*x);
173  }
174  if (doCellEnergyByLayerByReceiver) {
175  caloCellEnergyByLayerByReceiverDecorator.value()(*x) = m_ttTools->caloCellsEnergyByLayerByReceiver(*x);
176  }
177  if (doCellETByLayerByReceiver) {
178  caloCellETByLayerByReceiverDecorator.value()(*x) = m_ttTools->caloCellsETByLayerByReceiver(*x);
179  }
180  } //end of decoration loop
181  } // Trigger towers present in Storegate
182 
183  // Return gracefully:
184  return StatusCode::SUCCESS;
185 }
186 }
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellEnergyByLayerByReceiverKey
SG::WriteDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellEnergyByLayerByReceiverKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:67
LVL1::L1CaloTriggerTowerDecoratorAlg::m_ttTools
ToolHandle< LVL1::IL1CaloxAODOfflineTriggerTowerTools > m_ttTools
Definition: L1CaloTriggerTowerDecoratorAlg.h:48
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellET
std::string m_caloCellET
Definition: L1CaloTriggerTowerDecoratorAlg.h:41
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
L1CaloTriggerTowerDecoratorAlg.h
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellETByLayer
std::string m_caloCellETByLayer
Definition: L1CaloTriggerTowerDecoratorAlg.h:43
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellETByLayerByReceiverKey
SG::WriteDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellETByLayerByReceiverKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:74
TriggerTowerContainer.h
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellETByLayerByReceiver
std::string m_caloCellETByLayerByReceiver
Definition: L1CaloTriggerTowerDecoratorAlg.h:46
LVL1::L1CaloTriggerTowerDecoratorAlg::m_triggerTowerContainerKey
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerContainerKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:36
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition: ICMMCPHitsCnvTool.h:18
x
#define x
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellEnergyByLayerKey
SG::WriteDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellEnergyByLayerKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:58
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellsQuality
std::string m_caloCellsQuality
Definition: L1CaloTriggerTowerDecoratorAlg.h:44
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellEnergyKey
SG::WriteDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellEnergyKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:53
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellEnergyByLayer
std::string m_caloCellEnergyByLayer
Definition: L1CaloTriggerTowerDecoratorAlg.h:42
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
LVL1::L1CaloTriggerTowerDecoratorAlg::initialize
virtual StatusCode initialize() override
Function initialising the algorithm.
Definition: L1CaloTriggerTowerDecoratorAlg.cxx:52
LVL1::L1CaloTriggerTowerDecoratorAlg::L1CaloTriggerTowerDecoratorAlg
L1CaloTriggerTowerDecoratorAlg(const std::string &name, ISvcLocator *svcLoc)
Definition: L1CaloTriggerTowerDecoratorAlg.cxx:18
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
AthAlgorithm
Definition: AthAlgorithm.h:47
TrigConf::name
Definition: HLTChainList.h:35
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellETKey
SG::WriteDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellETKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:55
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellETByLayerKey
SG::WriteDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellETByLayerKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:65
TrigT1CaloDefs.h
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellsQualityKey
SG::WriteDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellsQualityKey
Definition: L1CaloTriggerTowerDecoratorAlg.h:57
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellEnergyByLayerByReceiver
std::string m_caloCellEnergyByLayerByReceiver
Definition: L1CaloTriggerTowerDecoratorAlg.h:45
LVL1::L1CaloTriggerTowerDecoratorAlg::m_caloCellEnergy
std::string m_caloCellEnergy
Decoration strings (leave empty to disable the decoration)
Definition: L1CaloTriggerTowerDecoratorAlg.h:40
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
LVL1::L1CaloTriggerTowerDecoratorAlg::execute
virtual StatusCode execute() override
Function executing the algorithm.
Definition: L1CaloTriggerTowerDecoratorAlg.cxx:97