ATLAS Offline Software
TrackFindingAlg.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ACTSTRACKRECONSTRUCTION_TRACKFINDINGALG_H
6 #define ACTSTRACKRECONSTRUCTION_TRACKFINDINGALG_H
7 
8 // Base Class
10 
11 // ACTS
12 #include "Acts/TrackFinding/TrackStateCreator.hpp"
13 #include "Acts/AmbiguityResolution/GreedyAmbiguityResolution.hpp"
14 #include "Acts/Surfaces/Surface.hpp"
15 #include "Acts/Surfaces/PerigeeSurface.hpp"
16 
17 // ActsTrk
18 #include "ActsEvent/Seed.h"
23 
24 // Athena
25 #include "GaudiKernel/EventContext.h"
30 
31 // STL
32 #include <string>
33 #include <vector>
34 #include <optional>
35 
36 // Handle Keys
38 #include "src/detail/Definitions.h"
40 
41 namespace ActsTrk
42 {
44  using DefaultTrackStateCreator = Acts::TrackStateCreator<ActsTrk::detail::UncalibSourceLinkAccessor::Iterator,detail::RecoTrackContainer>;
45 
47  {
48  public:
49 
50  TrackFindingAlg(const std::string &name,
51  ISvcLocator *pSvcLocator);
52  virtual ~TrackFindingAlg() = default;
53 
54  virtual StatusCode initialize() override;
55  virtual StatusCode finalize() override;
56  virtual StatusCode execute(const EventContext &ctx) const override;
57 
58  using ExpectedLayerPattern = std::array<unsigned int, 4>;
59 
60  private:
61  std::size_t getSeedCategory(std::size_t typeIndex,
62  const ActsTrk::Seed& seed,
63  bool useTopSp) const;
64 
65  void printSeed(unsigned int iseed,
66  const DetectorContextHolder& detContext,
67  const ActsTrk::SeedContainer& seeds,
68  const Acts::BoundTrackParameters &seedParameters,
69  const detail::MeasurementIndex &measurementIndex,
70  std::size_t& nPrinted,
71  const char *seedType,
72  bool isKF = false) const;
73 
74  StatusCode addTrack(const DetectorContextHolder& detContext,
76  const Acts::Surface& pSurface,
77  const Acts::TrackExtrapolationStrategy& extrapolationStrategy,
78  detail::SharedHitCounter &sharedHits,
79  detail::RecoTrackContainer &actsTracksContainer,
80  const detail::MeasurementIndex& measurementIndex,
81  const detail::RecoTrackContainer& tracksContainerTemp,
82  detail::DuplicateSeedDetector& duplicateSeedDetector,
83  std::vector<int>* destiny,
84  EventStats& event_stat,
85  std::size_t& ntracks,
86  std::size_t iseed,
87  std::size_t category_i,
88  const char *seedType) const;
89 
90  StatusCode storeTrackCollectionToStoreGate(const EventContext& ctx,
91  Acts::VectorTrackContainer&& originalTrackBackend,
92  Acts::VectorMultiTrajectory&& originalTrackStateBackend) const;
93 
94  private:
95  // Tool Handles
96  ToolHandle<ActsTrk::ITrackParamsEstimationTool > m_paramEstimationTool{this, "TrackParamsEstimationTool", "", "Track Param Estimation from Seeds"};
97 
98  // Handle Keys
99  // Seed collections. These 2 vectors must match element for element.
100  SG::ReadHandleKeyArray<ActsTrk::SeedContainer> m_seedContainerKeys{this, "SeedContainerKeys", {}, "Seed containers"};
101  SG::ReadCondHandleKeyArray<InDetDD::SiDetectorElementCollection> m_detEleCollKeys{this, "DetectorElementsKeys", {}, "Keys of input SiDetectorElementCollection"};
102  // Measurement collections. These 2 vectors must match element for element.
103  SG::ReadHandleKeyArray<xAOD::UncalibratedMeasurementContainer> m_uncalibratedMeasurementContainerKeys{this, "UncalibratedMeasurementContainerKeys", {}, "input cluster collections"};
105  {this, "ActsVolumeIdToDetectorElementCollectionMapKey", "ActsVolumeIdToDetectorElementCollectionMap",
106  "Map which associates Acts geometry volume IDs to detector element collections."};
107 
109  {this, "DetElStatus", {}, "Keys for detector element status conditions data."};
110 
111  bool m_storeDestinies {false};
113  SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"};
114 
115  // Configuration
116  Gaudi::Property<bool> m_skipDuplicateSeeds{this, "skipDuplicateSeeds", true, "skip duplicate seeds before calling CKF"};
117  Gaudi::Property<unsigned int> m_seedMeasOffset{this,"seedMeasOffset", 0, "Reduce the requirement on the space points on seed to mark a seed as duplicate, e.g seedMeasOffset=1, only N-1 measurements on seed are sufficient deduplicate the seed"};
118  Gaudi::Property<std::vector<bool>> m_refitSeeds{this, "refitSeeds", {}, "Run KalmanFitter on seeds before passing to CKF, specified separately for each seed collection"};
119  Gaudi::Property<std::vector<double>> m_useTopSpRZboundary {this, "useTopSpRZboundary", {350. * Acts::UnitConstants::mm, 1060. * Acts::UnitConstants::mm}, "R/Z boundary for using the top space point in the track parameter estimation"};
120  Gaudi::Property<bool> m_autoReverseSearch{this, "autoReverseSearch", false, "Whether to run the finding in seed parameter direction (false or not specified) or reverse direction (true), automatically determined by the param estimation tool"};
121  Gaudi::Property<bool> m_countSharedHits{this, "countSharedHits", true, "add shared hit flags to tracks"};
122 
123 
124  // Ambiguity resolution
125  Gaudi::Property<unsigned int> m_maximumSharedHits
126  {this, "MaximumSharedHits", 3u, "Maximum number of shared hits per track."};
127  Gaudi::Property<unsigned int> m_maximumIterations
128  {this, "MaximumIterations", 10000u, "Maximum number of iterations to resolve ambiguities among all tracks."};
129  Gaudi::Property<unsigned int> m_nMeasurementsMin
130  {this, "NMeasurementsMin", 7u, "Minimum number of measurements per track."};
131  Gaudi::Property<std::size_t> m_ambiStrategy {this, "ambiStrategy", 0, "0 - Do ambiguity resolution outside track finding; 1 - Do ambiguity in track finding using GreedyAmbiguitySolver tool; 2 - Do shared hit cut during track candidate selection"};
132 
133 
135  const std::vector< const InDet::SiDetectorElementStatus *> &det_el_status_arr,
136  detail::TrackFindingMeasurements &measurements) const;
137 
138  bool shouldReverseSearch(const ActsTrk::Seed& seed) const;
139 
140  std::optional<Acts::GreedyAmbiguityResolution> m_ambi;
141 
142 
143  Acts::Result<void> extrapolateTrackToReferenceSurface(
144  const DetectorContextHolder& detContext,
146  const Acts::Surface &referenceSurface,
147  const detail::Extrapolator &propagator,
148  Acts::TrackExtrapolationStrategy strategy,
150 
166  StatusCode
167  findTracks(const DetectorContextHolder& detContext,
168  const detail::TrackFindingMeasurements &measurements,
169  const detail::MeasurementIndex &measurementIndex,
170  detail::SharedHitCounter &sharedHits,
171  detail::DuplicateSeedDetector &duplicateSeedDetector,
172  const ActsTrk::SeedContainer &seeds,
173  const InDetDD::SiDetectorElementCollection& detElements,
174  detail::RecoTrackContainer &actsTracksContainer,
175  std::size_t seedCollectionIndex,
176  const char *seedType,
177  EventStats &event_stat,
178  std::vector<int>* destiny,
179  const Acts::PerigeeSurface& pSurface) const;
180 
181  // Create tracks from one seed's CKF result, appending to tracksContainer
182  void storeSeedInfo(const detail::RecoTrackContainer &tracksContainer,
184  detail::DuplicateSeedDetector &duplicateSeedDetector,
185  const detail::MeasurementIndex &measurementIndex) const;
186 
188 
190 
191  Gaudi::Property< float > m_memorySafetyMargin {this, "MemorySafetyMargin", 1.2};
192  mutable std::size_t m_nTrackReserve ATLAS_THREAD_SAFE {0ul};
193  mutable std::size_t m_nTrackStateReserve ATLAS_THREAD_SAFE {0ul};
194  mutable std::mutex m_mutex ATLAS_THREAD_SAFE {};
195  };
196 
197 } // namespace
198 
199 #endif
ActsTrk::TrackFindingAlg::~TrackFindingAlg
virtual ~TrackFindingAlg()=default
xAOD::strategy
strategy
Definition: L2CombinedMuon_v1.cxx:108
ActsTrk::TrackFindingAlg::m_maximumSharedHits
Gaudi::Property< unsigned int > m_maximumSharedHits
Definition: TrackFindingAlg.h:126
ActsTrk::TrackFindingAlg::m_ambiStrategy
Gaudi::Property< std::size_t > m_ambiStrategy
Definition: TrackFindingAlg.h:131
ActsTrk::TrackFindingAlg::extrapolateTrackToReferenceSurface
Acts::Result< void > extrapolateTrackToReferenceSurface(const DetectorContextHolder &detContext, detail::RecoTrackContainerProxy &track, const Acts::Surface &referenceSurface, const detail::Extrapolator &propagator, Acts::TrackExtrapolationStrategy strategy, ExpectedLayerPattern &expectedLayerPattern) const
Definition: TrackFindingAlg.cxx:851
python.SystemOfUnits.mm
float mm
Definition: SystemOfUnits.py:98
ActsTrk::TrackFindingAlg::printSeed
void printSeed(unsigned int iseed, const DetectorContextHolder &detContext, const ActsTrk::SeedContainer &seeds, const Acts::BoundTrackParameters &seedParameters, const detail::MeasurementIndex &measurementIndex, std::size_t &nPrinted, const char *seedType, bool isKF=false) const
Definition: TrackFindingAlg.cxx:806
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:27
ActsTrk::detail::TrackFindingMeasurements
Definition: TrackFindingMeasurements.h:17
Definitions.h
ActsTrk::TrackFindingAlg::getSeedCategory
std::size_t getSeedCategory(std::size_t typeIndex, const ActsTrk::Seed &seed, bool useTopSp) const
Definition: TrackFindingAlg.cxx:796
SiDetectorElementStatus.h
ActsTrk::TrackFindingAlg::m_seedMeasOffset
Gaudi::Property< unsigned int > m_seedMeasOffset
Definition: TrackFindingAlg.h:117
ActsTrk::TrackFindingAlg::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrackFindingAlg.h:113
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
ActsTrk::TrackFindingBaseAlg::EventStats
std::vector< std::array< unsigned int, kNStat > > EventStats
Definition: TrackFindingBaseAlg.h:172
ActsTrk::detail::Extrapolator
Propagator Extrapolator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:34
ActsTrk::TrackFindingAlg::TrackFindingAlg
TrackFindingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackFindingAlg.cxx:73
ActsTrk::TrackFindingAlg::FAILURE
@ FAILURE
Definition: TrackFindingAlg.h:189
AtlasUncalibSourceLinkAccessor.h
ActsTrk::TrackFindingAlg::SUCCEED
@ SUCCEED
Definition: TrackFindingAlg.h:189
ActsTrk::TrackFindingAlg::m_autoReverseSearch
Gaudi::Property< bool > m_autoReverseSearch
Definition: TrackFindingAlg.h:120
ActsTrk::TrackFindingAlg::m_refitSeeds
Gaudi::Property< std::vector< bool > > m_refitSeeds
Definition: TrackFindingAlg.h:118
SG::HandleKeyArray
Definition: StoreGate/StoreGate/HandleKeyArray.h:38
ActsTrk::detail::SharedHitCounter
Definition: SharedHitCounter.h:19
ActsTrk::TrackFindingAlg::propagateDetectorElementStatusToMeasurements
StatusCode propagateDetectorElementStatusToMeasurements(const ActsTrk::ActsVolumeIdToDetectorElementCollectionMap &volume_id_to_det_el_coll, const std::vector< const InDet::SiDetectorElementStatus * > &det_el_status_arr, detail::TrackFindingMeasurements &measurements) const
Definition: TrackFindingAlg.cxx:739
ActsTrk::detail::RecoTrackContainerProxy
RecoTrackContainer::TrackProxy RecoTrackContainerProxy
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:23
ActsTrk::TrackFindingAlg::m_seedContainerKeys
SG::ReadHandleKeyArray< ActsTrk::SeedContainer > m_seedContainerKeys
Definition: TrackFindingAlg.h:100
ActsTrk::TrackFindingAlg::UNKNOWN
@ UNKNOWN
Definition: TrackFindingAlg.h:189
ActsTrk::detail::MeasurementIndex
Definition: MeasurementIndex.h:16
ActsTrk::detail::RecoTrackContainer
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:22
ActsTrk::TrackFindingAlg::findTracks
StatusCode findTracks(const DetectorContextHolder &detContext, const detail::TrackFindingMeasurements &measurements, const detail::MeasurementIndex &measurementIndex, detail::SharedHitCounter &sharedHits, detail::DuplicateSeedDetector &duplicateSeedDetector, const ActsTrk::SeedContainer &seeds, const InDetDD::SiDetectorElementCollection &detElements, detail::RecoTrackContainer &actsTracksContainer, std::size_t seedCollectionIndex, const char *seedType, EventStats &event_stat, std::vector< int > *destiny, const Acts::PerigeeSurface &pSurface) const
invoke track finding procedure
Definition: TrackFindingAlg.cxx:422
SeedContainer.h
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ActsTrk::TrackFindingAlg::DUPLICATE
@ DUPLICATE
Definition: TrackFindingAlg.h:189
ActsTrk::TrackFindingAlg::m_nMeasurementsMin
Gaudi::Property< unsigned int > m_nMeasurementsMin
Definition: TrackFindingAlg.h:130
ActsTrk::TrackFindingAlg::m_uncalibratedMeasurementContainerKeys
SG::ReadHandleKeyArray< xAOD::UncalibratedMeasurementContainer > m_uncalibratedMeasurementContainerKeys
Definition: TrackFindingAlg.h:103
ActsTrk::TrackFindingAlg::finalize
virtual StatusCode finalize() override
Definition: TrackFindingAlg.cxx:144
ActsTrk::TrackFindingAlg::m_storeDestinies
bool m_storeDestinies
Definition: TrackFindingAlg.h:111
ActsTrk::detail::UncalibSourceLinkAccessor
GenUncalibSourceLinkAccessor< MeasurementRangeList > UncalibSourceLinkAccessor
Definition: AtlasUncalibSourceLinkAccessor.h:213
ActsVolumeIdToDetectorElementCollectionMap.h
ActsTrk::TrackFindingAlg::m_countSharedHits
Gaudi::Property< bool > m_countSharedHits
Definition: TrackFindingAlg.h:121
ActsTrk::TrackFindingAlg
Definition: TrackFindingAlg.h:47
ActsTrk::TrackFindingAlg::m_seedDestiny
SG::WriteHandleKeyArray< std::vector< int > > m_seedDestiny
Definition: TrackFindingAlg.h:112
ActsTrk::detail::GenUncalibSourceLinkAccessor
Accessor for the above source link container.
Definition: AtlasUncalibSourceLinkAccessor.h:113
TrackFindingBaseAlg.h
ActsTrk::TrackFindingAlg::shouldReverseSearch
bool shouldReverseSearch(const ActsTrk::Seed &seed) const
Definition: TrackFindingAlg.cxx:407
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ActsTrk::TrackFindingAlg::m_useTopSpRZboundary
Gaudi::Property< std::vector< double > > m_useTopSpRZboundary
Definition: TrackFindingAlg.h:119
ActsTrk::TrackFindingAlg::storeSeedInfo
void storeSeedInfo(const detail::RecoTrackContainer &tracksContainer, const detail::RecoTrackContainerProxy &track, detail::DuplicateSeedDetector &duplicateSeedDetector, const detail::MeasurementIndex &measurementIndex) const
Definition: TrackFindingAlg.cxx:717
ActsTrk::TrackFindingAlg::m_paramEstimationTool
ToolHandle< ActsTrk::ITrackParamsEstimationTool > m_paramEstimationTool
Definition: TrackFindingAlg.h:96
ActsTrk::TrackFindingAlg::m_detEleCollKeys
SG::ReadCondHandleKeyArray< InDetDD::SiDetectorElementCollection > m_detEleCollKeys
Definition: TrackFindingAlg.h:101
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder
Definition: TrackFindingBaseAlg.h:61
ActsTrk::TrackFindingAlg::ATLAS_THREAD_SAFE
std::size_t m_nTrackReserve ATLAS_THREAD_SAFE
Definition: TrackFindingAlg.h:192
ActsTrk::TrackFindingAlg::DestinyType
DestinyType
Definition: TrackFindingAlg.h:189
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
CondHandleKeyArray.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
ActsTrk::TrackFindingAlg::initialize
virtual StatusCode initialize() override
Definition: TrackFindingAlg.cxx:78
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Seed.h
SiDetectorElementCollection.h
ActsTrk::ActsSeed
Definition: Seed.h:18
ActsTrk::TrackFindingAlg::m_maximumIterations
Gaudi::Property< unsigned int > m_maximumIterations
Definition: TrackFindingAlg.h:128
ActsTrk::TrackFindingAlg::m_volumeIdToDetectorElementCollMapKey
SG::ReadCondHandleKey< ActsTrk::ActsVolumeIdToDetectorElementCollectionMap > m_volumeIdToDetectorElementCollMapKey
Definition: TrackFindingAlg.h:105
SG::ReadCondHandleKey< ActsTrk::ActsVolumeIdToDetectorElementCollectionMap >
ActsTrk::TrackFindingBaseAlg::CKF_pimpl
Definition: TrackFindingAlg.cxx:71
ActsTrk::TrackFindingAlg::m_skipDuplicateSeeds
Gaudi::Property< bool > m_skipDuplicateSeeds
Definition: TrackFindingAlg.h:116
ActsTrk::detail::expectedLayerPattern
std::array< unsigned int, 4 > expectedLayerPattern(const EventContext &ctx, const IActsExtrapolationTool &extrapolator, const Acts::BoundTrackParameters &perigee_parameters, double pathLimit)
Extrapolate from the perigee outwards and gather information which detector layers should have hits.
Definition: ExpectedHitUtils.cxx:14
ActsTrk::TrackFindingAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackFindingAlg.cxx:151
ActsTrk::TrackFindingAlg::m_memorySafetyMargin
Gaudi::Property< float > m_memorySafetyMargin
Definition: TrackFindingAlg.h:191
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:24
ActsTrk::TrackFindingAlg::storeTrackCollectionToStoreGate
StatusCode storeTrackCollectionToStoreGate(const EventContext &ctx, Acts::VectorTrackContainer &&originalTrackBackend, Acts::VectorMultiTrajectory &&originalTrackStateBackend) const
Definition: TrackFindingAlg.cxx:391
ActsTrk::TrackFindingAlg::m_detElStatus
SG::ReadHandleKeyArray< InDet::SiDetectorElementStatus > m_detElStatus
Definition: TrackFindingAlg.h:109
DuplicateSeedDetector.h
BeamSpotData.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
ActsTrk::TrackFindingAlg::addTrack
StatusCode addTrack(const DetectorContextHolder &detContext, detail::RecoTrackContainerProxy &track, const Acts::Surface &pSurface, const Acts::TrackExtrapolationStrategy &extrapolationStrategy, detail::SharedHitCounter &sharedHits, detail::RecoTrackContainer &actsTracksContainer, const detail::MeasurementIndex &measurementIndex, const detail::RecoTrackContainer &tracksContainerTemp, detail::DuplicateSeedDetector &duplicateSeedDetector, std::vector< int > *destiny, EventStats &event_stat, std::size_t &ntracks, std::size_t iseed, std::size_t category_i, const char *seedType) const
Definition: TrackFindingAlg.cxx:915
ActsTrk::TrackFindingBaseAlg
Definition: TrackFindingBaseAlg.h:44
ActsTrk::TrackFindingAlg::m_ambi
std::optional< Acts::GreedyAmbiguityResolution > m_ambi
Definition: TrackFindingAlg.h:140
ActsTrk::TrackFindingAlg::ExpectedLayerPattern
std::array< unsigned int, 4 > ExpectedLayerPattern
Definition: TrackFindingAlg.h:58
TrackContainer.h
ActsTrk::DefaultTrackStateCreator
Acts::TrackStateCreator< ActsTrk::detail::UncalibSourceLinkAccessor::Iterator, detail::RecoTrackContainer > DefaultTrackStateCreator
Definition: TrackFindingAlg.h:44
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:13
ActsTrk::detail::DuplicateSeedDetector
Definition: DuplicateSeedDetector.h:21
DetectorElementToActsGeometryIdMap.h