ATLAS Offline Software
Loading...
Searching...
No Matches
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
7namespace 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);
28 ATH_MSG_DEBUG(" " << m_zMin);
29 ATH_MSG_DEBUG(" " << m_zMax);
37
38 ATH_MSG_DEBUG(" * Used by seed finder config:");
39 ATH_MSG_DEBUG(" " << m_minPt);
42 ATH_MSG_DEBUG(" " << m_zMin);
43 ATH_MSG_DEBUG(" " << m_zMax);
45 ATH_MSG_DEBUG(" " << m_rMax);
60 }
72 } else if (not m_rRangeMiddleSP.empty())
92 }
95 ATH_MSG_DEBUG(" " << m_phiMin);
96 ATH_MSG_DEBUG(" " << m_phiMax);
97 ATH_MSG_DEBUG(" " << m_rMin);
98 ATH_MSG_DEBUG(" " << m_zAlign);
99 ATH_MSG_DEBUG(" " << m_rAlign);
101
102 ATH_MSG_DEBUG(" * Used by seed filter config:");
126 }
133
134 // Make the logger && Propagate to ACTS routines
135 m_logger = makeActsAthenaLogger(this, "Acts");
136
137 if (m_zBinEdges.size() - 1 != m_zBinNeighborsTop.size() &&
138 not m_zBinNeighborsTop.empty()) {
139 ATH_MSG_ERROR("Inconsistent config zBinNeighborsTop");
140 return StatusCode::FAILURE;
141 }
142
143 if (m_zBinEdges.size() - 1 != m_zBinNeighborsBottom.size() &&
144 not m_zBinNeighborsBottom.empty()) {
145 ATH_MSG_ERROR("Inconsistent config zBinNeighborsBottom");
146 return StatusCode::FAILURE;
147 }
148
149 if (m_rBinEdges.size() - 1 != m_rBinNeighborsTop.size() &&
150 not m_rBinNeighborsTop.empty()) {
151 ATH_MSG_ERROR("Inconsistent config rBinNeighborsTop");
152 return StatusCode::FAILURE;
153 }
154
155 if (m_rBinEdges.size() - 1 != m_rBinNeighborsBottom.size() &&
156 not m_rBinNeighborsBottom.empty()) {
157 ATH_MSG_ERROR("Inconsistent config rBinNeighborsBottom");
158 return StatusCode::FAILURE;
159 }
160
161 if (m_zBinsCustomLooping.size() != 0) {
162 // zBinsCustomLooping can contain a number of elements <= to the total
163 // number of bin in zBinEdges
164 for (std::size_t i : m_zBinsCustomLooping) {
165 if (i >= m_zBinEdges.size()) {
167 "Inconsistent config zBinsCustomLooping contains bins that are not "
168 "in zBinEdges");
169 return StatusCode::FAILURE;
170 }
171 }
172 }
173
174 if (m_rBinsCustomLooping.size() != 0) {
175 for (std::size_t i : m_rBinsCustomLooping) {
176 if (i >= m_rBinEdges.size()) {
178 "Inconsistent config rBinsCustomLooping contains bins that are not "
179 "in rBinEdges");
180 return StatusCode::FAILURE;
181 }
182 }
183 }
184
185 m_gridCfg.minPt = m_minPt;
186 m_gridCfg.rMin = 0;
187 m_gridCfg.rMax = m_gridRMax;
188 m_gridCfg.zMin = m_zMin;
189 m_gridCfg.zMax = m_zMax;
190 m_gridCfg.deltaRMax = m_deltaRMax;
191 m_gridCfg.cotThetaMax = m_cotThetaMax;
192 m_gridCfg.impactMax = m_impactMax;
193 m_gridCfg.phiMin = m_gridPhiMin;
194 m_gridCfg.phiMax = m_gridPhiMax;
195 m_gridCfg.phiBinDeflectionCoverage = m_phiBinDeflectionCoverage;
196 m_gridCfg.maxPhiBins = m_maxPhiBins;
197 m_gridCfg.zBinEdges = m_zBinEdges;
198 m_gridCfg.rBinEdges = m_rBinEdges;
199 m_gridCfg.bFieldInZ = 0; // will be set later
200 m_gridCfg.bottomBinFinder = Acts::GridBinFinder<3ul>(
202 m_rBinNeighborsBottom.value());
203 m_gridCfg.topBinFinder = Acts::GridBinFinder<3ul>(m_numPhiNeighbors.value(),
204 m_zBinNeighborsTop.value(),
205 m_rBinNeighborsTop.value());
206 m_gridCfg.navigation[0ul] = {};
207 m_gridCfg.navigation[1ul] = m_zBinsCustomLooping;
208 m_gridCfg.navigation[2ul] = m_rBinsCustomLooping;
209
210 m_bottomDoubletFinderCfg.spacePointsSortedByRadius = true;
211 m_bottomDoubletFinderCfg.candidateDirection = Acts::Direction::Backward();
222 m_bottomDoubletFinderCfg.helixCutTolerance = 1.;
224 m_bottomDoubletFinderCfg.experimentCuts
226 this);
227 }
228
229 m_topDoubletFinderCfg = m_bottomDoubletFinderCfg; // copy the bottom cuts
230 m_topDoubletFinderCfg.candidateDirection = Acts::Direction::Forward();
233
235 m_tripletFinderCfg.sortedByCotTheta = true;
237 m_tripletFinderCfg.sigmaScattering = m_sigmaScattering;
238 m_tripletFinderCfg.radLengthPerSeed = m_radLengthPerSeed;
240 m_tripletFinderCfg.helixCutTolerance = 1.;
241 m_tripletFinderCfg.toleranceParam = m_toleranceParam;
243 m_filterCfg.deltaInvHelixDiameter = m_deltaInvHelixDiameter;
244 m_filterCfg.deltaRMin = m_deltaRMin;
245 m_filterCfg.compatSeedWeight = m_compatSeedWeight;
246 m_filterCfg.impactWeightFactor = m_impactWeightFactor;
247 m_filterCfg.zOriginWeightFactor = m_zOriginWeightFactor;
248 m_filterCfg.maxSeedsPerSpM = m_maxSeedsPerSpM;
249 m_filterCfg.compatSeedLimit = m_compatSeedLimit;
250 m_filterCfg.seedWeightIncrement = m_seedWeightIncrement;
251 m_filterCfg.numSeedIncrement = m_numSeedIncrement;
252 m_filterCfg.seedConfirmation = m_seedConfirmationInFilter;
253 m_filterCfg.centralSeedConfirmationRange.zMinSeedConf = m_seedConfCentralZMin;
254 m_filterCfg.centralSeedConfirmationRange.zMaxSeedConf = m_seedConfCentralZMax;
255 m_filterCfg.centralSeedConfirmationRange.rMaxSeedConf = m_seedConfCentralRMax;
256 m_filterCfg.centralSeedConfirmationRange.nTopForLargeR =
258 m_filterCfg.centralSeedConfirmationRange.nTopForSmallR =
260 m_filterCfg.centralSeedConfirmationRange.seedConfMinBottomRadius =
262 m_filterCfg.centralSeedConfirmationRange.seedConfMaxZOrigin =
264 m_filterCfg.centralSeedConfirmationRange.minImpactSeedConf =
266 m_filterCfg.forwardSeedConfirmationRange.zMinSeedConf = m_seedConfForwardZMin;
267 m_filterCfg.forwardSeedConfirmationRange.zMaxSeedConf = m_seedConfForwardZMax;
268 m_filterCfg.forwardSeedConfirmationRange.rMaxSeedConf = m_seedConfForwardRMax;
269 m_filterCfg.forwardSeedConfirmationRange.nTopForLargeR =
271 m_filterCfg.forwardSeedConfirmationRange.nTopForSmallR =
273 m_filterCfg.forwardSeedConfirmationRange.seedConfMinBottomRadius =
275 m_filterCfg.forwardSeedConfirmationRange.seedConfMaxZOrigin =
277 m_filterCfg.forwardSeedConfirmationRange.minImpactSeedConf =
279 m_filterCfg.maxSeedsPerSpMConf = m_maxSeedsPerSpMConf;
280 m_filterCfg.maxQualitySeedsPerSpMConf = m_maxQualitySeedsPerSpMConf;
281 m_filterCfg.useDeltaRinsteadOfTopRadius = m_useDeltaRorTopRadius;
282 m_filterCfg.absDeltaEtaWeightFactor = m_absDeltaEtaWeightFactor;
283 m_filterCfg.absDeltaEtaMinImpact = m_absDeltaEtaMinImpact;
284
285
286 m_finder = Acts::TripletSeeder(logger().cloneWithSuffix("Finder"));
287
288 m_loggerFilter = logger().cloneWithSuffix("Filter");
289
290 ATH_CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
291
292 return StatusCode::SUCCESS;
293}
294
296 const xAOD::SpacePoint* sp, float r) const {
297 float zabs = std::abs(sp->z());
298 float absCotTheta = zabs / r;
299
300 // checking configuration to remove pixel space points
301 Identifier identifier = m_pixelId->wafer_id(sp->elementIdList().at(0));
302 if (m_pixelId->is_barrel(identifier)) {
303 if (zabs > 200 && r < 40)
304 return false;
305
306 return true;
307 }
308
309 // Inner layers
310 // Below 1.20 - accept all
311 static constexpr float cotThetaEta120 = 1.5095;
312 if (absCotTheta < cotThetaEta120)
313 return true;
314
315 // Below 3.40 - remove if too close to beamline
316 static constexpr float cotThetaEta340 = 14.9654;
317 if (absCotTheta < cotThetaEta340 && r < m_expCutrMin)
318 return false;
319
320 // Outer layers
321 // Above 2.20
322 static constexpr float cotThetaEta220 = 4.4571;
323 if (absCotTheta > cotThetaEta220 && r > 260.)
324 return false;
325
326 // Above 2.60
327 static constexpr float cotThetaEta260 = 6.6947;
328 if (absCotTheta > cotThetaEta260 && r > 200.)
329 return false;
330
331 // Above 3.20
332 static constexpr float cotThetaEta320 = 12.2459;
333 if (absCotTheta > cotThetaEta320 && r > 140.)
334 return false;
335
336 // Above 4.00
337 static constexpr float cotThetaEta400 = 27.2899;
338 if (absCotTheta > cotThetaEta400)
339 return false;
340
341 return true;
342}
343
345 const Acts::ConstSpacePointProxy2& middle,
346 const Acts::ConstSpacePointProxy2& other, float cotTheta,
347 bool isBottomCandidate) const {
348 // We remove some doublets that have the middle space point in some specific
349 // areas This should eventually be moved inside ACTS and allow a veto
350 // mechanism according to the user desire. As of now we cannot really do this
351 // since we define a range of validity of the middle candidate, and if we want
352 // to veto some sub-regions inside it, we need to do it here.
353 if (std::abs(middle.zr()[0]) > 1500 and middle.zr()[1] > 100 and
354 middle.zr()[1] < 150) {
355 return false;
356 }
357
358 // We remove here some seeds, in case the bottom space point radius is
359 // too small (i.e. < fastTrackingRMin)
360
361 // This operation is done only within a specific eta window
362 // Instead of eta we use the doublet cottheta
363 static constexpr float cotThetaEta120 = 1.5095;
364 static constexpr float cotThetaEta360 = 18.2855;
365
366 float absCotTheta = std::abs(cotTheta);
367 if (isBottomCandidate && other.zr()[1] < m_expCutrMin &&
368 absCotTheta > cotThetaEta120 && absCotTheta < cotThetaEta360) {
369 return false;
370 }
371
372 return true;
373}
374
376 const Acts::ConstSpacePointProxy2& spM,
377 const Acts::Range1D<float>& rMiddleSpRange) const {
379 return {rMiddleSpRange.min(), rMiddleSpRange.max()};
380 }
381 if (m_rRangeMiddleSP.empty()) {
382 throw std::runtime_error(
383 "m_rRangeMiddleSP is empty, please check the configuration.");
384 }
385
386 // get zBin position of the middle SP
387 auto pVal =
388 std::lower_bound(m_zBinEdges.begin(), m_zBinEdges.end(), spM.zr()[0]);
389 int zBin = std::distance(m_zBinEdges.begin(), pVal);
390 // protects against zM at the limit of zBinEdges
391 zBin == 0 ? zBin : --zBin;
392 return {m_rRangeMiddleSP[zBin][0], m_rRangeMiddleSP[zBin][1]};
393}
394
396 const EventContext& ctx,
397 const std::vector<const xAOD::SpacePointContainer*>& spacePointCollections,
398 const Eigen::Vector3f& beamSpotPos, float bFieldInZ,
399 ActsTrk::SeedContainer& seedContainer) const {
400 (void)ctx;
401
402 auto gridCfg = m_gridCfg;
403 gridCfg.bFieldInZ = bFieldInZ;
404
405 Acts::CylindricalSpacePointGrid2 grid(gridCfg,
406 logger().cloneWithSuffix("Grid"));
407
408 std::size_t totalSpacePoints = 0;
409 for (const xAOD::SpacePointContainer* spacePoints : spacePointCollections) {
410 totalSpacePoints += spacePoints->size();
411 }
412
413 std::vector<const xAOD::SpacePoint*> selectedXAODSpacePoints;
414 std::vector<float> selectedSpacePointsR;
415 selectedXAODSpacePoints.reserve(totalSpacePoints);
416 selectedSpacePointsR.reserve(totalSpacePoints);
417
418 for (const xAOD::SpacePointContainer* spacePoints : spacePointCollections) {
419 for (const xAOD::SpacePoint* sp : *spacePoints) {
420 float x = static_cast<float>(sp->x() - beamSpotPos[0]);
421 float y = static_cast<float>(sp->y() - beamSpotPos[1]);
422 float z = static_cast<float>(sp->z());
423 float r = std::hypot(x, y);
424 float phi = std::atan2(y, x);
425
427 continue;
428 }
429
430 grid.insert(selectedXAODSpacePoints.size(), phi, z, r);
431 selectedXAODSpacePoints.push_back(sp);
432 selectedSpacePointsR.push_back(r);
433 }
434 }
435
436 for (std::size_t i = 0; i < grid.numberOfBins(); ++i) {
437 std::ranges::sort(
438 grid.at(i), [&](Acts::SpacePointIndex2 a, Acts::SpacePointIndex2 b) {
439 return selectedSpacePointsR[a] < selectedSpacePointsR[b];
440 });
441 }
442
443 Acts::SpacePointContainer2 selectedSpacePoints;
444 selectedSpacePoints.createColumns(
445 Acts::SpacePointColumns::CopyFromIndex |
446 Acts::SpacePointColumns::PackedXY | Acts::SpacePointColumns::PackedZR |
447 Acts::SpacePointColumns::VarianceZ | Acts::SpacePointColumns::VarianceR);
449 selectedSpacePoints.createColumns(Acts::SpacePointColumns::Strip);
450 }
451 selectedSpacePoints.reserve(grid.numberOfSpacePoints());
452 std::vector<Acts::SpacePointIndexRange2> gridSpacePointRanges;
453 gridSpacePointRanges.reserve(grid.numberOfBins());
454 for (std::size_t i = 0; i < grid.numberOfBins(); ++i) {
455 std::uint32_t begin = selectedSpacePoints.size();
456 for (const Acts::SpacePointIndex2 spIndex : grid.at(i)) {
457 const xAOD::SpacePoint* sp = selectedXAODSpacePoints[spIndex];
458
459 auto newSp = selectedSpacePoints.createSpacePoint();
460 newSp.copyFromIndex() = spIndex;
461 newSp.xy() =
462 std::array<float, 2>{static_cast<float>(sp->x() - beamSpotPos[0]),
463 static_cast<float>(sp->y() - beamSpotPos[1])};
464 newSp.zr() = std::array<float, 2>{static_cast<float>(sp->z()),
465 selectedSpacePointsR[spIndex]};
466 newSp.varianceZ() = static_cast<float>(sp->varianceZ());
467 newSp.varianceR() = static_cast<float>(sp->varianceR());
469 Eigen::Vector3f topStripVector =
470 sp->topHalfStripLength() * sp->topStripDirection();
471 Eigen::Vector3f bottomStripVector =
472 sp->bottomHalfStripLength() * sp->bottomStripDirection();
473 Eigen::Vector3f stripCenterDistance = sp->stripCenterDistance();
474 Eigen::Vector3f topStripCenter = sp->topStripCenter();
475
476 newSp.topStripVector() = std::array<float, 3>{
477 topStripVector.x(), topStripVector.y(), topStripVector.z()};
478 newSp.bottomStripVector() =
479 std::array<float, 3>{bottomStripVector.x(), bottomStripVector.y(),
480 bottomStripVector.z()};
481 newSp.stripCenterDistance() = std::array<float, 3>{
482 stripCenterDistance.x(), stripCenterDistance.y(),
483 stripCenterDistance.z()};
484 newSp.topStripCenter() = std::array<float, 3>{
485 topStripCenter.x(), topStripCenter.y(), topStripCenter.z()};
486 }
487 }
488 std::uint32_t end = selectedSpacePoints.size();
489 gridSpacePointRanges.emplace_back(begin, end);
490 }
491
492 // clear temporary
493 selectedSpacePointsR = {};
494
495 ACTS_VERBOSE("Number of space points after selection "
496 << selectedSpacePoints.size() << " out of " << totalSpacePoints);
497
498 // Compute radius range. We rely on the fact the grid is storing the proxies
499 // with a sorting in the radius
500 const Acts::Range1D<float> rRange = [&]() -> Acts::Range1D<float> {
501 float minRange = std::numeric_limits<float>::max();
502 float maxRange = std::numeric_limits<float>::lowest();
503 for (const Acts::SpacePointIndexRange2& range : gridSpacePointRanges) {
504 if (range.first == range.second) {
505 continue;
506 }
507 auto first = selectedSpacePoints[range.first];
508 auto last = selectedSpacePoints[range.second - 1];
509 minRange = std::min(first.zr()[1], minRange);
510 maxRange = std::max(last.zr()[1], maxRange);
511 }
512 return {minRange, maxRange};
513 }();
514
515 auto bottomDoubletFinderCfg = m_bottomDoubletFinderCfg;
516
519 ATH_CHECK(inputHoughVtx.isValid());
520
521 if(inputHoughVtx->size() == 1) {
522 bottomDoubletFinderCfg.collisionRegionMin = inputHoughVtx->at(0)->z() - m_hvCollisionRegionTolerance;
523 bottomDoubletFinderCfg.collisionRegionMax = inputHoughVtx->at(0)->z() + m_hvCollisionRegionTolerance;
524 }
525 // in case HoughVtx is not found, keep the original collision region
526 }
527
528 auto bottomDoubletFinder =
529 Acts::DoubletSeedFinder::create(Acts::DoubletSeedFinder::DerivedConfig(
530 bottomDoubletFinderCfg, bFieldInZ));
531 auto topDoubletFinder = Acts::DoubletSeedFinder::create(
532 Acts::DoubletSeedFinder::DerivedConfig(m_topDoubletFinderCfg, bFieldInZ));
533 auto tripletFinder = Acts::TripletSeedFinder::create(
534 Acts::TripletSeedFinder::DerivedConfig(m_tripletFinderCfg, bFieldInZ));
535
536 // variable middle SP radial region of interest
537 const Acts::Range1D<float> rMiddleSpRange(
538 std::floor(rRange.min() / 2) * 2 + m_deltaRMiddleMinSPRange,
539 std::floor(rRange.max() / 2) * 2 - m_deltaRMiddleMaxSPRange);
540
541 Acts::BroadTripletSeedFilter::State filterState;
542 Acts::BroadTripletSeedFilter::Cache filterCache;
543 Acts::TripletSeeder::Cache cache;
544
545 Acts::BroadTripletSeedFilter filter(m_filterCfg, filterState, filterCache,
547
548 std::vector<Acts::SpacePointContainer2::ConstRange> bottomSpRanges;
549 std::optional<Acts::SpacePointContainer2::ConstRange> middleSpRange;
550 std::vector<Acts::SpacePointContainer2::ConstRange> topSpRanges;
551
552 Acts::SeedContainer2 tmpSeedContainer;
553
554 for (const auto [bottom, middle, top] : grid.binnedGroup()) {
555 ACTS_VERBOSE("Process middle bin " << middle);
556 if (middle >= gridSpacePointRanges.size()) {
557 ATH_MSG_ERROR("Grid Binned Group returned an unreasonable middle bin");
558 return StatusCode::FAILURE;
559 }
560
561 bottomSpRanges.clear();
562 topSpRanges.clear();
563
564 std::ranges::transform(
565 bottom, std::back_inserter(bottomSpRanges),
566 [&](std::size_t b) -> Acts::SpacePointContainer2::ConstRange {
567 return selectedSpacePoints.range(gridSpacePointRanges[b]).asConst();
568 });
569 middleSpRange =
570 selectedSpacePoints.range(gridSpacePointRanges[middle]).asConst();
571 std::ranges::transform(
572 top, std::back_inserter(topSpRanges),
573 [&](std::size_t t) -> Acts::SpacePointContainer2::ConstRange {
574 return selectedSpacePoints.range(gridSpacePointRanges[t]).asConst();
575 });
576
577 // we compute this here since all middle space point candidates belong to
578 // the same z-bin
579 auto firstMiddleSp = middleSpRange->front();
580 auto radiusRangeForMiddle =
581 retrieveRadiusRangeForMiddle(firstMiddleSp, rMiddleSpRange);
582
583 ACTS_VERBOSE("Validity range (radius) for the middle space point is ["
584 << radiusRangeForMiddle.first << ", "
585 << radiusRangeForMiddle.second << "]");
586
587 m_finder->createSeedsFromGroups(
588 cache, *bottomDoubletFinder, *topDoubletFinder, *tripletFinder, filter,
589 selectedSpacePoints, bottomSpRanges, *middleSpRange, topSpRanges,
590 radiusRangeForMiddle, tmpSeedContainer);
591 }
592
593 // Selection function - temporary implementation
594 // need change from ACTS for final implementation
595 // To be used only on PPP
596 auto selectionFunction =
597 [&filterState](const Acts::MutableSeedProxy2& seed) -> bool {
598 float seedQuality = seed.quality();
599 float bottomQuality =
600 filterState.bestSeedQualityMap.at(seed.spacePointIndices()[0]);
601 float middleQuality =
602 filterState.bestSeedQualityMap.at(seed.spacePointIndices()[1]);
603 float topQuality =
604 filterState.bestSeedQualityMap.at(seed.spacePointIndices()[2]);
605
606 return bottomQuality <= seedQuality || middleQuality <= seedQuality ||
607 topQuality <= seedQuality;
608 };
609
610 seedContainer.reserve(seedContainer.size() + tmpSeedContainer.size());
611
612 // Select and convert the seeds
613 for (Acts::MutableSeedProxy2 seed : tmpSeedContainer) {
614 if (m_seedQualitySelection && !selectionFunction(seed)) {
615 continue;
616 }
617
618 seedContainer.push_back(
619 Acts::ConstSeedProxy2(seed), [&](const Acts::SpacePointIndex2 spIndex) {
620 const Acts::SpacePointIndex2 originalIndex =
621 selectedSpacePoints.at(spIndex).copyFromIndex();
622 return selectedXAODSpacePoints[originalIndex];
623 });
624 }
625
626 return StatusCode::SUCCESS;
627}
628
629} // namespace ActsTrk
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
static Double_t sp
static Double_t a
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
@ top
#define y
#define x
#define z
bool spacePointSelectionFunction(const xAOD::SpacePoint *sp, float r) const
Acts::TripletSeedFinder::Config m_tripletFinderCfg
Gaudi::Property< bool > m_useDeltaRorTopRadius
Gaudi::Property< bool > m_seedQualitySelection
Gaudi::Property< float > m_seedConfForwardMinImpact
Acts::DoubletSeedFinder::Config m_bottomDoubletFinderCfg
Gaudi::Property< std::vector< std::pair< int, int > > > m_rBinNeighborsTop
Gaudi::Property< float > m_impactWeightFactor
std::pair< float, float > retrieveRadiusRangeForMiddle(const Acts::ConstSpacePointProxy2 &spM, const Acts::Range1D< float > &rMiddleSpRange) const
Acts::DoubletSeedFinder::Config m_topDoubletFinderCfg
Gaudi::Property< float > m_collisionRegionMax
Gaudi::Property< float > m_seedConfCentralMinBottomRadius
std::optional< Acts::TripletSeeder > m_finder
Gaudi::Property< int > m_phiBinDeflectionCoverage
Gaudi::Property< float > m_zOriginWeightFactor
Gaudi::Property< std::size_t > m_maxSeedsPerSpMConf
Gaudi::Property< float > m_maxPtScattering
Gaudi::Property< bool > m_useVariableMiddleSPRange
Gaudi::Property< float > m_toleranceParam
Gaudi::Property< float > m_maxStripDeltaCotTheta
StatusCode createSeeds(const EventContext &ctx, const std::vector< const xAOD::SpacePointContainer * > &spacePointCollections, const Eigen::Vector3f &beamSpotPos, float bFieldInZ, ActsTrk::SeedContainer &seedContainer) const override
Gaudi::Property< float > m_deltaRMaxBottomSP
Gaudi::Property< float > m_seedConfForwardMinBottomRadius
Gaudi::Property< float > m_compatSeedWeight
Gaudi::Property< std::vector< std::vector< double > > > m_rRangeMiddleSP
Gaudi::Property< float > m_deltaRMinTopSP
Gaudi::Property< float > m_seedConfForwardZMin
Acts::BroadTripletSeedFilter::Config m_filterCfg
Gaudi::Property< std::vector< std::pair< int, int > > > m_rBinNeighborsBottom
Gaudi::Property< bool > m_useDetailedDoubleMeasurementInfo
Gaudi::Property< std::vector< std::pair< int, int > > > m_zBinNeighborsBottom
Acts::CylindricalSpacePointGrid2::Config m_gridCfg
Gaudi::Property< float > m_gridPhiMin
Gaudi::Property< bool > m_interactionPointCut
Gaudi::Property< size_t > m_seedConfCentralNTopSmallR
Gaudi::Property< std::vector< float > > m_rBinEdges
Gaudi::Property< float > m_seedConfForwardRMax
Gaudi::Property< float > m_deltaRMiddleMaxSPRange
GridTripletSeedingTool(const std::string &type, const std::string &name, const IInterface *parent)
Gaudi::Property< bool > m_useHVCollisionRegion
Gaudi::Property< std::vector< std::pair< int, int > > > m_zBinNeighborsTop
Gaudi::Property< float > m_deltaInvHelixDiameter
Gaudi::Property< float > m_collisionRegionMin
Gaudi::Property< float > m_seedConfCentralMaxZOrigin
Gaudi::Property< float > m_seedConfCentralMinImpact
Gaudi::Property< std::size_t > m_maxQualitySeedsPerSpMConf
Gaudi::Property< float > m_gridPhiMax
Gaudi::Property< std::vector< float > > m_zBinEdges
Gaudi::Property< bool > m_seedConfirmation
Gaudi::Property< float > m_seedConfForwardMaxZOrigin
Gaudi::Property< float > m_hvCollisionRegionTolerance
Gaudi::Property< float > m_seedWeightIncrement
bool doubletSelectionFunction(const Acts::ConstSpacePointProxy2 &middle, const Acts::ConstSpacePointProxy2 &other, float cotTheta, bool isBottomCandidate) const
Gaudi::Property< float > m_radLengthPerSeed
Gaudi::Property< float > m_absDeltaEtaMinImpact
Gaudi::Property< float > m_absDeltaEtaWeightFactor
Gaudi::Property< float > m_cotThetaMax
Gaudi::Property< float > m_deltaRMinBottomSP
Gaudi::Property< size_t > m_seedConfCentralNTopLargeR
virtual StatusCode initialize() override
Gaudi::Property< float > m_deltaRMiddleMinSPRange
Gaudi::Property< float > m_seedConfForwardZMax
Gaudi::Property< bool > m_seedConfirmationInFilter
Gaudi::Property< std::vector< std::size_t > > m_rBinsCustomLooping
const Acts::Logger & logger() const
Private access to the logger.
Gaudi::Property< float > m_seedConfCentralRMax
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Gaudi::Property< float > m_sigmaScattering
std::unique_ptr< const Acts::Logger > m_loggerFilter
Gaudi::Property< std::vector< size_t > > m_zBinsCustomLooping
Gaudi::Property< float > m_seedConfCentralZMax
Gaudi::Property< float > m_deltaRMaxTopSP
Gaudi::Property< std::size_t > m_compatSeedLimit
Gaudi::Property< size_t > m_seedConfForwardNTopSmallR
SG::ReadHandleKey< xAOD::VertexContainer > m_inputHoughVtxKey
Gaudi::Property< float > m_seedConfCentralZMin
Gaudi::Property< bool > m_useExperimentCuts
Gaudi::Property< float > m_numSeedIncrement
Gaudi::Property< size_t > m_seedConfForwardNTopLargeR
virtual bool isValid() override final
Can the handle be successfully dereferenced?
int r
Definition globals.cxx:22
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
SpacePointContainer_v1 SpacePointContainer
Define the version of the space point container.
Seed push_back(SpacePointRange spacePoints, float quality, float vertexZ)
void reserve(std::size_t size, float averageSpacePoints=3) noexcept
std::size_t size() const noexcept