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 break;
127 }
128
129 FADCsamples.push_back(
ADC);
130 }
131
135
136 if (adcOverflow) {
137
138
139
140 moduleAmplitudes.push_back(4095);
141 }
142 else {
144
145
146
147
148
149 bool havePulse = false;
150 unsigned int maxAmp = 0;
152 unsigned int maxNeg2ndDeriv = 0;
153
155 if (negDeriv2nd.at(sampleTest) > maxNeg2ndDeriv) maxNeg2ndDeriv = negDeriv2nd.at(sampleTest);
157 havePulse = true;
158
159
160
161
163 }
164
165 if (FADCsamples.at(sampleTest) > maxAmp) maxAmp = FADCsamples.at(sampleTest);
166 }
167
169 if (havePulse) {
170 moduleAmplitudes.push_back(std::max<int>(
int(maxAmp -
baseline), 0));
173 }
174 else {
175 moduleAmplitudes.push_back(0);
178 }
179 }
180 }
181 }
182
185
187
189}
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