ATLAS Offline Software
Loading...
Searching...
No Matches
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
15
16
17#include <vector>
18#include <unordered_set>
19#include <ostream>
20#include <memory>
21#include <bit>
22
23#include "TObject.h"
24
29
31{
32public:
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
48 FPGATrackSimRoad(FPGATrackSimRoad&&) noexcept = default;
49 FPGATrackSimRoad& operator=(FPGATrackSimRoad&&) noexcept = default;
50 //Copy operators
52 FPGATrackSimRoad& operator=(const FPGATrackSimRoad&) = default;
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
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 void setFitChi2_2d(double chi2_phi, double chi2_eta) { m_fitChi2_phi = chi2_phi; m_fitChi2_eta = chi2_eta; }
83
85 // Getters
86
87 int getSubRegion() const { return m_subRegion; }
88 unsigned getXBin() const { return m_xBin; }
89 unsigned getYBin() const { return m_yBin; }
90 float getX() const { return m_x; }
91 float getY() const { return m_y; }
92
93 int getRoadID() const { return m_roadID; }
94 pid_t getPID() const { return m_pid; }
95 sector_t getSector() const { return m_sector; }
96 int getSectorBin() const { return m_sectorbin; }
97
100
101 int getEtaPatternID() const { return m_etaPatternID; }
102
103 const std::vector<std::shared_ptr<const FPGATrackSimHit>> &getHits(size_t layer) const { return m_hits_trans.at(layer); }
104 const std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> &getAllHits() const { return m_hits_trans; }
105 std::unordered_set<std::shared_ptr<const FPGATrackSimHit>> getHits_flat() const;
106
108 double getFitChi2() const { return m_fitChi2; }
109 double getFitChi2Phi() const { return m_fitChi2_phi; }
110 double getFitChi2Eta() const { return m_fitChi2_eta; }
111
113 // Utility
114
115 size_t getNLayers() const { return m_hits_trans.size(); }
116 size_t getNHitLayers() const { return std::popcount(m_hit_layers); }
117 size_t getNWCLayers() const { return std::popcount(m_wildcard_layers); }
118
119 size_t getNHits() const;
120 std::vector<size_t> getNHits_layer() const;
121 size_t getNHitCombos() const;
122
123 // Bin ID, if using FPGATrackSim binning.
124 void setBinIdx(std::vector<unsigned> x) { m_binIdx = std::move(x); }
125 const std::vector<unsigned>& getBinIdx() const { return m_binIdx; }
126
127 // Weight of each barcode is the fraction of layers with corresponding hits
128 // where pixels are weighted twice as much
130
131private:
132
133 int m_roadID = 0; // Currently just a count set by RoadFinder.
134 pid_t m_pid = 0; // the pattern ID that fired this road
135 sector_t m_sector = 0; // Sector this road belongs to / should be fitted with
136 int m_sectorbin = -1; // The bin/ID of the sector that this road belongs to.
137
138 layer_bitmask_t m_hit_layers = 0; // Layers that had hits match the pattern, not including wildcards
139 layer_bitmask_t m_wildcard_layers = 0; // Layers that matched because of a wildcard in the pattern
140
141 // Eta pattern associated with the road.
143
144 int m_subRegion = 0; // slice that the road came from
145 unsigned m_xBin = 0;
146 unsigned m_yBin = 0;
147 float m_x = 0; // x value of Hough bin
148 float m_y = 0; // y value of Hough bin
149
151 double m_fitChi2 = 0;
152 double m_fitChi2_phi = 0;
153 double m_fitChi2_eta = 0;
154
155 std::vector<std::vector<FPGATrackSimHit>> m_hits; // [layer, hit#] (used for ROOT storing)
156 std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> m_hits_trans;
157 // A list of hits in the road for each layer.
158 // These pointers are not owned by the road.
159
160 // bin ID. Just store this as a vector<unsigned>.
161 std::vector<unsigned> m_binIdx;
162
164 // Misc
165 friend std::ostream& operator<<(std::ostream& os, const FPGATrackSimRoad& road);
167};
168
169#endif // FPGATrackSimROAD_H
170
: FPGATrackSim-specific class to represent an hit in the detector.
Structs that store the 5 track parameters.
int32_t pid_t
int32_t sector_t
uint32_t layer_bitmask_t
#define x
layer_bitmask_t m_wildcard_layers
const std::vector< std::shared_ptr< const FPGATrackSimHit > > & getHits(size_t layer) const
double getFitChi2() const
FPGATrackSimMultiTruth getTruth() const
std::vector< unsigned > m_binIdx
(transient) [layer, hit#]
size_t getNHitCombos() const
int getRoadID() const
void setFitChi2(double v)
FPGATrackSimRoad(unsigned nLayers)
void setHitLayers(layer_bitmask_t hit_layers)
unsigned getYBin() const
std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > m_hits_trans
void setBinIdx(std::vector< unsigned > x)
void setSectorBin(int sectorbin)
double getFitChi2Phi() const
size_t getNHits() const
size_t getNLayers() const
layer_bitmask_t m_hit_layers
sector_t getSector() const
float getY() const
void setFitChi2_2d(double chi2_phi, double chi2_eta)
std::unordered_set< std::shared_ptr< const FPGATrackSimHit > > getHits_flat() const
void setPID(pid_t pid)
void setY(float v)
void setHits(std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > &&hits)
size_t getNHitLayers() const
void setEtaPatternID(int patternID)
const std::vector< unsigned > & getBinIdx() const
void setFitParams(const FPGATrackSimTrackPars &v)
void setSector(sector_t sector)
FPGATrackSimRoad(FPGATrackSimRoad &&) noexcept=default
int getSubRegion() const
friend std::ostream & operator<<(std::ostream &os, const FPGATrackSimRoad &road)
void setXBin(unsigned v)
void setYBin(unsigned v)
const std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > & getAllHits() const
int getEtaPatternID() const
void setRoadID(int roadID)
void setSubRegion(int v)
FPGATrackSimTrackPars m_fitTrackPars
size_t getNWCLayers() const
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)
pid_t getPID() const
FPGATrackSimRoad()=default
layer_bitmask_t getWCLayers() const
double getFitChi2Eta() const
layer_bitmask_t getHitLayers() const
std::vector< std::vector< FPGATrackSimHit > > m_hits
void setNLayers(unsigned layers)
std::vector< size_t > getNHits_layer() const
const FPGATrackSimTrackPars & getFitParams() const
void setX(float v)
void setWCLayers(layer_bitmask_t wc_layers)
int getSectorBin() const
ClassDefNV(FPGATrackSimRoad, 8)
float getX() const
unsigned getXBin() const