ATLAS Offline Software
GridTripletSeedingTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 namespace ActsTrk {
8 
10  const std::string& name,
11  const IInterface* parent)
12  : base_class(type, name, parent) {}
13 
15  ATH_MSG_DEBUG("Initializing " << name() << "...");
16 
17  ATH_MSG_DEBUG("Properties Summary:");
23 
24  ATH_MSG_DEBUG(" * Used by space point grid config:");
25  ATH_MSG_DEBUG(" " << m_minPt);
27  ATH_MSG_DEBUG(" " << m_impactMax);
28  ATH_MSG_DEBUG(" " << m_zMin);
29  ATH_MSG_DEBUG(" " << m_zMax);
32  ATH_MSG_DEBUG(" " << m_zBinEdges);
33  ATH_MSG_DEBUG(" " << m_rBinEdges);
34  ATH_MSG_DEBUG(" " << m_deltaRMax);
35  ATH_MSG_DEBUG(" " << m_gridRMax);
37 
38  ATH_MSG_DEBUG(" * Used by seed finder config:");
39  ATH_MSG_DEBUG(" " << m_minPt);
41  ATH_MSG_DEBUG(" " << m_impactMax);
42  ATH_MSG_DEBUG(" " << m_zMin);
43  ATH_MSG_DEBUG(" " << m_zMax);
44  ATH_MSG_DEBUG(" " << m_zBinEdges);
45  ATH_MSG_DEBUG(" " << m_rMax);
46  ATH_MSG_DEBUG(" " << m_deltaRMin);
47  ATH_MSG_DEBUG(" " << m_deltaRMax);
52  ATH_MSG_DEBUG(" " << m_deltaZMax);
66  } else if (not m_rRangeMiddleSP.empty())
69  if (m_seedConfirmation) {
86  }
89  ATH_MSG_DEBUG(" " << m_phiMin);
90  ATH_MSG_DEBUG(" " << m_phiMax);
91  ATH_MSG_DEBUG(" " << m_rMin);
92  ATH_MSG_DEBUG(" " << m_zAlign);
93  ATH_MSG_DEBUG(" " << m_rAlign);
95 
96  ATH_MSG_DEBUG(" * Used by seed filter config:");
97  ATH_MSG_DEBUG(" " << m_deltaRMin);
120  }
127 
128  // Make the logger && Propagate to ACTS routines
129  m_logger = makeActsAthenaLogger(this, "Acts");
130 
131  if (m_zBinEdges.size() - 1 != m_zBinNeighborsTop.size() &&
132  not m_zBinNeighborsTop.empty()) {
133  ATH_MSG_ERROR("Inconsistent config zBinNeighborsTop");
134  return StatusCode::FAILURE;
135  }
136 
137  if (m_zBinEdges.size() - 1 != m_zBinNeighborsBottom.size() &&
138  not m_zBinNeighborsBottom.empty()) {
139  ATH_MSG_ERROR("Inconsistent config zBinNeighborsBottom");
140  return StatusCode::FAILURE;
141  }
142 
143  if (m_rBinEdges.size() - 1 != m_rBinNeighborsTop.size() &&
144  not m_rBinNeighborsTop.empty()) {
145  ATH_MSG_ERROR("Inconsistent config rBinNeighborsTop");
146  return StatusCode::FAILURE;
147  }
148 
149  if (m_rBinEdges.size() - 1 != m_rBinNeighborsBottom.size() &&
150  not m_rBinNeighborsBottom.empty()) {
151  ATH_MSG_ERROR("Inconsistent config rBinNeighborsBottom");
152  return StatusCode::FAILURE;
153  }
154 
155  if (m_zBinsCustomLooping.size() != 0) {
156  // zBinsCustomLooping can contain a number of elements <= to the total
157  // number of bin in zBinEdges
158  for (std::size_t i : m_zBinsCustomLooping) {
159  if (i >= m_zBinEdges.size()) {
161  "Inconsistent config zBinsCustomLooping contains bins that are not "
162  "in zBinEdges");
163  return StatusCode::FAILURE;
164  }
165  }
166  }
167 
168  if (m_rBinsCustomLooping.size() != 0) {
169  for (std::size_t i : m_rBinsCustomLooping) {
170  if (i >= m_rBinEdges.size()) {
172  "Inconsistent config rBinsCustomLooping contains bins that are not "
173  "in rBinEdges");
174  return StatusCode::FAILURE;
175  }
176  }
177  }
178 
179  m_gridCfg.minPt = m_minPt;
180  m_gridCfg.rMin = 0;
181  m_gridCfg.rMax = m_gridRMax;
182  m_gridCfg.zMin = m_zMin;
183  m_gridCfg.zMax = m_zMax;
184  m_gridCfg.deltaRMax = m_deltaRMax;
185  m_gridCfg.cotThetaMax = m_cotThetaMax;
186  m_gridCfg.impactMax = m_impactMax;
187  m_gridCfg.phiMin = m_gridPhiMin;
188  m_gridCfg.phiMax = m_gridPhiMax;
189  m_gridCfg.phiBinDeflectionCoverage = m_phiBinDeflectionCoverage;
190  m_gridCfg.maxPhiBins = m_maxPhiBins;
191  m_gridCfg.zBinEdges = m_zBinEdges;
192  m_gridCfg.rBinEdges = m_rBinEdges;
193  m_gridCfg.bFieldInZ = 0; // will be set later
194  m_gridCfg.bottomBinFinder = Acts::GridBinFinder<3ul>(
195  m_numPhiNeighbors.value(), m_zBinNeighborsBottom.value(),
196  m_rBinNeighborsBottom.value());
197  m_gridCfg.topBinFinder = Acts::GridBinFinder<3ul>(m_numPhiNeighbors.value(),
198  m_zBinNeighborsTop.value(),
199  m_rBinNeighborsTop.value());
200  m_gridCfg.navigation[0ul] = {};
201  m_gridCfg.navigation[1ul] = m_zBinsCustomLooping;
202  m_gridCfg.navigation[2ul] = m_rBinsCustomLooping;
203 
204  m_bottomDoubletFinderCfg.spacePointsSortedByRadius = true;
205  m_bottomDoubletFinderCfg.candidateDirection = Acts::Direction::Backward();
211  m_bottomDoubletFinderCfg.interactionPointCut = m_interactionPointCut;
212  m_bottomDoubletFinderCfg.collisionRegionMin = m_collisionRegionMin;
213  m_bottomDoubletFinderCfg.collisionRegionMax = m_collisionRegionMax;
216  m_bottomDoubletFinderCfg.helixCutTolerance = 1.;
217  if (m_useExperimentCuts) {
218  m_bottomDoubletFinderCfg.experimentCuts
220  this);
221  }
222 
223  m_topDoubletFinderCfg = m_bottomDoubletFinderCfg; // copy the bottom cuts
224  m_topDoubletFinderCfg.candidateDirection = Acts::Direction::Forward();
227 
230  m_tripletFinderCfg.minPt = m_minPt;
231  m_tripletFinderCfg.sigmaScattering = m_sigmaScattering;
232  m_tripletFinderCfg.radLengthPerSeed = m_radLengthPerSeed;
233  m_tripletFinderCfg.impactMax = m_impactMax;
234  m_tripletFinderCfg.helixCutTolerance = 1.;
235  m_tripletFinderCfg.toleranceParam = m_toleranceParam;
236 
237  m_filterCfg.deltaInvHelixDiameter = m_deltaInvHelixDiameter;
238  m_filterCfg.deltaRMin = m_deltaRMin;
239  m_filterCfg.compatSeedWeight = m_compatSeedWeight;
240  m_filterCfg.impactWeightFactor = m_impactWeightFactor;
241  m_filterCfg.zOriginWeightFactor = m_zOriginWeightFactor;
242  m_filterCfg.maxSeedsPerSpM = m_maxSeedsPerSpM;
243  m_filterCfg.compatSeedLimit = m_compatSeedLimit;
244  m_filterCfg.seedWeightIncrement = m_seedWeightIncrement;
245  m_filterCfg.numSeedIncrement = m_numSeedIncrement;
246  m_filterCfg.seedConfirmation = m_seedConfirmationInFilter;
247  m_filterCfg.centralSeedConfirmationRange.zMinSeedConf = m_seedConfCentralZMin;
248  m_filterCfg.centralSeedConfirmationRange.zMaxSeedConf = m_seedConfCentralZMax;
249  m_filterCfg.centralSeedConfirmationRange.rMaxSeedConf = m_seedConfCentralRMax;
250  m_filterCfg.centralSeedConfirmationRange.nTopForLargeR =
252  m_filterCfg.centralSeedConfirmationRange.nTopForSmallR =
254  m_filterCfg.centralSeedConfirmationRange.seedConfMinBottomRadius =
256  m_filterCfg.centralSeedConfirmationRange.seedConfMaxZOrigin =
258  m_filterCfg.centralSeedConfirmationRange.minImpactSeedConf =
260  m_filterCfg.forwardSeedConfirmationRange.zMinSeedConf = m_seedConfForwardZMin;
261  m_filterCfg.forwardSeedConfirmationRange.zMaxSeedConf = m_seedConfForwardZMax;
262  m_filterCfg.forwardSeedConfirmationRange.rMaxSeedConf = m_seedConfForwardRMax;
263  m_filterCfg.forwardSeedConfirmationRange.nTopForLargeR =
265  m_filterCfg.forwardSeedConfirmationRange.nTopForSmallR =
267  m_filterCfg.forwardSeedConfirmationRange.seedConfMinBottomRadius =
269  m_filterCfg.forwardSeedConfirmationRange.seedConfMaxZOrigin =
271  m_filterCfg.forwardSeedConfirmationRange.minImpactSeedConf =
273  m_filterCfg.maxSeedsPerSpMConf = m_maxSeedsPerSpMConf;
274  m_filterCfg.maxQualitySeedsPerSpMConf = m_maxQualitySeedsPerSpMConf;
275  m_filterCfg.useDeltaRinsteadOfTopRadius = m_useDeltaRorTopRadius;
276 
277  m_finder = Acts::TripletSeeder(logger().cloneWithSuffix("Finder"));
278 
279  m_loggerFilter = logger().cloneWithSuffix("Filter");
280 
281  ATH_CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
282 
283  return StatusCode::SUCCESS;
284 }
285 
287  const xAOD::SpacePoint* sp, float r) const {
288  float zabs = std::abs(sp->z());
289  float absCotTheta = zabs / r;
290 
291  // checking configuration to remove pixel space points
294  if (zabs > 200 && r < 40)
295  return false;
296 
297  return true;
298  }
299 
300  // Inner layers
301  // Below 1.20 - accept all
302  static constexpr float cotThetaEta120 = 1.5095;
303  if (absCotTheta < cotThetaEta120)
304  return true;
305 
306  // Below 3.40 - remove if too close to beamline
307  static constexpr float cotThetaEta340 = 14.9654;
308  if (absCotTheta < cotThetaEta340 && r < m_expCutrMin)
309  return false;
310 
311  // Outer layers
312  // Above 2.20
313  static constexpr float cotThetaEta220 = 4.4571;
314  if (absCotTheta > cotThetaEta220 && r > 260.)
315  return false;
316 
317  // Above 2.60
318  static constexpr float cotThetaEta260 = 6.6947;
319  if (absCotTheta > cotThetaEta260 && r > 200.)
320  return false;
321 
322  // Above 3.20
323  static constexpr float cotThetaEta320 = 12.2459;
324  if (absCotTheta > cotThetaEta320 && r > 140.)
325  return false;
326 
327  // Above 4.00
328  static constexpr float cotThetaEta400 = 27.2899;
329  if (absCotTheta > cotThetaEta400)
330  return false;
331 
332  return true;
333 }
334 
336  const Acts::ConstSpacePointProxy2& middle,
337  const Acts::ConstSpacePointProxy2& other, float cotTheta,
338  bool isBottomCandidate) const {
339  // We remove some doublets that have the middle space point in some specific
340  // areas This should eventually be moved inside ACTS and allow a veto
341  // mechanism according to the user desire. As of now we cannot really do this
342  // since we define a range of validity of the middle candidate, and if we want
343  // to veto some sub-regions inside it, we need to do it here.
344  if (std::abs(middle.zr()[0]) > 1500 and middle.zr()[1] > 100 and
345  middle.zr()[1] < 150) {
346  return false;
347  }
348 
349  // We remove here some seeds, in case the bottom space point radius is
350  // too small (i.e. < fastTrackingRMin)
351 
352  // This operation is done only within a specific eta window
353  // Instead of eta we use the doublet cottheta
354  static constexpr float cotThetaEta120 = 1.5095;
355  static constexpr float cotThetaEta360 = 18.2855;
356 
357  float absCotTheta = std::abs(cotTheta);
358  if (isBottomCandidate && other.zr()[1] < m_expCutrMin &&
359  absCotTheta > cotThetaEta120 && absCotTheta < cotThetaEta360) {
360  return false;
361  }
362 
363  return true;
364 }
365 
367  const Acts::ConstSpacePointProxy2& spM,
368  const Acts::Range1D<float>& rMiddleSpRange) const {
370  return {rMiddleSpRange.min(), rMiddleSpRange.max()};
371  }
372  if (m_rRangeMiddleSP.empty()) {
373  throw std::runtime_error(
374  "m_rRangeMiddleSP is empty, please check the configuration.");
375  }
376 
377  // get zBin position of the middle SP
378  auto pVal =
379  std::lower_bound(m_zBinEdges.begin(), m_zBinEdges.end(), spM.zr()[0]);
380  int zBin = std::distance(m_zBinEdges.begin(), pVal);
381  // protects against zM at the limit of zBinEdges
382  zBin == 0 ? zBin : --zBin;
383  return {m_rRangeMiddleSP[zBin][0], m_rRangeMiddleSP[zBin][1]};
384 }
385 
387  const EventContext& ctx,
388  const std::vector<const xAOD::SpacePointContainer*>& spacePointCollections,
389  const Eigen::Vector3f& beamSpotPos, float bFieldInZ,
390  ActsTrk::SeedContainer& seedContainer) const {
391  (void)ctx;
392 
393  auto gridCfg = m_gridCfg;
394  gridCfg.bFieldInZ = bFieldInZ;
395 
396  Acts::CylindricalSpacePointGrid2 grid(gridCfg,
397  logger().cloneWithSuffix("Grid"));
398 
399  std::size_t totalSpacePoints = 0;
400  for (const xAOD::SpacePointContainer* spacePoints : spacePointCollections) {
401  totalSpacePoints += spacePoints->size();
402  }
403 
404  std::vector<const xAOD::SpacePoint*> selectedXAODSpacePoints;
405  std::vector<float> selectedSpacePointsR;
406  selectedXAODSpacePoints.reserve(totalSpacePoints);
407  selectedSpacePointsR.reserve(totalSpacePoints);
408 
409  for (const xAOD::SpacePointContainer* spacePoints : spacePointCollections) {
410  for (const xAOD::SpacePoint* sp : *spacePoints) {
411  float x = static_cast<float>(sp->x() - beamSpotPos[0]);
412  float y = static_cast<float>(sp->y() - beamSpotPos[1]);
413  float z = static_cast<float>(sp->z());
414  float r = std::hypot(x, y);
415  float phi = std::atan2(y, x);
416 
418  continue;
419  }
420 
421  grid.insert(selectedXAODSpacePoints.size(), phi, z, r);
422  selectedXAODSpacePoints.push_back(sp);
423  selectedSpacePointsR.push_back(r);
424  }
425  }
426 
427  for (std::size_t i = 0; i < grid.numberOfBins(); ++i) {
428  std::ranges::sort(grid.at(i), [&](const Acts::SpacePointIndex2& a,
429  const Acts::SpacePointIndex2& b) {
430  return selectedSpacePointsR[a] < selectedSpacePointsR[b];
431  });
432  }
433 
434  Acts::SpacePointContainer2 selectedSpacePoints;
435  selectedSpacePoints.createColumns(
436  Acts::SpacePointColumns::SourceLinks | Acts::SpacePointColumns::XY |
437  Acts::SpacePointColumns::ZR | Acts::SpacePointColumns::VarianceZ |
438  Acts::SpacePointColumns::VarianceR);
440  selectedSpacePoints.createColumns(Acts::SpacePointColumns::Strip);
441  }
442  selectedSpacePoints.reserve(grid.numberOfSpacePoints());
443  std::vector<Acts::SpacePointIndex2> copyFromIndices;
444  copyFromIndices.reserve(grid.numberOfSpacePoints());
445  std::vector<Acts::SpacePointIndexRange2> gridSpacePointRanges;
446  gridSpacePointRanges.reserve(grid.numberOfBins());
447  for (std::size_t i = 0; i < grid.numberOfBins(); ++i) {
448  std::uint32_t begin = selectedSpacePoints.size();
449  for (const Acts::SpacePointIndex2 spIndex : grid.at(i)) {
450  const xAOD::SpacePoint* sp = selectedXAODSpacePoints[spIndex];
451 
452  auto newSp = selectedSpacePoints.createSpacePoint();
453  newSp.assignSourceLinks(
454  std::array<Acts::SourceLink, 1>{Acts::SourceLink(sp)});
455  newSp.xy() =
456  std::array<float, 2>{static_cast<float>(sp->x() - beamSpotPos[0]),
457  static_cast<float>(sp->y() - beamSpotPos[1])};
458  newSp.zr() = std::array<float, 2>{static_cast<float>(sp->z()),
459  selectedSpacePointsR[spIndex]};
460  newSp.varianceZ() = static_cast<float>(sp->varianceZ());
461  newSp.varianceR() = static_cast<float>(sp->varianceR());
463  Eigen::Vector3f topStripVector =
465  Eigen::Vector3f bottomStripVector =
467  Eigen::Vector3f stripCenterDistance = sp->stripCenterDistance();
468  Eigen::Vector3f topStripCenter = sp->topStripCenter();
469 
470  newSp.topStripVector() = std::array<float, 3>{
471  topStripVector.x(), topStripVector.y(), topStripVector.z()};
472  newSp.bottomStripVector() =
473  std::array<float, 3>{bottomStripVector.x(), bottomStripVector.y(),
474  bottomStripVector.z()};
475  newSp.stripCenterDistance() = std::array<float, 3>{
476  stripCenterDistance.x(), stripCenterDistance.y(),
477  stripCenterDistance.z()};
478  newSp.topStripCenter() = std::array<float, 3>{
479  topStripCenter.x(), topStripCenter.y(), topStripCenter.z()};
480  }
481 
482  copyFromIndices.push_back(spIndex);
483  }
484  std::uint32_t end = selectedSpacePoints.size();
485  gridSpacePointRanges.emplace_back(begin, end);
486  }
487 
488  // clear temporary
489  selectedXAODSpacePoints = {};
490  selectedSpacePointsR = {};
491 
492  ACTS_VERBOSE("Number of space points after selection "
493  << selectedSpacePoints.size() << " out of " << totalSpacePoints);
494 
495  // Compute radius range. We rely on the fact the grid is storing the proxies
496  // with a sorting in the radius
497  const Acts::Range1D<float> rRange = [&]() -> Acts::Range1D<float> {
498  float minRange = std::numeric_limits<float>::max();
499  float maxRange = std::numeric_limits<float>::lowest();
500  for (const Acts::SpacePointIndexRange2& range : gridSpacePointRanges) {
501  if (range.first == range.second) {
502  continue;
503  }
504  auto first = selectedSpacePoints[range.first];
505  auto last = selectedSpacePoints[range.second - 1];
506  minRange = std::min(first.zr()[1], minRange);
507  maxRange = std::max(last.zr()[1], maxRange);
508  }
509  return {minRange, maxRange};
510  }();
511 
512  auto bottomDoubletFinder =
513  Acts::DoubletSeedFinder::create(Acts::DoubletSeedFinder::DerivedConfig(
514  m_bottomDoubletFinderCfg, bFieldInZ));
515  auto topDoubletFinder = Acts::DoubletSeedFinder::create(
516  Acts::DoubletSeedFinder::DerivedConfig(m_topDoubletFinderCfg, bFieldInZ));
517  auto tripletFinder = Acts::TripletSeedFinder::create(
518  Acts::TripletSeedFinder::DerivedConfig(m_tripletFinderCfg, bFieldInZ));
519 
520  // variable middle SP radial region of interest
521  const Acts::Range1D<float> rMiddleSpRange(
522  std::floor(rRange.min() / 2) * 2 + m_deltaRMiddleMinSPRange,
523  std::floor(rRange.max() / 2) * 2 - m_deltaRMiddleMaxSPRange);
524 
526  Acts::BroadTripletSeedFilter::Cache filterCache;
527  Acts::TripletSeeder::Cache cache;
528 
529  Acts::BroadTripletSeedFilter filter(m_filterCfg, filterState, filterCache,
530  *m_loggerFilter);
531 
532  std::vector<Acts::SpacePointContainer2::ConstRange> bottomSpRanges;
533  std::optional<Acts::SpacePointContainer2::ConstRange> middleSpRange;
534  std::vector<Acts::SpacePointContainer2::ConstRange> topSpRanges;
535 
536  Acts::SeedContainer2 tmpSeedContainer;
537  tmpSeedContainer.reserve(seedContainer.capacity());
538 
539  for (const auto [bottom, middle, top] : grid.binnedGroup()) {
540  ACTS_VERBOSE("Process middle bin " << middle);
541  if (middle >= gridSpacePointRanges.size()) {
542  ATH_MSG_ERROR("Grid Binned Group returned an unreasonable middle bin");
543  return StatusCode::FAILURE;
544  }
545 
546  bottomSpRanges.clear();
547  topSpRanges.clear();
548 
550  bottom, std::back_inserter(bottomSpRanges),
551  [&](std::size_t b) -> Acts::SpacePointContainer2::ConstRange {
552  return selectedSpacePoints.range(gridSpacePointRanges[b]).asConst();
553  });
554  middleSpRange =
555  selectedSpacePoints.range(gridSpacePointRanges[middle]).asConst();
557  top, std::back_inserter(topSpRanges),
558  [&](std::size_t t) -> Acts::SpacePointContainer2::ConstRange {
559  return selectedSpacePoints.range(gridSpacePointRanges[t]).asConst();
560  });
561 
562  // we compute this here since all middle space point candidates belong to
563  // the same z-bin
564  auto firstMiddleSp = middleSpRange->front();
565  auto radiusRangeForMiddle =
566  retrieveRadiusRangeForMiddle(firstMiddleSp, rMiddleSpRange);
567 
568  ACTS_VERBOSE("Validity range (radius) for the middle space point is ["
569  << radiusRangeForMiddle.first << ", "
570  << radiusRangeForMiddle.second << "]");
571 
572  m_finder->createSeedsFromGroups(
573  cache, *bottomDoubletFinder, *topDoubletFinder, *tripletFinder, filter,
574  selectedSpacePoints, bottomSpRanges, *middleSpRange, topSpRanges,
575  radiusRangeForMiddle, tmpSeedContainer);
576  }
577 
578  // Selection function - temporary implementation
579  // need change from ACTS for final implementation
580  // To be used only on PPP
581  auto selectionFunction =
582  [&filterState](const Acts::MutableSeedProxy2& seed) -> bool {
583  float seedQuality = seed.quality();
584  float bottomQuality =
585  filterState.bestSeedQualityMap.at(seed.spacePointIndices()[0]);
586  float middleQuality =
587  filterState.bestSeedQualityMap.at(seed.spacePointIndices()[1]);
588  float topQuality =
589  filterState.bestSeedQualityMap.at(seed.spacePointIndices()[2]);
590 
591  return bottomQuality <= seedQuality || middleQuality <= seedQuality ||
592  topQuality <= seedQuality;
593  };
594 
595  seedContainer.reserve(tmpSeedContainer.size());
596 
597  // Select the seeds
598  for (Acts::MutableSeedProxy2 seed : tmpSeedContainer) {
599  if (m_seedQualitySelection && !selectionFunction(seed)) {
600  continue;
601  }
602 
603  const xAOD::SpacePoint* bottom =
604  selectedSpacePoints.at(seed.spacePointIndices()[0])
605  .sourceLinks()[0]
606  .get<const xAOD::SpacePoint*>();
607  const xAOD::SpacePoint* middle =
608  selectedSpacePoints.at(seed.spacePointIndices()[1])
609  .sourceLinks()[0]
610  .get<const xAOD::SpacePoint*>();
611  const xAOD::SpacePoint* top =
612  selectedSpacePoints.at(seed.spacePointIndices()[2])
613  .sourceLinks()[0]
614  .get<const xAOD::SpacePoint*>();
615 
616  auto outputSeed = std::make_unique<ActsTrk::Seed>(*bottom, *middle, *top);
617  outputSeed->setVertexZ(seed.vertexZ());
618  outputSeed->setQuality(seed.quality());
619  seedContainer.push_back(std::move(outputSeed));
620  }
621 
622  return StatusCode::SUCCESS;
623 }
624 
625 } // namespace ActsTrk
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
ActsTrk::GridTripletSeedingTool::m_rBinNeighborsTop
Gaudi::Property< std::vector< std::pair< int, int > > > m_rBinNeighborsTop
Definition: GridTripletSeedingTool.h:311
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ActsTrk::GridTripletSeedingTool::m_seedConfForwardZMin
Gaudi::Property< float > m_seedConfForwardZMin
Definition: GridTripletSeedingTool.h:196
ActsTrk::GridTripletSeedingTool::m_deltaRMinBottomSP
Gaudi::Property< float > m_deltaRMinBottomSP
Definition: GridTripletSeedingTool.h:106
beamspotman.r
def r
Definition: beamspotman.py:672
xAOD::SpacePoint_v1::bottomHalfStripLength
float bottomHalfStripLength() const
ActsTrk::GridTripletSeedingTool::m_seedConfirmation
Gaudi::Property< bool > m_seedConfirmation
Definition: GridTripletSeedingTool.h:170
ActsTrk::GridTripletSeedingTool::m_seedConfForwardMinImpact
Gaudi::Property< float > m_seedConfForwardMinImpact
Definition: GridTripletSeedingTool.h:217
xAOD::SpacePoint_v1::stripCenterDistance
ConstVectorMap stripCenterDistance() const
Definition: SpacePoint_v1.cxx:93
ActsTrk::GridTripletSeedingTool::m_seedConfCentralNTopLargeR
Gaudi::Property< size_t > m_seedConfCentralNTopLargeR
Definition: GridTripletSeedingTool.h:181
ActsTrk::GridTripletSeedingTool::initialize
virtual StatusCode initialize() override
Definition: GridTripletSeedingTool.cxx:14
ActsTrk::GridTripletSeedingTool::m_toleranceParam
Gaudi::Property< float > m_toleranceParam
Definition: GridTripletSeedingTool.h:224
ActsTrk::GridTripletSeedingTool::m_deltaRMiddleMaxSPRange
Gaudi::Property< float > m_deltaRMiddleMaxSPRange
Definition: GridTripletSeedingTool.h:168
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
ActsTrk::GridTripletSeedingTool::createSeeds2
StatusCode createSeeds2(const EventContext &ctx, const std::vector< const xAOD::SpacePointContainer * > &spacePointCollections, const Eigen::Vector3f &beamSpotPos, float bFieldInZ, ActsTrk::SeedContainer &seedContainer) const override
Definition: GridTripletSeedingTool.cxx:386
ActsTrk::GridTripletSeedingTool::m_rRangeMiddleSP
Gaudi::Property< std::vector< std::vector< double > > > m_rRangeMiddleSP
Definition: GridTripletSeedingTool.h:149
xAOD::SpacePoint_v1::topStripDirection
ConstVectorMap topStripDirection() const
Definition: SpacePoint_v1.cxx:83
xAOD::SpacePoint_v1::elementIdList
const std::vector< DetectorIDHashType > & elementIdList() const
Returns the IdentifierHash of the spacepoint (corresponds to the detector element IdentifierHash)
Definition: SpacePoint_v1.cxx:14
ActsTrk::GridTripletSeedingTool::m_maxSeedsPerSpM
Gaudi::Property< int > m_maxSeedsPerSpM
Definition: GridTripletSeedingTool.h:131
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
ActsTrk::GridTripletSeedingTool::m_zBinEdges
Gaudi::Property< std::vector< float > > m_zBinEdges
Definition: GridTripletSeedingTool.h:63
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
ActsTrk::GridTripletSeedingTool::m_gridCfg
Acts::CylindricalSpacePointGrid2::Config m_gridCfg
Definition: GridTripletSeedingTool.h:337
ActsTrk::GridTripletSeedingTool::m_collisionRegionMin
Gaudi::Property< float > m_collisionRegionMin
Definition: GridTripletSeedingTool.h:115
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
xAOD::SpacePoint_v1::topHalfStripLength
float topHalfStripLength() const
Return details.
ActsTrk::GridTripletSeedingTool::m_deltaRMax
Gaudi::Property< float > m_deltaRMax
Definition: GridTripletSeedingTool.h:56
ActsTrk::GridTripletSeedingTool::m_phiMax
Gaudi::Property< float > m_phiMax
Definition: GridTripletSeedingTool.h:230
ActsTrk::GridTripletSeedingTool::retrieveRadiusRangeForMiddle
std::pair< float, float > retrieveRadiusRangeForMiddle(const Acts::ConstSpacePointProxy2 &spM, const Acts::Range1D< float > &rMiddleSpRange) const
Definition: GridTripletSeedingTool.cxx:366
ActsTrk::GridTripletSeedingTool::m_numSeedIncrement
Gaudi::Property< float > m_numSeedIncrement
Definition: GridTripletSeedingTool.h:255
ActsTrk::GridTripletSeedingTool::m_maxPtScattering
Gaudi::Property< float > m_maxPtScattering
Definition: GridTripletSeedingTool.h:124
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
ActsTrk::GridTripletSeedingTool::m_sigmaScattering
Gaudi::Property< float > m_sigmaScattering
Definition: GridTripletSeedingTool.h:121
ActsTrk::GridTripletSeedingTool::m_maxPhiBins
Gaudi::Property< int > m_maxPhiBins
Definition: GridTripletSeedingTool.h:87
ActsTrk::GridTripletSeedingTool::m_gridRMax
Gaudi::Property< float > m_gridRMax
Definition: GridTripletSeedingTool.h:74
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
xAOD::identifier
identifier
Definition: UncalibratedMeasurement_v1.cxx:15
ActsTrk::GridTripletSeedingTool::m_rMin
Gaudi::Property< float > m_rMin
Definition: GridTripletSeedingTool.h:232
ActsTrk::GridTripletSeedingTool::m_useDetailedDoubleMeasurementInfo
Gaudi::Property< bool > m_useDetailedDoubleMeasurementInfo
Definition: GridTripletSeedingTool.h:220
ActsTrk::GridTripletSeedingTool::m_seedConfCentralMaxZOrigin
Gaudi::Property< float > m_seedConfCentralMaxZOrigin
Definition: GridTripletSeedingTool.h:190
x
#define x
xAOD::SpacePoint_v1::z
float z() const
ActsTrk::GridTripletSeedingTool::m_zMax
Gaudi::Property< float > m_zMax
Definition: GridTripletSeedingTool.h:54
ActsTrk::GridTripletSeedingTool::m_seedConfForwardRMax
Gaudi::Property< float > m_seedConfForwardRMax
Definition: GridTripletSeedingTool.h:202
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
ActsTrk::GridTripletSeedingTool::m_compatSeedWeight
Gaudi::Property< float > m_compatSeedWeight
Definition: GridTripletSeedingTool.h:245
ActsTrk::GridTripletSeedingTool::m_seedQualitySelection
Gaudi::Property< bool > m_seedQualitySelection
Definition: GridTripletSeedingTool.h:42
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:360
ActsTrk::GridTripletSeedingTool::doubletSelectionFunction
bool doubletSelectionFunction(const Acts::ConstSpacePointProxy2 &middle, const Acts::ConstSpacePointProxy2 &other, float cotTheta, bool isBottomCandidate) const
Definition: GridTripletSeedingTool.cxx:335
xAOD::SpacePoint_v1::bottomStripDirection
ConstVectorMap bottomStripDirection() const
Definition: SpacePoint_v1.cxx:88
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
ActsTrk::GridTripletSeedingTool::m_deltaRMaxBottomSP
Gaudi::Property< float > m_deltaRMaxBottomSP
Definition: GridTripletSeedingTool.h:109
covarianceTool.filter
filter
Definition: covarianceTool.py:514
ActsTrk::GridTripletSeedingTool::m_zOriginWeightFactor
Gaudi::Property< float > m_zOriginWeightFactor
Definition: GridTripletSeedingTool.h:244
ActsTrk::GridTripletSeedingTool::m_bottomDoubletFinderCfg
Acts::DoubletSeedFinder::Config m_bottomDoubletFinderCfg
Definition: GridTripletSeedingTool.h:338
makeActsAthenaLogger
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
Definition: Tracking/Acts/ActsInterop/src/Logger.cxx:64
ActsTrk::GridTripletSeedingTool::m_maxSeedsPerSpMConf
Gaudi::Property< std::size_t > m_maxSeedsPerSpMConf
Definition: GridTripletSeedingTool.h:261
ActsTrk::GridTripletSeedingTool::m_useDeltaRorTopRadius
Gaudi::Property< bool > m_useDeltaRorTopRadius
Definition: GridTripletSeedingTool.h:268
ActsTrk::GridTripletSeedingTool::m_minPt
Gaudi::Property< float > m_minPt
Definition: GridTripletSeedingTool.h:48
PixelID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be pixel id, otherwise answer is not accurate. Use SiliconID for g...
Definition: PixelID.h:601
ActsTrk::GridTripletSeedingTool::m_compatSeedLimit
Gaudi::Property< std::size_t > m_compatSeedLimit
Definition: GridTripletSeedingTool.h:249
ActsTrk::GridTripletSeedingTool::m_deltaRMaxTopSP
Gaudi::Property< float > m_deltaRMaxTopSP
Definition: GridTripletSeedingTool.h:103
ActsTrk::GridTripletSeedingTool::m_tripletFinderCfg
Acts::TripletSeedFinder::Config m_tripletFinderCfg
Definition: GridTripletSeedingTool.h:340
ActsTrk::GridTripletSeedingTool::m_seedConfForwardMinBottomRadius
Gaudi::Property< float > m_seedConfForwardMinBottomRadius
Definition: GridTripletSeedingTool.h:211
ActsTrk::GridTripletSeedingTool::m_seedConfirmationInFilter
Gaudi::Property< bool > m_seedConfirmationInFilter
Definition: GridTripletSeedingTool.h:259
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
ActsTrk::GridTripletSeedingTool::m_phiMin
Gaudi::Property< float > m_phiMin
Definition: GridTripletSeedingTool.h:228
ActsTrk::GridTripletSeedingTool::m_gridPhiMin
Gaudi::Property< float > m_gridPhiMin
Definition: GridTripletSeedingTool.h:77
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ActsTrk::GridTripletSeedingTool::m_numPhiNeighbors
Gaudi::Property< int > m_numPhiNeighbors
Definition: GridTripletSeedingTool.h:321
xAOD::SpacePoint_v1::varianceZ
float varianceZ() const
MuonR4::State
CalibratedSpacePoint::State State
Definition: SpacePointCalibrator.cxx:42
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::SpacePoint_v1::varianceR
float varianceR() const
Returns the variances.
ActsTrk::GridTripletSeedingTool::m_seedConfCentralZMin
Gaudi::Property< float > m_seedConfCentralZMin
Definition: GridTripletSeedingTool.h:172
ActsTrk::GridTripletSeedingTool::m_loggerFilter
std::unique_ptr< const Acts::Logger > m_loggerFilter
Definition: GridTripletSeedingTool.h:347
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
ActsTrk::GridTripletSeedingTool::m_seedConfCentralNTopSmallR
Gaudi::Property< size_t > m_seedConfCentralNTopSmallR
Definition: GridTripletSeedingTool.h:184
F600IntegrationConfig.spacePoints
spacePoints
Definition: F600IntegrationConfig.py:122
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
ActsTrk::GridTripletSeedingTool::m_seedConfForwardZMax
Gaudi::Property< float > m_seedConfForwardZMax
Definition: GridTripletSeedingTool.h:199
DataVector::capacity
size_type capacity() const noexcept
Returns the total number of elements that the collection can hold before needing to allocate more mem...
ActsTrk::GridTripletSeedingTool::m_rBinNeighborsBottom
Gaudi::Property< std::vector< std::pair< int, int > > > m_rBinNeighborsBottom
Definition: GridTripletSeedingTool.h:316
ActsTrk::GridTripletSeedingTool::m_interactionPointCut
Gaudi::Property< bool > m_interactionPointCut
Definition: GridTripletSeedingTool.h:136
ActsTrk::GridTripletSeedingTool::m_deltaRMiddleMinSPRange
Gaudi::Property< float > m_deltaRMiddleMinSPRange
Definition: GridTripletSeedingTool.h:166
ActsTrk::GridTripletSeedingTool::m_expCutrMin
Gaudi::Property< float > m_expCutrMin
Definition: GridTripletSeedingTool.h:333
ActsTrk::GridTripletSeedingTool::m_rMax
Gaudi::Property< float > m_rMax
Definition: GridTripletSeedingTool.h:91
ActsTrk::GridTripletSeedingTool::m_impactMax
Gaudi::Property< float > m_impactMax
Definition: GridTripletSeedingTool.h:60
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
ActsTrk::GridTripletSeedingTool::m_collisionRegionMax
Gaudi::Property< float > m_collisionRegionMax
Definition: GridTripletSeedingTool.h:118
ActsTrk::GridTripletSeedingTool::m_seedConfForwardNTopLargeR
Gaudi::Property< size_t > m_seedConfForwardNTopLargeR
Definition: GridTripletSeedingTool.h:205
ActsTrk::GridTripletSeedingTool::m_deltaRMinTopSP
Gaudi::Property< float > m_deltaRMinTopSP
Definition: GridTripletSeedingTool.h:100
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
ActsTrk::GridTripletSeedingTool::m_deltaInvHelixDiameter
Gaudi::Property< float > m_deltaInvHelixDiameter
Definition: GridTripletSeedingTool.h:271
ActsTrk::GridTripletSeedingTool::m_maxQualitySeedsPerSpMConf
Gaudi::Property< std::size_t > m_maxQualitySeedsPerSpMConf
Definition: GridTripletSeedingTool.h:264
ActsTrk::GridTripletSeedingTool::m_topDoubletFinderCfg
Acts::DoubletSeedFinder::Config m_topDoubletFinderCfg
Definition: GridTripletSeedingTool.h:339
ActsTrk::GridTripletSeedingTool::m_seedConfCentralRMax
Gaudi::Property< float > m_seedConfCentralRMax
Definition: GridTripletSeedingTool.h:178
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
ActsTrk::GridTripletSeedingTool::m_impactWeightFactor
Gaudi::Property< float > m_impactWeightFactor
Definition: GridTripletSeedingTool.h:240
ActsTrk::GridTripletSeedingTool::m_gridPhiMax
Gaudi::Property< float > m_gridPhiMax
Definition: GridTripletSeedingTool.h:80
xAOD::SpacePoint_v1::y
float y() const
ActsTrk::GridTripletSeedingTool::m_seedConfForwardNTopSmallR
Gaudi::Property< size_t > m_seedConfForwardNTopSmallR
Definition: GridTripletSeedingTool.h:208
ActsTrk::GridTripletSeedingTool::m_seedConfCentralMinImpact
Gaudi::Property< float > m_seedConfCentralMinImpact
Definition: GridTripletSeedingTool.h:193
ActsTrk::GridTripletSeedingTool::m_seedWeightIncrement
Gaudi::Property< float > m_seedWeightIncrement
Definition: GridTripletSeedingTool.h:253
ActsTrk::GridTripletSeedingTool::m_seedConfCentralMinBottomRadius
Gaudi::Property< float > m_seedConfCentralMinBottomRadius
Definition: GridTripletSeedingTool.h:187
ActsTrk::GridTripletSeedingTool::m_finder
std::optional< Acts::TripletSeeder > m_finder
Definition: GridTripletSeedingTool.h:343
ActsTrk::GridTripletSeedingTool::m_zBinsCustomLooping
Gaudi::Property< std::vector< size_t > > m_zBinsCustomLooping
Definition: GridTripletSeedingTool.h:139
ActsTrk::GridTripletSeedingTool::m_useVariableMiddleSPRange
Gaudi::Property< bool > m_useVariableMiddleSPRange
Definition: GridTripletSeedingTool.h:146
ActsTrk::GridTripletSeedingTool::m_zBinNeighborsTop
Gaudi::Property< std::vector< std::pair< int, int > > > m_zBinNeighborsTop
Definition: GridTripletSeedingTool.h:277
a
TList * a
Definition: liststreamerinfos.cxx:10
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
y
#define y
ActsTrk::GridTripletSeedingTool::m_seedConfCentralZMax
Gaudi::Property< float > m_seedConfCentralZMax
Definition: GridTripletSeedingTool.h:175
ActsTrk::GridTripletSeedingTool::m_seedConfForwardMaxZOrigin
Gaudi::Property< float > m_seedConfForwardMaxZOrigin
Definition: GridTripletSeedingTool.h:214
ActsTrk::GridTripletSeedingTool::spacePointSelectionFunction
bool spacePointSelectionFunction(const xAOD::SpacePoint *sp, float r) const
Definition: GridTripletSeedingTool.cxx:286
ActsTrk::GridTripletSeedingTool::m_zBinNeighborsBottom
Gaudi::Property< std::vector< std::pair< int, int > > > m_zBinNeighborsBottom
Definition: GridTripletSeedingTool.h:294
DeMoScan.first
bool first
Definition: DeMoScan.py:534
xAOD::SpacePoint_v1::x
float x() const
ActsTrk::GridTripletSeedingTool::m_rBinEdges
Gaudi::Property< std::vector< float > > m_rBinEdges
Definition: GridTripletSeedingTool.h:69
ActsTrk::GridTripletSeedingTool::GridTripletSeedingTool
GridTripletSeedingTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: GridTripletSeedingTool.cxx:9
ActsTrk::GridTripletSeedingTool::m_rAlign
Gaudi::Property< float > m_rAlign
Definition: GridTripletSeedingTool.h:235
TRT::Track::cotTheta
@ cotTheta
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:65
ActsTrk::GridTripletSeedingTool::m_zMin
Gaudi::Property< float > m_zMin
Definition: GridTripletSeedingTool.h:52
ActsTrk::GridTripletSeedingTool::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: GridTripletSeedingTool.h:346
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MdtCalibInput.h:31
ActsTrk::GridTripletSeedingTool::m_deltaZMax
Gaudi::Property< float > m_deltaZMax
Definition: GridTripletSeedingTool.h:112
ActsTrk::GridTripletSeedingTool::m_zAlign
Gaudi::Property< float > m_zAlign
Definition: GridTripletSeedingTool.h:233
top
@ top
Definition: TruthClasses.h:64
ActsTrk::GridTripletSeedingTool::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: GridTripletSeedingTool.h:352
GridTripletSeedingTool.h
ActsTrk::GridTripletSeedingTool::m_pixelId
const PixelID * m_pixelId
Definition: GridTripletSeedingTool.h:349
ActsTrk::GridTripletSeedingTool::m_cotThetaMax
Gaudi::Property< float > m_cotThetaMax
Definition: GridTripletSeedingTool.h:50
ActsTrk::GridTripletSeedingTool::m_useExperimentCuts
Gaudi::Property< bool > m_useExperimentCuts
Definition: GridTripletSeedingTool.h:326
xAOD::SpacePoint_v1::topStripCenter
ConstVectorMap topStripCenter() const
Definition: SpacePoint_v1.cxx:98
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
ActsTrk::GridTripletSeedingTool::m_phiBinDeflectionCoverage
Gaudi::Property< int > m_phiBinDeflectionCoverage
Definition: GridTripletSeedingTool.h:83
ActsTrk::GridTripletSeedingTool::m_radLengthPerSeed
Gaudi::Property< float > m_radLengthPerSeed
Definition: GridTripletSeedingTool.h:127
ActsTrk::GridTripletSeedingTool::m_filterCfg
Acts::BroadTripletSeedFilter::Config m_filterCfg
Definition: GridTripletSeedingTool.h:341
ActsTrk::GridTripletSeedingTool::m_sigmaError
Gaudi::Property< float > m_sigmaError
Definition: GridTripletSeedingTool.h:237
ActsTrk::GridTripletSeedingTool::m_rBinsCustomLooping
Gaudi::Property< std::vector< std::size_t > > m_rBinsCustomLooping
Definition: GridTripletSeedingTool.h:144
ActsTrk::GridTripletSeedingTool::m_deltaRMin
Gaudi::Property< float > m_deltaRMin
Definition: GridTripletSeedingTool.h:96
Identifier
Definition: IdentifierFieldParser.cxx:14