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
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
119
120
121
122 for (
size_t i = 0;
i < 24;
i++) {
123 unsigned int ADC =
ptr->getValueTrunc(sampleIdx);
125 adcOverflow = true;
126 sampleIdx += (24 -
i);
127 break;
128 } else {
129 sampleIdx++;
130 }
131
132
133 FADCsamples.push_back(
ADC);
134 }
135
139
140 if (adcOverflow) {
141
142
143
144 moduleAmplitudes.push_back(4095);
145 }
146 else {
148
149
150
151
152
153 bool havePulse = false;
154 unsigned int maxAmp = 0;
156 unsigned int maxNeg2ndDeriv = 0;
157
159 if (negDeriv2nd.at(sampleTest) > maxNeg2ndDeriv) maxNeg2ndDeriv = negDeriv2nd.at(sampleTest);
161 havePulse = true;
162
163
164
165
167 }
168
169 if (FADCsamples.at(sampleTest) > maxAmp) maxAmp = FADCsamples.at(sampleTest);
170 }
171
173 if (havePulse) {
174 moduleAmplitudes.push_back(std::max<int>(
int(maxAmp -
baseline), 0));
177 }
178 else {
179 moduleAmplitudes.push_back(0);
182 }
183 }
184 }
185 }
186
189
191
193}
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