ATLAS Offline Software
Loading...
Searching...
No Matches
FPGATrackSimSectorBank Class Reference

#include <FPGATrackSimSectorBank.h>

Collaboration diagram for FPGATrackSimSectorBank:

Public Member Functions

 FPGATrackSimSectorBank (std::string const &filepath)
size_t getNLayers () const
size_t getNSectors () const
std::vector< module_t > const & getModules (sector_t sector) const
std::vector< sector_tgetSectors (unsigned layer, module_t module) const
sector_t findSector (std::vector< module_t > const &modules) const
sector_t findSector (std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > const &hits) const
const std::vector< double > & getQOverPtBins () const
size_t getNQOverPtBins () const
bool isAbsQOverPtBinning () const
void storeQOverPtBinning (const std::vector< double > &qOverPtBins, bool absBinning)

Private Member Functions

void readHeader (std::ifstream &fin)
void readSectors (std::ifstream &fin)
void makeInverseMap ()

Private Attributes

size_t m_nLayers = 0UL
std::vector< std::vector< module_t > > m_s2mMap
std::vector< std::multimap< module_t, sector_t > > m_m2sMap
std::vector< double > m_qOverPtBins
bool m_absQOverPtBinning = false

Detailed Description

Definition at line 31 of file FPGATrackSimSectorBank.h.

Constructor & Destructor Documentation

◆ FPGATrackSimSectorBank()

FPGATrackSimSectorBank::FPGATrackSimSectorBank ( std::string const & filepath)

Definition at line 23 of file FPGATrackSimSectorBank.cxx.

24{
25 // Open the file for reading
26 ANA_MSG_INFO("Reading " << filepath);
27 std::ifstream fin(filepath);
28 if (!fin.is_open())
29 {
30 ANA_MSG_ERROR("Couldn't open " << filepath);
31 throw ("FPGATrackSimSectorBank couldn't open " + filepath);
32 }
33
34 // Retrieve the number of sectors and layers, resize m_s2mMap
35 readHeader(fin);
36
37 // Read the modules from each sector
38 readSectors(fin);
39
40 // Make m2sMap
41 //coverity[tainted_data]
43}
#define ANA_MSG_INFO(xmsg)
Macro printing info messages.
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
void readHeader(std::ifstream &fin)
void readSectors(std::ifstream &fin)

Member Function Documentation

◆ findSector() [1/2]

sector_t FPGATrackSimSectorBank::findSector ( std::vector< module_t > const & modules) const

Definition at line 122 of file FPGATrackSimSectorBank.cxx.

123{
124 assert(modules.size() == m_nLayers);
125
126 std::set<sector_t> sectors_good; // List of matching sectors so far.
127 for (size_t layer = 0; layer < m_nLayers; layer++)
128 {
129 std::set<sector_t> sectors_new;
130 auto range = m_m2sMap[layer].equal_range(modules[layer]);
131
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);
135
136 if (sectors_new.empty()) return -1;
137 sectors_good = std::move(sectors_new);
138 }
139
140 assert(sectors_good.size() == 1);
141 return *(sectors_good.begin());
142}
std::vector< std::multimap< module_t, sector_t > > m_m2sMap
@ layer
Definition HitInfo.h:79

◆ findSector() [2/2]

sector_t FPGATrackSimSectorBank::findSector ( std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > const & hits) const

Definition at line 147 of file FPGATrackSimSectorBank.cxx.

148{
149 std::vector<module_t> modules(hits.size());
150
151 for (size_t i = 0; i < hits.size(); i++)
152 {
153 if (hits[i].empty())
154 {
155 modules[i] = MODULE_BADMODULE;
156 }
157 else if (hits[i].size() == 1)
158 {
159 modules[i] = hits[i][0]->getIdentifierHash();
160 }
161 else
162 {
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;
166 }
167 }
168
169 return findSector(modules);
170}
#define MODULE_BADMODULE
static const Attributes_t empty
sector_t findSector(std::vector< module_t > const &modules) const

◆ getModules()

std::vector< module_t > const & FPGATrackSimSectorBank::getModules ( sector_t sector) const
inline

Definition at line 40 of file FPGATrackSimSectorBank.h.

40{ return m_s2mMap[sector]; }
std::vector< std::vector< module_t > > m_s2mMap

◆ getNLayers()

size_t FPGATrackSimSectorBank::getNLayers ( ) const
inline

Definition at line 37 of file FPGATrackSimSectorBank.h.

37{ return m_nLayers; }

◆ getNQOverPtBins()

size_t FPGATrackSimSectorBank::getNQOverPtBins ( ) const
inline

Definition at line 53 of file FPGATrackSimSectorBank.h.

53{return m_qOverPtBins.size(); }
std::vector< double > m_qOverPtBins

◆ getNSectors()

size_t FPGATrackSimSectorBank::getNSectors ( ) const
inline

Definition at line 38 of file FPGATrackSimSectorBank.h.

38{ return m_s2mMap.size(); }

◆ getQOverPtBins()

const std::vector< double > & FPGATrackSimSectorBank::getQOverPtBins ( ) const
inline

Definition at line 52 of file FPGATrackSimSectorBank.h.

52{ return m_qOverPtBins; }

◆ getSectors()

std::vector< sector_t > FPGATrackSimSectorBank::getSectors ( unsigned layer,
module_t module ) const

Definition at line 111 of file FPGATrackSimSectorBank.cxx.

112{
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);
117
118 return out;
119}

◆ isAbsQOverPtBinning()

bool FPGATrackSimSectorBank::isAbsQOverPtBinning ( ) const
inline

Definition at line 54 of file FPGATrackSimSectorBank.h.

◆ makeInverseMap()

void FPGATrackSimSectorBank::makeInverseMap ( )
private

Definition at line 97 of file FPGATrackSimSectorBank.cxx.

98{
99 m_m2sMap.resize(m_nLayers);
100 for (size_t layer = 0; layer < m_nLayers; layer++)
101 {
102 for (sector_t sector = 0; (size_t)sector < m_s2mMap.size(); sector++)
103 {
104 module_t moduleID = m_s2mMap[sector][layer];
105 m_m2sMap[layer].insert(std::make_pair(moduleID, sector));
106 }
107 }
108}
int32_t module_t
int32_t sector_t

◆ readHeader()

void FPGATrackSimSectorBank::readHeader ( std::ifstream & fin)
private

Definition at line 47 of file FPGATrackSimSectorBank.cxx.

48{
49 bool ok = true;
50 std::string line;
51 int nSectors;
52
53 ok = ok && std::getline(fin, line);
54 ANA_MSG_DEBUG(line);
55
56 std::istringstream sline(line);
57 ok = ok && (sline >> nSectors >> m_nLayers);
58
59 if (!ok) throw "Error reading header";
60 // coverity [tainted_data]
61 m_s2mMap.resize(nSectors, std::vector<module_t>(m_nLayers));
62}
#define ANA_MSG_DEBUG(xmsg)
Macro printing debug messages.

◆ readSectors()

void FPGATrackSimSectorBank::readSectors ( std::ifstream & fin)
private

Definition at line 65 of file FPGATrackSimSectorBank.cxx.

66{
67 std::string line;
68 bool ok = true;
69 int sector = 0; // make sure sectors are numbered in order
70 int sector_file, UNUSED, coverage;
71
72 while (std::getline(fin, line))
73 {
74 if (line.empty() || line[0] == '!') continue;
75 ANA_MSG_DEBUG(line);
76 std::istringstream sline(line);
77
78 ok = ok && (sline >> sector_file);
79 ok = ok && (sector_file == sector);
80
81 for (unsigned i = 0; i < m_nLayers; i++)
82 ok = ok && (sline >> m_s2mMap[sector][i]);
83
84 ok = ok && (sline >> UNUSED >> coverage); // both these are not stored
85
86 if (!ok) break;
87 sector++;
88 }
89
90 if (!ok) ANA_MSG_ERROR("Error reading file on line: " << line);
91}

◆ storeQOverPtBinning()

void FPGATrackSimSectorBank::storeQOverPtBinning ( const std::vector< double > & qOverPtBins,
bool absBinning )

Definition at line 174 of file FPGATrackSimSectorBank.cxx.

175{
176 m_absQOverPtBinning = absBinning;
177
178 // Retrieve q/pt binning information. Fallback to no binning if not set.
179 // Note that this behavior on whether or not we are using |q/pt|.
180 m_qOverPtBins = qOverPtBins;
181 if (m_qOverPtBins.size() == 0) {
182 ANA_MSG_FATAL("q/pt bin information not set in bank tag!");
183 }
184}
#define ANA_MSG_FATAL(xmsg)
Macro printing fatal messages.

Member Data Documentation

◆ m_absQOverPtBinning

bool FPGATrackSimSectorBank::m_absQOverPtBinning = false
private

Definition at line 66 of file FPGATrackSimSectorBank.h.

◆ m_m2sMap

std::vector<std::multimap<module_t, sector_t> > FPGATrackSimSectorBank::m_m2sMap
private

Definition at line 62 of file FPGATrackSimSectorBank.h.

◆ m_nLayers

size_t FPGATrackSimSectorBank::m_nLayers = 0UL
private

Definition at line 60 of file FPGATrackSimSectorBank.h.

◆ m_qOverPtBins

std::vector<double> FPGATrackSimSectorBank::m_qOverPtBins
private

Definition at line 65 of file FPGATrackSimSectorBank.h.

◆ m_s2mMap

std::vector<std::vector<module_t> > FPGATrackSimSectorBank::m_s2mMap
private

Definition at line 61 of file FPGATrackSimSectorBank.h.


The documentation for this class was generated from the following files: