ATLAS Offline Software
TrigInDetTrackSeedingTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
12 
14 
15 #include "GNN_TrackingFilter.h"
16 
18 
20 
22  const std::string& n,
23  const IInterface* p ) :
24  base_class(t,n,p)
25 {
26 
27 }
28 
30 
32 
33  ATH_CHECK(m_regsel_pix.retrieve());
34  ATH_CHECK(m_regsel_sct.retrieve());
35 
36  sc=m_layerNumberTool.retrieve();
37 
38  if(sc.isFailure()) {
39  ATH_MSG_ERROR("Could not retrieve "<<m_layerNumberTool);
40  return sc;
41  } else {
42  ATH_MSG_DEBUG("Retrieved "<<m_layerNumberTool);
43  }
44 
45  ATH_CHECK(detStore()->retrieve(m_atlasId, "AtlasID"));
46 
47  ATH_CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
48 
49  ATH_CHECK(detStore()->retrieve(m_sctId, "SCT_ID"));
50 
52 
54  ATH_MSG_FATAL("Both usePixelSpacePoints and useSctSpacePoints set to False. At least one needs to be True");
55  return StatusCode::FAILURE;
56  }
57 
58  if (!m_useSctSpacePoints) ATH_MSG_INFO("Only using Pixel spacepoints => Pixel seeds only");
59 
60  if (!m_usePixelSpacePoints) ATH_MSG_INFO("Only using SCT spacepoints => Strip seeds only");
61 
62  if (m_usePixelSpacePoints && m_useSctSpacePoints) ATH_MSG_INFO("Using SCT and Pixel spacepoints");
63 
65 
67 
68  std::string conn_fileName = PathResolver::find_file(m_connectionFile, "DATAPATH");
69  if (conn_fileName.empty()) {
70  ATH_MSG_FATAL("Cannot find layer connections file " << conn_fileName);
71  return StatusCode::FAILURE;
72  }
73  else {
74 
75  std::ifstream ifs(conn_fileName.c_str());
76 
77  m_connector = std::make_unique<GNN_FASTRACK_CONNECTOR>(ifs, m_LRTmode);
78 
79  ATH_MSG_INFO("Layer connections are initialized from file " << conn_fileName);
80  }
81 
82  const std::vector<TrigInDetSiLayer>* pVL = m_layerNumberTool->layerGeometry();
83 
84  std::copy(pVL->begin(),pVL->end(), std::back_inserter(m_layerGeometry));
85 
86  m_geo = std::make_unique<TrigFTF_GNN_Geometry>(m_layerGeometry, m_connector);
87 
89 
90  ATH_MSG_INFO("TrigInDetTrackSeedingTool initialized ");
91 
92  return sc;
93 }
94 
96 
98  return sc;
99 }
100 
101 
102 TrigInDetTrackSeedingResult TrigInDetTrackSeedingTool::findSeeds(const IRoiDescriptor& internalRoI, std::vector<TrigInDetTracklet>& output, const EventContext& ctx) const {
103 
104  TrigInDetTrackSeedingResult seedStats;
105 
106  output.clear();
107 
109  const Amg::Vector3D &vertex = beamSpotHandle->beamPos();
110  float shift_x = vertex.x() - beamSpotHandle->beamTilt(0)*vertex.z();
111  float shift_y = vertex.y() - beamSpotHandle->beamTilt(1)*vertex.z();
112 
113  std::unique_ptr<TrigFTF_GNN_DataStorage> storage = std::make_unique<TrigFTF_GNN_DataStorage>(*m_geo);
114 
115  int nPixels = 0;
116  int nStrips = 0;
117 
118  std::vector<std::vector<TrigFTF_GNN_Node> > trigSpStorage[2];
119 
120  if (m_useSctSpacePoints) {
121 
123 
124  if(!sctHandle.isValid()) {
125  ATH_MSG_WARNING("Invalid Strip Spacepoints handle: "<<sctHandle);
126  return seedStats;
127 
128  }
129  const SpacePointContainer* sctSpacePointsContainer = sctHandle.ptr();
130 
131  std::vector<IdentifierHash> listOfSctIds;
132 
133  m_regsel_sct->lookup(ctx)->HashIDList( internalRoI, listOfSctIds );
134 
135  const std::vector<short>* h2l = m_layerNumberTool->sctLayers();
136 
137  trigSpStorage[1].resize(h2l->size());
138 
139  for(const auto& idx : listOfSctIds) {
140 
141  short layerIndex = h2l->at(static_cast<int>(idx));
142 
143  std::vector<TrigFTF_GNN_Node>& tmpColl = trigSpStorage[1].at(static_cast<int>(idx));
144 
145  auto input_coll = sctSpacePointsContainer->indexFindPtr(idx);
146 
147  if(input_coll == nullptr) continue;
148 
149  createGraphNodes(input_coll, tmpColl, layerIndex, shift_x, shift_y);//TO-DO: if(m_useBeamTilt) SP full transform functor
150 
151  nStrips += storage->loadStripGraphNodes(layerIndex, tmpColl);
152  }
153  }
154 
155  if (m_usePixelSpacePoints) {
156 
157  const SpacePointContainer* pixelSpacePointsContainer = nullptr;
159 
160  if(!pixHandle.isValid()) {
161  ATH_MSG_WARNING("Invalid Pixel Spacepoints handle: "<<pixHandle);
162  return seedStats;
163  }
164 
165  pixelSpacePointsContainer = pixHandle.ptr();
166 
167  std::vector<IdentifierHash> listOfPixIds;
168 
169  m_regsel_pix->lookup(ctx)->HashIDList( internalRoI, listOfPixIds );
170 
171  const std::vector<short>* h2l = m_layerNumberTool->pixelLayers();
172 
173  trigSpStorage[0].resize(h2l->size());
174 
175  for(const auto& idx : listOfPixIds) {
176 
177  short layerIndex = h2l->at(static_cast<int>(idx));
178 
179  std::vector<TrigFTF_GNN_Node>& tmpColl = trigSpStorage[0].at(static_cast<int>(idx));
180 
181  auto input_coll = pixelSpacePointsContainer->indexFindPtr(idx);
182 
183  if(input_coll == nullptr) continue;
184 
185  createGraphNodes(input_coll, tmpColl, layerIndex, shift_x, shift_y);//TO-DO: SP full transform functor
186 
187  nPixels += storage->loadPixelGraphNodes(layerIndex, tmpColl, m_useML);
188  }
189 
190  }
191 
192  storage->sortByPhi();
193 
194  storage->initializeNodes(m_useML);
195 
196  storage->generatePhiIndexing(1.5*m_phiSliceWidth);
197 
198  seedStats.m_nPixelSPs = nPixels;
199  seedStats.m_nStripSPs = nStrips;
200 
201  ATH_MSG_DEBUG("Loaded "<<nPixels<< " Pixel Spacepoints and "<<nStrips<< " Strip SpacePoints");
202 
203  std::vector<TrigFTF_GNN_Edge> edgeStorage;
204 
205  std::pair<int, int> graphStats = buildTheGraph(internalRoI, storage, edgeStorage);
206 
207  ATH_MSG_DEBUG("Created graph with "<<graphStats.first<<" edges and "<<graphStats.second<< " edge links");
208 
209  seedStats.m_nGraphEdges = graphStats.first;
210  seedStats.m_nEdgeLinks = graphStats.second;
211 
212  if(graphStats.second == 0) return seedStats;
213 
214  int maxLevel = runCCA(graphStats.first, edgeStorage);
215 
216  ATH_MSG_DEBUG("Reached Level "<<maxLevel<<" after GNN iterations");
217 
218  int minLevel = 3;//a triplet + 2 confirmation
219 
220  if(m_LRTmode) {
221  minLevel = 2;//a triplet + 1 confirmation
222  }
223 
224  if(maxLevel < minLevel) return seedStats;
225 
226  std::vector<TrigFTF_GNN_Edge*> vSeeds;
227 
228  vSeeds.reserve(graphStats.first/2);
229 
230  for(int edgeIndex=0;edgeIndex<graphStats.first;edgeIndex++) {
231  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(edgeIndex));
232 
233  if(pS->m_level < minLevel) continue;
234 
235  vSeeds.push_back(pS);
236  }
237 
238  if(vSeeds.empty()) return seedStats;
239 
240  std::sort(vSeeds.begin(), vSeeds.end(), TrigFTF_GNN_Edge::CompareLevel());
241 
242  //backtracking
243 
244  TrigFTF_GNN_TRACKING_FILTER tFilter(m_layerGeometry, edgeStorage);
245 
246  output.reserve(vSeeds.size());
247 
248  for(auto pS : vSeeds) {
249 
250  if(pS->m_level == -1) continue;
251 
252  TrigFTF_GNN_EDGE_STATE rs(false);
253 
254  tFilter.followTrack(pS, rs);
255 
256  if(!rs.m_initialized) {
257  continue;
258  }
259 
260  if(static_cast<int>(rs.m_vs.size()) < minLevel) continue;
261 
262  std::vector<const TrigFTF_GNN_Node*> vN;
263 
264  for(std::vector<TrigFTF_GNN_Edge*>::reverse_iterator sIt=rs.m_vs.rbegin();sIt!=rs.m_vs.rend();++sIt) {
265 
266  (*sIt)->m_level = -1;//mark as collected
267 
268  if(sIt == rs.m_vs.rbegin()) {
269  vN.push_back((*sIt)->m_n1);
270  }
271  vN.push_back((*sIt)->m_n2);
272  }
273 
274  if(vN.size()<3) continue;
275 
276  unsigned int lastIdx = output.size();
277  output.emplace_back(rs.m_J);
278 
279  for(const auto& n : vN) {
280  output[lastIdx].addSpacePoint(n->m_pSP);
281  }
282  }
283 
284  ATH_MSG_DEBUG("Found "<<output.size()<<" tracklets");
285 
286  return seedStats;
287 }
288 
289 void TrigInDetTrackSeedingTool::createGraphNodes(const SpacePointCollection* spColl, std::vector<TrigFTF_GNN_Node>& tmpColl, unsigned short layer, float shift_x, float shift_y) const {
290  tmpColl.resize(spColl->size(), TrigFTF_GNN_Node(layer));//all nodes belong to the same layer
291 
292  int idx = 0;
293  for(const auto& sp : *spColl) {
294  const auto& pos = sp->globalPosition();
295  float xs = pos.x() - shift_x;
296  float ys = pos.y() - shift_y;
297  float zs = pos.z();
298  tmpColl[idx].m_x = xs;
299  tmpColl[idx].m_y = ys;
300  tmpColl[idx].m_z = zs;
301  tmpColl[idx].m_r = std::sqrt(xs*xs + ys*ys);
302  tmpColl[idx].m_phi = std::atan2(ys,xs);
303  tmpColl[idx].m_pSP = sp;
304  idx++;
305  }
306 }
307 
308 std::pair<int, int> TrigInDetTrackSeedingTool::buildTheGraph(const IRoiDescriptor& roi, const std::unique_ptr<TrigFTF_GNN_DataStorage>& storage, std::vector<TrigFTF_GNN_Edge>& edgeStorage) const {
309 
310  const float M_2PI = 2.0*M_PI;
311 
312  const float cut_dphi_max = m_LRTmode ? 0.07 : 0.012;
313  const float cut_dcurv_max = m_LRTmode ? 0.015 : 0.001;
314  const float cut_tau_ratio_max = m_LRTmode ? 0.015 : 0.007;
315  const float min_z0 = m_LRTmode ? -600.0 : roi.zedMinus();
316  const float max_z0 = m_LRTmode ? 600.0 : roi.zedPlus();
317  const float min_deltaPhi = m_LRTmode ? 0.01f : 0.001f;
318 
319  const float maxOuterRadius = m_LRTmode ? 1050.0 : 550.0;
320 
321  const float cut_zMinU = min_z0 + maxOuterRadius*roi.dzdrMinus();
322  const float cut_zMaxU = max_z0 + maxOuterRadius*roi.dzdrPlus();
323 
324  const float ptCoeff = 0.29997*1.9972/2.0;// ~0.3*B/2 - assuming nominal field of 2*T
325 
326  float tripletPtMin = 0.8*m_minPt;//correction due to limited pT resolution
327 
328  float maxCurv = ptCoeff/tripletPtMin;
329 
330  const float maxKappa_high_eta = m_LRTmode ? 1.0*maxCurv : std::sqrt(0.8)*maxCurv;
331  const float maxKappa_low_eta = m_LRTmode ? 1.0*maxCurv : std::sqrt(0.6)*maxCurv;
332  const float dphi_coeff = m_LRTmode ? 1.0*maxCurv : 0.68*maxCurv;
333 
334  const float minDeltaRadius = 2.0;
335 
336  float deltaPhi = 0.5f*m_phiSliceWidth;//the default sliding window along phi
337 
338  unsigned int nConnections = 0;
339 
340  edgeStorage.reserve(m_nMaxEdges);
341 
342  int nEdges = 0;
343 
344  for(const auto& bg : m_geo->bin_groups()) {//loop over bin groups
345 
346  TrigFTF_GNN_EtaBin& B1 = storage->getEtaBin(bg.first);
347 
348  if(B1.empty()) continue;
349 
350  float rb1 = B1.getMinBinRadius();
351 
352  for(const auto& b2_idx : bg.second) {
353 
354  const TrigFTF_GNN_EtaBin& B2 = storage->getEtaBin(b2_idx);
355 
356  if(B2.empty()) continue;
357 
358  float rb2 = B2.getMaxBinRadius();
359 
360  if(m_useEtaBinning) {
361  deltaPhi = min_deltaPhi + dphi_coeff*std::fabs(rb2-rb1);
362  }
363 
364  unsigned int first_it = 0;
365 
366  for(unsigned int n1Idx = 0;n1Idx<B1.m_vn.size();n1Idx++) {//loop over nodes in Layer 1
367 
368  std::vector<unsigned int>& v1In = B1.m_in[n1Idx];
369 
370  if(v1In.size() >= MAX_SEG_PER_NODE) continue;
371 
372  const std::array<float, 5>& n1pars = B1.m_params[n1Idx];
373 
374  float phi1 = n1pars[2];
375  float r1 = n1pars[3];
376  float z1 = n1pars[4];
377 
378  //sliding window phi1 +/- deltaPhi
379 
380  float minPhi = phi1 - deltaPhi;
381  float maxPhi = phi1 + deltaPhi;
382 
383  for(unsigned int n2PhiIdx = first_it; n2PhiIdx<B2.m_vPhiNodes.size();n2PhiIdx++) {//sliding window over nodes in Layer 2
384 
385  float phi2 = B2.m_vPhiNodes[n2PhiIdx].first;
386 
387  if(phi2 < minPhi) {
388  first_it = n2PhiIdx;
389  continue;
390  }
391  if(phi2 > maxPhi) break;
392 
393  unsigned int n2Idx = B2.m_vPhiNodes[n2PhiIdx].second;
394 
395  const std::vector<unsigned int>& v2In = B2.m_in[n2Idx];
396 
397  if(v2In.size() >= MAX_SEG_PER_NODE) continue;
398 
399  const std::array<float, 5>& n2pars = B2.m_params[n2Idx];
400 
401  float r2 = n2pars[3];
402 
403  float dr = r2 - r1;
404 
405  if(dr < minDeltaRadius) {
406  continue;
407  }
408 
409  float z2 = n2pars[4];
410 
411  float dz = z2 - z1;
412  float tau = dz/dr;
413  float ftau = std::fabs(tau);
414  if (ftau > 36.0) {
415  continue;
416  }
417 
418  if(ftau < n1pars[0]) continue;
419  if(ftau > n1pars[1]) continue;
420 
421  if(ftau < n2pars[0]) continue;
422  if(ftau > n2pars[1]) continue;
423 
424  if (m_doubletFilterRZ) {
425 
426  float z0 = z1 - r1*tau;
427 
428  if(z0 < min_z0 || z0 > max_z0) continue;
429 
430  float zouter = z0 + maxOuterRadius*tau;
431 
432  if(zouter < cut_zMinU || zouter > cut_zMaxU) continue;
433  }
434 
435  float curv = (phi2-phi1)/dr;
436  float abs_curv = std::abs(curv);
437 
438  if(ftau < 4.0) {//eta = 2.1
439  if(abs_curv > maxKappa_low_eta) {
440  continue;
441  }
442  }
443  else {
444  if(abs_curv > maxKappa_high_eta) {
445  continue;
446  }
447  }
448 
449  //match edge candidate against edges incoming to n2
450 
451  float exp_eta = std::sqrt(1+tau*tau)-tau;
452 
453  bool isGood = v2In.size() <= 2;//we must have enough incoming edges to decide
454 
455  if(!isGood) {
456 
457  float uat_1 = 1.0f/exp_eta;
458 
459  for(const auto& n2_in_idx : v2In) {
460 
461  float tau2 = edgeStorage.at(n2_in_idx).m_p[0];
462  float tau_ratio = tau2*uat_1 - 1.0f;
463 
464  if(std::fabs(tau_ratio) > cut_tau_ratio_max){//bad match
465  continue;
466  }
467  isGood = true;//good match found
468  break;
469  }
470  }
471 
472  if(!isGood) {//no match found, skip creating [n1 <- n2] edge
473  continue;
474  }
475 
476  float dPhi2 = curv*r2;
477  float dPhi1 = curv*r1;
478 
479  if(nEdges < m_nMaxEdges) {
480 
481  edgeStorage.emplace_back(B1.m_vn[n1Idx], B2.m_vn[n2Idx], exp_eta, curv, phi1 + dPhi1);
482 
483  if(v1In.size() < MAX_SEG_PER_NODE) v1In.push_back(nEdges);
484 
485  int outEdgeIdx = nEdges;
486 
487  float uat_2 = 1/exp_eta;
488  float Phi2 = phi2 + dPhi2;
489  float curv2 = curv;
490 
491  for(const auto& inEdgeIdx : v2In) {//looking for neighbours of the new edge
492 
493  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(inEdgeIdx));
494 
495  if(pS->m_nNei >= N_SEG_CONNS) continue;
496 
497  float tau_ratio = pS->m_p[0]*uat_2 - 1.0f;
498 
499  if(std::abs(tau_ratio) > cut_tau_ratio_max){//bad match
500  continue;
501  }
502 
503  float dPhi = Phi2 - pS->m_p[2];
504 
505  if(dPhi<-M_PI) dPhi += M_2PI;
506  else if(dPhi>M_PI) dPhi -= M_2PI;
507 
508  if(dPhi < -cut_dphi_max || dPhi > cut_dphi_max) {
509  continue;
510  }
511 
512  float dcurv = curv2 - pS->m_p[1];
513 
514  if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
515  continue;
516  }
517 
518  pS->m_vNei[pS->m_nNei++] = outEdgeIdx;
519 
520  nConnections++;
521 
522  }
523  nEdges++;
524  }
525  } //loop over n2 (outer) nodes
526  } //loop over n1 (inner) nodes
527  } //loop over bins in Layer 2
528  } //loop over bin groups
529 
530  return std::make_pair(nEdges, nConnections);
531 }
532 
533 int TrigInDetTrackSeedingTool::runCCA(int nEdges, std::vector<TrigFTF_GNN_Edge>& edgeStorage) const {
534 
535  const int maxIter = 15;
536 
537  int maxLevel = 0;
538 
539  int iter = 0;
540 
541  std::vector<TrigFTF_GNN_Edge*> v_old;
542 
543  for(int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
544 
545  TrigFTF_GNN_Edge* pS = &(edgeStorage[edgeIndex]);
546  if(pS->m_nNei == 0) continue;
547 
548  v_old.push_back(pS);//TO-DO: increment level for segments as they already have at least one neighbour
549  }
550 
551  for(;iter<maxIter;iter++) {
552 
553  //generate proposals
554  std::vector<TrigFTF_GNN_Edge*> v_new;
555  v_new.clear();
556  v_new.reserve(v_old.size());
557 
558  for(auto pS : v_old) {
559 
560  int next_level = pS->m_level;
561 
562  for(int nIdx=0;nIdx<pS->m_nNei;nIdx++) {
563 
564  unsigned int nextEdgeIdx = pS->m_vNei[nIdx];
565 
566  TrigFTF_GNN_Edge* pN = &(edgeStorage[nextEdgeIdx]);
567 
568  if(pS->m_level == pN->m_level) {
569  next_level = pS->m_level + 1;
570  v_new.push_back(pS);
571  break;
572  }
573  }
574 
575  pS->m_next = next_level;//proposal
576  }
577 
578  //update
579 
580  int nChanges = 0;
581 
582  for(auto pS : v_new) {
583  if(pS->m_next != pS->m_level) {
584  nChanges++;
585  pS->m_level = pS->m_next;
586  if(maxLevel < pS->m_level) maxLevel = pS->m_level;
587  }
588  }
589 
590  if(nChanges == 0) break;
591 
592 
593  v_old = std::move(v_new);
594  v_new.clear();
595  }
596 
597  return maxLevel;
598 }
599 
TrigFTF_GNN_EtaBin
Definition: GNN_DataStorage.h:42
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
TrigInDetTrackSeedingResult::m_nStripSPs
int m_nStripSPs
Definition: TrigInDetTrackSeedingResult.h:12
IRegSelTool.h
TrigInDetTrackSeedingTool::m_doubletFilterRZ
BooleanProperty m_doubletFilterRZ
Definition: TrigInDetTrackSeedingTool.h:72
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:50
TrigFTF_GNN_EtaBin::m_in
std::vector< std::vector< unsigned int > > m_in
Definition: GNN_DataStorage.h:74
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TrigInDetTrackSeedingTool::m_useML
BooleanProperty m_useML
Definition: TrigInDetTrackSeedingTool.h:69
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
TrigInDetTrackSeedingTool::m_useSctSpacePoints
BooleanProperty m_useSctSpacePoints
Definition: TrigInDetTrackSeedingTool.h:67
TrigFTF_GNN_Edge::CompareLevel
Definition: GNN_DataStorage.h:111
StandaloneBunchgroupHandler.bg
bg
Definition: StandaloneBunchgroupHandler.py:243
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
Definition: PathResolver.cxx:251
TrigInDetTrackSeedingTool::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrigInDetTrackSeedingTool.h:58
TrigFTF_GNN_DataStorage::sortByPhi
void sortByPhi()
Definition: GNN_DataStorage.cxx:187
SG::ReadHandle< SpacePointContainer >
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
TrigFTF_GNN_EdgeState
Definition: GNN_TrackingFilter.h:11
initialize
void initialize()
Definition: run_EoverP.cxx:894
TrigFTF_GNN_Edge::m_vNei
unsigned int m_vNei[N_SEG_CONNS]
Definition: GNN_DataStorage.h:135
M_PI
#define M_PI
Definition: ActiveFraction.h:11
TrigInDetTrackSeedingTool::m_nMaxPhiSlice
UnsignedIntegerProperty m_nMaxPhiSlice
Definition: TrigInDetTrackSeedingTool.h:71
TrigInDetTrackSeedingTool::m_minPt
FloatProperty m_minPt
Definition: TrigInDetTrackSeedingTool.h:74
TrigInDetTrackSeedingTool.h
TrigFTF_GNN_EdgeState::m_J
float m_J
Definition: GNN_TrackingFilter.h:31
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
TrigInDetTrackSeedingTool::m_layerGeometry
std::vector< TrigInDetSiLayer > m_layerGeometry
Definition: TrigInDetTrackSeedingTool.h:85
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
TrigFTF_GNN_Node
Definition: GNN_DataStorage.h:21
IRoiDescriptor::dzdrMinus
virtual double dzdrMinus() const =0
return the gradients
TrigInDetTrackSeedingTool::m_usePixelSpacePoints
BooleanProperty m_usePixelSpacePoints
Definition: TrigInDetTrackSeedingTool.h:66
TrigInDetTrackSeedingTool::m_regsel_pix
ToolHandle< IRegSelTool > m_regsel_pix
region selector tools
Definition: TrigInDetTrackSeedingTool.h:81
TrigInDetTrackSeedingTool::m_connectionFile
StringProperty m_connectionFile
Definition: TrigInDetTrackSeedingTool.h:76
SpacePointContainer.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
TrigFTF_GNN_EdgeState::m_vs
std::vector< TrigFTF_GNN_Edge * > m_vs
Definition: GNN_TrackingFilter.h:33
IRoiDescriptor::dzdrPlus
virtual double dzdrPlus() const =0
TrigInDetTrackSeedingTool::m_LRTmode
BooleanProperty m_LRTmode
Definition: TrigInDetTrackSeedingTool.h:68
TrigFTF_GNN_EdgeState::m_initialized
bool m_initialized
Definition: GNN_TrackingFilter.h:38
N_SEG_CONNS
#define N_SEG_CONNS
Definition: GNN_DataStorage.h:14
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
TrigFTF_GNN_EtaBin::empty
bool empty() const
Definition: GNN_DataStorage.h:58
SpacePointCollection.h
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
TrigFTF_GNN_Edge
Definition: GNN_DataStorage.h:108
TrigFTF_GNN_DataStorage::generatePhiIndexing
void generatePhiIndexing(float)
Definition: GNN_DataStorage.cxx:240
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigInDetTrackSeedingTool::m_sctSpacePointsContainerKey
SG::ReadHandleKey< SpacePointContainer > m_sctSpacePointsContainerKey
Definition: TrigInDetTrackSeedingTool.h:61
TrigInDetTrackSeedingTool::m_regsel_sct
ToolHandle< IRegSelTool > m_regsel_sct
Definition: TrigInDetTrackSeedingTool.h:82
TrigFTF_GNN_EtaBin::m_vPhiNodes
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
Definition: GNN_DataStorage.h:73
TrigFTF_GNN_Edge::m_level
signed char m_level
Definition: GNN_DataStorage.h:130
TrigInDetTrackSeedingTool::initialize
virtual StatusCode initialize() override
Definition: TrigInDetTrackSeedingTool.cxx:29
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SpacePoint.h
IRoiDescriptor
Describes the API of the Region of Ineterest geometry.
Definition: IRoiDescriptor.h:23
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
TauGNNUtils::Variables::Track::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:538
TrigInDetTrackSeedingTool::m_useEtaBinning
BooleanProperty m_useEtaBinning
Definition: TrigInDetTrackSeedingTool.h:73
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
GNN_TrackingFilter.h
MAX_SEG_PER_NODE
#define MAX_SEG_PER_NODE
Definition: GNN_DataStorage.h:13
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
TrigFTF_GNN_DataStorage::getEtaBin
TrigFTF_GNN_EtaBin & getEtaBin(int idx)
Definition: GNN_DataStorage.h:95
TrigFTF_GNN_DataStorage::loadPixelGraphNodes
int loadPixelGraphNodes(short, const std::vector< TrigFTF_GNN_Node > &, bool)
Definition: GNN_DataStorage.cxx:112
TrigInDetTrackSeedingTool::findSeeds
virtual TrigInDetTrackSeedingResult findSeeds(const IRoiDescriptor &, std::vector< TrigInDetTracklet > &, const EventContext &) const override final
Definition: TrigInDetTrackSeedingTool.cxx:102
TrigInDetTrackSeedingTool::createGraphNodes
void createGraphNodes(const SpacePointCollection *, std::vector< TrigFTF_GNN_Node > &, unsigned short, float, float) const
Definition: TrigInDetTrackSeedingTool.cxx:289
TrigInDetTrackSeedingTool::m_phiSliceWidth
float m_phiSliceWidth
Definition: TrigInDetTrackSeedingTool.h:78
TrigFTF_GNN_EtaBin::getMaxBinRadius
float getMaxBinRadius() const
Definition: GNN_DataStorage.h:68
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TrigInDetTrackSeedingTool::finalize
virtual StatusCode finalize() override
Definition: TrigInDetTrackSeedingTool.cxx:95
merge.output
output
Definition: merge.py:17
TrigFTF_GNN_TRACKING_FILTER
class TrigFTF_GNN_TrackingFilter TrigFTF_GNN_TRACKING_FILTER
MuonGM::nStrips
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
Definition: MuonDetDescr/MuonGeoModelTest/src/GeoModelTgcTest.cxx:46
TrigFTF_GNN_DataStorage::initializeNodes
void initializeNodes(bool)
Definition: GNN_DataStorage.cxx:192
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
PathResolver.h
TrigInDetTrackSeedingTool::TrigInDetTrackSeedingTool
TrigInDetTrackSeedingTool(const std::string &, const std::string &, const IInterface *)
Definition: TrigInDetTrackSeedingTool.cxx:21
TrigInDetTrackSeedingTool::m_layerNumberTool
ToolHandle< ITrigL2LayerNumberTool > m_layerNumberTool
Definition: TrigInDetTrackSeedingTool.h:52
TrigInDetTrackSeedingResult::m_nPixelSPs
int m_nPixelSPs
Definition: TrigInDetTrackSeedingResult.h:10
TrigInDetTrackSeedingTool::m_geo
std::unique_ptr< const TrigFTF_GNN_Geometry > m_geo
Definition: TrigInDetTrackSeedingTool.h:86
TrigInDetTrackSeedingTool::m_sctId
const SCT_ID * m_sctId
Definition: TrigInDetTrackSeedingTool.h:55
TrigInDetTrackSeedingResult
Definition: TrigInDetTrackSeedingResult.h:8
TrigInDetTrackSeedingTool::m_pixelId
const PixelID * m_pixelId
Definition: TrigInDetTrackSeedingTool.h:56
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TrigInDetTrackSeedingTool::runCCA
int runCCA(int, std::vector< TrigFTF_GNN_Edge > &) const
Definition: TrigInDetTrackSeedingTool.cxx:533
TrigInDetTrackSeedingResult::m_nGraphEdges
int m_nGraphEdges
Definition: TrigInDetTrackSeedingResult.h:12
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
TrigFTF_GNN_Edge::m_nNei
unsigned char m_nNei
Definition: GNN_DataStorage.h:132
SG::ReadHandle::ptr
const_pointer_type ptr()
Dereference the pointer.
IdentifiableContainerMT::indexFindPtr
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
Definition: IdentifiableContainerMT.h:289
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
IRoiDescriptor::zedPlus
virtual double zedPlus() const =0
the zed and eta values at the most forward and most rear ends of the RoI
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigInDetTrackSeedingTool::m_connector
std::unique_ptr< GNN_FasTrackConnector > m_connector
Definition: TrigInDetTrackSeedingTool.h:84
TrigFTF_GNN_Edge::m_p
float m_p[3]
Definition: GNN_DataStorage.h:133
SpacePointCollection
Definition: SpacePointCollection.h:40
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
TrigFTF_GNN_DataStorage::loadStripGraphNodes
int loadStripGraphNodes(short, const std::vector< TrigFTF_GNN_Node > &)
Definition: GNN_DataStorage.cxx:151
IRoiDescriptor::zedMinus
virtual double zedMinus() const =0
TrigInDetTrackSeedingTool::buildTheGraph
std::pair< int, int > buildTheGraph(const IRoiDescriptor &, const std::unique_ptr< TrigFTF_GNN_DataStorage > &, std::vector< TrigFTF_GNN_Edge > &) const
Definition: TrigInDetTrackSeedingTool.cxx:308
TrigInDetTrackSeedingTool::m_atlasId
const AtlasDetectorID * m_atlasId
Definition: TrigInDetTrackSeedingTool.h:54
SpacePointContainer
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePointContainer.h:29
calibdata.copy
bool copy
Definition: calibdata.py:27
TrigInDetTrackSeedingTool::m_pixelSpacePointsContainerKey
SG::ReadHandleKey< SpacePointContainer > m_pixelSpacePointsContainerKey
Definition: TrigInDetTrackSeedingTool.h:62
M_2PI
#define M_2PI
Definition: CaloGpuGeneral_fnc.cxx:8
TrigInDetTrackSeedingTool::m_nMaxEdges
IntegerProperty m_nMaxEdges
Definition: TrigInDetTrackSeedingTool.h:75
TrigFTF_GNN_EtaBin::m_vn
std::vector< const TrigFTF_GNN_Node * > m_vn
Definition: GNN_DataStorage.h:72
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrigFTF_GNN_EtaBin::getMinBinRadius
float getMinBinRadius() const
Definition: GNN_DataStorage.h:64
TrigFTF_GNN_EtaBin::m_params
std::vector< std::array< float, 5 > > m_params
Definition: GNN_DataStorage.h:75
TrigInDetTrackSeedingResult::m_nEdgeLinks
int m_nEdgeLinks
Definition: TrigInDetTrackSeedingResult.h:12