5 #ifndef TrkAmbiguityProcessor_AmbiCounter_icc
6 #define TrkAmbiguityProcessor_AmbiCounter_icc
16 template<
class EnumType>
29 const std::string errMsgPrefix =
"In AmbiCounter.icc, eta_bounds size must be ";
32 throw std::runtime_error(errMsgPrefix +
"in ascending order.");
39 return static_cast<size_t>(categoryIndex);
62 throw std::out_of_range(
"in AmbiCounter.icc::increment()");
71 for (
size_t categoryIdx=0; categoryIdx <
idx(Categories::kNCounter); ++categoryIdx) {
72 for (
unsigned int etaBinIdx=0; etaBinIdx <
a.m_counter[categoryIdx].size(); ++etaBinIdx) {
73 m_counter[categoryIdx][etaBinIdx] +=
a.m_counter[categoryIdx][etaBinIdx];
86 if (!
track->trackParameters()) {
89 std::array<int, nRegions> &nTracks =
m_counter.at(
idx(categoryIdx));
91 const double absEta = std::abs(
track->trackParameters()->front()->eta());
93 ++nTracks[possibleIdx.value()];
100 std::stringstream
out;
102 if (categoryIdx >= Categories::kNCounter)
throw std::out_of_range(
"Array index out of range in AmbiCounter::inc by region");
103 const auto & displayedArray =
m_counter[
idx(categoryIdx)];
104 const auto allRegionCounts =
std::accumulate(displayedArray.begin(), displayedArray.end(),0);
105 out << std::setiosflags(std::ios::dec) << std::setw(iw) << allRegionCounts;
106 for (
unsigned int etaBinIdx=0; etaBinIdx <
nRegions; ++etaBinIdx) {
107 out << std::setiosflags(std::ios::dec) << std::setw(iw) <<
m_counter[
idx(categoryIdx)][etaBinIdx];
119 std::array<std::array<int, nRegions>,
static_cast<size_t>(Categories::kNCounter)>
m_counter{};
122 std::optional<size_t>