ATLAS Offline Software
ZDCTriggerSim.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
11 #ifndef ZDCTRIGVALID__ZDCTriggerSim__h
12 #define ZDCTRIGVALID__ZDCTriggerSim__h
13 
14 #include <array>
15 #include <cmath>
16 #include <list>
17 #include <memory>
18 #include <ostream>
19 #include <stdexcept>
20 #include <type_traits>
21 #include <vector>
22 
23 namespace ZDCTriggerSim {
25 
26 const std::vector<std::string> TypeStrings = {"CombLUTOutput", "CombLUTInput",
27  "SideLUTsInput", "ModAmplsInput", "FADCInput"};
28 } // namespace ZDCTriggerSim
29 
30 //
31 // Base class for simulation data. Primarily defines interface and virtual
32 // destructor
33 //
35  public:
36  virtual ~ZDCTriggerSimDataBase() = default;
37 
38  virtual unsigned int getNumBits() const = 0;
39  virtual unsigned int getNumData() const = 0;
40  virtual ZDCTriggerSim::DataType getType() const = 0;
41 
42  virtual unsigned int getValueTrunc(unsigned int idx = 0) const = 0;
43  virtual void dump(std::ostream& strm) const = 0;
44 };
45 
46 // Template class that defines data of type T -- usually but not always unsigned
47 // integer
48 // with NData different values and which will be truncated to NBits
49 //
50 // The class also allows the use of conversion factors that are applied to the
51 // input values
52 // when the data is actually used. This allows translation between (e.g.)
53 // energies and ADC values or any other kind of required conversion.
54 //
55 //
56 template <typename T, unsigned int NData, unsigned int NBits,
59  bool m_doConvert{};
60  std::vector<float> m_convertFactors;
61 
62  std::vector<T> m_data;
63  bool m_haveData{};
64 
65  unsigned int doConvTrunc(const T& inValue) const {
66  unsigned int value = inValue;
67 
68  if (m_doConvert) {
69  value = std::floor(inValue * m_convertFactors.at(0));
70  }
71 
72  unsigned int valueTruncZero = std::max(static_cast<unsigned int>(0), value);
73  unsigned int valueTruncBits =
74  std::min(valueTruncZero, static_cast<unsigned int>((1 << NBits) - 1));
75  return valueTruncBits;
76  }
77 
78  // static const unsigned int maskBits = (2<<NBits) - 1;
79  public:
81  : m_doConvert(false), m_data(NData, 0), m_haveData(false) {
82  static_assert(NData > 0, "ZDCTriggerSimData requires at least one datum");
83  static_assert(NBits > 0, "ZDCTriggerSimData requires at least 1 bit");
84  }
85 
86  ZDCTriggerSimData(const std::vector<float>& conversionFactors)
87  : m_doConvert(true),
88  m_convertFactors(conversionFactors),
89  m_data(NData, 0),
90  m_haveData(false) {
91  static_assert(NData > 0, "ZDCTriggerSimData requires at least one datum");
92  static_assert(NBits > 0, "ZDCTriggerSimData requires at least 1 bit");
93  }
94 
95  virtual ~ZDCTriggerSimData() override {}
96 
97  unsigned int getNumBits() const override { return NBits; }
98  unsigned int getNumData() const override { return NData; }
99  virtual ZDCTriggerSim::DataType getType() const override { return Type; }
100 
101  virtual unsigned int getValueTrunc(unsigned int idx = 0) const override {
102  if (!m_haveData)
103  throw std::logic_error("No data available for ZDCTriggerSimData");
104  return doConvTrunc(m_data.at(idx));
105  }
106 
107  void setDatum(T datum) {
108  if (NData != 1)
109  throw std::logic_error(
110  "ZDCTriggerSimData setDatum called with NData > 1");
111  ;
112  m_haveData = true;
113  m_data[0] = datum;
114  }
115 
116  void setData(const std::vector<T>& inData) {
117  m_data = inData;
118  m_haveData = true;
119  }
120 
121  void clearData() { m_haveData = false; }
122 
123  virtual void dump(std::ostream& strm) const override {
124  strm << "Data for Type: " << Type << ": ";
125  for (auto datum : m_data) {
126  strm << doConvTrunc(datum) << " ";
127  }
128  strm << std::endl;
129  }
130 };
131 
132 namespace ZDCTriggerSim {
133 // The usual way we provide the module amplitudes
134 //
135 
136 // It's easier to input the FADC data as a single vector of 8 channels * NBCID* 8 samples/BCID 12-bit data
137 // For physics data, we usually read 3 BCIDs
138 //
140 
143 
144 // The usual way we provide the module amplitudes
145 //
147 
148 // The usual way we provide input to the side LUTs
149 //
151 
152 // In case we want to be able to convert from energies or other floating input
153 //
155 
156 // The "usual" way we provide inputs to the combined LUT -- with unsigned
157 // integers
158 //
160 
161 // In case we want to be able to convert from energies or other float
162 // to the integer inputs to the combined LUT
163 //
164 // typedef ZDCTriggerSimData<float, 2, 4> CombLUTInputsFloat;
165 
166 // The combined LUT produces 3 output bits
167 //
169 
170 typedef std::shared_ptr<const ZDCTriggerSimDataBase> SimDataCPtr;
171 typedef std::shared_ptr<ZDCTriggerSimDataBase> SimDataPtr;
172 } // namespace ZDCTriggerSim
173 
174 // Base class for the ZDC trigger simulation.
175 //
176 // It is an abstract base that also provides the stack holding the intermediate
177 // results
178 //
179 //
181  typedef std::list<ZDCTriggerSim::SimDataCPtr> SimStack;
182 
183 private:
185 
186  protected:
187  void stackClear() { m_stack.clear(); }
188 
190  m_stack.push_back(SimStack::value_type(ptr));
191  }
192 
194  return m_stack.back();
195  }
196 
197  // Take the data on the "top" of the stack and use it as input, adding new
198  // data to the stack
199  //
200  virtual void doSimStage() = 0;
201 
202  public:
203  ZDCTriggerSimBase() = default;
204  virtual ~ZDCTriggerSimBase() = default;
205 
206  // Every implementation of the base should ultimately produce the L1 bits
207  // possibly (usually) through recursion
208  //
209  virtual unsigned int simLevel1Trig(
210  const ZDCTriggerSim::SimDataCPtr& data) = 0;
211 
212  SimStack::const_iterator stackBottom() const
213  {
214  return m_stack.begin();
215  }
216 
217  SimStack::const_reverse_iterator stackTop() const {
218  return m_stack.rbegin();
219  }
220 
221  void dump(std::ostream& strm) const;
222 };
223 
224 class ZDCTriggerSimCombLUT : virtual public ZDCTriggerSimBase {
225  std::array<unsigned int, 256> m_combLUT{};
226 
227  protected:
228  //
229  // The data on the top of the stack should be the two 4 bit inputs
230  // to the combined LUT. The output is the combined LUT output
231  //
232  virtual void doSimStage() override;
233 
234  public:
235  ZDCTriggerSimCombLUT(const std::array<unsigned int, 256>& inLUT)
236  : m_combLUT(inLUT) {}
237 
238  virtual unsigned int simLevel1Trig(
239  const ZDCTriggerSim::SimDataCPtr& inputBits) override {
240  stackClear();
241  stackPush(inputBits);
242 
243  doSimStage();
244  return stackTopData()->getValueTrunc();
245  }
246 };
247 
249  public ZDCTriggerSimCombLUT {
250  std::array<unsigned int, 4096> m_LUTA{};
251  std::array<unsigned int, 4096> m_LUTC{};
252 
253  protected:
254  //
255  // The data on the top of the stack should be the two 12 bit inputs
256  // to each of the side LUT. The output is the two side LUT outputs.
257  //
258  // After we excute the side LUT, we call the CombLUT doSimStage();
259  //
260  virtual void doSimStage() override;
261 
262  public:
263  ZDCTriggerSimAllLUTs(const std::array<unsigned int, 4096>& sideALUT,
264  const std::array<unsigned int, 4096>& sideCLUT,
265  const std::array<unsigned int, 256>& inCombLUT)
266  : ZDCTriggerSimCombLUT(inCombLUT), m_LUTA(sideALUT), m_LUTC(sideCLUT) {}
267 
268  virtual unsigned int simLevel1Trig(
269  const ZDCTriggerSim::SimDataCPtr& inputData) override {
270  stackClear();
271  stackPush(inputData);
272 
273  doSimStage();
274  return stackTopData()->getValueTrunc();
275  }
276 };
277 
279  public ZDCTriggerSimAllLUTs {
280  protected:
281  //
282  // The data on the top of the stack should be the 8 module amplitudes
283  // four for each ZDC. From these we obtain the module sums divided by four
284  //
285  // After we evalute the per-side sums, we call the AllLUTs doSimStage();
286  //
287  virtual void doSimStage() override;
288 
289  public:
290  ZDCTriggerSimModuleAmpls(const std::array<unsigned int, 4096>& sideALUT,
291  const std::array<unsigned int, 4096>& sideCLUT,
292  const std::array<unsigned int, 256>& inCombLUT)
293  : ZDCTriggerSimAllLUTs(sideALUT, sideCLUT, inCombLUT) {}
294 
295  virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr& inputData) override {
296  stackClear();
297  stackPush(inputData);
298 
299  doSimStage();
300  return stackTopData()->getValueTrunc();
301  }
302 };
303 
304 class ZDCTriggerSimFADC : virtual public ZDCTriggerSimBase,
306 {
307  std::array<std::array<unsigned int, 4>, 2> m_deriv2ndThresholds;
308  unsigned int m_minSampleAna{};
309  unsigned int m_maxSampleAna{};
310  unsigned int m_baselineDelta{};
311 
312  std::array<std::array<int, 4>, 2> m_maxNegDeriv2nd{};
313  std::array<std::array<unsigned int, 4>, 2> m_maxADC{};
314  std::array<std::array<unsigned int, 4>, 2> m_baseline{};
315 
316 protected:
317  //
318  // The data on the top of the stack should be the FADC data for
319  // the eight ZDC channels. There should be a total of 8*3*8 samples
320  //
321  // After we excute
322  //
323  virtual void doSimStage() override;
324 
325  std::vector<unsigned int> CalculateNeg2ndDerivatives(const std::vector<unsigned int>& samples, unsigned int step);
326 
327  public:
328  ZDCTriggerSimFADC(const std::array<unsigned int, 4096>& sideALUT,
329  const std::array<unsigned int, 4096>& sideCLUT,
330  const std::array<unsigned int, 256>& inCombLUT,
331  const std::array<std::array<unsigned int, 4>, 2>& negDeriv2ndThresh,
332  unsigned int minSampleAna, unsigned int maxSampleAna, unsigned int baselineDelta) :
333  ZDCTriggerSimModuleAmpls(sideALUT, sideCLUT, inCombLUT),
334  m_deriv2ndThresholds(negDeriv2ndThresh),
335  m_minSampleAna(minSampleAna),
336  m_maxSampleAna(maxSampleAna),
337  m_baselineDelta(baselineDelta)
338  {}
339 
340  virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr& inputData) override {
341  stackClear();
342  stackPush(inputData);
343 
344  doSimStage();
345  return stackTopData()->getValueTrunc();
346  }
347 
348 
349  const auto& getMaxNegDeriv2nds() const {return m_maxNegDeriv2nd;}
350  const auto& getMaxADCs() const {return m_maxADC;}
351  const auto& getBaselines() const {return m_baseline;}
352 };
353 
354 
355 #endif
ZDCTriggerSimModuleAmpls::doSimStage
virtual void doSimStage() override
Definition: ZDCTriggerSim.cxx:67
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
ZDCTriggerSimBase::m_stack
SimStack m_stack
Definition: ZDCTriggerSim.h:184
ZDCTriggerSimFADC::getBaselines
const auto & getBaselines() const
Definition: ZDCTriggerSim.h:351
ZDCTriggerSim::SimDataCPtr
std::shared_ptr< const ZDCTriggerSimDataBase > SimDataCPtr
Definition: ZDCTriggerSim.h:170
ZDCTriggerSimDataBase::getNumData
virtual unsigned int getNumData() const =0
ZDCTriggerSimData::getType
virtual ZDCTriggerSim::DataType getType() const override
Definition: ZDCTriggerSim.h:99
ZDCTriggerSim::TModAmplsInput
@ TModAmplsInput
Definition: ZDCTriggerSim.h:24
ZDCTriggerSimData::m_data
std::vector< T > m_data
Definition: ZDCTriggerSim.h:62
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
ZDCTriggerSimBase::simLevel1Trig
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &data)=0
ZDCTriggerSimData::getNumData
unsigned int getNumData() const override
Definition: ZDCTriggerSim.h:98
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
ZDCTriggerSimBase::stackClear
void stackClear()
Definition: ZDCTriggerSim.h:187
ZDCTriggerSimAllLUTs::simLevel1Trig
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputData) override
Definition: ZDCTriggerSim.h:268
ZDCTriggerSim::TCombLUTOutput
@ TCombLUTOutput
Definition: ZDCTriggerSim.h:24
ZDCTriggerSimData::ZDCTriggerSimData
ZDCTriggerSimData()
Definition: ZDCTriggerSim.h:80
ZDCTriggerSimDataBase::getValueTrunc
virtual unsigned int getValueTrunc(unsigned int idx=0) const =0
ZDCTriggerSimFADC::m_baselineDelta
unsigned int m_baselineDelta
Definition: ZDCTriggerSim.h:310
ZDCTriggerSimData::getValueTrunc
virtual unsigned int getValueTrunc(unsigned int idx=0) const override
Definition: ZDCTriggerSim.h:101
athena.value
value
Definition: athena.py:124
ZDCTriggerSimData::ZDCTriggerSimData
ZDCTriggerSimData(const std::vector< float > &conversionFactors)
Definition: ZDCTriggerSim.h:86
ZDCTriggerSimFADC::m_maxSampleAna
unsigned int m_maxSampleAna
Definition: ZDCTriggerSim.h:309
ZDCTriggerSim
Definition: ZDCTriggerSim.h:23
ZDCTriggerSimAllLUTs::doSimStage
virtual void doSimStage() override
Definition: ZDCTriggerSim.cxx:42
ZDCTriggerSimAllLUTs::m_LUTA
std::array< unsigned int, 4096 > m_LUTA
Definition: ZDCTriggerSim.h:250
ZDCTriggerSimData::doConvTrunc
unsigned int doConvTrunc(const T &inValue) const
Definition: ZDCTriggerSim.h:65
ZDCTriggerSimModuleAmpls::simLevel1Trig
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputData) override
Definition: ZDCTriggerSim.h:295
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
ZDCTriggerSim::TCombLUTInput
@ TCombLUTInput
Definition: ZDCTriggerSim.h:24
ZDCTriggerSimModuleAmpls
Definition: ZDCTriggerSim.h:279
ZDCTriggerSimFADC::m_maxADC
std::array< std::array< unsigned int, 4 >, 2 > m_maxADC
Definition: ZDCTriggerSim.h:313
ZDCTriggerSimBase::~ZDCTriggerSimBase
virtual ~ZDCTriggerSimBase()=default
ZDCTriggerSimData::m_haveData
bool m_haveData
Definition: ZDCTriggerSim.h:63
ZDCTriggerSimData::getNumBits
unsigned int getNumBits() const override
Definition: ZDCTriggerSim.h:97
ZDCTriggerSim::CombLUTOutput
ZDCTriggerSimData< unsigned int, 1, 3, TCombLUTOutput > CombLUTOutput
Definition: ZDCTriggerSim.h:168
ZDCTriggerSimDataBase
Definition: ZDCTriggerSim.h:34
ZDCTriggerSimBase::SimStack
std::list< ZDCTriggerSim::SimDataCPtr > SimStack
Definition: ZDCTriggerSim.h:181
ZDCTriggerSimCombLUT::m_combLUT
std::array< unsigned int, 256 > m_combLUT
Definition: ZDCTriggerSim.h:225
ZDCTriggerSimData::dump
virtual void dump(std::ostream &strm) const override
Definition: ZDCTriggerSim.h:123
ZDCTriggerSim::TSideLUTsInput
@ TSideLUTsInput
Definition: ZDCTriggerSim.h:24
ZDCTriggerSimAllLUTs
Definition: ZDCTriggerSim.h:249
ZDCTriggerSimBase::stackTopData
const ZDCTriggerSim::SimDataCPtr & stackTopData() const
Definition: ZDCTriggerSim.h:193
ZDCTriggerSimDataBase::getType
virtual ZDCTriggerSim::DataType getType() const =0
ZDCTriggerSimData::clearData
void clearData()
Definition: ZDCTriggerSim.h:121
Type
RootType Type
Definition: TrigTSerializer.h:30
ZDCTriggerSimDataBase::dump
virtual void dump(std::ostream &strm) const =0
ZDCTriggerSimBase::stackBottom
SimStack::const_iterator stackBottom() const
Definition: ZDCTriggerSim.h:212
ZDCTriggerSimCombLUT::simLevel1Trig
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputBits) override
Definition: ZDCTriggerSim.h:238
ZDCTriggerSimFADC::ZDCTriggerSimFADC
ZDCTriggerSimFADC(const std::array< unsigned int, 4096 > &sideALUT, const std::array< unsigned int, 4096 > &sideCLUT, const std::array< unsigned int, 256 > &inCombLUT, const std::array< std::array< unsigned int, 4 >, 2 > &negDeriv2ndThresh, unsigned int minSampleAna, unsigned int maxSampleAna, unsigned int baselineDelta)
Definition: ZDCTriggerSim.h:328
ZDCTriggerSimCombLUT::ZDCTriggerSimCombLUT
ZDCTriggerSimCombLUT(const std::array< unsigned int, 256 > &inLUT)
Definition: ZDCTriggerSim.h:235
ZDCTriggerSimData::~ZDCTriggerSimData
virtual ~ZDCTriggerSimData() override
Definition: ZDCTriggerSim.h:95
ZDCTriggerSim::TFADCInputs
@ TFADCInputs
Definition: ZDCTriggerSim.h:24
ZDCTriggerSimFADC::m_minSampleAna
unsigned int m_minSampleAna
Definition: ZDCTriggerSim.h:308
ZDCTriggerSimFADC::getMaxADCs
const auto & getMaxADCs() const
Definition: ZDCTriggerSim.h:350
ZDCTriggerSimFADC::simLevel1Trig
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputData) override
Definition: ZDCTriggerSim.h:340
ZDCTriggerSimDataBase::~ZDCTriggerSimDataBase
virtual ~ZDCTriggerSimDataBase()=default
xAODType
Definition: ObjectType.h:13
ZDCTriggerSim::SimDataPtr
std::shared_ptr< ZDCTriggerSimDataBase > SimDataPtr
Definition: ZDCTriggerSim.h:171
ZDCTriggerSimCombLUT::doSimStage
virtual void doSimStage() override
Definition: ZDCTriggerSim.cxx:20
ZDCTriggerSimBase::stackPush
void stackPush(const ZDCTriggerSim::SimDataCPtr &ptr)
Definition: ZDCTriggerSim.h:189
ZDCTriggerSimFADC::doSimStage
virtual void doSimStage() override
Definition: ZDCTriggerSim.cxx:100
lumiFormat.array
array
Definition: lumiFormat.py:91
ZDCTriggerSim::TypeStrings
const std::vector< std::string > TypeStrings
Definition: ZDCTriggerSim.h:26
ZDCTriggerSimData::m_convertFactors
std::vector< float > m_convertFactors
Definition: ZDCTriggerSim.h:60
ZDCTriggerSimBase::doSimStage
virtual void doSimStage()=0
ZDCTriggerSimBase
Definition: ZDCTriggerSim.h:180
ZDCTriggerSimData
Definition: ZDCTriggerSim.h:58
ZDCTriggerSimFADC::m_maxNegDeriv2nd
std::array< std::array< int, 4 >, 2 > m_maxNegDeriv2nd
Definition: ZDCTriggerSim.h:312
ZDCTriggerSimFADC
Definition: ZDCTriggerSim.h:306
ZDCTriggerSimModuleAmpls::ZDCTriggerSimModuleAmpls
ZDCTriggerSimModuleAmpls(const std::array< unsigned int, 4096 > &sideALUT, const std::array< unsigned int, 4096 > &sideCLUT, const std::array< unsigned int, 256 > &inCombLUT)
Definition: ZDCTriggerSim.h:290
ZDCTriggerSim::ModuleAmplInputsFloat
ZDCTriggerSimData< float, 8, 12, TModAmplsInput > ModuleAmplInputsFloat
Definition: ZDCTriggerSim.h:146
ZDCTriggerSimFADC::CalculateNeg2ndDerivatives
std::vector< unsigned int > CalculateNeg2ndDerivatives(const std::vector< unsigned int > &samples, unsigned int step)
Definition: ZDCTriggerSim.cxx:193
ZDCTriggerSim::DataType
DataType
Definition: ZDCTriggerSim.h:24
ZDCTriggerSim::SideLUTInputsFloat
ZDCTriggerSimData< float, 2, 12, TSideLUTsInput > SideLUTInputsFloat
Definition: ZDCTriggerSim.h:154
ZDCTriggerSimAllLUTs::m_LUTC
std::array< unsigned int, 4096 > m_LUTC
Definition: ZDCTriggerSim.h:251
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
LArCellBinning.step
step
Definition: LArCellBinning.py:158
ZDCTriggerSimBase::ZDCTriggerSimBase
ZDCTriggerSimBase()=default
ZDCTriggerSim::FADCInputs
ZDCTriggerSimData< unsigned int, 8 *24, 12, TFADCInputs > FADCInputs
Definition: ZDCTriggerSim.h:139
ZDCTriggerSimBase::dump
void dump(std::ostream &strm) const
Definition: ZDCTriggerSim.cxx:11
ZDCTriggerSimData::m_doConvert
bool m_doConvert
Definition: ZDCTriggerSim.h:59
ZDCTriggerSimData::setData
void setData(const std::vector< T > &inData)
Definition: ZDCTriggerSim.h:116
ZDCTriggerSim::CombLUTInputsInt
ZDCTriggerSimData< unsigned int, 2, 4, TCombLUTInput > CombLUTInputsInt
Definition: ZDCTriggerSim.h:159
ZDCTriggerSim::ModuleAmplInputsInt
ZDCTriggerSimData< unsigned int, 8, 12, TModAmplsInput > ModuleAmplInputsInt
Definition: ZDCTriggerSim.h:142
ZDCTriggerSimFADC::getMaxNegDeriv2nds
const auto & getMaxNegDeriv2nds() const
Definition: ZDCTriggerSim.h:349
ZDCTriggerSimData::setDatum
void setDatum(T datum)
Definition: ZDCTriggerSim.h:107
ZDCTriggerSimCombLUT
Definition: ZDCTriggerSim.h:224
ZDCTriggerSimFADC::m_deriv2ndThresholds
std::array< std::array< unsigned int, 4 >, 2 > m_deriv2ndThresholds
Definition: ZDCTriggerSim.h:307
ZDCTriggerSim::SideLUTInputsInt
ZDCTriggerSimData< unsigned int, 2, 12, TSideLUTsInput > SideLUTInputsInt
Definition: ZDCTriggerSim.h:150
ZDCTriggerSimFADC::m_baseline
std::array< std::array< unsigned int, 4 >, 2 > m_baseline
Definition: ZDCTriggerSim.h:314
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
ZDCTriggerSimDataBase::getNumBits
virtual unsigned int getNumBits() const =0
ZDCTriggerSimAllLUTs::ZDCTriggerSimAllLUTs
ZDCTriggerSimAllLUTs(const std::array< unsigned int, 4096 > &sideALUT, const std::array< unsigned int, 4096 > &sideCLUT, const std::array< unsigned int, 256 > &inCombLUT)
Definition: ZDCTriggerSim.h:263
ZDCTriggerSimBase::stackTop
SimStack::const_reverse_iterator stackTop() const
Definition: ZDCTriggerSim.h:217