164{
166
167 const LArAccumulatedCalibDigitContainer* larAccumulatedCalibDigitContainer = nullptr;
168
169 std::vector<std::string>::const_iterator key_it=
m_keylist.begin();
170 std::vector<std::string>::const_iterator key_it_e=
m_keylist.end();
171 int foundkey = 0;
172 for (;key_it!=key_it_e; ++key_it) {
173
174 sc =
evtStore()->retrieve(larAccumulatedCalibDigitContainer,*key_it);
175 if (
sc.isFailure()) {
176 ATH_MSG_WARNING(
"Cannot read LArAccumulatedCalibDigitContainer from StoreGate! key=" << *key_it );
177 if ( (std::next(key_it) == key_it_e) && foundkey==0 ){
178 ATH_MSG_ERROR(
"None of the provided LArAccumulatedDigitContainer keys could be read");
179 return StatusCode::FAILURE;
180 }else{
181 continue;
182 }
183 }
184 foundkey+=1;
185
189 if (
sc.isFailure()) {
190 ATH_MSG_ERROR(
"Failed to retrieve FebErrorSummary object!" );
192 }
193 }
194 else
196 ATH_MSG_WARNING(
"No FebErrorSummaryObject found! Feb errors not checked!" );
197
198 HWIdentifier lastFailedFEB(0);
201
202 if (it == it_end) {
203 ATH_MSG_DEBUG(
"LArAccumulatedCalibDigitContainer with key=" << *key_it <<
" is empty ");
204 continue;
205 }
206
207 const float delayScale = larAccumulatedCalibDigitContainer->
getDelayScale();
208 const float deltaDelay = 25*
ns/(delayScale*
m_NStep);
209
210 for (;
it!=it_end; ++
it) {
211
212 bool ispulsed=false;
214 const std::vector<HWIdentifier>& calibLineLeg = clcabling->
calibSlotLine((*it)->hardwareID());
215 for (const HWIdentifier &calibLineHWID : calibLineLeg) {
217 }
218 } else {
219 ispulsed=(*it)->isPulsed();
220 }
223 continue;
224 }
225 HWIdentifier chid=(*it)->hardwareID();
227 if (febErrSum) {
230 if (febid!=lastFailedFEB) {
231 lastFailedFEB=febid;
233 <<
" reports error(s):" << febErrSum->
error_to_string(febErrs) <<
". Data ignored." );
234 }
235 continue;
236 }
237 }
239
241 ATH_MSG_ERROR(
"Found not-matching gain number ("<< (
int)gain <<
")" );
242 return StatusCode::FAILURE;
243 }
244
245
246 std::vector<double> samplesum;
247 std::vector < uint64_t >::const_iterator samplesum_it=(*it)->sampleSum().begin();
248 std::vector < uint64_t >::const_iterator samplesum_it_e=(*it)->sampleSum().end();
249 for (;samplesum_it!=samplesum_it_e; ++samplesum_it)
250 samplesum.push_back((double)(*samplesum_it));
251
252
253 std::vector<double> sample2sum;
254 std::vector < uint64_t >::const_iterator sample2sum_it=(*it)->sample2Sum().begin();
255 std::vector < uint64_t >::const_iterator sample2sum_it_e=(*it)->sample2Sum().end();
256 for (;sample2sum_it!=sample2sum_it_e; ++sample2sum_it)
257 sample2sum.push_back((double)(*sample2sum_it));
258
260
261
262 int dacPulsed;
263 float delay = (*it)->delay();
264 int dac=(*it)->DAC();
266 int pulsed=0;
268 const std::vector<HWIdentifier>& calibLineLeg = clcabling->
calibSlotLine((*it)->hardwareID());
269 if(calibLineLeg.empty()) {
270 ATH_MSG_WARNING(
"Why do not have calib lines for "<<(*it)->hardwareID()<<
" ?");
271 continue;
272 }
276 for (
unsigned i=0;
i<calibLineLeg.size(); ++
i) {
279 dacPulsed=(dacPulsed | (0x1 << (15+
i+1)));
280 pulsed=(pulsed | (0x1 << (15+
i+1)));
281 }
282
283 }
284 } else {
285 dacPulsed=(*it)->DAC();
286 for(int iLine=1;iLine<5;iLine++){
287 if((*it)->isPulsed(iLine)){
289 dacPulsed=(dacPulsed | (0x1 << (15+iLine)));
290 pulsed=(pulsed | (0x1 << (15+iLine)));
291 }
292 }
293 }
294
297 } else {
299 }
300
302 ATH_MSG_DEBUG(
"with " << (*it)->sampleSum().size() <<
" samples " << index <<
" DAC " <<
delay <<
" delay " << dacPulsed <<
" dacPulsed " );
303
304 WaveMap::iterator itm = waveMap.find(index);
305
306 if ( itm == waveMap.end() ) {
308 itm = (waveMap.insert(WaveMap::value_type(index,wave))).first;
310 }
311 (*itm).second.addAccumulatedEvent(
int(std::roundf(
delay/deltaDelay)),
m_NStep,
312 samplesum, sample2sum, (*it)->nTriggers());
313
314 }
315 }
316
317 return StatusCode::SUCCESS;
318}
double delay(std::size_t d)
ServiceHandle< StoreGateSvc > & evtStore()
DataModel_detail::const_iterator< DataVector > const_iterator
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
double getDelayScale() const
get the delay Scale
std::map< int, LArCaliWave > WaveMap
const std::vector< HWIdentifier > & calibSlotLine(const HWIdentifier id) const
unsigned Delay(const unsigned event, const HWIdentifier calibLineID) const
bool isPulsed(const unsigned event, const HWIdentifier calibLineID) const
unsigned DAC(const unsigned event, const HWIdentifier calibLineID) const
static std::string error_to_string(uint16_t error)
interpret the error in string
uint16_t feb_error(HWIdentifier febid) const
get error for feb
bool contains(const std::string &s, const std::string ®x)
does a string contain the substring
::StatusCode StatusCode
StatusCode definition for legacy code.