MDTCalibData - Do not calculate timeslew via vector look-up
Hi,
in the large round of large scale-tests, the muon algorithms threw a ton of FPEs. Unfortunately, the first FPE. which I picked turns out to be not reproducible itself. But, rechecking the changes made in !44152 (merged), I noticed that
if( adc>400. || adc<0. ) return 0.;
return s_LUT[static_cast<int>(adc)];
on a vector with size of 400 could lead to out bound accesses and those random numbers will eventually lead to the tons FPEs seen in the large scale tests. In fact, I verified that this is the case by throwing an exception
if( adc>400. || adc<0. ) return 0.;
const int int_adc = adc;
if (int_adc == 400){
throw std::runtime_error("The tortoise is gone");
}
which was eventually thrown on the first event reporting a FPE which I tested. Further, I am wondering why do we need a look-up table for the calculation of a simple exponential decay and thus I replaced it directly. Let me tag @diehl, in cases he has any objections against the changes.
Tagging: @elmsheus, @emoyse, @goetz, @mhodgkin, @zmarshal, @rmazini,
Closes ATLASRECTS-6507
Large scale-test submitted to: https://bigpanda.cern.ch/task/26277586/
Tagging: @goblirsc, @npetters, @sroe, @pgadow for another episode of the philosopher of the day