ATLAS Offline Software
Loading...
Searching...
No Matches
ZDCTriggerSimFADC Class Reference

#include <ZDCTriggerSim.h>

Inheritance diagram for ZDCTriggerSimFADC:
Collaboration diagram for ZDCTriggerSimFADC:

Public Member Functions

 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)
virtual unsigned int simLevel1Trig (const ZDCTriggerSim::SimDataCPtr &inputData) override
const auto & getMaxNegDeriv2nds () const
const auto & getMaxADCs () const
const auto & getBaselines () const
SimStack::const_iterator stackBottom () const
SimStack::const_reverse_iterator stackTop () const
void dump (std::ostream &strm) const

Protected Member Functions

virtual void doSimStage () override
std::vector< unsigned int > CalculateNeg2ndDerivatives (const std::vector< unsigned int > &samples, unsigned int step)
void stackClear ()
void stackPush (const ZDCTriggerSim::SimDataCPtr &ptr)
const ZDCTriggerSim::SimDataCPtrstackTopData () const

Private Types

typedef std::list< ZDCTriggerSim::SimDataCPtrSimStack

Private Attributes

std::array< std::array< unsigned int, 4 >, 2 > m_deriv2ndThresholds
unsigned int m_minSampleAna {}
unsigned int m_maxSampleAna {}
unsigned int m_baselineDelta {}
std::array< std::array< int, 4 >, 2 > m_maxNegDeriv2nd {}
std::array< std::array< unsigned int, 4 >, 2 > m_maxADC {}
std::array< std::array< unsigned int, 4 >, 2 > m_baseline {}
SimStack m_stack
std::array< unsigned int, 4096 > m_LUTA {}
std::array< unsigned int, 4096 > m_LUTC {}
std::array< unsigned int, 256 > m_combLUT {}

Detailed Description

Definition at line 304 of file ZDCTriggerSim.h.

Member Typedef Documentation

◆ SimStack

typedef std::list<ZDCTriggerSim::SimDataCPtr> ZDCTriggerSimBase::SimStack
privateinherited

Definition at line 181 of file ZDCTriggerSim.h.

Constructor & Destructor Documentation

◆ 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 )
inline

Definition at line 328 of file ZDCTriggerSim.h.

332 :
333 ZDCTriggerSimModuleAmpls(sideALUT, sideCLUT, inCombLUT),
334 m_deriv2ndThresholds(negDeriv2ndThresh),
335 m_minSampleAna(minSampleAna),
336 m_maxSampleAna(maxSampleAna),
337 m_baselineDelta(baselineDelta)
338 {}
std::array< std::array< unsigned int, 4 >, 2 > m_deriv2ndThresholds
unsigned int m_maxSampleAna
unsigned int m_minSampleAna
unsigned int m_baselineDelta
ZDCTriggerSimModuleAmpls(const std::array< unsigned int, 4096 > &sideALUT, const std::array< unsigned int, 4096 > &sideCLUT, const std::array< unsigned int, 256 > &inCombLUT)

Member Function Documentation

◆ CalculateNeg2ndDerivatives()

std::vector< unsigned int > ZDCTriggerSimFADC::CalculateNeg2ndDerivatives ( const std::vector< unsigned int > & samples,
unsigned int step )
protected

Definition at line 193 of file ZDCTriggerSim.cxx.

194{
195 std::vector<unsigned int> der2ndVec(step, 0);
196
197 for (size_t sample = step; sample < samples.size() - step; sample++) {
198 int diff2nd = samples[sample + step] + samples[sample - step] - 2*samples[sample];
199 if (diff2nd > 0) der2ndVec.push_back(0);
200 else der2ndVec.push_back(-diff2nd);
201 }
202
203 der2ndVec.insert(der2ndVec.end(), step, 0);
204
205 return der2ndVec;
206}

◆ doSimStage()

void ZDCTriggerSimFADC::doSimStage ( )
overrideprotectedvirtual

Implements ZDCTriggerSimBase.

Definition at line 100 of file ZDCTriggerSim.cxx.

