18#include <unordered_map>
21using namespace asg::msgUserCode;
27 std::ifstream fin(filepath);
31 throw (
"FPGATrackSimSectorBank couldn't open " + filepath);
53 ok = ok && std::getline(fin, line);
56 std::istringstream sline(line);
57 ok = ok && (sline >> nSectors >>
m_nLayers);
59 if (!ok)
throw "Error reading header";
70 int sector_file, UNUSED, coverage;
72 while (std::getline(fin, line))
74 if (line.empty() || line[0] ==
'!')
continue;
76 std::istringstream sline(line);
78 ok = ok && (sline >> sector_file);
79 ok = ok && (sector_file == sector);
82 ok = ok && (sline >>
m_s2mMap[sector][i]);
84 ok = ok && (sline >> UNUSED >> coverage);
90 if (!ok)
ANA_MSG_ERROR(
"Error reading file on line: " << line);
100 for (
size_t layer = 0; layer <
m_nLayers; layer++)
105 m_m2sMap[layer].insert(std::make_pair(moduleID, sector));
113 std::vector<sector_t> out;
114 auto range =
m_m2sMap[layer].equal_range(module);
115 for (
auto it_m2s = range.first; it_m2s != range.second; it_m2s++)
116 out.push_back(it_m2s->second);
126 std::set<sector_t> sectors_good;
127 for (
size_t layer = 0; layer <
m_nLayers; layer++)
129 std::set<sector_t> sectors_new;
130 auto range =
m_m2sMap[layer].equal_range(modules[layer]);
132 for (
auto it_m2s = range.first; it_m2s != range.second; it_m2s++)
133 if (layer == 0 || sectors_good.count(it_m2s->second))
134 sectors_new.insert(it_m2s->second);
136 if (sectors_new.empty())
return -1;
137 sectors_good = std::move(sectors_new);
140 assert(sectors_good.size() == 1);
141 return *(sectors_good.begin());
149 std::vector<module_t> modules(hits.size());
151 for (
size_t i = 0; i < hits.size(); i++)
157 else if (hits[i].size() == 1)
159 modules[i] = hits[i][0]->getIdentifierHash();
163 std::unordered_map<unsigned, unsigned> hashCount;
164 for (
auto const &
h : hits[i]) hashCount[
h->getIdentifierHash()]++;
165 modules[i] = std::max_element(hashCount.begin(), hashCount.end())->first;
: FPGATrackSim-specific class to represent an hit in the detector.
This file declares a class that stores the module IDs of the sectors.
static const Attributes_t empty
void storeQOverPtBinning(const std::vector< double > &qOverPtBins, bool absBinning)
std::vector< std::vector< module_t > > m_s2mMap
std::vector< sector_t > getSectors(unsigned layer, module_t module) const
void readHeader(std::ifstream &fin)
sector_t findSector(std::vector< module_t > const &modules) const
std::vector< double > m_qOverPtBins
std::vector< std::multimap< module_t, sector_t > > m_m2sMap
FPGATrackSimSectorBank(std::string const &filepath)
void readSectors(std::ifstream &fin)