ATLAS Offline Software
KalmanFitterTool.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_KALMANFITTERTOOL_H
6 #define ACTSTRACKRECONSTRUCTION_KALMANFITTERTOOL_H
7 
9 
12 
14 
16 
17 // ACTS
18 #include "Acts/EventData/TrackParameters.hpp"
19 #include "Acts/TrackFitting/KalmanFitter.hpp"
20 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
21 #include "Acts/Propagator/SympyStepper.hpp"
22 #include "Acts/Propagator/Propagator.hpp"
23 #include "Acts/Propagator/Navigator.hpp"
24 #include "Acts/EventData/TrackProxy.hpp"
25 #include "Acts/EventData/VectorTrackContainer.hpp"
26 #include "Acts/Geometry/GeometryIdentifier.hpp"
27 
28 
29 // PACKAGE
30 
35 
42 // STL
43 #include <string>
44 #include <memory>//unique_ptr
45 #include <limits>//for numeric_limits
46 #include <cmath> //std::abs
47 
48 
50 
51 class EventContext;
52 
53 namespace Trk{
54  class Track;
55  class PrepRawData;
56 }
57 
58 namespace ActsTrk {
59 
61  : public extends<AthAlgTool, Trk::ITrackFitter, ActsTrk::IFitterTool> {
62 public:
63 
64  using base_class::base_class;
65  virtual ~KalmanFitterTool() = default;
66 
67  // standard Athena methods
68  virtual StatusCode initialize() override;
69 
71  virtual std::unique_ptr<Trk::Track> fit(
72  const EventContext& ctx,
73  const Trk::Track&,
74  const Trk::RunOutlierRemoval runOutlier = false,
75  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
76 
78  virtual std::unique_ptr<Trk::Track> fit(
79  const EventContext& ctx,
80  const Trk::PrepRawDataSet&,
81  const Trk::TrackParameters&,
82  const Trk::RunOutlierRemoval runOutlier = false,
83  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
84 
86  virtual std::unique_ptr<Trk::Track> fit(
87  const EventContext& ctx,
88  const Trk::MeasurementSet&,
89  const Trk::TrackParameters&,
90  const Trk::RunOutlierRemoval runOutlier = false,
91  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
92 
94  virtual std::unique_ptr<Trk::Track> fit(
95  const EventContext& ctx,
96  const Trk::Track&,
97  const Trk::PrepRawDataSet&,
98  const Trk::RunOutlierRemoval runOutlier = false,
99  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
100 
102  virtual
103  std::unique_ptr< ActsTrk::MutableTrackContainer >
104  fit(const std::vector<ActsTrk::ATLASUncalibSourceLink> & clusterList,
105  const Acts::BoundTrackParameters& initialParams,
106  const Acts::GeometryContext& tgContext,
107  const Acts::MagneticFieldContext& mfContext,
108  const Acts::CalibrationContext& calContext,
109  const Acts::Surface* targetSurface = nullptr // optional target surface - defaults to perigee in global origin
110  ) const override;
111 
113  virtual std::unique_ptr<Trk::Track> fit(
114  const EventContext& ctx,
115  const Trk::Track&,
116  const Trk::MeasurementSet&,
117  const Trk::RunOutlierRemoval runOutlier = false,
118  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
119 
121  virtual std::unique_ptr<Trk::Track> fit(
122  const EventContext& ctx,
123  const Trk::Track& intrk1,
124  const Trk::Track& intrk2,
125  const Trk::RunOutlierRemoval runOutlier = false,
126  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
127 
129  virtual
130  std::unique_ptr< ActsTrk::MutableTrackContainer >
131  fit(const ActsTrk::Seed &seed,
132  const Acts::BoundTrackParameters& initialParams,
133  const Acts::GeometryContext& tgContext,
134  const Acts::MagneticFieldContext& mfContext,
135  const Acts::CalibrationContext& calContext,
136  const Acts::Surface& targetSurface) const override;
137 
138 
139  virtual StatusCode fit(
140  const EventContext& ctx,
141  const ActsTrk::TrackContainer::ConstTrackProxy& track,
143  const Acts::PerigeeSurface& pSurface) const override;
144 
146  // Private methods:
148 private:
149 
151  using FitterExtension_t = Acts::KalmanFitterExtensions<MutableTrackStateBackend>;
153  using FitterOptions_t = Acts::KalmanFitterOptions<MutableTrackStateBackend>;
162  FitterOptions_t configureFit(const Acts::GeometryContext& tgContext,
163  const Acts::MagneticFieldContext& mfContext,
164  const Acts::CalibrationContext& calContext,
165  const Acts::Surface* surface,
166  detail::SourceLinkType slType) const;
167 
168 
169  ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", ""};
170  PublicToolHandle<ActsTrk::ITrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", ""};
171  ToolHandle<ActsTrk::IActsToTrkConverterTool> m_ATLASConverterTool{this, "ATLASConverterTool", ""};
172  // the settable job options
173  Gaudi::Property< double > m_option_outlierChi2Cut {this, "OutlierChi2Cut", 12.5,
174  "Chi2 cut used by the outlier finder" };
175  Gaudi::Property< double > m_option_ReverseFilteringPt {this, "ReverseFilteringPt", 1.0 * Acts::UnitConstants::GeV,
176  "Pt cut used for the ReverseFiltering logic"};
177  Gaudi::Property< int > m_option_maxPropagationStep {this, "MaxPropagationStep", 5000,
178  "Maximum number of steps for one propagate call"};
179  Gaudi::Property< double > m_option_seedCovarianceScale {this, "SeedCovarianceScale", 100.,
180  "Scale factor for the input seed covariance when doing refitting"};
181 
195 
196 
198  using Fitter = Acts::KalmanFitter<Acts::Propagator<Acts::SympyStepper, Acts::Navigator>, ActsTrk::MutableTrackStateBackend>;
199  std::unique_ptr<Fitter> m_fitter {nullptr};
200 
201  using DirectFitter = Acts::KalmanFitter<Acts::Propagator<Acts::SympyStepper, Acts::DirectNavigator>, ActsTrk::MutableTrackStateBackend>;
202  std::unique_ptr<DirectFitter> m_directFitter {nullptr};
203 
205  static constexpr unsigned s_nExtensions = static_cast<unsigned>(detail::SourceLinkType::nTypes);
206  std::array<FitterExtension_t, s_nExtensions> m_kfExtensions{};
207 
210 
212  const Acts::Logger& logger() const {
213  return *m_logger;
214  }
215 
217  std::unique_ptr<const Acts::Logger> m_logger;
218 
219  ToolHandle<Trk::IRIO_OnTrackCreator> m_ROTcreator {this, "RotCreatorTool", ""};
220  //Gaudi Property to choose from PRD or ROT measurment ReFit
221  Gaudi::Property<bool> m_doReFitFromPRD{this, "DoReFitFromPRD", false, "Do Refit From PRD instead of ROT"};
222 }; // end of namespace
223 
224 }
225 #endif
226 
TrkPrepRawDataSurfaceAcc.h
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:18
Trk::PrepRawDataSet
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
Definition: FitterTypes.h:26
ActsTrk::KalmanFitterTool::m_option_maxPropagationStep
Gaudi::Property< int > m_option_maxPropagationStep
Definition: KalmanFitterTool.h:177
ActsTrk::KalmanFitterTool::m_trackingGeometryTool
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
Definition: KalmanFitterTool.h:170
ActsTrk::KalmanFitterTool::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: KalmanFitterTool.h:212
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
ActsTrk::KalmanFitterTool::m_kfExtensions
std::array< FitterExtension_t, s_nExtensions > m_kfExtensions
Definition: KalmanFitterTool.h:206
ActsTrk::KalmanFitterTool::Fitter
Acts::KalmanFitter< Acts::Propagator< Acts::SympyStepper, Acts::Navigator >, ActsTrk::MutableTrackStateBackend > Fitter
Type erased track fitter function.
Definition: KalmanFitterTool.h:198
ActsTrk::KalmanFitterTool::configureFit
FitterOptions_t configureFit(const Acts::GeometryContext &tgContext, const Acts::MagneticFieldContext &mfContext, const Acts::CalibrationContext &calContext, const Acts::Surface *surface, detail::SourceLinkType slType) const
Helper method to pack the last information (Calibration, Alignment, B-Field, etc.) for the fit.
Definition: KalmanFitterTool.cxx:136
ActsTrk::detail::TrkMeasurementCalibrator
Calibrator class that links the legacy Trk::MeasurementBase objects with the Acts MultiTrajectory tra...
Definition: TrkMeasurementCalibrator.h:18
ActsTrk::detail::TrkPrepRawDataSurfaceAcc
Helper class to access the Acts::surface associated with a Trk::PrepRawData measurement.
Definition: TrkPrepRawDataSurfaceAcc.h:14
ActsTrk::KalmanFitterTool::m_fitter
std::unique_ptr< Fitter > m_fitter
Definition: KalmanFitterTool.h:199
IRIO_OnTrackCreator.h
ActsTrk::MutableTrackContainer
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
Definition: TrackContainer.h:26
ActsTrk::KalmanFitterTool::m_ROTcreator
ToolHandle< Trk::IRIO_OnTrackCreator > m_ROTcreator
Definition: KalmanFitterTool.h:219
ActsTrk::KalmanFitterTool::FitterOptions_t
Acts::KalmanFitterOptions< MutableTrackStateBackend > FitterOptions_t
Abbrivation of the configuration to launch the fit
Definition: KalmanFitterTool.h:153
ActsTrk::KalmanFitterTool::initialize
virtual StatusCode initialize() override
Definition: KalmanFitterTool.cxx:58
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder
Outlier finder using a Chi2 cut.
Definition: FitterHelperFunctions.h:49
PrepRawData.h
TrkPrepRawDataCalibrator.h
ActsTrk::KalmanFitterTool::DirectFitter
Acts::KalmanFitter< Acts::Propagator< Acts::SympyStepper, Acts::DirectNavigator >, ActsTrk::MutableTrackStateBackend > DirectFitter
Definition: KalmanFitterTool.h:201
ActsTrk::KalmanFitterTool::m_prdSurfAcc
detail::TrkPrepRawDataSurfaceAcc m_prdSurfAcc
Surface accessor for the Trk::PrepRawData track states (legacy EDM)
Definition: KalmanFitterTool.h:189
Trk::RunOutlierRemoval
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition: FitterTypes.h:22
ActsTrk::KalmanFitterTool::m_directFitter
std::unique_ptr< DirectFitter > m_directFitter
Definition: KalmanFitterTool.h:202
ActsTrk::KalmanFitterTool::fit
virtual std::unique_ptr< Trk::Track > fit(const EventContext &ctx, const Trk::Track &, const Trk::RunOutlierRemoval runOutlier=false, const Trk::ParticleHypothesis matEffects=Trk::nonInteracting) const override
refit a track
Definition: KalmanFitterTool.cxx:155
ActsTrk::KalmanFitterTool::m_outlierFinder
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder m_outlierFinder
Definition: KalmanFitterTool.h:208
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:28
OnTrackCalibrator.h
CalibrationContext.h
ActsTrk::KalmanFitterTool::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: KalmanFitterTool.h:169
ActsTrk::KalmanFitterTool::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: KalmanFitterTool.h:217
ActsTrk::KalmanFitterTool::m_uncalibMeasCalibrator
xAODUnCalibrator_t m_uncalibMeasCalibrator
Definition: KalmanFitterTool.h:194
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ActsTrk::KalmanFitterTool::m_trkCalibrator
detail::TrkMeasurementCalibrator m_trkCalibrator
Calibrator for the Trk::MeasurementBase track states (legacy EDM)
Definition: KalmanFitterTool.h:183
ActsTrk::KalmanFitterTool::m_option_outlierChi2Cut
Gaudi::Property< double > m_option_outlierChi2Cut
Definition: KalmanFitterTool.h:173
AthAlgTool.h
ActsTrk::KalmanFitterTool::m_option_seedCovarianceScale
Gaudi::Property< double > m_option_seedCovarianceScale
Definition: KalmanFitterTool.h:179
ActsTrk::detail::SourceLinkType
SourceLinkType
Enumeration to distinguish between the ATLAS EDM -> Acts::SourceLink variants.
Definition: SourceLinkType.h:9
ActsTrk::KalmanFitterTool::FitterExtension_t
Acts::KalmanFitterExtensions< MutableTrackStateBackend > FitterExtension_t
Abbrivation of the fitter extensions.
Definition: KalmanFitterTool.h:151
Trk::ParametersBase
Definition: ParametersBase.h:55
python.TrackLeptonConfig.trackContainer
string trackContainer
Definition: TrackLeptonConfig.py:23
ActsTrk::KalmanFitterTool::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: KalmanFitterTool.h:171
ActsTrk::KalmanFitterTool::m_doReFitFromPRD
Gaudi::Property< bool > m_doReFitFromPRD
Definition: KalmanFitterTool.h:221
Trk::MeasurementSet
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition: FitterTypes.h:30
ActsTrk::KalmanFitterTool::s_nExtensions
static constexpr unsigned s_nExtensions
Array of all configured fitter extensions depending on which source link type is in use.
Definition: KalmanFitterTool.h:205
ActsTrk::KalmanFitterTool::m_trkSurfAcc
detail::TrkMeasSurfaceAccessor m_trkSurfAcc
Accessor to fetch surfaces from the Trk::MeasurementBase track states (legacy EDM)
Definition: KalmanFitterTool.h:185
ActsTrk::KalmanFitterTool::fit
virtual StatusCode fit(const EventContext &ctx, const ActsTrk::TrackContainer::ConstTrackProxy &track, ActsTrk::MutableTrackContainer &trackContainer, const Acts::PerigeeSurface &pSurface) const override
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:28
IFitterTool.h
ActsTrk::KalmanFitterTool::m_reverseFilteringLogic
ActsTrk::detail::FitterHelperFunctions::ReverseFilteringLogic m_reverseFilteringLogic
Definition: KalmanFitterTool.h:209
ActsTrk::MutableTrackStateBackend
Acts::VectorMultiTrajectory MutableTrackStateBackend
Definition: TrackContainer.h:17
ActsTrk::ActsSeed
Definition: Seed.h:18
xAODUncalibMeasSurfAcc.h
TrkMeasSurfaceAccessor.h
ActsTrk::detail::FitterHelperFunctions::ReverseFilteringLogic
Determine if the smoothing of a track should be done with or without reverse filtering.
Definition: FitterHelperFunctions.h:89
ActsTrk::KalmanFitterTool::m_unalibMeasSurfAcc
detail::xAODUncalibMeasSurfAcc m_unalibMeasSurfAcc
Accessor to fetch surfaces from the xAOD::UncalibratedMeasurements (Phase-II EDM)
Definition: KalmanFitterTool.h:191
FitterHelperFunctions.h
ActsTrk::KalmanFitterTool
Definition: KalmanFitterTool.h:61
ITrackingGeometryTool.h
IActsToTrkConverterTool.h
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:24
ActsTrk::KalmanFitterTool::~KalmanFitterTool
virtual ~KalmanFitterTool()=default
ActsTrk::detail::xAODUncalibMeasSurfAcc
Helper class to access the Acts::surface associated with an Uncalibrated xAOD measurement.
Definition: xAODUncalibMeasSurfAcc.h:22
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
ActsTrk::detail::OnTrackCalibrator< ActsTrk::MutableTrackStateBackend >
ActsTrk::detail::SourceLinkType::nTypes
@ nTypes
Uncalbirated xAOD::UnCalibratedMEeasurement objects.
ActsTrk::KalmanFitterTool::m_option_ReverseFilteringPt
Gaudi::Property< double > m_option_ReverseFilteringPt
Definition: KalmanFitterTool.h:175
ITrackFitter.h
TrackContainer.h
ActsTrk::detail::TrkMeasSurfaceAccessor
Helper class to access the Acts::Surface for a given Acts::SourceLink which is poiniting to a Trk::Me...
Definition: TrkMeasSurfaceAccessor.h:14
ActsTrk::detail::TrkPrepRawDataCalibrator
Class to calibrate the Acts track states with uncalibrated Trk::PrepRaw data objects.
Definition: TrkPrepRawDataCalibrator.h:17
IActsExtrapolationTool.h
ActsTrk::KalmanFitterTool::m_prdCalibrator
detail::TrkPrepRawDataCalibrator m_prdCalibrator
Calibrator for the Trk::PrepRawData track states (legacy EDM)
Definition: KalmanFitterTool.h:187