100 {
102 if (ptr->getNumData() != 24*8 || ptr->getNumBits() != 12)
103 throw std::logic_error("Invalid input data in ZDCTriggerSimModuleAmpls");
104
105 unsigned int sampleIdx = 0;
106
107 std::vector<unsigned int> moduleAmplitudes;
108
109 // Loop over the eight ZDC modules
110 //
111 for (size_t side : {0, 1}) {
112 for (size_t module : {0, 1, 2, 3}) {
113 std::vector<unsigned int> FADCsamples;
114
115 bool adcOverflow = false;
116
117 //
118 // Loop over the FADCs for the channel and put them in a vector for easier manipulation
119 // While we're at it, check for overflows since the trigger firmware always sends up
120 // 4095 if there is an overflow
121 //
122 for (size_t i = 0; i < 24; i++) {
123 unsigned int ADC = ptr->getValueTrunc(sampleIdx++);
124 if (ADC == 4095) {
125 adcOverflow = true;
126 break;
127 }
128
129 FADCsamples.push_back(ADC);
130 }
131
132 m_baseline[side][module] = 0;
133 m_maxADC[side][module] = 0;
135
136 if (adcOverflow) {
137 //
138 // If the ADC overflows, the firmware returns amplitude of 4095
139 //
140 moduleAmplitudes.push_back(4095);
141 }
142 else {
143 std::vector<unsigned int> negDeriv2nd = CalculateNeg2ndDerivatives(FADCsamples, 2);
144
145 // Now loop over the min-max sample range (within single channel) and see
146 // if the second derivative threshold is exceeded. If so, we pick off the
147 // maximum amplitude in that same range -- this is what the firmware does
148 //
149 bool havePulse = false;
150 unsigned int maxAmp = 0;
151 unsigned int baseline = 0;
152 unsigned int maxNeg2ndDeriv = 0;
153
154 for (unsigned int sampleTest = m_minSampleAna; sampleTest <= m_maxSampleAna; sampleTest++) {
155 if (negDeriv2nd.at(sampleTest) > maxNeg2ndDeriv) maxNeg2ndDeriv = negDeriv2nd.at(sampleTest);
156 if (negDeriv2nd.at(sampleTest) > m_deriv2ndThresholds[side][module] && !havePulse) {
157 havePulse = true;
158
159 // The firmware evaluates the baseline a certain number of samples before
160 // the 2nd derivative threshold is crossed
161 //
162 baseline = FADCsamples.at(sampleTest - m_baselineDelta);
163 }
164
165 if (FADCsamples.at(sampleTest) > maxAmp) maxAmp = FADCsamples.at(sampleTest);
166 }
167
168 m_maxNegDeriv2nd[side][module] = maxNeg2ndDeriv;
169 if (havePulse) {
170 moduleAmplitudes.push_back(std::max<int>(int(maxAmp - baseline), 0));
172 m_maxADC[side][module] = maxAmp;
173 }
174 else {
175 moduleAmplitudes.push_back(0);
176 m_baseline[side][module] = 0;
177 m_maxADC[side][module] = 0;
178 }
179 }
180 }
181 }
182
184 static_cast<ZDCTriggerSim::ModuleAmplInputsInt*>(inputs_p.get())->setData(moduleAmplitudes);
185
186 stackPush(inputs_p);
187
189}
@ baseline
const ZDCTriggerSim::SimDataCPtr & stackTopData() const
void stackPush(const ZDCTriggerSim::SimDataCPtr &ptr)
void setData(const std::vector< T > &inData)
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_maxADC
std::array< std::array< unsigned int, 4 >, 2 > m_baseline
virtual void doSimStage() override
ZDCTriggerSimData< unsigned int, 8, 12, TModAmplsInput > ModuleAmplInputsInt
std::shared_ptr< const ZDCTriggerSimDataBase > SimDataCPtr
std::shared_ptr< ZDCTriggerSimDataBase > SimDataPtr
void * ptr(T *p)
Definition SGImplSvc.cxx:74

◆ dump()

void ZDCTriggerSimBase::dump ( std::ostream & strm) const
inherited

Definition at line 11 of file ZDCTriggerSim.cxx.

11 {
12 for (auto entry : m_stack) {
13 strm << entry->getType() << ": ";
14 entry->dump(strm);
15 strm << std::endl;
16 }
17}

◆ getBaselines()

const auto & ZDCTriggerSimFADC::getBaselines ( ) const
inline

Definition at line 351 of file ZDCTriggerSim.h.

351{return m_baseline;}

◆ getMaxADCs()

const auto & ZDCTriggerSimFADC::getMaxADCs ( ) const
inline

Definition at line 350 of file ZDCTriggerSim.h.

350{return m_maxADC;}

