fix bug in SelectiveBremMatchAlg
This solves the non-deterministic, rare bug reported in Rec#197 -- closes #197 (closed)
The bug relates to an interator-based for-loop over vector while adding stuff to the vector in the loop in SelectiveMatchUtils.h
:
Old (buggy):
for ( const auto& cellid : cellids ) {
const auto& neighbors = calo.neighborCells( cellid );
cellids.insert( cellids.end(), neighbors.begin(), neighbors.end() );
}
New:
for ( auto i = 0; i < nCells; ++i ) {
const auto& neighbors = calo.neighborCells( cellids.at( i ) );
cellids.insert( cellids.end(), neighbors.begin(), neighbors.end() );
}
On top of the bug fix
It puts further safety nets to ensure a maximum of calo cells is checked in selective search for brem and the reserved memory for vectors is updated accordingly such that reserved memory is always sufficient. The default maxima are set at 8 for maximum number of cells checked in scan from first to last state. Typically, search windows wider than 4 cells (smallest cize) are only relevant for tracks with < 3 GeV/c momentum.
In addition, applies (style) changes from Rec!2423 to other selective match algorithms as well.