Loading [MathJax]/jax/output/SVG/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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) const override;
136 
137 
138  virtual StatusCode fit(
139  const EventContext& ctx,
140  const ActsTrk::TrackContainer::ConstTrackProxy& track,
142 
144  // Private methods:
146 private:
147 
149  using FitterExtension_t = Acts::KalmanFitterExtensions<MutableTrackStateBackend>;
151  using FitterOptions_t = Acts::KalmanFitterOptions<MutableTrackStateBackend>;
160  FitterOptions_t configureFit(const Acts::GeometryContext& tgContext,
161  const Acts::MagneticFieldContext& mfContext,
162  const Acts::CalibrationContext& calContext,
163  const Acts::Surface* surface,
164  detail::SourceLinkType slType) const;
165 
166 
167  ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", ""};
168  ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", ""};
169  ToolHandle<ActsTrk::IActsToTrkConverterTool> m_ATLASConverterTool{this, "ATLASConverterTool", ""};
170  // the settable job options
171  Gaudi::Property< double > m_option_outlierChi2Cut {this, "OutlierChi2Cut", 12.5,
172  "Chi2 cut used by the outlier finder" };
173  Gaudi::Property< double > m_option_ReverseFilteringPt {this, "ReverseFilteringPt", 1.0 * Acts::UnitConstants::GeV,
174  "Pt cut used for the ReverseFiltering logic"};
175  Gaudi::Property< int > m_option_maxPropagationStep {this, "MaxPropagationStep", 5000,
176  "Maximum number of steps for one propagate call"};
177  Gaudi::Property< double > m_option_seedCovarianceScale {this, "SeedCovarianceScale", 100.,
178  "Scale factor for the input seed covariance when doing refitting"};
179 
193 
194 
196  using Fitter = Acts::KalmanFitter<Acts::Propagator<Acts::SympyStepper, Acts::Navigator>, ActsTrk::MutableTrackStateBackend>;
197  std::unique_ptr<Fitter> m_fitter {nullptr};
198 
199  using DirectFitter = Acts::KalmanFitter<Acts::Propagator<Acts::SympyStepper, Acts::DirectNavigator>, ActsTrk::MutableTrackStateBackend>;
200  std::unique_ptr<DirectFitter> m_directFitter {nullptr};
201 
203  static constexpr unsigned s_nExtensions = static_cast<unsigned>(detail::SourceLinkType::nTypes);
204  std::array<FitterExtension_t, s_nExtensions> m_kfExtensions{};
205 
208 
210  const Acts::Logger& logger() const {
211  return *m_logger;
212  }
213 
215  std::unique_ptr<const Acts::Logger> m_logger;
216 
217  ToolHandle<Trk::IRIO_OnTrackCreator> m_ROTcreator {this, "RotCreatorTool", ""};
218  //Gaudi Property to choose from PRD or ROT measurment ReFit
219  Gaudi::Property<bool> m_doReFitFromPRD{this, "DoReFitFromPRD", false, "Do Refit From PRD instead of ROT"};
220 }; // end of namespace
221 
222 }
223 #endif
224 
TrkPrepRawDataSurfaceAcc.h
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
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:175
ActsTrk::KalmanFitterTool::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: KalmanFitterTool.h:210
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:204
ActsTrk::KalmanFitterTool::fit
virtual StatusCode fit(const EventContext &ctx, const ActsTrk::TrackContainer::ConstTrackProxy &track, ActsTrk::MutableTrackContainer &trackContainer) const override
ActsTrk::KalmanFitterTool::Fitter
Acts::KalmanFitter< Acts::Propagator< Acts::SympyStepper, Acts::Navigator >, ActsTrk::MutableTrackStateBackend > Fitter
Type erased track fitter function.
Definition: KalmanFitterTool.h:196
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:197
IRIO_OnTrackCreator.h
ActsTrk::KalmanFitterTool::m_ROTcreator
ToolHandle< Trk::IRIO_OnTrackCreator > m_ROTcreator
Definition: KalmanFitterTool.h:217
ActsTrk::KalmanFitterTool::FitterOptions_t
Acts::KalmanFitterOptions< MutableTrackStateBackend > FitterOptions_t
Abbrivation of the configuration to launch the fit
Definition: KalmanFitterTool.h:151
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:199
ActsTrk::KalmanFitterTool::m_prdSurfAcc
detail::TrkPrepRawDataSurfaceAcc m_prdSurfAcc
Surface accessor for the Trk::PrepRawData track states (legacy EDM)
Definition: KalmanFitterTool.h:187
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:200
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:206
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
ActsTrk::MutableMultiTrajectory
Athena implementation of ACTS::MultiTrajectory (ReadWrite version) The data is stored in 4 external b...
Definition: MultiTrajectory.h:78
OnTrackCalibrator.h
CalibrationContext.h
ActsTrk::KalmanFitterTool::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: KalmanFitterTool.h:167
ActsTrk::KalmanFitterTool::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: KalmanFitterTool.h:215
ActsTrk::KalmanFitterTool::m_uncalibMeasCalibrator
xAODUnCalibrator_t m_uncalibMeasCalibrator
Definition: KalmanFitterTool.h:192
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:181
ActsTrk::KalmanFitterTool::m_option_outlierChi2Cut
Gaudi::Property< double > m_option_outlierChi2Cut
Definition: KalmanFitterTool.h:171
AthAlgTool.h
ActsTrk::KalmanFitterTool::m_option_seedCovarianceScale
Gaudi::Property< double > m_option_seedCovarianceScale
Definition: KalmanFitterTool.h:177
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:149
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:169
ActsTrk::KalmanFitterTool::m_doReFitFromPRD
Gaudi::Property< bool > m_doReFitFromPRD
Definition: KalmanFitterTool.h:219
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:203
ActsTrk::KalmanFitterTool::m_trkSurfAcc
detail::TrkMeasSurfaceAccessor m_trkSurfAcc
Accessor to fetch surfaces from the Trk::MeasurementBase track states (legacy EDM)
Definition: KalmanFitterTool.h:183
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
IFitterTool.h
ActsTrk::KalmanFitterTool::m_reverseFilteringLogic
ActsTrk::detail::FitterHelperFunctions::ReverseFilteringLogic m_reverseFilteringLogic
Definition: KalmanFitterTool.h:207
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:189
FitterHelperFunctions.h
ActsTrk::KalmanFitterTool
Definition: KalmanFitterTool.h:61
IActsToTrkConverterTool.h
ActsTrk::KalmanFitterTool::m_trackingGeometryTool
ToolHandle< IActsTrackingGeometryTool > m_trackingGeometryTool
Definition: KalmanFitterTool.h:168
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
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
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:173
ActsTrk::MutableTrackContainer
Definition: TrackContainer.h:122
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
IActsTrackingGeometryTool.h
IActsExtrapolationTool.h
ActsTrk::KalmanFitterTool::m_prdCalibrator
detail::TrkPrepRawDataCalibrator m_prdCalibrator
Calibrator for the Trk::PrepRawData track states (legacy EDM)
Definition: KalmanFitterTool.h:185