ATLAS Offline Software
ZdcLEDAnalysisTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <sstream>
6 #include <memory>
7 
17 
18 namespace ZDC
19 {
21  asg::AsgTool(name),
22  m_name(name)
23 {
24 #ifndef XAOD_STANDALONE
25  declareInterface<IZdcAnalysisTool>(this);
26 #endif
27 
28 }
29 
31 {
32  ATH_MSG_DEBUG("Deleting ZdcLEDAnalysisTool named " << m_name);
33 }
34 
36 {
37  // Use configuration to direct initialization.
38  //
39  if (m_configuration == "ppPbPb2023") {
41  }
42  else if (m_configuration == "ppALFA2023") {
44  }
45  else if (m_configuration == "zdcStandalone") {
47  }
48  else {
49  ATH_MSG_ERROR("Unknown configuration: " << m_configuration);
50  return StatusCode::FAILURE;
51  }
52 
53  // Check for valid configuration
54  //
56  ATH_MSG_ERROR("Invalid initialization of tool for configuration " << m_configuration);
57  return StatusCode::FAILURE;
58  }
59 
60  ATH_MSG_INFO("doZDC: " << (m_doZDC ? "true" : "false"));
61  ATH_MSG_INFO("doRPD: " << (m_doRPD ? "true" : "false"));
62  ATH_MSG_INFO("Configuration: " << m_configuration);
63  ATH_MSG_DEBUG("AuxSuffix: " << m_auxSuffix);
64  ATH_MSG_DEBUG("NumSamples: " << m_numSamples);
65  ATH_MSG_DEBUG("Presample: " << m_preSample);
66  ATH_MSG_DEBUG("DeltaTSample: " << m_deltaTSample);
67 
68  if (m_writeAux && m_auxSuffix != "") {
69  ATH_MSG_DEBUG("suffix string = " << m_auxSuffix);
70  }
71 
72  std::ostringstream BCIDList;
73  BCIDList << "LED BCIDs:";
74 
75  for (unsigned int idxLED = 0; idxLED < ZdcEventInfo::NumLEDs; idxLED++) {
76  BCIDList << m_LEDNames[idxLED] << " - BCID " << m_LEDBCID[idxLED];
77  if (idxLED < ZdcEventInfo::NumLEDs - 1) BCIDList << ", ";
78  }
79 
80  ATH_MSG_DEBUG(BCIDList.str());
81 
82 
83  // If an aux suffix is provided, prepend it with "_" so we don't have to do so at each use
84  //
85  if (m_auxSuffix != "") m_auxSuffix = "_" + m_auxSuffix;
86 
87  // initialize eventInfo access
88  //
90 
91  // initialize keys for reading ZDC event-level aux decor information
92  //
93  m_eventTypeKey = m_zdcSumContainerName + ".EventType";
94  ATH_CHECK(m_eventTypeKey.initialize());
95 
96  m_DAQModeKey = m_zdcSumContainerName + ".DAQMode";
97  ATH_CHECK(m_DAQModeKey.initialize());
98 
99  m_robBCIDKey = m_zdcSumContainerName + ".rodBCID";
100  ATH_CHECK(m_robBCIDKey.initialize());
101 
102  // Initialize writeDecor handles
103  //
105  ATH_CHECK( m_ZdcLEDPresampleADC.initialize());
106 
108  ATH_CHECK( m_ZdcLEDADCSum.initialize());
109 
111  ATH_CHECK( m_ZdcLEDMaxADC.initialize());
112 
114  ATH_CHECK( m_ZdcLEDMaxSample.initialize());
115 
117  ATH_CHECK( m_ZdcLEDAvgTime.initialize());
118 
119  // The LED type gets writting to the module 0 sum container
120  //
122  ATH_CHECK( m_ZdcLEDType.initialize());
123 
124  m_init = true;
125  return StatusCode::SUCCESS;
126 }
127 
129 {
130  // Use the defaults for now except for sampleAnaStart values and the BCIDs
131  //
134 
135  m_LEDBCID = {1152, 1154, 1156};
136  m_LEDCalreqIdx = {2, 1, 0};
137 }
138 
140 {
141  // Use the defaults for now except for sampleAnaStart values and the BCIDs
142  //
145 
146  m_LEDBCID = {3476, 3479, 3482};
147  m_LEDCalreqIdx = {0, 1, 2};
148 }
149 
151 {
152  // Use the defaults for now except for sampleAnaStart values and the BCIDs
155 
156  m_LEDBCID = {3479, 3482, 3485};
157  m_LEDCalreqIdx = {0 ,1 ,2};
158 }
159 
161  const xAOD::ZdcModuleContainer& moduleSumContainer)
162 {
163  if (!m_init) {
164  ATH_MSG_WARNING("Tool not initialized!");
165  return StatusCode::FAILURE;
166  }
167 
168  if (moduleContainer.size()==0) return StatusCode::SUCCESS; // if no modules, do nothing
169 
171  ATH_CHECK(eventInfo.isValid());
172 
175 
176  // Loop over the sum container to find event-level info (side == 0)
177  //
178  bool haveZdcEventInfo = false;
179  unsigned int eventType = ZdcEventInfo::ZdcEventUnknown;
180  unsigned int bcid = eventInfo->bcid();
181  unsigned int DAQMode = ZdcEventInfo::DAQModeUndef;
182 
183  const xAOD::ZdcModule* moduleSumEventInfo_ptr = 0;
184 
185  for (auto modSum : moduleSumContainer) {
186  //
187  // Module sum object with side == 0 contains event-level information
188  //
189  if (modSum->zdcSide() == 0) {
190  //
191  // Add the event type and bcid as aux decors
192  //
193  ATH_MSG_DEBUG("Found global sum");
194  eventType = eventTypeHandle(*modSum);
195  DAQMode = DAQModeHandle(*modSum);
196  haveZdcEventInfo = true;
197  moduleSumEventInfo_ptr = modSum;
198  }
199  }
200  if (!haveZdcEventInfo) {
201  ATH_MSG_ERROR("Zdc event data not available (moduleSum with side = 0)");
202  return StatusCode::FAILURE;
203  }
204 
205  //
206  // only do something on LED calibration events
207  //
208  if (eventType != ZdcEventInfo::ZdcEventLED) return StatusCode::SUCCESS;
209 
210  // In standalone mode, we have to read the BCID from the rob header
211  //
214  if (!robBCIDHandle.isValid()) return StatusCode::FAILURE;
215 
216  const std::vector<uint16_t>& robBCIDvec = robBCIDHandle(*moduleSumEventInfo_ptr);
217  if (robBCIDHandle->size() == 0) return StatusCode::FAILURE;
218 
219  unsigned int checkBCID = robBCIDvec[0];
220  for (unsigned int bcid : robBCIDvec) {
221  if (bcid != checkBCID) {
222  ATH_MSG_ERROR("Inconsistent BCIDs in rob header, cannot continue in standalone mode");
223  return StatusCode::FAILURE;
224  }
225  }
226 
227  bcid = checkBCID;
228  }
229 
230  // Determine the LED type
231  //
232  unsigned int evtLEDType = ZdcEventInfo::LEDNone;
233 
234  for (unsigned int idxLED = 0; idxLED < ZdcEventInfo::NumLEDs; idxLED++) {
235  //
236  // Does the BCID match one of those associated with the LEDs?
237  //
238  if (m_LEDBCID[idxLED] == bcid) {
240  //
241  // Also check the calreq trigger (to be implemented)
242  //
243  if (false) continue;
244  }
245 
246  evtLEDType = idxLED;
247  break;
248  }
249  }
250 
251  if (evtLEDType == ZdcEventInfo::LEDNone) {
252  //
253  // Thie BCID does not appear to be associated with one of the LEDs, print warning and quit processing
254  //
255  ATH_MSG_WARNING("Unexpected BCID found in data: bcid = " << bcid << m_configuration);
256  return StatusCode::SUCCESS;
257  }
258  else {
259  ATH_MSG_DEBUG("Event with BCID = " << bcid << " has LED type " << evtLEDType);
260  }
261 
262  // We are currently calculating the presample as an unsigned it, but there is another "presample"
263  // from ZdcAnalysisTool which for good reasons is float. So we have to match the type.
264  //
270 
272 
273  ATH_MSG_DEBUG("Starting event processing for LED " << m_LEDNames[evtLEDType]);
274 
275  for (const auto zdcModule : moduleContainer)
276  {
278  if (zdcModule->zdcType() == 0) {
279  results = processZDCModule(*zdcModule);
280  }
281  else if (zdcModule->zdcType() == 1 && zdcModule->zdcModule() == 4) {
282  results = processRPDModule(*zdcModule);
283  }
284 
285  ATH_MSG_DEBUG("Writing aux decors to module with side, module, channel = " << zdcModule->zdcSide() << ", " << zdcModule->zdcModule()
286  << ", " << zdcModule->zdcChannel());
287 
288  moduleLEDPresampleADCHandle(*zdcModule) = std::floor(results.getPresampleADC() + 1.0e-6);
289  moduleLEDADCSumHandle(*zdcModule) = results.getADCSum();
290  moduleLEDMaxADCHandle(*zdcModule) = results.getMaxADC();
291  moduleLEDMaxSampleHandle(*zdcModule) = results.getMaxSample();
292  moduleLEDAvgTimeHandle(*zdcModule) = results.getAvgTime();
293  }
294 
295  // Write the LED type to the moduleSum container keep event-level data
296  //
297  LEDTypeHandle(*moduleSumEventInfo_ptr) = evtLEDType;
298 
299  ATH_MSG_DEBUG("Finishing event processing");
300 
301 
302  return StatusCode::SUCCESS;
303 }
304 
306 {
307  if (!m_init) {
308  ATH_MSG_WARNING("Tool not initialized!");
309  return StatusCode::FAILURE;
310  }
311 
312  ATH_MSG_DEBUG ("Trying to retrieve " << m_zdcModuleContainerName);
313 
314  m_zdcModules = 0;
316 
317 
319 
320  return StatusCode::SUCCESS;
321 }
322 
324 {
325  ATH_MSG_DEBUG("Processing ZDC side, channel = " << module.zdcSide() << ", " << module.zdcModule());
326  bool doLG = false;
327 
328  static const SG::ConstAccessor<std::vector<uint16_t> > g1dataAcc ("g1data");
329  static const SG::ConstAccessor<std::vector<uint16_t> > g0dataAcc ("g0data");
330  std::vector<uint16_t> HGSamples = g1dataAcc (module);
331  std::vector<uint16_t> LGSamples = g0dataAcc (module);
332 
333  std::vector<uint16_t>::const_iterator maxIter = std::max_element(HGSamples.begin(), HGSamples.end());
334  if (maxIter != HGSamples.end()) {
335  if (*maxIter > m_HGADCOverflow) doLG = true;
336  }
337 
338  if (doLG) {
340  }
341  else {
343  }
344 }
345 
347 {
348  ATH_MSG_DEBUG("Processing RPD side, channel = " << module.zdcSide() << ", " << module.zdcChannel());
349  static const SG::ConstAccessor<std::vector<uint16_t> > g0dataAcc ("g0data");
351 }
352 
354  unsigned int startSample, unsigned int endSample, float gainScale)
355 {
356 
357  int ADCSum = 0;
358  int maxADCsub = -999;
359  unsigned int maxSample = 0;
360  float avgTime = 0.f;
361 
362  if (startSample > m_numSamples || endSample > m_numSamples) {
363  ATH_MSG_ERROR("Start or end sample number greater than number of samples");
364  return ZDCLEDModuleResults();
365  }
366 
367  int preFADC = data[m_preSample];
368 
369  for (unsigned int sample = startSample; sample <= endSample; sample++) {
370  int FADCsub = data[sample] - preFADC;
371  float time = (sample + 0.5f)*m_deltaTSample;
372  ADCSum += FADCsub;
373  if (FADCsub > maxADCsub) {
374  maxADCsub = FADCsub;
375  maxSample = sample;
376  }
377 
378  avgTime += time*FADCsub;
379  }
380  if (ADCSum!=0){
381  avgTime /= ADCSum;
382  } else {
383  avgTime = 0.f; //used as default in the ZDCLEDModuleResults c'tor
384  }
385 
386  return ZDCLEDModuleResults(preFADC, ADCSum*gainScale, maxADCsub*gainScale, maxSample, avgTime);
387 }
388 
389 
390 } // namespace ZDC
391 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ZDC::ZdcLEDAnalysisTool::m_preSample
unsigned int m_preSample
Definition: ZdcLEDAnalysisTool.h:127
WriteHandle.h
Handle class for recording to StoreGate.
ZDC::ZdcLEDAnalysisTool::m_LEDNames
const std::vector< std::string > m_LEDNames
Definition: ZdcLEDAnalysisTool.h:122
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
ZDC::ZdcLEDAnalysisTool::m_sampleAnaEndZDC
unsigned int m_sampleAnaEndZDC
Definition: ZdcLEDAnalysisTool.h:130
ZDC::ZdcLEDAnalysisTool::m_auxSuffix
Gaudi::Property< std::string > m_auxSuffix
Definition: ZdcLEDAnalysisTool.h:110
ZDC::ZdcLEDAnalysisTool::m_ZdcLEDPresampleADC
SG::WriteDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcLEDPresampleADC
Definition: ZdcLEDAnalysisTool.h:158
ZDC::ZdcLEDAnalysisTool::m_configuration
Gaudi::Property< std::string > m_configuration
Definition: ZdcLEDAnalysisTool.h:107
ZDC::ZdcLEDAnalysisTool::m_zdcSums
const xAOD::ZdcModuleContainer * m_zdcSums
Definition: ZdcLEDAnalysisTool.h:141
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ZDC::ZdcLEDAnalysisTool::~ZdcLEDAnalysisTool
virtual ~ZdcLEDAnalysisTool() override
Definition: ZdcLEDAnalysisTool.cxx:30
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
ZDC::ZdcLEDAnalysisTool::m_DAQModeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_DAQModeKey
Definition: ZdcLEDAnalysisTool.h:154
xAOD::ZdcModule_v1
Class containing ZDC Module information.
Definition: ZdcModule_v1.h:25
asg
Definition: DataHandleTestTool.h:28
ZDC::ZdcLEDAnalysisTool::m_ZdcLEDType
SG::WriteDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcLEDType
Definition: ZdcLEDAnalysisTool.h:157
ZDC::ZdcLEDAnalysisTool::initialize_ppALFA2023
void initialize_ppALFA2023()
Definition: ZdcLEDAnalysisTool.cxx:150
ZdcEventInfo::ZdcEventUnknown
@ ZdcEventUnknown
Definition: ZdcEventInfo.h:16
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
ZdcLEDAnalysisTool.h
ZDC::ZdcLEDAnalysisTool::m_ZdcLowGainScale
float m_ZdcLowGainScale
Definition: ZdcLEDAnalysisTool.h:134
ZDC::ZdcLEDAnalysisTool::m_eventTypeKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_eventTypeKey
Definition: ZdcLEDAnalysisTool.h:148
ZdcEventInfo::DAQMode
DAQMode
Definition: ZdcEventInfo.h:17
ZDC::ZdcLEDAnalysisTool::m_HGADCOverflow
unsigned int m_HGADCOverflow
Definition: ZdcLEDAnalysisTool.h:125
ZDC::ZdcLEDAnalysisTool::m_doRPD
Gaudi::Property< bool > m_doRPD
Definition: ZdcLEDAnalysisTool.h:114
ZdcModuleAuxContainer.h
ZDC::ZdcLEDAnalysisTool::m_doZDC
Gaudi::Property< bool > m_doZDC
Definition: ZdcLEDAnalysisTool.h:115
ZDC::ZdcLEDAnalysisTool::recoZdcModules
StatusCode recoZdcModules(const xAOD::ZdcModuleContainer &moduleContainer, const xAOD::ZdcModuleContainer &moduleSumContainer) override
Definition: ZdcLEDAnalysisTool.cxx:160
python.PyAthena.module
module
Definition: PyAthena.py:134
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:100
ZDC::ZdcLEDAnalysisTool::m_LEDBCID
std::vector< unsigned int > m_LEDBCID
Definition: ZdcLEDAnalysisTool.h:120
ZDC::ZdcLEDAnalysisTool::m_zdcSumContainerName
Gaudi::Property< std::string > m_zdcSumContainerName
Definition: ZdcLEDAnalysisTool.h:140
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ZdcEventInfo::LEDNone
@ LEDNone
Definition: ZdcEventInfo.h:18
ZDC::ZdcLEDAnalysisTool::m_deltaTSample
float m_deltaTSample
Definition: ZdcLEDAnalysisTool.h:128
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ZdcEventInfo::NumLEDs
@ NumLEDs
Definition: ZdcEventInfo.h:18
ZDC::ZdcLEDAnalysisTool::m_zdcModuleContainerName
Gaudi::Property< std::string > m_zdcModuleContainerName
Definition: ZdcLEDAnalysisTool.h:138
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
ZDC::ZdcLEDAnalysisTool::m_sampleAnaStartZDC
unsigned int m_sampleAnaStartZDC
Definition: ZdcLEDAnalysisTool.h:129
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
ZDC::ZdcLEDAnalysisTool::m_robBCIDKey
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_robBCIDKey
Definition: ZdcLEDAnalysisTool.h:151
ZDC::ZdcLEDAnalysisTool::m_name
std::string m_name
Definition: ZdcLEDAnalysisTool.h:106
WriteDecorHandle.h
Handle class for adding a decoration to an object.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ZDC::ZDCLEDModuleResults
Definition: ZdcLEDAnalysisTool.h:27
ZDC::ZdcLEDAnalysisTool::m_init
bool m_init
Definition: ZdcLEDAnalysisTool.h:102
ZDC::ZdcLEDAnalysisTool::reprocessZdc
StatusCode reprocessZdc() override
Definition: ZdcLEDAnalysisTool.cxx:305
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
ReadHandle.h
Handle class for reading from StoreGate.
ZDC::ZdcLEDAnalysisTool::m_LEDCalreqIdx
std::vector< unsigned int > m_LEDCalreqIdx
Definition: ZdcLEDAnalysisTool.h:119
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
python.ami.results
def results
Definition: ami.py:386
ZDC::ZdcLEDAnalysisTool::initialize
StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: ZdcLEDAnalysisTool.cxx:35
EventInfo.h
ZDC::ZdcLEDAnalysisTool::m_ZdcLEDADCSum
SG::WriteDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcLEDADCSum
Definition: ZdcLEDAnalysisTool.h:159
ZdcEventInfo::DAQModeUndef
@ DAQModeUndef
Definition: ZdcEventInfo.h:17
ZDC::ZdcLEDAnalysisTool::m_sampleAnaStartRPD
unsigned int m_sampleAnaStartRPD
Definition: ZdcLEDAnalysisTool.h:131
ZDC::ZdcLEDAnalysisTool::ZdcLEDAnalysisTool
ZdcLEDAnalysisTool(const std::string &name)
Definition: ZdcLEDAnalysisTool.cxx:20
ZDC::ZdcLEDAnalysisTool::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition: ZdcLEDAnalysisTool.h:145
ZDC::ZdcLEDAnalysisTool::processModuleData
ZDCLEDModuleResults processModuleData(const std::vector< unsigned short > &data, unsigned int startSample, unsigned int endSample, float gainScale)
Definition: ZdcLEDAnalysisTool.cxx:353
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
ZDC::ZdcLEDAnalysisTool::m_writeAux
bool m_writeAux
Definition: ZdcLEDAnalysisTool.h:108
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ZDC::ZdcLEDAnalysisTool::initialize_ppPbPb2023
void initialize_ppPbPb2023()
Definition: ZdcLEDAnalysisTool.cxx:139
ZDC
Definition: RpdSubtractCentroidTool.cxx:13
ZDC::ZdcLEDAnalysisTool::m_sampleAnaEndRPD
unsigned int m_sampleAnaEndRPD
Definition: ZdcLEDAnalysisTool.h:132
ReadDecorHandle.h
Handle class for reading a decoration on an object.
ZDC::ZdcLEDAnalysisTool::processRPDModule
ZDCLEDModuleResults processRPDModule(const xAOD::ZdcModule &module)
Definition: ZdcLEDAnalysisTool.cxx:346
ZdcEventInfo::Standalone
@ Standalone
Definition: ZdcEventInfo.h:17
ZDC::ZdcLEDAnalysisTool::m_ZdcLEDAvgTime
SG::WriteDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcLEDAvgTime
Definition: ZdcLEDAnalysisTool.h:162
ZDC::ZdcLEDAnalysisTool::m_zdcModules
const xAOD::ZdcModuleContainer * m_zdcModules
Definition: ZdcLEDAnalysisTool.h:139
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
ZDC::ZdcLEDAnalysisTool::m_ZdcLEDMaxSample
SG::WriteDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcLEDMaxSample
Definition: ZdcLEDAnalysisTool.h:161
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
ZDC::ZdcLEDAnalysisTool::initialize_zdcStandalone
void initialize_zdcStandalone()
Definition: ZdcLEDAnalysisTool.cxx:128
ZDC::ZdcLEDAnalysisTool::processZDCModule
ZDCLEDModuleResults processZDCModule(const xAOD::ZdcModule &module)
Definition: ZdcLEDAnalysisTool.cxx:323
ZDC::ZdcLEDAnalysisTool::m_numSamples
unsigned int m_numSamples
Definition: ZdcLEDAnalysisTool.h:126
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
ZdcEventInfo.h
Define enumerations for event-level ZDC data.
ZdcEventInfo::ZdcEventLED
@ ZdcEventLED
Definition: ZdcEventInfo.h:16
ZDC::ZdcLEDAnalysisTool::m_ZdcLEDMaxADC
SG::WriteDecorHandleKey< xAOD::ZdcModuleContainer > m_ZdcLEDMaxADC
Definition: ZdcLEDAnalysisTool.h:160