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
22 
23 // Athena
24 #include "GaudiKernel/EventContext.h"
29 
30 // STL
31 #include <string>
32 #include <vector>
33 #include <optional>
34 
35 // Handle Keys
37 #include "src/detail/Definitions.h"
39 
40 namespace ActsTrk
41 {
43  using DefaultTrackStateCreator = Acts::TrackStateCreator<ActsTrk::detail::UncalibSourceLinkAccessor::Iterator,detail::RecoTrackContainer>;
44 
46  {
47  public:
48 
49  TrackFindingAlg(const std::string &name,
50  ISvcLocator *pSvcLocator);
51  virtual ~TrackFindingAlg() = default;
52 
53  virtual StatusCode initialize() override;
54  virtual StatusCode finalize() override;
55  virtual StatusCode execute(const EventContext &ctx) const override;
56 
57  using ExpectedLayerPattern = std::array<unsigned int, 4>;
58 
59  private:
60  std::size_t getSeedCategory(std::size_t typeIndex,
61  const ActsTrk::Seed& seed,
62  bool useTopSp) const;
63 
64  void printSeed(unsigned int iseed,
65  const DetectorContextHolder& detContext,
66  const ActsTrk::SeedContainer& seeds,
67  const Acts::BoundTrackParameters &seedParameters,
68  const detail::MeasurementIndex &measurementIndex,
69  std::size_t& nPrinted,
70  const char *seedType,
71  bool isKF = false) const;
72 
73  StatusCode addTrack(const DetectorContextHolder& detContext,
75  const Acts::Surface& pSurface,
76  const Acts::TrackExtrapolationStrategy& extrapolationStrategy,
77  detail::SharedHitCounter &sharedHits,
78  detail::RecoTrackContainer &actsTracksContainer,
79  const detail::MeasurementIndex& measurementIndex,
80  const detail::RecoTrackContainer& tracksContainerTemp,
81  detail::DuplicateSeedDetector& duplicateSeedDetector,
82  std::vector<int>* destiny,
83  EventStats& event_stat,
84  std::size_t& ntracks,
85  std::size_t iseed,
86  std::size_t category_i,
87  const char *seedType) const;
88 
89  StatusCode storeTrackCollectionToStoreGate(const EventContext& ctx,
90  Acts::VectorTrackContainer&& originalTrackBackend,
91  Acts::VectorMultiTrajectory&& originalTrackStateBackend) const;
92 
93  private:
94  // Tool Handles
95  ToolHandle<ActsTrk::ITrackParamsEstimationTool > m_paramEstimationTool{this, "TrackParamsEstimationTool", "", "Track Param Estimation from Seeds"};
96 
97  // Handle Keys
98  // Seed collections. These 2 vectors must match element for element.
99  SG::ReadHandleKeyArray<ActsTrk::SeedContainer> m_seedContainerKeys{this, "SeedContainerKeys", {}, "Seed containers"};
100  SG::ReadCondHandleKeyArray<InDetDD::SiDetectorElementCollection> m_detEleCollKeys{this, "DetectorElementsKeys", {}, "Keys of input SiDetectorElementCollection"};
101  // Measurement collections. These 2 vectors must match element for element.
102  SG::ReadHandleKeyArray<xAOD::UncalibratedMeasurementContainer> m_uncalibratedMeasurementContainerKeys{this, "UncalibratedMeasurementContainerKeys", {}, "input cluster collections"};
104  {this, "ActsVolumeIdToDetectorElementCollectionMapKey", "ActsVolumeIdToDetectorElementCollectionMap",
105  "Map which associates Acts geometry volume IDs to detector element collections."};
106 
108  {this, "DetElStatus", {}, "Keys for detector element status conditions data."};
109 
110  bool m_storeDestinies {false};
112  SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"};
113 
114  // Configuration
115  Gaudi::Property<bool> m_skipDuplicateSeeds{this, "skipDuplicateSeeds", true, "skip duplicate seeds before calling CKF"};
116  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"};
117  Gaudi::Property<std::vector<bool>> m_refitSeeds{this, "refitSeeds", {}, "Run KalmanFitter on seeds before passing to CKF, specified separately for each seed collection"};
118  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"};
119  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"};
120  Gaudi::Property<bool> m_countSharedHits{this, "countSharedHits", true, "add shared hit flags to tracks"};
121  Gaudi::Property<bool> m_forceTrackOnSeed{this, "forceTrackOnSeed", true, "force track to use measurements from the seed"};
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:861
ActsTrk::SeedContainer
Definition: SeedContainer.h:19
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:816
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:27
ActsTrk::detail::TrackFindingMeasurements
Definition: TrackFindingMeasurements.h:21
Definitions.h
ActsTrk::TrackFindingAlg::getSeedCategory
std::size_t getSeedCategory(std::size_t typeIndex, const ActsTrk::Seed &seed, bool useTopSp) const
Definition: TrackFindingAlg.cxx:806
SiDetectorElementStatus.h
ActsTrk::TrackFindingAlg::m_seedMeasOffset
Gaudi::Property< unsigned int > m_seedMeasOffset
Definition: TrackFindingAlg.h:116
ActsTrk::TrackFindingAlg::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrackFindingAlg.h:112
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
ActsTrk::TrackFindingBaseAlg::EventStats
std::vector< std::array< unsigned int, kNStat > > EventStats
Definition: TrackFindingBaseAlg.h:177
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:119
ActsTrk::TrackFindingAlg::m_refitSeeds
Gaudi::Property< std::vector< bool > > m_refitSeeds
Definition: TrackFindingAlg.h:117
SG::HandleKeyArray
Definition: StoreGate/StoreGate/HandleKeyArray.h:45
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:749
ActsTrk::TrackFindingAlg::m_forceTrackOnSeed
Gaudi::Property< bool > m_forceTrackOnSeed
Definition: TrackFindingAlg.h:121
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:99
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:425
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:102
ActsTrk::TrackFindingAlg::finalize
virtual StatusCode finalize() override
Definition: TrackFindingAlg.cxx:145
ActsTrk::TrackFindingAlg::m_storeDestinies
bool m_storeDestinies
Definition: TrackFindingAlg.h:110
ActsTrk::detail::UncalibSourceLinkAccessor
GenUncalibSourceLinkAccessor< MeasurementRangeList > UncalibSourceLinkAccessor
Definition: AtlasUncalibSourceLinkAccessor.h:254
ActsVolumeIdToDetectorElementCollectionMap.h
ActsTrk::TrackFindingAlg::m_countSharedHits
Gaudi::Property< bool > m_countSharedHits
Definition: TrackFindingAlg.h:120
ActsTrk::TrackFindingAlg
Definition: TrackFindingAlg.h:46
ActsTrk::TrackFindingAlg::m_seedDestiny
SG::WriteHandleKeyArray< std::vector< int > > m_seedDestiny
Definition: TrackFindingAlg.h:111
ActsTrk::detail::GenUncalibSourceLinkAccessor
Accessor for the above source link container.
Definition: AtlasUncalibSourceLinkAccessor.h:153
TrackFindingBaseAlg.h
ActsTrk::TrackFindingAlg::shouldReverseSearch
bool shouldReverseSearch(const ActsTrk::Seed &seed) const
Definition: TrackFindingAlg.cxx:410
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:118
ActsTrk::TrackFindingAlg::storeSeedInfo
void storeSeedInfo(const detail::RecoTrackContainer &tracksContainer, const detail::RecoTrackContainerProxy &track, detail::DuplicateSeedDetector &duplicateSeedDetector, const detail::MeasurementIndex &measurementIndex) const
Definition: TrackFindingAlg.cxx:727
ActsTrk::TrackFindingAlg::m_paramEstimationTool
ToolHandle< ActsTrk::ITrackParamsEstimationTool > m_paramEstimationTool
Definition: TrackFindingAlg.h:95
ActsTrk::TrackFindingAlg::m_detEleCollKeys
SG::ReadCondHandleKeyArray< InDetDD::SiDetectorElementCollection > m_detEleCollKeys
Definition: TrackFindingAlg.h:100
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
ActsTrk::TrackFindingAlg::initialize
virtual StatusCode initialize() override
Definition: TrackFindingAlg.cxx:78
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
SiDetectorElementCollection.h
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:104
SG::ReadCondHandleKey< ActsTrk::ActsVolumeIdToDetectorElementCollectionMap >
ActsTrk::TrackFindingBaseAlg::CKF_pimpl
Definition: TrackFindingAlg.cxx:71
ActsTrk::TrackFindingAlg::m_skipDuplicateSeeds
Gaudi::Property< bool > m_skipDuplicateSeeds
Definition: TrackFindingAlg.h:115
ActsTrk::TrackFindingAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackFindingAlg.cxx:152
ActsTrk::Seed
Definition: SeedContainer.h:75
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: MdtCalibInput.h:31
ActsTrk::TrackFindingAlg::storeTrackCollectionToStoreGate
StatusCode storeTrackCollectionToStoreGate(const EventContext &ctx, Acts::VectorTrackContainer &&originalTrackBackend, Acts::VectorMultiTrajectory &&originalTrackStateBackend) const
Definition: TrackFindingAlg.cxx:394
ActsTrk::TrackFindingAlg::m_detElStatus
SG::ReadHandleKeyArray< InDet::SiDetectorElementStatus > m_detElStatus
Definition: TrackFindingAlg.h:108
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:925
ActsTrk::TrackFindingBaseAlg
Definition: TrackFindingBaseAlg.h:44
ActsTrk::detail::expectedLayerPattern
std::array< unsigned int, 4 > expectedLayerPattern(const EventContext &ctx, const IExtrapolationTool &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::m_ambi
std::optional< Acts::GreedyAmbiguityResolution > m_ambi
Definition: TrackFindingAlg.h:140
ActsTrk::TrackFindingAlg::ExpectedLayerPattern
std::array< unsigned int, 4 > ExpectedLayerPattern
Definition: TrackFindingAlg.h:57
TrackContainer.h
ActsTrk::DefaultTrackStateCreator
Acts::TrackStateCreator< ActsTrk::detail::UncalibSourceLinkAccessor::Iterator, detail::RecoTrackContainer > DefaultTrackStateCreator
Definition: TrackFindingAlg.h:43
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:13
ActsTrk::detail::DuplicateSeedDetector
Definition: DuplicateSeedDetector.h:21
DetectorElementToActsGeometryIdMap.h