ATLAS Offline Software
FPGATrackSimGNNRoadMakerTool.cxx
Go to the documentation of this file.
1 
2 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 
6 
8 // AthAlgTool
9 
10 FPGATrackSimGNNRoadMakerTool::FPGATrackSimGNNRoadMakerTool(const std::string& algname, const std::string &name, const IInterface *ifc)
11  : AthAlgTool(algname, name, ifc) {}
12 
14 {
15  ATH_CHECK(m_FPGATrackSimMapping.retrieve());
16  m_nLayers = m_FPGATrackSimMapping->PlaneMap_1st(0)->getNLogiLayers();
17  ATH_CHECK(m_layerNumberTool.retrieve());
18  m_pix_h2l = m_layerNumberTool->pixelLayers();
19  m_layerGeometry = m_layerNumberTool->layerGeometry();
20 
21  return StatusCode::SUCCESS;
22 }
23 
25 // Functions
26 
27 StatusCode FPGATrackSimGNNRoadMakerTool::makeRoads(const std::vector<std::shared_ptr<const FPGATrackSimHit>> & hits, const std::vector<std::shared_ptr<FPGATrackSimGNNHit>> & gnn_hits, const std::vector<std::shared_ptr<FPGATrackSimGNNEdge>> & edges, std::vector<std::shared_ptr<const FPGATrackSimRoad>> & roads)
28 {
29  m_num_nodes = gnn_hits.size();
30  doScoreCut(edges);
31 
32  if(m_roadMakerTool == "ConnectedComponents") {
34  addRoads(hits, gnn_hits, roads);
35  } else if (m_roadMakerTool == "JunctionAwareCC"){
37  addRoads(hits, gnn_hits, roads);
38  }
39 
40  resetVectors();
41 
42  return StatusCode::SUCCESS;
43 }
44 
45 void FPGATrackSimGNNRoadMakerTool::doScoreCut(const std::vector<std::shared_ptr<FPGATrackSimGNNEdge>> & edges)
46 {
47  for (const auto& edge : edges) {
48  if(edge->getEdgeScore() > m_edgeScoreCut) {
49  m_pass_edge_index_1.push_back(edge->getEdgeIndex1());
50  m_pass_edge_index_2.push_back(edge->getEdgeIndex2());
51  }
52  }
53 }
54 
56 {
58  boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> g(m_unique_nodes.size());
59 
60  for (size_t i = 0; i < m_pass_edge_index_1.size(); i++) {
63  add_edge(u, v, g); // Add the edge between the mapped node indices
64  }
65 
66  std::vector<int> components(num_vertices(g), -1);
67  m_component.resize(num_vertices(g), std::vector<int>(1,-1));
68  m_num_components = boost::connected_components(g, &components[0]);
69 
70  for (size_t i = 0; i != components.size(); ++i){
71  m_component[i][0] = components[i];
72  }
73 
74  m_labels.resize(m_num_nodes, std::vector<int>(1,-1));
75 
76  for (size_t i = 0; i < m_unique_indices.size(); i++) {
78  }
79 }
80 
82 {
84  boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS> g(m_unique_nodes.size());
85 
86  for (size_t i = 0; i < m_pass_edge_index_1.size(); i++) {
89  add_edge(u, v, g); // Add the edge between the mapped node indices
90  }
91  // Predecessor map, allowing to keep track of the previous hits in a component
92  std::unordered_map<Vertex, std::vector<Vertex>> pred_map;
93  // Visited vertices map
94  std::vector<bool> visited(num_vertices(g), false);
95 
96  m_control_var.resize(num_vertices(g), -1);
97  m_component.resize(num_vertices(g));
98  int comp_id = 0;
99 
100  for (Vertex v = 0; v < num_vertices(g); ++v){
101  if(!visited[v] && boost::in_degree(v,g) == 0){
102  JunctionAwareVisitor JA_vis(comp_id, m_control_var, m_component, pred_map);
103  std::vector<boost::default_color_type> color_map(num_vertices(g));
104  breadth_first_search(g, v, visitor(JA_vis).color_map(boost::make_iterator_property_map(color_map.begin(), get(boost::vertex_index, g))));
105  // Mark visited vertices and reset control variables
106  for (unsigned long u = 0; u != num_vertices(g); ++u){
107  if (m_control_var[u] != -1){
108  visited[u] = true;
109  m_control_var[u] = -1;
110  }
111  }
112  ++comp_id;
113  }
114  }
115  m_num_components = comp_id;
116 
117  m_labels.resize(m_num_nodes, std::vector<int>(1,-1));
118 
119  for (size_t i = 0; i < m_unique_indices.size(); i++) {
121  }
122 }
123 
124 void FPGATrackSimGNNRoadMakerTool::addRoads(const std::vector<std::shared_ptr<const FPGATrackSimHit>> & hits,
125  const std::vector<std::shared_ptr<FPGATrackSimGNNHit>> & gnn_hits,
126  std::vector<std::shared_ptr<const FPGATrackSimRoad>> & roads)
127 {
128  roads.clear();
129  m_roads.clear();
130 
132  for (size_t i = 0; i < m_labels.size(); i++) {
133  for (auto& current_label : m_labels[i]){
134  if(current_label != -1) {
135  m_road_hit_list[current_label].push_back(gnn_hits[i]->getHitID());
136  }
137  }
138  }
139  for (const auto& hit_list : m_road_hit_list) {
140  if(m_doGNNPixelSeeding) { addRoadForPixelSeed(hits, hit_list); }
141  else { addRoad(hits, hit_list); }
142  }
143 
144  roads.reserve(m_roads.size());
145  for (const FPGATrackSimRoad & r : m_roads) roads.emplace_back(std::make_shared<const FPGATrackSimRoad>(r));
146 }
147 
148 void FPGATrackSimGNNRoadMakerTool::addRoad(const std::vector<std::shared_ptr<const FPGATrackSimHit>> & hits, const std::vector<int>& road_hitIDs)
149 {
150  // Take the HitID values and find the correct hit from FPGATrackSimHit, then insert it into a vector of mapped FPGATrackSimHit which are needed for the FPGATrackSimRoad
151  std::vector<std::shared_ptr<const FPGATrackSimHit>> mapped_road_hits;
152  const FPGATrackSimPlaneMap *pmap = m_FPGATrackSimMapping->PlaneMap_1st(0);
153  layer_bitmask_t hitLayers = 0;
154 
155  for (const auto& hitID : road_hitIDs) {
156  if(hitID+1 < static_cast<int>(hits.size()) && hits[hitID]->isStrip() && hits[hitID+1]->isStrip() &&
157  to_string(hits[hitID]->getHitType()) == "spacepoint" && to_string(hits[hitID+1]->getHitType()) == "spacepoint" &&
158  hits[hitID]->getX() == hits[hitID+1]->getX()) {
159  auto &hit1 = hits[hitID];
160  std::shared_ptr<FPGATrackSimHit> hitCopy1 = std::make_shared<FPGATrackSimHit>(*hit1);
161  pmap->map(*hitCopy1);
162  hitLayers |= 1 << hitCopy1->getLayer();
163  mapped_road_hits.push_back(std::move(hitCopy1));
164  //
165  auto &hit2 = hits[hitID+1];
166  std::shared_ptr<FPGATrackSimHit> hitCopy2 = std::make_shared<FPGATrackSimHit>(*hit2);
167  pmap->map(*hitCopy2);
168  hitLayers |= 1 << hitCopy2->getLayer();
169  mapped_road_hits.push_back(std::move(hitCopy2));
170  }
171  else {
172  auto &hit = hits[hitID];
173  std::shared_ptr<FPGATrackSimHit> hitCopy = std::make_shared<FPGATrackSimHit>(*hit);
174  pmap->map(*hitCopy);
175  hitLayers |= 1 << hitCopy->getLayer();
176  mapped_road_hits.push_back(std::move(hitCopy));
177  }
178  }
179  m_roads.emplace_back();
180  FPGATrackSimRoad & r = m_roads.back();
181  auto sorted_hits = ::sortByLayer(mapped_road_hits);
182  sorted_hits.resize(m_nLayers);
183  r.setRoadID(m_roads.size() - 1);
184  r.setHitLayers(hitLayers);
185  r.setHits(std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>>(std::move(sorted_hits)));
186  r.setSubRegion(0);
187 }
188 
189 void FPGATrackSimGNNRoadMakerTool::addRoadForPixelSeed(const std::vector<std::shared_ptr<const FPGATrackSimHit>> & hits, const std::vector<int>& road_hitIDs)
190 {
191  std::vector<std::shared_ptr<const FPGATrackSimHit>> all_hits;
192  std::vector<std::shared_ptr<const FPGATrackSimHit>> track_hit_list;
193 
194  for (const auto& hitID : road_hitIDs) {
195  auto &hit = hits[hitID]; //Hit object inside the road candidate
196  all_hits.push_back(hit);
197  }
198 
199  // Sort hits in CC list by rho
200  std::sort(all_hits.begin(), all_hits.end(),
201  [](const std::shared_ptr<const FPGATrackSimHit>& hit1,
202  const std::shared_ptr<const FPGATrackSimHit>& hit2) {
203  double rho1 = std::hypot(hit1->getX(), hit1->getY());
204  double rho2 = std::hypot(hit2->getX(), hit2->getY());
205  return rho1 < rho2;
206  });
207 
208  // From all the hits in the CC list, only accept one per global layer ID, defined by the layer configuration from GBTS
209  std::unordered_set<int> seenLayers;
210  for (const auto &hit : all_hits) {
211  short layer = m_pix_h2l->at(static_cast<int>(hit->getIdentifierHash()));
212  TrigInDetSiLayer layerGeometry = m_layerGeometry->at(layer);
213  int combinedId = layerGeometry.m_subdet;
214 
215  if (seenLayers.count(combinedId) == 0) { // unique layer
216  track_hit_list.push_back(hit);
217  seenLayers.insert(combinedId);
218  }
219  }
220 
221  std::size_t nSp = track_hit_list.size();
222  std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> seed_hit_list;
223 
224  // Use a method to choose which spacepoints to keep for the road, which becomes a seed
225  // Need at least 3 spacepoints to form a seed, so only consider 3 spacepoint lists of hits-per-layer
226  // For >=4 spacepoints, consider a evenly-spaced method instead of first N spacepoints
227  // So the road candidate can have anywhere from 3-5 spacepoints
228  auto spacePointIndicesFun = [](std::size_t nSp, std::size_t nSeeds) -> std::vector<std::size_t> {
229  std::vector<std::size_t> idx;
230 
231  for (std::size_t i = 0; i < nSeeds; ++i) {
232  std::size_t pos = (i * (nSp - 1)) / (nSeeds - 1); // evenly spaced
233  if (idx.empty() || idx.back() != pos) { // avoid duplicates
234  idx.push_back(pos);
235  }
236  }
237  return idx;
238  };
239 
240  // Only keep road candidates with at >= 3 spacepoints in unique layers
241  if (nSp >= 3) {
242  std::size_t nSeeds = std::min<std::size_t>(5, nSp);
243  auto indices = spacePointIndicesFun(nSp, nSeeds);
244 
245  for (auto idx : indices) {
246  seed_hit_list.push_back({track_hit_list[idx]});
247  }
248 
249  m_roads.emplace_back();
250  FPGATrackSimRoad & r = m_roads.back();
251  r.setHits(std::move(seed_hit_list));
252  r.setRoadID(m_roads.size() - 1);
253  }
254 }
255 
257 {
258  m_pass_edge_index_1.clear();
259  m_pass_edge_index_2.clear();
260  m_unique_nodes.clear();
261  m_node_index_map.clear();
262  m_unique_indices.clear();
263  m_component.clear();
264  m_labels.clear();
265  m_road_hit_list.clear();
266 }
267 
269 {
270  // Remove isolated nodes from list of nodes using list of edges and indices
273 
274  int index = 0;
275  for (int node : m_unique_nodes) {
276  m_node_index_map[node] = index++; // Mapping original node index to new graph index
277  }
278 
279  for (const auto& entry : m_node_index_map) {
280  m_unique_indices.push_back(entry.first); // Push the original node index into unique_indices
281  }
282 }
283 
284 JunctionAwareVisitor::JunctionAwareVisitor(int& in_current, std::vector<int>& in_control_vars, std::vector<std::vector<int>>& in_comps,
285  std::unordered_map<Vertex, std::vector<Vertex>>& in_pred_map) :
286  m_current_comp(in_current), m_control_vars(in_control_vars), m_components(in_comps),
287  m_pred_map(in_pred_map), m_initial_comp(in_current) {}
288 
289 template <typename VertexT, typename GraphT>
290 void JunctionAwareVisitor::discover_vertex(VertexT v, const GraphT& g)
291 {
292  if (m_control_vars[v] == -1){
293  m_control_vars[v] = boost:: out_degree(v,g) < 2 ? 1 : -2; // -2 labels junctions before they are transversed
294  m_components[v].push_back(m_current_comp);
295  }
296 }
297 
298 template <typename EdgeT, typename GraphT>
299 void JunctionAwareVisitor::examine_edge(EdgeT e, const GraphT& g)
300 {
301  auto src_node = source(e,g);
302  auto tar_node = target(e,g);
303  m_pred_map[tar_node].push_back(src_node);
304 
305  std::vector<int> src_comp; // Store the components of the source that need to be tracked
306 
307  for(int comp : m_components[src_node]){
308  if(comp >= m_initial_comp &&
309  std::find(m_components[tar_node].begin(), m_components[tar_node].end(), comp) == m_components[tar_node].end()){
310  src_comp.push_back(comp); // Components of source node not in target
311  }
312  }
313 
314  // If source node has multiple in-edges, add the components from its predecessors
315  if (boost::in_degree(src_node, g) > 1){
316  auto in_edges = boost::in_edges(src_node, g);
317  for (auto it = in_edges.first; it != in_edges.second; ++it){
318  auto edge_src = source(*it, g);
319  for (int comp : m_components[edge_src]){
320  if((comp >= m_initial_comp) && (std::find(src_comp.begin(), src_comp.end(), comp) == src_comp.end()) &&
321  (std::find(m_components[tar_node].begin(), m_components[tar_node].end(), comp) == m_components[tar_node].end())){
322  src_comp.push_back(comp);
323  }
324  }
325  }
326  }
327 
328  // No junction case
329  if (m_control_vars[src_node] == 1){
330  m_components[tar_node].insert(m_components[tar_node].end(), src_comp.begin(), src_comp.end());
331  m_control_vars[tar_node] = boost::out_degree(tar_node, g) < 2 ? 1 : -2;
332  }
333 
334  // First time visiting a junction
335  else if (m_control_vars[src_node] == -2){
336  m_components[tar_node].insert(m_components[tar_node].end(), src_comp.begin(), src_comp.end());
337  m_control_vars[tar_node] = boost::out_degree(tar_node, g) < 2 ? 1 : -2;
338  m_control_vars[src_node] = 2; // 2 labels a junction after the first visit to it
339  m_n_iter = src_comp.size(); // Number of indices to add to each component going out of this junction
340  }
341 
342  // Going through a junction already visited
343  else if (m_control_vars[src_node] == 2){
344  for(int i = 0; i != m_n_iter; ++i){
345  ++m_current_comp;
346  m_components[tar_node].push_back(m_current_comp);
347  m_control_vars[tar_node] = boost::out_degree(tar_node, g) < 2 ? 1 : -2;
348  // Backtrace the node's predecessors to propagate the new label
349  std::unordered_set<Vertex> visited;
350  std::function<void(Vertex)> backtrace = [&](Vertex node){
351  if(visited.count(node)) return;
352  visited.insert(node);
353  const auto& node_comps = m_components[node];
354  if((std::find(node_comps.begin(), node_comps.end(), m_current_comp) == node_comps.end()) &&
355  (src_comp.empty() || std::find(node_comps.begin(), node_comps.end(), src_comp[i]) == node_comps.end())){ // Backpropagate with junction awareness
356  m_components[node].push_back(m_current_comp);
357  }
358  for (const auto& pred : m_pred_map[node]){
359  backtrace(pred);
360  }
361  };
362  backtrace(tar_node);
363  }
364  }
365 }
FPGATrackSimGNNRoadMakerTool::m_layerNumberTool
ToolHandle< ITrigL2LayerNumberTool > m_layerNumberTool
Definition: FPGATrackSimGNNRoadMakerTool.h:62
plotting.yearwise_luminosity_vs_mu.comp
comp
Definition: yearwise_luminosity_vs_mu.py:23
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
beamspotman.r
def r
Definition: beamspotman.py:672
JunctionAwareVisitor::examine_edge
void examine_edge(EdgeT e, const GraphT &g)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:299
FPGATrackSimGNNRoadMakerTool::m_edgeScoreCut
Gaudi::Property< float > m_edgeScoreCut
Definition: FPGATrackSimGNNRoadMakerTool.h:67
getMenu.algname
algname
Definition: getMenu.py:54
FPGATrackSimGNNRoadMakerTool::addRoads
void addRoads(const std::vector< std::shared_ptr< const FPGATrackSimHit >> &hits, const std::vector< std::shared_ptr< FPGATrackSimGNNHit >> &gnn_hits, std::vector< std::shared_ptr< const FPGATrackSimRoad >> &roads)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:124
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
JunctionAwareVisitor::m_current_comp
int & m_current_comp
Definition: FPGATrackSimGNNRoadMakerTool.h:124
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
FPGATrackSimGNNRoadMakerTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimGNNRoadMakerTool.cxx:13
FPGATrackSimGNNRoadMakerTool::m_roadMakerTool
Gaudi::Property< std::string > m_roadMakerTool
Definition: FPGATrackSimGNNRoadMakerTool.h:68
FPGATrackSimGNNRoadMakerTool::m_num_nodes
int m_num_nodes
Definition: FPGATrackSimGNNRoadMakerTool.h:74
FPGATrackSimPlaneMap.h
Maps physical layers to logical layers.
index
Definition: index.py:1
FPGATrackSimGNNRoadMakerTool::addRoadForPixelSeed
void addRoadForPixelSeed(const std::vector< std::shared_ptr< const FPGATrackSimHit >> &hits, const std::vector< int > &road_hitIDs)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:189
FPGATrackSimGNNRoadMakerTool.h
Implements algorithm to construct a road from a list of hits using edge scores.
Trk::indices
std::pair< long int, long int > indices
Definition: AlSymMatBase.h:24
FPGATrackSimGNNRoadMakerTool::doConnectedComponents
void doConnectedComponents()
Definition: FPGATrackSimGNNRoadMakerTool.cxx:55
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
skel.it
it
Definition: skel.GENtoEVGEN.py:407
FPGATrackSimGNNRoadMakerTool::m_pass_edge_index_2
std::vector< int > m_pass_edge_index_2
Definition: FPGATrackSimGNNRoadMakerTool.h:76
FPGATrackSimGNNRoadMakerTool::makeRoads
virtual StatusCode makeRoads(const std::vector< std::shared_ptr< const FPGATrackSimHit >> &hits, const std::vector< std::shared_ptr< FPGATrackSimGNNHit >> &gnn_hits, const std::vector< std::shared_ptr< FPGATrackSimGNNEdge >> &edges, std::vector< std::shared_ptr< const FPGATrackSimRoad >> &roads)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:27
FPGATrackSimGNNRoadMakerTool::m_doGNNPixelSeeding
Gaudi::Property< bool > m_doGNNPixelSeeding
Definition: FPGATrackSimGNNRoadMakerTool.h:69
FPGATrackSimHit::getLayer
int getLayer() const
Definition: FPGATrackSimHit.cxx:87
MuonR4::to_string
std::string to_string(const SectorProjector proj)
Definition: MsTrackSeeder.cxx:66
FPGATrackSimGNNRoadMakerTool::m_unique_nodes
std::set< int > m_unique_nodes
Definition: FPGATrackSimGNNRoadMakerTool.h:78
JunctionAwareVisitor::m_initial_comp
int m_initial_comp
Definition: FPGATrackSimGNNRoadMakerTool.h:128
FPGATrackSimGNNRoadMakerTool::addRoad
void addRoad(const std::vector< std::shared_ptr< const FPGATrackSimHit >> &hits, const std::vector< int > &road_hitIDs)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:148
FPGATrackSimGNNRoadMakerTool::m_node_index_map
std::map< int, int > m_node_index_map
Definition: FPGATrackSimGNNRoadMakerTool.h:79
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
FPGATrackSimGNNRoadMakerTool::m_component
std::vector< std::vector< int > > m_component
Definition: FPGATrackSimGNNRoadMakerTool.h:82
JunctionAwareVisitor::discover_vertex
void discover_vertex(VertexT v, const GraphT &g)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:290
FPGATrackSimGNNRoadMakerTool::resetVectors
void resetVectors()
Definition: FPGATrackSimGNNRoadMakerTool.cxx:256
FPGATrackSimGNNRoadMakerTool::m_nLayers
unsigned m_nLayers
Definition: FPGATrackSimGNNRoadMakerTool.h:77
JunctionAwareVisitor
Definition: FPGATrackSimGNNRoadMakerTool.h:112
FPGATrackSimPlaneMap::map
void map(FPGATrackSimHit &hit) const
Definition: FPGATrackSimPlaneMap.cxx:234
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimGNNRoadMakerTool::m_pix_h2l
const std::vector< short > * m_pix_h2l
Definition: FPGATrackSimGNNRoadMakerTool.h:86
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
JunctionAwareVisitor::m_control_vars
std::vector< int > & m_control_vars
Definition: FPGATrackSimGNNRoadMakerTool.h:125
FPGATrackSimGNNRoadMakerTool::m_pass_edge_index_1
std::vector< int > m_pass_edge_index_1
Definition: FPGATrackSimGNNRoadMakerTool.h:75
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
JunctionAwareVisitor::m_components
std::vector< std::vector< int > > & m_components
Definition: FPGATrackSimGNNRoadMakerTool.h:126
PyPoolBrowser.node
node
Definition: PyPoolBrowser.py:131
FPGATrackSimGNNRoadMakerTool::FPGATrackSimGNNRoadMakerTool
FPGATrackSimGNNRoadMakerTool(const std::string &, const std::string &, const IInterface *)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:10
JunctionAwareVisitor::m_n_iter
int m_n_iter
Definition: FPGATrackSimGNNRoadMakerTool.h:129
FPGATrackSimPlaneMap
Definition: FPGATrackSimPlaneMap.h:62
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
JunctionAwareVisitor::JunctionAwareVisitor
JunctionAwareVisitor(int &current, std::vector< int > &in_control_vars, std::vector< std::vector< int >> &in_comps, std::unordered_map< Vertex, std::vector< Vertex >> &in_pred_map)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:284
FPGATrackSimGNNRoadMakerTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimGNNRoadMakerTool.h:61
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Vertex
boost::graph_traits< boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS > >::vertex_descriptor Vertex
Definition: FPGATrackSimGNNRoadMakerTool.h:35
JunctionAwareVisitor::m_pred_map
std::unordered_map< Vertex, std::vector< Vertex > > & m_pred_map
Definition: FPGATrackSimGNNRoadMakerTool.h:127
FPGATrackSimGNNRoadMakerTool::m_layerGeometry
const std::vector< TrigInDetSiLayer > * m_layerGeometry
Definition: FPGATrackSimGNNRoadMakerTool.h:87
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
python.PyAthena.v
v
Definition: PyAthena.py:154
FPGATrackSimGNNRoadMakerTool::reorderIndices
void reorderIndices()
Definition: FPGATrackSimGNNRoadMakerTool.cxx:268
FPGATrackSimGNNRoadMakerTool::m_road_hit_list
std::vector< std::vector< int > > m_road_hit_list
Definition: FPGATrackSimGNNRoadMakerTool.h:85
copySelective.target
string target
Definition: copySelective.py:36
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
FPGATrackSimGNNRoadMakerTool::m_num_components
int m_num_components
Definition: FPGATrackSimGNNRoadMakerTool.h:83
FPGATrackSimGNNRoadMakerTool::doScoreCut
void doScoreCut(const std::vector< std::shared_ptr< FPGATrackSimGNNEdge >> &edges)
Definition: FPGATrackSimGNNRoadMakerTool.cxx:45
TrigInDetSiLayer
Definition: TrigInDetSiLayer.h:8
copySelective.source
string source
Definition: copySelective.py:31
FPGATrackSimGNNRoadMakerTool::m_roads
std::vector< FPGATrackSimRoad > m_roads
Definition: FPGATrackSimGNNRoadMakerTool.h:106
FPGATrackSimGNNRoadMakerTool::m_control_var
std::vector< int > m_control_var
Definition: FPGATrackSimGNNRoadMakerTool.h:81
AthAlgTool
Definition: AthAlgTool.h:26
FPGATrackSimGNNRoadMakerTool::m_unique_indices
std::vector< int > m_unique_indices
Definition: FPGATrackSimGNNRoadMakerTool.h:80
check_log.backtrace
backtrace
Definition: check_log.py:58
FPGATrackSimGNNRoadMakerTool::doJunctionAwareCC
void doJunctionAwareCC()
Definition: FPGATrackSimGNNRoadMakerTool.cxx:81
FPGATrackSimGNNRoadMakerTool::m_labels
std::vector< std::vector< int > > m_labels
Definition: FPGATrackSimGNNRoadMakerTool.h:84
node
Definition: node.h:21
TrigInDetSiLayer::m_subdet
int m_subdet
Definition: TrigInDetSiLayer.h:10
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:31
sortByLayer
std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit > > > sortByLayer(Container const &hits)
Definition: FPGATrackSimHit.h:315