ATLAS Offline Software
TrigInDetPattRecoTools/src/SeedingToolBase.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
9 
11 
12 #include "GNN_TrackingFilter.h"
13 
15 
16 #include "SeedingToolBase.h"
17 
18 #include "GNN_TrackingFilter.h"
19 
20 #include <cmath>
21 #include <numeric> //for std::iota
22 #include <algorithm> //for std::sort
23 
26 
27  ATH_CHECK(m_layerNumberTool.retrieve());
28 
29 
30  ATH_CHECK(detStore()->retrieve(m_atlasId, "AtlasID"));
31 
32  ATH_CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
33 
34  ATH_CHECK(detStore()->retrieve(m_sctId, "SCT_ID"));
35 
36  std::string conn_fileName = PathResolver::find_file(m_connectionFile, "DATAPATH");
37  if (conn_fileName.empty()) {
38  ATH_MSG_FATAL("Cannot find layer connections file " << conn_fileName);
39  return StatusCode::FAILURE;
40  }
41  else {
42 
43  std::ifstream ifs(conn_fileName.c_str());
44 
45  m_connector = std::make_unique<GNN_FASTRACK_CONNECTOR>(ifs, m_LRTmode);
46  if (m_etaBinOverride != 0.0f) {
47  m_connector->m_etaBin = m_etaBinOverride;
48  }
49 
50  ATH_MSG_INFO("Layer connections are initialized from file " << conn_fileName);
51  }
52 
53  const std::vector<TrigInDetSiLayer>* pVL = m_layerNumberTool->layerGeometry();
54 
55  std::copy(pVL->begin(),pVL->end(), std::back_inserter(m_layerGeometry));
56 
57  m_geo = std::make_unique<TrigFTF_GNN_Geometry>(m_layerGeometry, m_connector);
58 
59 
60  if (m_useML) {
61  std::string lut_fileName = PathResolver::find_file(m_lutFile, "DATAPATH");
62  if (lut_fileName.empty()) {
63  ATH_MSG_FATAL("Cannot find ML predictor LUT file " << lut_fileName);
64  return StatusCode::FAILURE;
65  }
66  else {
67  m_mlLUT.reserve(100);
68  std::ifstream ifs(lut_fileName.c_str());
69  while (!ifs.eof()) {
70  float cl_width, min1, max1, min2, max2;
71  ifs >> cl_width >> min1 >> max1 >> min2 >> max2;
72  if (ifs.eof()) break;
73  std::array<float, 5> lut_line = {cl_width, min1, max1, min2, max2};
74  m_mlLUT.emplace_back(lut_line);
75  }
76  ifs.close();
77  ATH_MSG_INFO("ML predictor is initialized from file " << lut_fileName<<" LUT has "<<m_mlLUT.size()<<" entries");
78  }
79  }
80 
82 
83  ATH_MSG_INFO("SeedingToolBase initialized ");
84 
85  ATH_MSG_DEBUG("Property useML "<< m_useML);
86  ATH_MSG_DEBUG("Property DoPhiFiltering "<<m_filter_phi);
87  ATH_MSG_DEBUG("Property pTmin "<<m_minPt);
88  ATH_MSG_DEBUG("Property LRTmode "<<m_LRTmode);
89 
90  return StatusCode::SUCCESS;
91 }
92 
95  return sc;
96 }
97 
98 std::pair<int, int> SeedingToolBase::buildTheGraph(const IRoiDescriptor& roi, const std::unique_ptr<TrigFTF_GNN_DataStorage>& storage, std::vector<TrigFTF_GNN_Edge>& edgeStorage) const {
99 
100  constexpr float M_2PI = 2.0*M_PI;
101 
102  const float cut_dphi_max = m_LRTmode ? 0.07f : 0.012f;
103  const float cut_dcurv_max = m_LRTmode ? 0.015f : 0.001f;
104  const float cut_tau_ratio_max = m_LRTmode ? 0.015f : static_cast<float>(m_tau_ratio_cut);
105  const float min_z0 = m_LRTmode ? -600.0 : roi.zedMinus();
106  const float max_z0 = m_LRTmode ? 600.0 : roi.zedPlus();
107  const float min_deltaPhi = m_LRTmode ? 0.01f : 0.001f;
108  const float tau_ratio_precut = 0.009f;
109 
110  const float maxOuterRadius = m_LRTmode ? 1050.0 : 550.0;
111 
112  const float cut_zMinU = min_z0 + maxOuterRadius*roi.dzdrMinus();
113  const float cut_zMaxU = max_z0 + maxOuterRadius*roi.dzdrPlus();
114 
115  constexpr float ptCoeff = 0.29997*1.9972/2.0;// ~0.3*B/2 - assuming nominal field of 2*T
116 
117  float tripletPtMin = 0.8f*m_minPt;//correction due to limited pT resolution
118  const float pt_scale = 900.0f/m_minPt;//to re-scale original tunings done for the 900 MeV pT cut
119 
120  float maxCurv = ptCoeff/tripletPtMin;
121 
122  float maxKappa_high_eta = m_LRTmode ? 1.0f*maxCurv : std::sqrt(0.8f)*maxCurv;
123  float maxKappa_low_eta = m_LRTmode ? 1.0f*maxCurv : std::sqrt(0.6f)*maxCurv;
124 
125  if(!m_useOldTunings && !m_LRTmode) {//new settings for curvature cuts
126  maxKappa_high_eta = 4.75e-4f*pt_scale;
127  maxKappa_low_eta = 3.75e-4f*pt_scale;
128  }
129 
130  const float dphi_coeff = m_LRTmode ? 1.0f*maxCurv : 0.68f*maxCurv;
131 
132  const float minDeltaRadius = 2.0;
133 
134  float deltaPhi = 0.5f*m_phiSliceWidth;//the default sliding window along phi
135 
136  unsigned int nConnections = 0;
137 
138  edgeStorage.reserve(m_nMaxEdges);
139 
140  int nEdges = 0;
141 
142  for(const auto& bg : m_geo->bin_groups()) {//loop over bin groups
143 
144  TrigFTF_GNN_EtaBin& B1 = storage->getEtaBin(bg.first);
145 
146  if(B1.empty()) continue;
147 
148  float rb1 = B1.getMinBinRadius();
149 
150  const unsigned int lk1 = B1.m_layerKey;
151 
152  for(const auto& b2_idx : bg.second) {
153 
154  const TrigFTF_GNN_EtaBin& B2 = storage->getEtaBin(b2_idx);
155 
156  if(B2.empty()) continue;
157 
158  float rb2 = B2.getMaxBinRadius();
159 
160  if(m_useEtaBinning) {
161  float abs_dr = std::fabs(rb2-rb1);
162  if (m_useOldTunings) {
163  deltaPhi = min_deltaPhi + dphi_coeff*abs_dr;
164  }
165  else {
166  if(abs_dr < 60.0) {
167  deltaPhi = 0.002f + 4.33e-4f*pt_scale*abs_dr;
168  } else {
169  deltaPhi = 0.015f + 2.2e-4f*pt_scale*abs_dr;
170  }
171  }
172  }
173 
174  unsigned int first_it = 0;
175 
176  for(unsigned int n1Idx = 0;n1Idx<B1.m_vn.size();n1Idx++) {//loop over nodes in Layer 1
177 
178  std::vector<unsigned int>& v1In = B1.m_in[n1Idx];
179 
180  if(v1In.size() >= MAX_SEG_PER_NODE) continue;
181 
182  const std::array<float, 5>& n1pars = B1.m_params[n1Idx];
183 
184  float phi1 = n1pars[2];
185  float r1 = n1pars[3];
186  float z1 = n1pars[4];
187 
188  //sliding window phi1 +/- deltaPhi
189 
190  float minPhi = phi1 - deltaPhi;
191  float maxPhi = phi1 + deltaPhi;
192 
193  for(unsigned int n2PhiIdx = first_it; n2PhiIdx<B2.m_vPhiNodes.size();n2PhiIdx++) {//sliding window over nodes in Layer 2
194 
195  float phi2 = B2.m_vPhiNodes[n2PhiIdx].first;
196 
197  if(phi2 < minPhi) {
198  first_it = n2PhiIdx;
199  continue;
200  }
201  if(phi2 > maxPhi) break;
202 
203  unsigned int n2Idx = B2.m_vPhiNodes[n2PhiIdx].second;
204 
205  const std::vector<unsigned int>& v2In = B2.m_in[n2Idx];
206 
207  if(v2In.size() >= MAX_SEG_PER_NODE) continue;
208 
209  const std::array<float, 5>& n2pars = B2.m_params[n2Idx];
210 
211  float r2 = n2pars[3];
212 
213  float dr = r2 - r1;
214 
215  if(dr < minDeltaRadius) {
216  continue;
217  }
218 
219  float z2 = n2pars[4];
220 
221  float dz = z2 - z1;
222  float tau = dz/dr;
223  float ftau = std::fabs(tau);
224  if (ftau > 36.0) {
225  continue;
226  }
227 
228  if(ftau < n1pars[0]) continue;
229  if(ftau > n1pars[1]) continue;
230 
231  if(ftau < n2pars[0]) continue;
232  if(ftau > n2pars[1]) continue;
233 
234  if (m_doubletFilterRZ) {
235 
236  float z0 = z1 - r1*tau;
237 
238  if(z0 < min_z0 || z0 > max_z0) continue;
239 
240  float zouter = z0 + maxOuterRadius*tau;
241 
242  if(zouter < cut_zMinU || zouter > cut_zMaxU) continue;
243  }
244 
245  float curv = (phi2-phi1)/dr;
246  float abs_curv = std::abs(curv);
247 
248  if(ftau < 4.0) {//eta = 2.1
249  if(abs_curv > maxKappa_low_eta) {
250  continue;
251  }
252  }
253  else {
254  if(abs_curv > maxKappa_high_eta) {
255  continue;
256  }
257  }
258 
259  float exp_eta = std::sqrt(1.f+tau*tau)-tau;
260 
261  if (m_matchBeforeCreate && (lk1 == 80000 || lk1 == 81000) ) {//match edge candidate against edges incoming to n2
262 
263  bool isGood = v2In.size() <= 2;//we must have enough incoming edges to decide
264 
265  if(!isGood) {
266 
267  float uat_1 = 1.0f/exp_eta;
268 
269  for(const auto& n2_in_idx : v2In) {
270 
271  float tau2 = edgeStorage.at(n2_in_idx).m_p[0];
272  float tau_ratio = tau2*uat_1 - 1.0f;
273 
274  if(std::fabs(tau_ratio) > tau_ratio_precut){//bad match
275  continue;
276  }
277  isGood = true;//good match found
278  break;
279  }
280  }
281 
282  if(!isGood) {//no match found, skip creating [n1 <- n2] edge
283  continue;
284  }
285  }
286 
287  float dPhi2 = curv*r2;
288  float dPhi1 = curv*r1;
289 
290  if(nEdges < m_nMaxEdges) {
291 
292  edgeStorage.emplace_back(B1.m_vn[n1Idx], B2.m_vn[n2Idx], exp_eta, curv, phi1 + dPhi1);
293 
294  if(v1In.size() < MAX_SEG_PER_NODE) v1In.push_back(nEdges);
295 
296  int outEdgeIdx = nEdges;
297 
298  float uat_2 = 1.f/exp_eta;
299  float Phi2 = phi2 + dPhi2;
300  float curv2 = curv;
301 
302  for(const auto& inEdgeIdx : v2In) {//looking for neighbours of the new edge
303 
304  TrigFTF_GNN_Edge* pS = &(edgeStorage.at(inEdgeIdx));
305 
306  if(pS->m_nNei >= N_SEG_CONNS) continue;
307 
308  float tau_ratio = pS->m_p[0]*uat_2 - 1.0f;
309 
310  if(std::abs(tau_ratio) > cut_tau_ratio_max){//bad match
311  continue;
312  }
313 
314  float dPhi = Phi2 - pS->m_p[2];
315 
316  if(dPhi<-M_PI) dPhi += M_2PI;
317  else if(dPhi>M_PI) dPhi -= M_2PI;
318 
319  if(std::abs(dPhi) > cut_dphi_max) {
320  continue;
321  }
322 
323  float dcurv = curv2 - pS->m_p[1];
324 
325  if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
326  continue;
327  }
328 
329  pS->m_vNei[pS->m_nNei++] = outEdgeIdx;
330 
331  nConnections++;
332 
333  }
334  nEdges++;
335  }
336  } //loop over n2 (outer) nodes
337  } //loop over n1 (inner) nodes
338  } //loop over bins in Layer 2
339  } //loop over bin groups
340 
341  if(nEdges >= m_nMaxEdges) {
342  ATH_MSG_WARNING("Maximum number of graph edges exceeded - possible efficiency loss "<< nEdges);
343  }
344 
345  return std::make_pair(nEdges, nConnections);
346 }
347 
348 int SeedingToolBase::runCCA(int nEdges, std::vector<TrigFTF_GNN_Edge>& edgeStorage) const {
349 
350  constexpr int maxIter = 15;
351 
352  int maxLevel = 0;
353 
354  int iter = 0;
355 
356  std::vector<TrigFTF_GNN_Edge*> v_old;
357 
358  for(int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
359 
360  TrigFTF_GNN_Edge* pS = &(edgeStorage[edgeIndex]);
361  if(pS->m_nNei == 0) continue;
362 
363  v_old.push_back(pS);//TO-DO: increment level for segments as they already have at least one neighbour
364  }
365 
366  std::vector<TrigFTF_GNN_Edge*> v_new;
367  v_new.reserve(v_old.size());
368 
369  for(;iter<maxIter;iter++) {
370 
371  //generate proposals
372  v_new.clear();
373 
374  for(auto pS : v_old) {
375 
376  int next_level = pS->m_level;
377 
378  for(int nIdx=0;nIdx<pS->m_nNei;nIdx++) {
379 
380  unsigned int nextEdgeIdx = pS->m_vNei[nIdx];
381 
382  TrigFTF_GNN_Edge* pN = &(edgeStorage[nextEdgeIdx]);
383 
384  if(pS->m_level == pN->m_level) {
385  next_level = pS->m_level + 1;
386  v_new.push_back(pS);
387  break;
388  }
389  }
390 
391  pS->m_next = next_level;//proposal
392  }
393 
394  //update
395 
396  int nChanges = 0;
397 
398  for(auto pS : v_new) {
399  if(pS->m_next != pS->m_level) {
400  nChanges++;
401  pS->m_level = pS->m_next;
402  if(maxLevel < pS->m_level) maxLevel = pS->m_level;
403  }
404  }
405 
406  if(nChanges == 0) break;
407 
408 
409  v_old.swap(v_new);
410  v_new.clear();
411  }
412 
413  return maxLevel;
414 }
415 
416 void SeedingToolBase::extractSeedsFromTheGraph(int maxLevel, int nEdges, int nHits, std::vector<GNN_Edge>& edgeStorage, std::vector<std::tuple<float, int, std::vector<unsigned int> > >& vSeedCandidates) const {
417 
418  const float edge_mask_min_eta = 1.5;
419  const float hit_share_threshold = 0.49;
420 
421  vSeedCandidates.clear();
422 
423  int minLevel = 3;//a triplet + 2 confirmation
424 
425  if(m_LRTmode) {
426  minLevel = 2;//a triplet + 1 confirmation
427  }
428 
429  if(maxLevel < minLevel) return;
430 
431  std::vector<GNN_Edge*> vSeeds;
432 
433  vSeeds.reserve(nEdges/2);
434 
435  for(int edgeIndex = 0; edgeIndex < nEdges; edgeIndex++) {
436 
437  GNN_Edge* pS = &(edgeStorage.at(edgeIndex));
438 
439  if(pS->m_level < minLevel) continue;
440 
441  vSeeds.push_back(pS);
442  }
443 
444  if(vSeeds.empty()) return;
445 
446  std::sort(vSeeds.begin(), vSeeds.end(), GNN_Edge::CompareLevel());
447 
448  //backtracking
449 
450  vSeedCandidates.reserve(vSeeds.size());
451 
452  auto tFilter = std::make_unique<TrigFTF_GNN_TrackingFilter>(m_layerGeometry, edgeStorage);
453 
454  for(auto pS : vSeeds) {
455 
456  if(pS->m_level == -1) continue;
457 
458  TrigFTF_GNN_EdgeState rs(false);
459 
460  tFilter->followTrack(pS, rs);
461 
462  if(!rs.m_initialized) {
463  continue;
464  }
465 
466  if(static_cast<int>(rs.m_vs.size()) < minLevel) continue;
467 
468  float seed_eta = std::abs(-std::log(pS->m_p[0]));
469 
470  std::vector<const GNN_Node*> vN;
471 
472  for(std::vector<GNN_Edge*>::reverse_iterator sIt=rs.m_vs.rbegin();sIt!=rs.m_vs.rend();++sIt) {
473 
474  if (seed_eta > edge_mask_min_eta) {
475  (*sIt)->m_level = -1;//mark as collected
476  }
477 
478  if(sIt == rs.m_vs.rbegin()) {
479  vN.push_back((*sIt)->m_n1);
480  }
481 
482  vN.push_back((*sIt)->m_n2);
483 
484  }
485 
486  if(vN.size()<3) continue;
487 
488  std::vector<unsigned int> vSpIdx;
489 
490  vSpIdx.resize(vN.size());
491 
492  for(unsigned int k = 0; k < vN.size(); k++) {
493  vSpIdx[k] = vN[k]->sp_idx();
494  }
495 
496  vSeedCandidates.emplace_back(-rs.m_J/vN.size(), 0, vSpIdx);
497 
498  }
499 
500  //clone removal code goes below ...
501 
502  std::sort(vSeedCandidates.begin(), vSeedCandidates.end());
503 
504  std::vector<int> vTrackIds(vSeedCandidates.size());
505 
506  // fills the vector from 1 to N
507 
508  std::iota(vTrackIds.begin(), vTrackIds.end(), 1);
509 
510  std::vector<int> H2T(nHits + 1, 0);//hit to track associations
511 
512  int seedIdx = 0;
513 
514  for(const auto& seed : vSeedCandidates) {
515 
516  for(const auto& h : std::get<2>(seed) ) {//loop over spacepoints indices
517 
518  unsigned int hit_id = h + 1;
519 
520  int tid = H2T[hit_id];
521  int trackId = vTrackIds[seedIdx];
522 
523  if(tid == 0 || tid > trackId) {//un-used hit or used by a lesser track
524 
525  H2T[hit_id] = trackId;//overwrite
526 
527  }
528  }
529 
530  seedIdx++;
531 
532  }
533 
534  for(unsigned int trackIdx = 0; trackIdx < vSeedCandidates.size(); trackIdx++) {
535 
536  int nTotal = std::get<2>(vSeedCandidates[trackIdx]).size();
537  int nOther = 0;
538 
539  int trackId = vTrackIds[trackIdx];
540 
541  for(const auto& h : std::get<2>(vSeedCandidates[trackIdx]) ) {
542 
543  unsigned int hit_id = h + 1;
544 
545  int tid = H2T[hit_id];
546 
547  if(tid != trackId) {//taken by a better candidate
548  nOther++;
549  }
550  }
551 
552  if (nOther > hit_share_threshold*nTotal) {
553  std::get<1>(vSeedCandidates[trackIdx]) = -1;//reject
554  }
555 
556  }
557 }
TrigFTF_GNN_EtaBin
Definition: GNN_DataStorage.h:41
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...
SeedingToolBase::m_layerGeometry
std::vector< TrigInDetSiLayer > m_layerGeometry
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:78
SeedingToolBase::m_matchBeforeCreate
BooleanProperty m_matchBeforeCreate
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:62
IRegSelTool.h
createLinkingScheme.iter
iter
Definition: createLinkingScheme.py:62
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:73
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
SeedingToolBase::initialize
virtual StatusCode initialize()
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.cxx:24
SeedingToolBase::m_pixelId
const PixelID * m_pixelId
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:52
TileDCSDataPlotter.max1
max1
Definition: TileDCSDataPlotter.py:886
TrigFTF_GNN_Edge::CompareLevel
Definition: GNN_DataStorage.h:111
StandaloneBunchgroupHandler.bg
bg
Definition: StandaloneBunchgroupHandler.py:241
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
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:161
SeedingToolBase::buildTheGraph
std::pair< int, int > buildTheGraph(const IRoiDescriptor &, const std::unique_ptr< GNN_DataStorage > &, std::vector< GNN_Edge > &) const
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.cxx:98
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
SeedingToolBase::m_nMaxEdges
IntegerProperty m_nMaxEdges
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:65
SeedingToolBase::m_sctId
const SCT_ID * m_sctId
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:51
SeedingToolBase::m_connector
std::unique_ptr< GNN_FasTrackConnector > m_connector
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:77
M_PI
#define M_PI
Definition: ActiveFraction.h:11
TrigFTF_GNN_EdgeState::m_J
float m_J
Definition: GNN_TrackingFilter.h:31
SeedingToolBase::m_filter_phi
BooleanProperty m_filter_phi
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:54
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:111
TauClusterVars::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
Definition: ConstituentLoaderTauCluster.cxx:119
IRoiDescriptor::dzdrMinus
virtual double dzdrMinus() const =0
return the gradients
SeedingToolBase::m_mlLUT
std::vector< std::array< float, 5 > > m_mlLUT
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:80
SeedingToolBase::m_lutFile
StringProperty m_lutFile
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:68
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
TrigFTF_GNN_EdgeState::m_vs
std::vector< TrigFTF_GNN_Edge * > m_vs
Definition: GNN_TrackingFilter.h:33
IRoiDescriptor::dzdrPlus
virtual double dzdrPlus() const =0
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...
SeedingToolBase::extractSeedsFromTheGraph
void extractSeedsFromTheGraph(int, int, int, std::vector< GNN_Edge > &, std::vector< std::tuple< float, int, std::vector< unsigned int > > > &) const
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.cxx:416
TrigFTF_GNN_EtaBin::empty
bool empty() const
Definition: GNN_DataStorage.h:57
SeedingToolBase::m_LRTmode
BooleanProperty m_LRTmode
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:56
TrigFTF_GNN_Edge
Definition: GNN_DataStorage.h:108
SeedingToolBase.h
TrigFTF_GNN_EtaBin::m_vPhiNodes
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
Definition: GNN_DataStorage.h:72
TrigFTF_GNN_Edge::m_level
signed char m_level
Definition: GNN_DataStorage.h:130
SeedingToolBase::m_minPt
FloatProperty m_minPt
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:63
TrigFTF_GNN_EtaBin::m_layerKey
unsigned int m_layerKey
Definition: GNN_DataStorage.h:77
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
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
SeedingToolBase::m_atlasId
const AtlasDetectorID * m_atlasId
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:50
SeedingToolBase::finalize
virtual StatusCode finalize()
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.cxx:93
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
hist_file_dump.f
f
Definition: hist_file_dump.py:140
GNN_TrackingFilter.h
MAX_SEG_PER_NODE
#define MAX_SEG_PER_NODE
Definition: GNN_DataStorage.h:13
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:94
SeedingToolBase::m_connectionFile
StringProperty m_connectionFile
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:67
TrigFTF_GNN_EtaBin::getMaxBinRadius
float getMaxBinRadius() const
Definition: GNN_DataStorage.h:67
SeedingToolBase::m_doubletFilterRZ
BooleanProperty m_doubletFilterRZ
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:60
SeedingToolBase::m_layerNumberTool
ToolHandle< ITrigL2LayerNumberTool > m_layerNumberTool
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:48
SeedingToolBase::m_useEtaBinning
BooleanProperty m_useEtaBinning
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:61
SeedingToolBase::m_geo
std::unique_ptr< const TrigFTF_GNN_Geometry > m_geo
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:79
PathResolver.h
SeedingToolBase::m_etaBinOverride
FloatProperty m_etaBinOverride
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:64
SeedingToolBase::m_phiSliceWidth
float m_phiSliceWidth
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:75
TrigFTF_GNN_Edge::m_nNei
unsigned char m_nNei
Definition: GNN_DataStorage.h:132
h
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
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)
Definition: PathResolver.cxx:221
TrigFTF_GNN_Edge::m_p
float m_p[3]
Definition: GNN_DataStorage.h:133
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
IRoiDescriptor::zedMinus
virtual double zedMinus() const =0
SeedingToolBase::m_useML
BooleanProperty m_useML
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:57
calibdata.copy
bool copy
Definition: calibdata.py:26
SeedingToolBase::m_useOldTunings
BooleanProperty m_useOldTunings
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:71
M_2PI
#define M_2PI
Definition: CaloGpuGeneral_fnc.cxx:11
TrigFTF_GNN_EtaBin::m_vn
std::vector< const TrigFTF_GNN_Node * > m_vn
Definition: GNN_DataStorage.h:71
SeedingToolBase::m_tau_ratio_cut
FloatProperty m_tau_ratio_cut
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:73
SeedingToolBase::runCCA
int runCCA(int, std::vector< GNN_Edge > &) const
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.cxx:348
SeedingToolBase::m_nMaxPhiSlice
UnsignedIntegerProperty m_nMaxPhiSlice
Definition: TrigInDetPattRecoTools/src/SeedingToolBase.h:59
fitman.k
k
Definition: fitman.py:528
TrigFTF_GNN_EtaBin::getMinBinRadius
float getMinBinRadius() const
Definition: GNN_DataStorage.h:63
TrigFTF_GNN_EtaBin::m_params
std::vector< std::array< float, 5 > > m_params
Definition: GNN_DataStorage.h:74