ATLAS Offline Software
TrigTrackSeedGenerator_ITk.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <cmath>
6 #include <iostream>
7 #include <list>
8 #include <vector>
9 #include <algorithm>
10 #include <iterator>
14 #include "GNN_DataStorage.h"
15 #include "GNN_TrackingFilter.h"
16 
22 
23 
25  : m_settings(tcs),
26  m_minDeltaRadius(2.0)
27 {
28 
31 
33 
34  const double ptCoeff = 0.29997*1.9972/2.0;// ~0.3*B/2 - assumes nominal field of 2*T
37 
38 }
39 
41  delete m_storage;
42  m_storage = nullptr;
43 }
44 
45 void TrigTrackSeedGeneratorITk::loadSpacePoints(const std::vector<TrigSiSpacePointBase>& vSP) {
46 
47  for(std::vector<TrigSiSpacePointBase>::const_iterator it = vSP.begin();it != vSP.end();++it) {
48 
49  bool isPixel = (*it).isPixel();
50 
51  if(!isPixel) continue;
52 
54  }
57 
58 }
59 
60 void TrigTrackSeedGeneratorITk::runGNN_TrackFinder(const IRoiDescriptor* roiDescriptor, std::vector<GNN_TrigTracklet>& vTracks, bool makeTriplets) {
61 
62  const int MaxEdges = 2000000;
63 
64  const float cut_dphi_max = 0.012;
65  const float cut_dcurv_max = 0.001;
66  const float cut_tau_ratio_max = 0.007;
67  const float min_z0 = roiDescriptor->zedMinus();
68  const float max_z0 = roiDescriptor->zedPlus();
69 
70  const float maxOuterRadius = 550.0;
71  const float cut_zMinU = min_z0 + maxOuterRadius*roiDescriptor->dzdrMinus();
72  const float cut_zMaxU = max_z0 + maxOuterRadius*roiDescriptor->dzdrPlus();
73 
74  const float maxKappa_high_eta = 0.8/m_minR_squ;
75  const float maxKappa_low_eta = 0.6/m_minR_squ;
76 
77  //1. loop over stages
78 
79  int currentStage = 0;
80 
82 
83  std::vector<TrigFTF_GNN_Edge> edgeStorage;
84 
85  edgeStorage.reserve(MaxEdges);
86 
87  int nEdges = 0;
88 
89  for(std::map<int, std::vector<FASTRACK_CONNECTOR::LayerGroup> >::const_iterator it = conn.m_layerGroups.begin();it!=conn.m_layerGroups.end();++it, currentStage++) {
90 
91  //loop over L1 layers for the current stage
92 
93  for(const auto& layerGroup : (*it).second) {
94 
95  unsigned int dst = layerGroup.m_dst;//n1 : inner nodes
96 
98 
99  if (pL1==nullptr) {
100  continue;
101  }
102 
103  for(const auto& conn : layerGroup.m_sources) {//loop over L2(L1) for the current stage
104 
105  unsigned int src = conn->m_src;//n2 : the new connectors
106 
108 
109  if (pL2==nullptr) {
110  continue;
111  }
112 
113  int nDstBins = pL1->m_bins.size();
114  int nSrcBins = pL2->m_bins.size();
115 
116  for(int b1=0;b1<nDstBins;b1++) {//loop over bins in Layer 1
117 
118  const TrigFTF_GNN_EtaBin& B1 = m_storage->getEtaBin(pL1->m_bins.at(b1));
119 
120  if(B1.empty()) continue;
121 
122  float rb1 = pL1->getMinBinRadius(b1);
123 
124  //3. loops over source eta-bins
125 
126  for(int b2=0;b2<nSrcBins;b2++) {//loop over bins in Layer 2
127 
128  if(m_settings.m_useEtaBinning && (nSrcBins+nDstBins > 2)) {
129  if(conn->m_binTable[b1 + b2*nDstBins] != 1) continue;//using precomputed LUT
130  }
131 
132  const TrigFTF_GNN_EtaBin& B2 = m_storage->getEtaBin(pL2->m_bins.at(b2));
133 
134  if(B2.empty()) continue;
135 
136  float rb2 = pL2->getMaxBinRadius(b2);
137 
138  //calculated delta Phi for rb1 ---> rb2 extrapolation
139 
140  float deltaPhi = 0.5f*m_phiSliceWidth;//the default sliding window along phi
141 
143  deltaPhi = 0.001f + m_maxCurv*std::fabs(rb2-rb1);
144  }
145 
146  unsigned int first_it = 0;
147 
148  for(std::vector<TrigFTF_GNN_Node*>::const_iterator n1It = B1.m_vn.begin();n1It!=B1.m_vn.end();++n1It) {//loop over nodes in Layer 1
149 
150  TrigFTF_GNN_Node* n1 = (*n1It);
151 
152  if(n1->m_in.size() >= MAX_SEG_PER_NODE) continue;
153 
154  float phi1 = n1->m_sp.phi();
155  float r1 = n1->m_sp.r();
156  float x1 = n1->m_sp.x();
157  float y1 = n1->m_sp.y();
158  float z1 = n1->m_sp.z();
159 
160  //sliding window phi1 +/- deltaPhi
161 
162  float minPhi = phi1 - deltaPhi;
163  float maxPhi = phi1 + deltaPhi;
164 
165  for(unsigned int n2PhiIdx = first_it; n2PhiIdx<B2.m_vPhiNodes.size();n2PhiIdx++) {//sliding window over nodes in Layer 2
166 
167  float phi2 = B2.m_vPhiNodes.at(n2PhiIdx).first;
168 
169  if(phi2 < minPhi) {
170  first_it = n2PhiIdx;
171  continue;
172  }
173  if(phi2 > maxPhi) break;
174 
175  TrigFTF_GNN_Node* n2 = B2.m_vn.at(B2.m_vPhiNodes.at(n2PhiIdx).second);
176 
177  if(n2->m_out.size() >= MAX_SEG_PER_NODE) continue;
178  if(n2->isFull()) continue;
179 
180  float r2 = n2->m_sp.r();
181  float dr = r2 - r1;
182 
183  if(dr < m_minDeltaRadius) {
184  continue;
185  }
186 
187  float z2 = n2->m_sp.z();
188 
189  float dz = z2 - z1;
190  float tau = dz/dr;
191  float ftau = std::fabs(tau);
192  if (ftau > 36.0) {
193  continue;
194  }
195 
196  if(ftau < n1->m_minCutOnTau) continue;
197  if(ftau < n2->m_minCutOnTau) continue;
198  if(ftau > n1->m_maxCutOnTau) continue;
199  if(ftau > n2->m_maxCutOnTau) continue;
200 
202 
203  float z0 = z1 - r1*tau;
204 
205  if(z0 < min_z0 || z0 > max_z0) continue;
206 
207  float zouter = z0 + maxOuterRadius*tau;
208 
209  if(zouter < cut_zMinU || zouter > cut_zMaxU) continue;
210  }
211 
212  float dx = n2->m_sp.x() - x1;
213  float dy = n2->m_sp.y() - y1;
214 
215  float L2 = 1/(dx*dx+dy*dy);
216 
217  float D = (n2->m_sp.y()*x1 - y1*n2->m_sp.x())/(r1*r2);
218 
219  float kappa = D*D*L2;
220 
221  if(ftau < 4.0) {//eta = 2.1
222  if(kappa > maxKappa_low_eta) {
223  continue;
224  }
225 
226  }
227  else {
228  if(kappa > maxKappa_high_eta) {
229  continue;
230  }
231  }
232 
233  //match edge candidate against edges incoming to n2
234 
235  float exp_eta = std::sqrt(1+tau*tau)-tau;
236 
237  bool isGood = n2->m_in.size() <= 2;//we must have enough incoming edges to decide
238 
239  if(!isGood) {
240 
241  float uat_1 = 1.0f/exp_eta;
242 
243  for(const auto& n2_in_idx : n2->m_in) {
244  float tau2 = edgeStorage.at(n2_in_idx).m_p[0];
245  float tau_ratio = tau2*uat_1 - 1.0f;
246 
247  if(std::fabs(tau_ratio) > cut_tau_ratio_max){//bad match
248  continue;
249  }
250  isGood = true;//good match found
251  break;
252  }
253  }
254  if(!isGood) continue;//no moatch found, skip creating [n1 <- n2] edge
255 
256  float curv = D*std::sqrt(L2);//signed curvature
257  float dPhi2 = std::asin(curv*r2);
258  float dPhi1 = std::asin(curv*r1);
259 
260  if(nEdges < MaxEdges) {
261 
262  edgeStorage.emplace_back(n1, n2, exp_eta, curv, phi1 + dPhi1, phi2 + dPhi2);
263 
264  n1->addIn(nEdges);
265  n2->addOut(nEdges);
266 
267  nEdges++;
268  }
269  } //loop over n2 (outer) nodes
270  } //loop over n1 (inner) nodes
271  } //loop over source eta bins
272  } //loop over dst eta bins
273  } //loop over L2(L1) layers
274  } //loop over dst layers
275  } //loop over the stages of doublet making
276 
277  std::vector<const TrigFTF_GNN_Node*> vNodes;
278 
279  m_storage->getConnectingNodes(vNodes);
280 
281  if(vNodes.empty()) return;
282 
283  int nNodes = vNodes.size();
284 
285  for(int nodeIdx=0;nodeIdx<nNodes;nodeIdx++) {
286 
287  const TrigFTF_GNN_Node* pN = vNodes.at(nodeIdx);
288 
289  std::vector<std::pair<float, int > > in_sort, out_sort;
290  in_sort.resize(pN->m_in.size());
291  out_sort.resize(pN->m_out.size());
292 
293  for(int inIdx = 0;inIdx<static_cast<int>(pN->m_in.size());inIdx++) {
294  int inEdgeIdx = pN->m_in.at(inIdx);
295  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(inEdgeIdx));
296  in_sort[inIdx].second = inEdgeIdx;
297  in_sort[inIdx].first = pS->m_p[0];
298  }
299  for(int outIdx = 0;outIdx<static_cast<int>(pN->m_out.size());outIdx++) {
300  int outEdgeIdx = pN->m_out.at(outIdx);
301  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(outEdgeIdx));
302  out_sort[outIdx].second = outEdgeIdx;
303  out_sort[outIdx].first = pS->m_p[0];
304  }
305 
306  std::sort(in_sort.begin(), in_sort.end());
307  std::sort(out_sort.begin(), out_sort.end());
308 
309  unsigned int last_out = 0;
310 
311  for(unsigned int in_idx=0;in_idx<in_sort.size();in_idx++) {//loop over incoming edges
312 
313  int inEdgeIdx = in_sort[in_idx].second;
314 
315  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(inEdgeIdx));
316 
317  pS->m_nNei = 0;
318  float tau1 = pS->m_p[0];
319  float uat_1 = 1.0f/tau1;
320  float curv1 = pS->m_p[1];
321  float Phi1 = pS->m_p[2];
322 
323  for(unsigned int out_idx = last_out;out_idx<out_sort.size();out_idx++) {
324 
325  int outEdgeIdx = out_sort[out_idx].second;
326 
327  TrigFTF_GNN_Edge* pNS = &(edgeStorage.at(outEdgeIdx));
328 
329 
330  float tau2 = pNS->m_p[0];
331  float tau_ratio = tau2*uat_1 - 1.0f;
332 
333  if(tau_ratio < -cut_tau_ratio_max) {
334  last_out = out_idx;
335  continue;
336  }
337  if(tau_ratio > cut_tau_ratio_max) break;
338 
339 
340  float dPhi = pNS->m_p[3] - Phi1;
341 
342  if(dPhi<-M_PI) dPhi += 2*M_PI;
343  else if(dPhi>M_PI) dPhi -= 2*M_PI;
344 
345  if(dPhi < -cut_dphi_max || dPhi > cut_dphi_max) {
346  continue;
347  }
348 
349  float curv2 = pNS->m_p[1];
350  float dcurv = curv2-curv1;
351 
352  if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
353  continue;
354  }
355 
356  pS->m_vNei[pS->m_nNei++] = outEdgeIdx;
357  if(pS->m_nNei >= N_SEG_CONNS) break;
358  }
359  }
360  }
361 
362 
363  const int maxIter = 15;
364 
365  int maxLevel = 0;
366 
367  int iter = 0;
368 
369 
370  std::vector<TrigFTF_GNN_Edge*> v_old;
371 
372  for(int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
373 
374  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(edgeIndex));
375  if(pS->m_nNei == 0) continue;
376  v_old.push_back(pS);//TO-DO: increment level for segments as they already have at least one neighbour
377  }
378 
379  for(;iter<maxIter;iter++) {
380 
381 
382  //generate proposals
383  std::vector<TrigFTF_GNN_Edge*> v_new;
384  v_new.clear();
385 
386  for(auto pS : v_old) {
387 
388  int next_level = pS->m_level;
389 
390  for(int nIdx=0;nIdx<pS->m_nNei;nIdx++) {
391 
392  unsigned int nextEdgeIdx = pS->m_vNei[nIdx];
393 
394  TrigFTF_GNN_Edge* pN = &(edgeStorage.at(nextEdgeIdx));
395 
396  if(pS->m_level == pN->m_level) {
397  next_level = pS->m_level + 1;
398  v_new.push_back(pS);
399  break;
400  }
401  }
402 
403  pS->m_next = next_level;//proposal
404  }
405 
406  //update
407 
408  int nChanges = 0;
409 
410  for(auto pS : v_new) {
411  if(pS->m_next != pS->m_level) {
412  nChanges++;
413  pS->m_level = pS->m_next;
414  if(maxLevel < pS->m_level) maxLevel = pS->m_level;
415  }
416  }
417 
418  if(nChanges == 0) break;
419 
420 
421  v_old = std::move(v_new);
422  v_new.clear();
423  }
424 
425 
426  int minLevel = 3;//a triplet + 2 confirmation
427 
428 
429  std::vector<TrigFTF_GNN_Edge*> vSeeds;
430 
431  vSeeds.reserve(MaxEdges/2);
432 
433  for(int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
434  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(edgeIndex));
435 
436  if(pS->m_level < minLevel) continue;
437 
438  vSeeds.push_back(pS);
439  }
440 
441  m_triplets.clear();
442 
443  std::sort(vSeeds.begin(), vSeeds.end(), TrigFTF_GNN_Edge::CompareLevel());
444 
445  if(vSeeds.empty()) return;
446 
447  //backtracking
448 
450 
451  for(auto pS : vSeeds) {
452 
453  if(pS->m_level == -1) continue;
454 
455  TrigFTF_GNN_EDGE_STATE rs(false);
456 
457  tFilter.followTrack(pS, rs);
458 
459  if(!rs.m_initialized) {
460  continue;
461  }
462 
463  if(static_cast<int>(rs.m_vs.size()) < minLevel) continue;
464 
465  std::vector<const TrigSiSpacePointBase*> vSP;
466 
467  for(std::vector<TrigFTF_GNN_Edge*>::reverse_iterator sIt=rs.m_vs.rbegin();sIt!=rs.m_vs.rend();++sIt) {
468 
469  (*sIt)->m_level = -1;//mark as collected
470 
471  if(sIt == rs.m_vs.rbegin()) {
472  vSP.push_back(&(*sIt)->m_n1->m_sp);
473  }
474  vSP.push_back(&(*sIt)->m_n2->m_sp);
475  }
476 
477  if(vSP.size()<3) continue;
478 
479  //making triplets
480 
481  unsigned int nTriplets = 0;
482 
483  std::vector<TrigInDetTriplet> output;
484 
485  if(makeTriplets) {
486 
487  for(unsigned int idx_m = 1;idx_m < vSP.size()-1;idx_m++) {
488 
489  const TrigSiSpacePointBase& spM = *vSP.at(idx_m);
490  const double pS_r = spM.r();
491  const double pS_x = spM.x();
492  const double pS_y = spM.y();
493  const double cosA = pS_x/pS_r;
494  const double sinA = pS_y/pS_r;
495 
496  for(unsigned int idx_o = idx_m+1; idx_o < vSP.size(); idx_o++) {
497 
498  const TrigSiSpacePointBase& spO = *vSP.at(idx_o);
499 
500  double dx = spO.x() - pS_x;
501  double dy = spO.y() - pS_y;
502  double R2inv = 1.0/(dx*dx+dy*dy);
503  double xn = dx*cosA + dy*sinA;
504  double yn =-dx*sinA + dy*cosA;
505 
506  const double uo = xn*R2inv;
507  const double vo = yn*R2inv;
508 
509  for(unsigned int idx_i = 0; idx_i < idx_m; idx_i++) {
510  const TrigSiSpacePointBase& spI = *vSP.at(idx_i);
511 
512  dx = spI.x() - pS_x;
513  dy = spI.y() - pS_y;
514  R2inv = 1.0/(dx*dx+dy*dy);
515 
516  xn = dx*cosA + dy*sinA;
517  yn =-dx*sinA + dy*cosA;
518 
519  const double ui = xn*R2inv;
520  const double vi = yn*R2inv;
521 
522  //1. pT estimate
523 
524  const double du = uo - ui;
525  if(du==0.0) continue;
526  const double A = (vo - vi)/du;
527  const double B = vi - A*ui;
528  if(B==0.0) continue;
529  const double R_squ = (1 + A*A)/(B*B);
530 
531  if(R_squ < m_minR_squ) {
532  continue;
533  }
534 
535  //2. d0 cut
536 
537  const double fabs_d0 = std::abs(pS_r*(B*pS_r - A));
538 
539  if(fabs_d0 > m_settings.m_tripletD0Max) {
540  continue;
541  }
542 
543  //3. phi0 cut
544 
545  if (!roiDescriptor->isFullscan()) {
546  const double uc = 2*B*pS_r - A;
547  const double phi0 = std::atan2(sinA - uc*cosA, cosA + uc*sinA);
548  if ( !RoiUtil::containsPhi( *roiDescriptor, phi0 ) ) {
549  continue;
550  }
551  }
552 
553  //4. add new triplet
554 
555  const double Q = fabs_d0*fabs_d0;
556 
557  output.emplace_back(spI, spM, spO, Q);
558 
559  nTriplets++;
560 
561  if(nTriplets >= m_settings.m_maxTripletBufferLength) break;
562  }
563  if(nTriplets >= m_settings.m_maxTripletBufferLength) break;
564  }
565  if(nTriplets >= m_settings.m_maxTripletBufferLength) break;
566  }
567  if(output.empty()) continue;
568  }
569 
570  vTracks.emplace_back(vSP, output);
571  }
572 
573 }
574 
576 
577  std::vector<GNN_TrigTracklet> vTracks;
578 
579  vTracks.reserve(5000);
580 
581  runGNN_TrackFinder(roiDescriptor, vTracks, true);
582 
583  if(vTracks.empty()) return;
584 
585  m_triplets.clear();
586 
587  for(auto& track : vTracks) {
588  for(auto& seed : track.m_seeds) {
589 
590  float newQ = seed.Q();
591 
592  if (m_settings.m_LRTmode) {
593  // In LRT mode penalize pixels in Triplets
594  if(seed.s1().isPixel()) newQ+=1000;
595  if(seed.s2().isPixel()) newQ+=1000;
596  if(seed.s3().isPixel()) newQ+=1000;
597  } else {
598  // In normal (non LRT) mode penalise SSS by 1000, PSS (if enabled) and PPS by 10000
599  if(seed.s3().isSCT()) {
600  newQ += seed.s1().isSCT() ? 1000.0 : 10000.0;
601  }
602  }
603  seed.Q(newQ);
604  m_triplets.emplace_back(seed);
605  }
606  }
607  vTracks.clear();
608 
609 }
610 
611 void TrigTrackSeedGeneratorITk::getTracklets(const IRoiDescriptor* roiDescriptor, std::vector<GNN_TrigTracklet>& vTracks, bool makeTriplets) {
612  runGNN_TrackFinder(roiDescriptor, vTracks, makeTriplets);
613 }
614 
616 
617 
618 }
619 
620 void TrigTrackSeedGeneratorITk::getSeeds(std::vector<TrigInDetTriplet>& vs) {
621  vs.clear();
622  std::sort(m_triplets.begin(), m_triplets.end(),
623  [](const TrigInDetTriplet& A, const TrigInDetTriplet& B) {
624  return A.Q() < B.Q();
625  }
626  );
627  vs = std::move(m_triplets);
628 }
629 
630 
TrigCombinatorialSettings::m_nMaxPhiSlice
int m_nMaxPhiSlice
Definition: TrigCombinatorialSettings.h:67
TrigFTF_GNN_EtaBin
Definition: GNN_DataStorage.h:65
TrigInDetTriplet
Definition: TrigInDetTriplet.h:13
TrigFTF_GNN_Node::addOut
void addOut(int i)
Definition: GNN_DataStorage.h:41
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
TrigFTF_GNN_DataStorage
Definition: GNN_DataStorage.h:83
FasTrackConnector.h
Trk::L2
@ L2
Definition: AlignModuleList.h:32
checkCorrelInHIST.conn
conn
Definition: checkCorrelInHIST.py:25
TrigFTF_GNN_DataStorage::addSpacePoint
int addSpacePoint(const TrigSiSpacePointBase &, bool)
Definition: GNN_DataStorage.cxx:79
TrigTrackSeedGeneratorITk::getTracklets
void getTracklets(const IRoiDescriptor *, std::vector< GNN_TrigTracklet > &, bool)
Definition: TrigTrackSeedGenerator_ITk.cxx:611
TrigFTF_GNN_Edge::CompareLevel
Definition: GNN_DataStorage.h:111
TrigFTF_GNN_Node::m_sp
const TrigSiSpacePointBase & m_sp
Definition: GNN_DataStorage.h:57
TrigFTF_GNN_Node::isFull
bool isFull() const
Definition: GNN_DataStorage.h:52
WriteCellNoiseToCool.src
src
Definition: WriteCellNoiseToCool.py:513
PixelCluster.h
TrigFTF_GNN_DataStorage::sortByPhi
void sortByPhi()
Definition: GNN_DataStorage.cxx:127
TrigFTF_GNN_Layer::getMinBinRadius
float getMinBinRadius(int) const
Definition: GNN_Geometry.cxx:201
TrigFTF_GNN_EdgeState
Definition: GNN_TrackingFilter.h:11
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
TrigFTF_GNN_Geometry::getTrigFTF_GNN_LayerByKey
const TrigFTF_GNN_Layer * getTrigFTF_GNN_LayerByKey(unsigned int) const
Definition: GNN_Geometry.cxx:276
TrigFTF_GNN_Edge::m_vNei
unsigned int m_vNei[N_SEG_CONNS]
Definition: GNN_DataStorage.h:135
InDetAccessor::phi0
@ phi0
Definition: InDetAccessor.h:33
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
RoiUtil::containsPhi
bool containsPhi(const IRoiDescriptor &roi, double phi)
test whether a stub is contained within the roi
Definition: RoiUtil.cxx:79
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TrigCombinatorialSettings::m_layerGeometry
std::vector< TrigInDetSiLayer > m_layerGeometry
Definition: TrigCombinatorialSettings.h:78
M_PI
#define M_PI
Definition: ActiveFraction.h:11
TrigFTF_GNN_Layer::m_bins
std::vector< int > m_bins
Definition: GNN_Geometry.h:31
TrigCombinatorialSettings::m_LRTmode
bool m_LRTmode
Definition: TrigCombinatorialSettings.h:72
TrigCombinatorialSettings::m_tripletPtMin
float m_tripletPtMin
Definition: TrigCombinatorialSettings.h:59
TrigSiSpacePointBase::x
void x(const double x)
Definition: TrigSiSpacePointBase.h:54
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
TrigTrackSeedGeneratorITk::m_phiSliceWidth
float m_phiSliceWidth
Definition: TrigTrackSeedGenerator_ITk.h:50
IRoiDescriptor::dzdrMinus
virtual double dzdrMinus() const =0
return the gradients
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
FASTRACK_CONNECTOR
class FasTrackConnector FASTRACK_CONNECTOR
TrigFTF_GNN_EdgeState::m_vs
std::vector< TrigFTF_GNN_Edge * > m_vs
Definition: GNN_TrackingFilter.h:33
IRoiDescriptor::dzdrPlus
virtual double dzdrPlus() const =0
TrigSiSpacePointBase::z
void z(const double z)
Definition: TrigSiSpacePointBase.h:53
TrigTrackSeedGeneratorITk::createSeedsZv
void createSeedsZv()
Definition: TrigTrackSeedGenerator_ITk.cxx:615
TrigFTF_GNN_EdgeState::m_initialized
bool m_initialized
Definition: GNN_TrackingFilter.h:38
dqt_zlumi_alleff_HIST.A
A
Definition: dqt_zlumi_alleff_HIST.py:110
TrigInDetSiLayer.h
TrigSiSpacePointBase::r
void r(const double r)
Definition: TrigSiSpacePointBase.h:51
N_SEG_CONNS
#define N_SEG_CONNS
Definition: GNN_DataStorage.h:13
TrigFTF_GNN_EtaBin::empty
bool empty() const
Definition: GNN_DataStorage.h:72
TrigTrackSeedGeneratorITk::m_minDeltaRadius
float m_minDeltaRadius
Definition: TrigTrackSeedGenerator_ITk.h:51
TrigCombinatorialSettings::m_doublet_dR_Max
float m_doublet_dR_Max
Definition: TrigCombinatorialSettings.h:54
TrigFTF_GNN_Node
Definition: GNN_DataStorage.h:20
TrigFTF_GNN_Edge
Definition: GNN_DataStorage.h:108
TrigFTF_GNN_DataStorage::generatePhiIndexing
void generatePhiIndexing(float)
Definition: GNN_DataStorage.cxx:131
TrigCombinatorialSettings::m_conn
const FASTRACK_CONNECTOR * m_conn
Definition: TrigCombinatorialSettings.h:75
TrigFTF_GNN_EtaBin::m_vPhiNodes
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
Definition: GNN_DataStorage.h:79
TrigFTF_GNN_Edge::m_level
signed char m_level
Definition: GNN_DataStorage.h:130
TrigSiSpacePointBase.h
IRoiDescriptor
Describes the API of the Region of Ineterest geometry.
Definition: IRoiDescriptor.h:23
TauGNNUtils::Variables::Track::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:530
TrigSiSpacePointBase::y
void y(const double y)
Definition: TrigSiSpacePointBase.h:55
TrigFTF_GNN_DataStorage::getEtaBin
const TrigFTF_GNN_EtaBin & getEtaBin(int idx) const
Definition: GNN_DataStorage.h:95
TrigFTF_GNN_EtaBin::m_vn
std::vector< TrigFTF_GNN_Node * > m_vn
Definition: GNN_DataStorage.h:78
GNN_TrackingFilter.h
MAX_SEG_PER_NODE
#define MAX_SEG_PER_NODE
Definition: GNN_DataStorage.h:12
TrigTrackSeedGeneratorITk::m_maxCurv
float m_maxCurv
Definition: TrigTrackSeedGenerator_ITk.h:53
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
TrigCombinatorialSettings::m_maxTripletBufferLength
unsigned int m_maxTripletBufferLength
Definition: TrigCombinatorialSettings.h:68
TrigCombinatorialSettings::m_useEtaBinning
bool m_useEtaBinning
Definition: TrigCombinatorialSettings.h:73
TrigTrackSeedGeneratorITk::TrigTrackSeedGeneratorITk
TrigTrackSeedGeneratorITk(const TrigCombinatorialSettings &)
Definition: TrigTrackSeedGenerator_ITk.cxx:24
PixelAthClusterMonAlgCfg.layerGroup
layerGroup
Definition: PixelAthClusterMonAlgCfg.py:223
merge.output
output
Definition: merge.py:17
TrigFTF_GNN_TRACKING_FILTER
class TrigFTF_GNN_TrackingFilter TrigFTF_GNN_TRACKING_FILTER
TrigCombinatorialSettings::m_useTrigSeedML
int m_useTrigSeedML
Definition: TrigCombinatorialSettings.h:80
TrigFTF_GNN_Layer
Definition: GNN_Geometry.h:16
RoiUtil.h
TrigTrackSeedGeneratorITk::loadSpacePoints
void loadSpacePoints(const std::vector< TrigSiSpacePointBase > &)
Definition: TrigTrackSeedGenerator_ITk.cxx:45
dqt_zlumi_alleff_HIST.B
B
Definition: dqt_zlumi_alleff_HIST.py:110
TrigTrackSeedGeneratorITk::getSeeds
void getSeeds(std::vector< TrigInDetTriplet > &)
Definition: TrigTrackSeedGenerator_ITk.cxx:620
TrigFTF_GNN_Edge::m_nNei
unsigned char m_nNei
Definition: GNN_DataStorage.h:132
TrigFTF_GNN_Node::m_maxCutOnTau
float m_maxCutOnTau
Definition: GNN_DataStorage.h:61
Rtt_histogram.n1
n1
Definition: Rtt_histogram.py:21
TrigTrackSeedGenerator_ITk.h
makeTRTBarrelCans.dy
tuple dy
Definition: makeTRTBarrelCans.py:21
TrigCombinatorialSettings::m_doubletFilterRZ
bool m_doubletFilterRZ
Definition: TrigCombinatorialSettings.h:65
TrigCombinatorialSettings::m_geo
const TrigFTF_GNN_Geometry * m_geo
Definition: TrigCombinatorialSettings.h:76
TrigTrackSeedGeneratorITk::runGNN_TrackFinder
void runGNN_TrackFinder(const IRoiDescriptor *, std::vector< GNN_TrigTracklet > &, bool)
Definition: TrigTrackSeedGenerator_ITk.cxx:60
TrigTrackSeedGeneratorITk::m_minR_squ
float m_minR_squ
Definition: TrigTrackSeedGenerator_ITk.h:53
IRoiDescriptor::zedPlus
virtual double zedPlus() const =0
the zed and eta values at the most forward and most rear ends of the RoI
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
IRoiDescriptor::isFullscan
virtual bool isFullscan() const =0
is this a full detector RoI?
TrigFTF_GNN_DataStorage::getConnectingNodes
void getConnectingNodes(std::vector< const TrigFTF_GNN_Node * > &)
Definition: GNN_DataStorage.cxx:136
TrigFTF_GNN_Node::m_out
std::vector< unsigned int > m_out
Definition: GNN_DataStorage.h:60
TrigTrackSeedGeneratorITk::createSeeds
void createSeeds(const IRoiDescriptor *)
Definition: TrigTrackSeedGenerator_ITk.cxx:575
IRoiDescriptor::zedMinus
virtual double zedMinus() const =0
IRoiDescriptor.h
TrigCombinatorialSettings::m_tripletD0Max
float m_tripletD0Max
Definition: TrigCombinatorialSettings.h:57
TrigFTF_GNN_Node::m_in
std::vector< unsigned int > m_in
Definition: GNN_DataStorage.h:59
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
TrigSiSpacePointBase
Definition: TrigSiSpacePointBase.h:23
TrigTrackSeedGeneratorITk::m_storage
TrigFTF_GNN_DataStorage * m_storage
Definition: TrigTrackSeedGenerator_ITk.h:47
GNN_DataStorage.h
TrigTrackSeedGeneratorITk::m_maxDeltaRadius
float m_maxDeltaRadius
Definition: TrigTrackSeedGenerator_ITk.h:51
TrigInDetTriplet.h
TrigTrackSeedGeneratorITk::m_triplets
std::vector< TrigInDetTriplet > m_triplets
Definition: TrigTrackSeedGenerator_ITk.h:55
TrigFTF_GNN_Layer::getMaxBinRadius
float getMaxBinRadius(int) const
Definition: GNN_Geometry.cxx:208
TrigCombinatorialSettings
Definition: TrigCombinatorialSettings.h:15
TrigFTF_GNN_Edge::m_p
float m_p[4]
Definition: GNN_DataStorage.h:133
TrigTrackSeedGeneratorITk::m_settings
const TrigCombinatorialSettings & m_settings
Definition: TrigTrackSeedGenerator_ITk.h:49
TrigTrackSeedGeneratorITk::~TrigTrackSeedGeneratorITk
~TrigTrackSeedGeneratorITk()
Definition: TrigTrackSeedGenerator_ITk.cxx:40