18 #include <unordered_map>
21 using 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";
61 m_s2mMap.resize(nSectors, std::vector<module_t>(m_nLayers));
70 int sector_file, UNUSED, coverage;
74 if (
line.empty() ||
line[0] ==
'!')
continue;
76 std::istringstream sline(
line);
78 ok = ok && (sline >> sector_file);
79 ok = ok && (sector_file == sector);
81 for (
unsigned i = 0;
i < m_nLayers;
i++)
82 ok = ok && (sline >> m_s2mMap[sector][
i]);
84 ok = ok && (sline >> UNUSED >> coverage);
99 m_m2sMap.resize(m_nLayers);
102 for (
sector_t sector = 0; (size_t)sector < m_s2mMap.size(); sector++)
105 m_m2sMap[
layer].insert(std::make_pair(moduleID, sector));
113 std::vector<sector_t>
out;
115 for (
auto it_m2s =
range.first; it_m2s !=
range.second; it_m2s++)
116 out.push_back(it_m2s->second);
124 assert(modules.size() == m_nLayers);
126 std::set<sector_t> sectors_good;
129 std::set<sector_t> sectors_new;
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++)
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;
169 return findSector(modules);
176 m_absQOverPtBinning = absBinning;
180 m_qOverPtBins = qOverPtBins;
181 if (m_qOverPtBins.size() == 0) {