5#ifndef TrkAmbiguityProcessor_AmbiCounter_icc
6#define TrkAmbiguityProcessor_AmbiCounter_icc
16template<
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);
61 if ((category>= Categories::kNCounter) or (etaBinIdx >=
nRegions)){
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());
92 if (
const auto &possibleIdx{
etaBin(absEta)}){
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>
126 return (pVal!=
m_etaBounds.end()) ? std::optional<size_t>(std::distance(
m_etaBounds.begin(), pVal)):std::nullopt;
std::array< std::array< int, nRegions >, static_cast< size_t >(Categories::kNCounter)> m_counter
std::optional< size_t > etaBin(const double val)
void incrementCounterByRegion(Categories categoryIdx, const Trk::Track *track)
void increment(Categories category, unsigned int etaBinIdx)
size_t idx(const Categories &categoryIndex) const
std::string dumpRegions(const std::string &head, Categories categoryIdx, const int iw=9) const
int numberOfEvents() const
int globalCount(GlobalCounterIndices i) const
std::array< int, nGlobalCounters > m_globalCounter
AmbiCounter< EnumType > & operator+=(const AmbiCounter< EnumType > &a)
AmbiCounter(const std::vector< float > &eta_bounds)
void resetGlobalCounters()
const std::vector< float > & m_etaBounds
std::string head(std::string s, const std::string &pattern)
head of a string