◆ getMaxNegDeriv2nds()

const auto & ZDCTriggerSimFADC::getMaxNegDeriv2nds ( ) const
inline

Definition at line 349 of file ZDCTriggerSim.h.

349{return m_maxNegDeriv2nd;}

◆ simLevel1Trig()

virtual unsigned int ZDCTriggerSimFADC::simLevel1Trig ( const ZDCTriggerSim::SimDataCPtr & inputData)
inlineoverridevirtual

Implements ZDCTriggerSimBase.

Definition at line 340 of file ZDCTriggerSim.h.

340 {
341 stackClear();
342 stackPush(inputData);
343
344 doSimStage();
345 return stackTopData()->getValueTrunc();
346 }
virtual unsigned int getValueTrunc(unsigned int idx=0) const =0
virtual void doSimStage() override

◆ stackBottom()

SimStack::const_iterator ZDCTriggerSimBase::stackBottom ( ) const
inlineinherited

Definition at line 212 of file ZDCTriggerSim.h.

213 {
214 return m_stack.begin();
215 }

◆ stackClear()

void ZDCTriggerSimBase::stackClear ( )
inlineprotectedinherited

Definition at line 187 of file ZDCTriggerSim.h.

187{ m_stack.clear(); }

◆ stackPush()

void ZDCTriggerSimBase::stackPush ( const ZDCTriggerSim::SimDataCPtr & ptr)
inlineprotectedinherited

Definition at line 189 of file ZDCTriggerSim.h.

189 {
190 m_stack.push_back(SimStack::value_type(ptr));
191 }

◆ stackTop()

SimStack::const_reverse_iterator ZDCTriggerSimBase::stackTop ( ) const
inlineinherited

Definition at line 217 of file ZDCTriggerSim.h.

217 {
218 return m_stack.rbegin();
219 }

◆ stackTopData()

const ZDCTriggerSim::SimDataCPtr & ZDCTriggerSimBase::stackTopData ( ) const
inlineprotectedinherited

Definition at line 193 of file ZDCTriggerSim.h.

193 {
194 return m_stack.back();
195 }

Member Data Documentation

◆ m_baseline

std::array<std::array<unsigned int, 4>, 2> ZDCTriggerSimFADC::m_baseline {}
private

Definition at line 314 of file ZDCTriggerSim.h.

314{};

◆ m_baselineDelta

unsigned int ZDCTriggerSimFADC::m_baselineDelta {}
private

Definition at line 310 of file ZDCTriggerSim.h.

310{};

◆ m_combLUT

std::array<unsigned int, 256> ZDCTriggerSimCombLUT::m_combLUT {}
privateinherited

Definition at line 225 of file ZDCTriggerSim.h.

225{};

◆ m_deriv2ndThresholds

std::array<std::array<unsigned int, 4>, 2> ZDCTriggerSimFADC::m_deriv2ndThresholds
private

Definition at line 307 of file ZDCTriggerSim.h.

◆ m_LUTA

std::array<unsigned int, 4096> ZDCTriggerSimAllLUTs::m_LUTA {}
privateinherited

Definition at line 250 of file ZDCTriggerSim.h.

250{};

◆ m_LUTC

std::array<unsigned int, 4096> ZDCTriggerSimAllLUTs::m_LUTC {}
privateinherited

Definition at line 251 of file ZDCTriggerSim.h.

251{};

◆ m_maxADC

std::array<std::array<unsigned int, 4>, 2> ZDCTriggerSimFADC::m_maxADC {}
private

Definition at line 313 of file ZDCTriggerSim.h.

313{};

◆ m_maxNegDeriv2nd

std::array<std::array<int, 4>, 2> ZDCTriggerSimFADC::m_maxNegDeriv2nd {}
private

Definition at line 312 of file ZDCTriggerSim.h.

312{};

◆ m_maxSampleAna

unsigned int ZDCTriggerSimFADC::m_maxSampleAna {}
private

Definition at line 309 of file ZDCTriggerSim.h.

309{};

◆ m_minSampleAna

unsigned int ZDCTriggerSimFADC::m_minSampleAna {}
private

Definition at line 308 of file ZDCTriggerSim.h.

308{};

◆ m_stack

SimStack ZDCTriggerSimBase::m_stack
privateinherited

Definition at line 184 of file ZDCTriggerSim.h.


The documentation for this class was generated from the following files: