ATLAS Offline Software
FPGATrackSimRoad.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 #ifndef TRIGFPGATrackSimOBJECTS_FPGATrackSimROAD_H
4 #define TRIGFPGATrackSimOBJECTS_FPGATrackSimROAD_H
5 
17 #include <vector>
18 #include <unordered_set>
19 #include <ostream>
20 #include <memory>
21 #include <bit>
22 
23 #include "TObject.h"
24 
29 
31 {
32 public:
33 
35  // Constructors
36 
37  FPGATrackSimRoad() = default;
38 
39  FPGATrackSimRoad(unsigned nLayers) : m_hits_trans(nLayers) { }
40 
41  FPGATrackSimRoad(int roadID, pid_t pid, sector_t sector, layer_bitmask_t hit_layers,
42  layer_bitmask_t wildcard_layers, std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> && hits)
43  : m_roadID(roadID), m_pid(pid), m_sector(sector), m_hit_layers(hit_layers), m_wildcard_layers(wildcard_layers)/* , m_hits_trans(hits) */
44  {
45  setHits(std::move(hits));
46  }
47  //Move operators
49  FPGATrackSimRoad& operator=(FPGATrackSimRoad&&) noexcept = default;
50  //Copy operators
53  virtual ~FPGATrackSimRoad() = default;
54 
56  // Setters
57 
58  void setRoadID(int roadID) { m_roadID = roadID; }
59  void setPID(pid_t pid) { m_pid = pid; }
60  void setSector(sector_t sector) { m_sector = sector; }
61  void setSectorBin(int sectorbin) { m_sectorbin = sectorbin; }
62 
63  void setHitLayers(layer_bitmask_t hit_layers) { m_hit_layers = hit_layers; }
64  void setWCLayers(layer_bitmask_t wc_layers) { m_wildcard_layers = wc_layers; }
65 
66  void setNLayers(unsigned layers) { m_hits_trans.resize(layers); m_hits.resize(layers); }
67  void setHits(std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> &&hits);
68  void setHits(unsigned layer, std::vector<std::shared_ptr<const FPGATrackSimHit>> && hits);
69 
70  void repopulateTransHits();
71 
72  void setEtaPatternID(int patternID) { m_etaPatternID = patternID; }
73 
74  void setSubRegion(int v) { m_subRegion = v; }
75  void setXBin(unsigned v) { m_xBin = v; }
76  void setYBin(unsigned v) { m_yBin = v; }
77  void setX(float v) { m_x = v; }
78  void setY(float v) { m_y = v; }
79 
81  void setFitChi2(double v) { m_fitChi2 = v; }
82 
84  // Getters
85 
86  int getSubRegion() const { return m_subRegion; }
87  unsigned getXBin() const { return m_xBin; }
88  unsigned getYBin() const { return m_yBin; }
89  float getX() const { return m_x; }
90  float getY() const { return m_y; }
91 
92  int getRoadID() const { return m_roadID; }
93  pid_t getPID() const { return m_pid; }
94  sector_t getSector() const { return m_sector; }
95  int getSectorBin() const { return m_sectorbin; }
96 
99 
100  int getEtaPatternID() const { return m_etaPatternID; }
101 
102  const std::vector<std::shared_ptr<const FPGATrackSimHit>> &getHits(size_t layer) const { return m_hits_trans.at(layer); }
103  const std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> &getAllHits() const { return m_hits_trans; }
104  std::unordered_set<std::shared_ptr<const FPGATrackSimHit>> getHits_flat() const;
105 
107  double getFitChi2() const { return m_fitChi2; }
108 
110  // Utility
111 
112  size_t getNLayers() const { return m_hits_trans.size(); }
113  size_t getNHitLayers() const { return std::popcount(m_hit_layers); }
114  size_t getNWCLayers() const { return std::popcount(m_wildcard_layers); }
115 
116  size_t getNHits() const;
117  std::vector<size_t> getNHits_layer() const;
118  size_t getNHitCombos() const;
119 
120  // Bin ID, if using FPGATrackSim binning.
121  void setBinIdx(std::vector<unsigned> x) { m_binIdx = std::move(x); }
122  const std::vector<unsigned>& getBinIdx() const { return m_binIdx; }
123 
124  // Weight of each barcode is the fraction of layers with corresponding hits
125  // where pixels are weighted twice as much
127 
128 private:
129 
130  int m_roadID = 0; // Currently just a count set by RoadFinder.
131  pid_t m_pid = 0; // the pattern ID that fired this road
132  sector_t m_sector = 0; // Sector this road belongs to / should be fitted with
133  int m_sectorbin = -1; // The bin/ID of the sector that this road belongs to.
134 
135  layer_bitmask_t m_hit_layers = 0; // Layers that had hits match the pattern, not including wildcards
136  layer_bitmask_t m_wildcard_layers = 0; // Layers that matched because of a wildcard in the pattern
137 
138  // Eta pattern associated with the road.
139  int m_etaPatternID = -1;
140 
141  int m_subRegion = 0; // slice that the road came from
142  unsigned m_xBin = 0;
143  unsigned m_yBin = 0;
144  float m_x = 0; // x value of Hough bin
145  float m_y = 0; // y value of Hough bin
146 
148  double m_fitChi2 = 0;
149 
150  std::vector<std::vector<FPGATrackSimHit>> m_hits; // [layer, hit#] (used for ROOT storing)
151  std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> m_hits_trans;
152  // A list of hits in the road for each layer.
153  // These pointers are not owned by the road.
154 
155  // bin ID. Just store this as a vector<unsigned>.
156  std::vector<unsigned> m_binIdx;
157 
159  // Misc
160  friend std::ostream& operator<<(std::ostream& os, const FPGATrackSimRoad& road);
162 };
163 
164 #endif // FPGATrackSimROAD_H
165 
pid_t
int32_t pid_t
Definition: FPGATrackSimTypes.h:19
FPGATrackSimRoad::m_subRegion
int m_subRegion
Definition: FPGATrackSimRoad.h:141
FPGATrackSimRoad::getHitLayers
layer_bitmask_t getHitLayers() const
Definition: FPGATrackSimRoad.h:97
FPGATrackSimRoad::repopulateTransHits
void repopulateTransHits()
Definition: FPGATrackSimRoad.cxx:123
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
FPGATrackSimRoad::getTruth
FPGATrackSimMultiTruth getTruth() const
Definition: FPGATrackSimRoad.cxx:76
FPGATrackSimRoad::m_hits_trans
std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > m_hits_trans
Definition: FPGATrackSimRoad.h:151
FPGATrackSimRoad::getSubRegion
int getSubRegion() const
Definition: FPGATrackSimRoad.h:86
FPGATrackSimRoad::m_binIdx
std::vector< unsigned > m_binIdx
(transient) [layer, hit#]
Definition: FPGATrackSimRoad.h:156
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
FPGATrackSimRoad::getNWCLayers
size_t getNWCLayers() const
Definition: FPGATrackSimRoad.h:114
FPGATrackSimRoad::FPGATrackSimRoad
FPGATrackSimRoad(FPGATrackSimRoad &&) noexcept=default
FPGATrackSimRoad::getHits
const std::vector< std::shared_ptr< const FPGATrackSimHit > > & getHits(size_t layer) const
Definition: FPGATrackSimRoad.h:102
FPGATrackSimRoad::getRoadID
int getRoadID() const
Definition: FPGATrackSimRoad.h:92
FPGATrackSimRoad::m_xBin
unsigned m_xBin
Definition: FPGATrackSimRoad.h:142
FPGATrackSimRoad::getEtaPatternID
int getEtaPatternID() const
Definition: FPGATrackSimRoad.h:100
module_driven_slicing.layers
layers
Definition: module_driven_slicing.py:113
FPGATrackSimRoad::m_yBin
unsigned m_yBin
Definition: FPGATrackSimRoad.h:143
FPGATrackSimRoad::getSectorBin
int getSectorBin() const
Definition: FPGATrackSimRoad.h:95
FPGATrackSimMultiTruth.h
FPGATrackSimRoad::getNHitLayers
size_t getNHitLayers() const
Definition: FPGATrackSimRoad.h:113
FPGATrackSimRoad::m_pid
pid_t m_pid
Definition: FPGATrackSimRoad.h:131
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
x
#define x
FPGATrackSimRoad::m_wildcard_layers
layer_bitmask_t m_wildcard_layers
Definition: FPGATrackSimRoad.h:136
FPGATrackSimRoad::getNHits_layer
std::vector< size_t > getNHits_layer() const
Definition: FPGATrackSimRoad.cxx:27
FPGATrackSimRoad::getX
float getX() const
Definition: FPGATrackSimRoad.h:89
FPGATrackSimRoad::getNHits
size_t getNHits() const
Definition: FPGATrackSimRoad.cxx:20
FPGATrackSimRoad::m_x
float m_x
Definition: FPGATrackSimRoad.h:144
FPGATrackSimRoad::m_hit_layers
layer_bitmask_t m_hit_layers
Definition: FPGATrackSimRoad.h:135
FPGATrackSimRoad::m_y
float m_y
Definition: FPGATrackSimRoad.h:145
FPGATrackSimRoad::getHits_flat
std::unordered_set< std::shared_ptr< const FPGATrackSimHit > > getHits_flat() const
Definition: FPGATrackSimRoad.cxx:113
FPGATrackSimRoad::m_hits
std::vector< std::vector< FPGATrackSimHit > > m_hits
Definition: FPGATrackSimRoad.h:150
FPGATrackSimRoad::setPID
void setPID(pid_t pid)
Definition: FPGATrackSimRoad.h:59
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
ParticleGun_EoverP_Config.pid
pid
Definition: ParticleGun_EoverP_Config.py:62
FPGATrackSimRoad::getXBin
unsigned getXBin() const
Definition: FPGATrackSimRoad.h:87
FPGATrackSimRoad::setX
void setX(float v)
Definition: FPGATrackSimRoad.h:77
FPGATrackSimRoad::FPGATrackSimRoad
FPGATrackSimRoad()=default
FPGATrackSimRoad::setNLayers
void setNLayers(unsigned layers)
Definition: FPGATrackSimRoad.h:66
FPGATrackSimRoad::m_fitChi2
double m_fitChi2
Definition: FPGATrackSimRoad.h:148
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
FPGATrackSimRoad::setFitChi2
void setFitChi2(double v)
Definition: FPGATrackSimRoad.h:81
FPGATrackSimRoad::getYBin
unsigned getYBin() const
Definition: FPGATrackSimRoad.h:88
FPGATrackSimRoad::getFitParams
const FPGATrackSimTrackPars & getFitParams() const
Definition: FPGATrackSimRoad.h:106
FPGATrackSimRoad::setSectorBin
void setSectorBin(int sectorbin)
Definition: FPGATrackSimRoad.h:61
sector_t
int32_t sector_t
Definition: FPGATrackSimTypes.h:21
FPGATrackSimRoad::operator<<
friend std::ostream & operator<<(std::ostream &os, const FPGATrackSimRoad &road)
Definition: FPGATrackSimRoad.cxx:149
FPGATrackSimMultiTruth
Definition: FPGATrackSimMultiTruth.h:46
FPGATrackSimRoad::getFitChi2
double getFitChi2() const
Definition: FPGATrackSimRoad.h:107
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
FPGATrackSimRoad::setSubRegion
void setSubRegion(int v)
Definition: FPGATrackSimRoad.h:74
FPGATrackSimRoad::getWCLayers
layer_bitmask_t getWCLayers() const
Definition: FPGATrackSimRoad.h:98
FPGATrackSimRoad::m_roadID
int m_roadID
Definition: FPGATrackSimRoad.h:130
FPGATrackSimRoad::FPGATrackSimRoad
FPGATrackSimRoad(unsigned nLayers)
Definition: FPGATrackSimRoad.h:39
FPGATrackSimRoad::getY
float getY() const
Definition: FPGATrackSimRoad.h:90
python.PyAthena.v
v
Definition: PyAthena.py:154
FPGATrackSimRoad::m_etaPatternID
int m_etaPatternID
Definition: FPGATrackSimRoad.h:139
FPGATrackSimRoad::setFitParams
void setFitParams(const FPGATrackSimTrackPars &v)
Definition: FPGATrackSimRoad.h:80
FPGATrackSimRoad::getBinIdx
const std::vector< unsigned > & getBinIdx() const
Definition: FPGATrackSimRoad.h:122
python.CaloAddPedShiftConfig.default
default
Definition: CaloAddPedShiftConfig.py:43
FPGATrackSimRoad::setSector
void setSector(sector_t sector)
Definition: FPGATrackSimRoad.h:60
FPGATrackSimRoad::getNLayers
size_t getNLayers() const
Definition: FPGATrackSimRoad.h:112
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
FPGATrackSimRoad::setYBin
void setYBin(unsigned v)
Definition: FPGATrackSimRoad.h:76
FPGATrackSimRoad::setBinIdx
void setBinIdx(std::vector< unsigned > x)
Definition: FPGATrackSimRoad.h:121
FPGATrackSimRoad::getNHitCombos
size_t getNHitCombos() const
Definition: FPGATrackSimRoad.cxx:35
FPGATrackSimRoad::getSector
sector_t getSector() const
Definition: FPGATrackSimRoad.h:94
FPGATrackSimRoad::ClassDefNV
ClassDefNV(FPGATrackSimRoad, 8)
FPGATrackSimRoad::setY
void setY(float v)
Definition: FPGATrackSimRoad.h:78
FPGATrackSimRoad::setRoadID
void setRoadID(int roadID)
Definition: FPGATrackSimRoad.h:58
FPGATrackSimRoad::setEtaPatternID
void setEtaPatternID(int patternID)
Definition: FPGATrackSimRoad.h:72
FPGATrackSimRoad::m_sectorbin
int m_sectorbin
Definition: FPGATrackSimRoad.h:133
FPGATrackSimRoad::getPID
pid_t getPID() const
Definition: FPGATrackSimRoad.h:93
FPGATrackSimRoad::setHitLayers
void setHitLayers(layer_bitmask_t hit_layers)
Definition: FPGATrackSimRoad.h:63
FPGATrackSimRoad::getAllHits
const std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > & getAllHits() const
Definition: FPGATrackSimRoad.h:103
FPGATrackSimRoad::m_sector
sector_t m_sector
Definition: FPGATrackSimRoad.h:132
FPGATrackSimTypes.h
FPGATrackSimTrackPars.h
Structs that store the 5 track parameters.
FPGATrackSimRoad::m_fitTrackPars
FPGATrackSimTrackPars m_fitTrackPars
Definition: FPGATrackSimRoad.h:147
FPGATrackSimRoad::setHits
void setHits(std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit >>> &&hits)
Definition: FPGATrackSimRoad.cxx:141
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:31
FPGATrackSimRoad::setWCLayers
void setWCLayers(layer_bitmask_t wc_layers)
Definition: FPGATrackSimRoad.h:64
FPGATrackSimRoad::setXBin
void setXBin(unsigned v)
Definition: FPGATrackSimRoad.h:75
FPGATrackSimRoad::FPGATrackSimRoad
FPGATrackSimRoad(int roadID, pid_t pid, sector_t sector, layer_bitmask_t hit_layers, layer_bitmask_t wildcard_layers, std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit >>> &&hits)
Definition: FPGATrackSimRoad.h:41