11#ifndef ZDCTRIGVALID__ZDCTriggerSim__h
12#define ZDCTRIGVALID__ZDCTriggerSim__h
26const std::vector<std::string>
TypeStrings = {
"CombLUTOutput",
"CombLUTInput",
27 "SideLUTsInput",
"ModAmplsInput",
"FADCInput"};
43 virtual void dump(std::ostream& strm)
const = 0;
56template <
typename T,
unsigned int NData,
unsigned int NBits,
66 unsigned int value = inValue;
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;
82 static_assert(NData > 0,
"ZDCTriggerSimData requires at least one datum");
83 static_assert(NBits > 0,
"ZDCTriggerSimData requires at least 1 bit");
91 static_assert(NData > 0,
"ZDCTriggerSimData requires at least one datum");
92 static_assert(NBits > 0,
"ZDCTriggerSimData requires at least 1 bit");
97 unsigned int getNumBits()
const override {
return NBits; }
98 unsigned int getNumData()
const override {
return NData; }
103 throw std::logic_error(
"No data available for ZDCTriggerSimData");
109 throw std::logic_error(
110 "ZDCTriggerSimData setDatum called with NData > 1");
123 virtual void dump(std::ostream& strm)
const override {
124 strm <<
"Data for Type: " <<
Type <<
": ";
125 for (
auto datum :
m_data) {
181 typedef std::list<ZDCTriggerSim::SimDataCPtr>
SimStack;
190 m_stack.push_back(SimStack::value_type(ptr));
217 SimStack::const_reverse_iterator
stackTop()
const {
221 void dump(std::ostream& strm)
const;
264 const std::array<unsigned int, 4096>& sideCLUT,
265 const std::array<unsigned int, 256>& inCombLUT)
291 const std::array<unsigned int, 4096>& sideCLUT,
292 const std::array<unsigned int, 256>& inCombLUT)
313 std::array<std::array<unsigned int, 4>, 2>
m_maxADC{};
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) :
char data[hepevt_bytes_allocation_ATLAS]
virtual void doSimStage() override
ZDCTriggerSimAllLUTs(const std::array< unsigned int, 4096 > &sideALUT, const std::array< unsigned int, 4096 > &sideCLUT, const std::array< unsigned int, 256 > &inCombLUT)
std::array< unsigned int, 4096 > m_LUTA
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputData) override
std::array< unsigned int, 4096 > m_LUTC
std::list< ZDCTriggerSim::SimDataCPtr > SimStack
virtual ~ZDCTriggerSimBase()=default
const ZDCTriggerSim::SimDataCPtr & stackTopData() const
SimStack::const_reverse_iterator stackTop() const
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &data)=0
ZDCTriggerSimBase()=default
SimStack::const_iterator stackBottom() const
void stackPush(const ZDCTriggerSim::SimDataCPtr &ptr)
virtual void doSimStage()=0
ZDCTriggerSimCombLUT(const std::array< unsigned int, 256 > &inLUT)
std::array< unsigned int, 256 > m_combLUT
virtual void doSimStage() override
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputBits) override
virtual ZDCTriggerSim::DataType getType() const =0
virtual unsigned int getNumData() const =0
virtual void dump(std::ostream &strm) const =0
virtual ~ZDCTriggerSimDataBase()=default
virtual unsigned int getValueTrunc(unsigned int idx=0) const =0
virtual unsigned int getNumBits() const =0
std::vector< float > m_convertFactors
ZDCTriggerSimData(const std::vector< float > &conversionFactors)
virtual ZDCTriggerSim::DataType getType() const override
unsigned int getNumBits() const override
void setData(const std::vector< T > &inData)
virtual void dump(std::ostream &strm) const override
std::vector< unsigned int > m_data
unsigned int getNumData() const override
unsigned int doConvTrunc(const T &inValue) const
virtual unsigned int getValueTrunc(unsigned int idx=0) const override
virtual ~ZDCTriggerSimData() override
std::vector< unsigned int > CalculateNeg2ndDerivatives(const std::vector< unsigned int > &samples, unsigned int step)
std::array< std::array< int, 4 >, 2 > m_maxNegDeriv2nd
std::array< std::array< unsigned int, 4 >, 2 > m_deriv2ndThresholds
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputData) override
unsigned int m_maxSampleAna
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)
const auto & getMaxNegDeriv2nds() const
std::array< std::array< unsigned int, 4 >, 2 > m_maxADC
virtual void doSimStage() override
std::array< std::array< unsigned int, 4 >, 2 > m_baseline
const auto & getMaxADCs() const
unsigned int m_minSampleAna
unsigned int m_baselineDelta
const auto & getBaselines() const
ZDCTriggerSimModuleAmpls(const std::array< unsigned int, 4096 > &sideALUT, const std::array< unsigned int, 4096 > &sideCLUT, const std::array< unsigned int, 256 > &inCombLUT)
virtual unsigned int simLevel1Trig(const ZDCTriggerSim::SimDataCPtr &inputData) override
virtual void doSimStage() override
ZDCTriggerSimData< unsigned int, 8, 12, TModAmplsInput > ModuleAmplInputsInt
const std::vector< std::string > TypeStrings
ZDCTriggerSimData< unsigned int, 2, 12, TSideLUTsInput > SideLUTInputsInt
ZDCTriggerSimData< unsigned int, 2, 4, TCombLUTInput > CombLUTInputsInt
ZDCTriggerSimData< unsigned int, 1, 3, TCombLUTOutput > CombLUTOutput
ZDCTriggerSimData< float, 8, 12, TModAmplsInput > ModuleAmplInputsFloat
ZDCTriggerSimData< unsigned int, 8 *24, 12, TFADCInputs > FADCInputs
ZDCTriggerSimData< float, 2, 12, TSideLUTsInput > SideLUTInputsFloat
std::shared_ptr< const ZDCTriggerSimDataBase > SimDataCPtr
std::shared_ptr< ZDCTriggerSimDataBase > SimDataPtr