ATLAS Offline Software
KalmanFitter.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ACTSGEOMETRY_KALMANFITTER_H
6 #define ACTSGEOMETRY_KALMANFITTER_H
7 
9 
10 #include "GaudiKernel/ToolHandle.h"
11 
12 
15 
20 
21 
23 #include "GaudiKernel/ToolHandle.h"
24 #include "GaudiKernel/EventContext.h"
25 
26 // ACTS
27 #include "Acts/EventData/TrackParameters.hpp"
28 #include "Acts/TrackFitting/KalmanFitter.hpp"
29 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
30 #include "Acts/Propagator/EigenStepper.hpp"
31 #include "Acts/Propagator/Propagator.hpp"
32 #include "Acts/Propagator/Navigator.hpp"
33 #include "Acts/EventData/TrackProxy.hpp"
34 #include "Acts/EventData/VectorTrackContainer.hpp"
35 #include "Acts/Geometry/GeometryIdentifier.hpp"
36 
37 
38 // PACKAGE
39 
44 
45 #include "MeasurementCalibrator.h"
46 #include "OnTrackCalibrator.h"
47 
48 // STL
49 #include <string>
50 #include <memory>//unique_ptr
51 #include <limits>//for numeric_limits
52 #include <cmath> //std::abs
53 
54 
56 
57 class EventContext;
58 
59 namespace Trk{
60  class Track;
61  class PrepRawData;
62 }
63 
64 namespace ActsTrk {
65 
67  const Trk::PrepRawData* prd {nullptr};
68 };
69 
71  template <typename trajectory_t>
72  void calibrate(const Acts::GeometryContext& gctx,
73  const Acts::CalibrationContext& cctx,
74  const Acts::SourceLink& sl,
75  typename trajectory_t::TrackStateProxy trackState) const;
76 
80 };
81 
84 
85  const Acts::Surface* operator()(const Acts::SourceLink& sourceLink) const;
86 };
87 
88 class KalmanFitter : public extends2<AthAlgTool, Trk::ITrackFitter, ActsTrk::IFitterTool> {
89 public:
90 
91  KalmanFitter(const std::string&,const std::string&,const IInterface*);
92  virtual ~KalmanFitter() = default;
93 
94  // standard Athena methods
95  virtual StatusCode initialize() override;
96 
98  virtual std::unique_ptr<Trk::Track> fit(
99  const EventContext& ctx,
100  const Trk::Track&,
101  const Trk::RunOutlierRemoval runOutlier = false,
102  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
103 
105  virtual std::unique_ptr<Trk::Track> fit(
106  const EventContext& ctx,
107  const Trk::PrepRawDataSet&,
108  const Trk::TrackParameters&,
109  const Trk::RunOutlierRemoval runOutlier = false,
110  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
111 
113  virtual std::unique_ptr<Trk::Track> fit(
114  const EventContext& ctx,
115  const Trk::MeasurementSet&,
116  const Trk::TrackParameters&,
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&,
124  const Trk::PrepRawDataSet&,
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 EventContext& ctx,
132  const std::vector<ActsTrk::ATLASUncalibSourceLink> & clusterList,
133  const Acts::BoundTrackParameters& initialParams,
134  const Acts::GeometryContext& tgContext,
135  const Acts::MagneticFieldContext& mfContext,
136  const Acts::CalibrationContext& calContext,
137  const TrackingSurfaceHelper &tracking_surface_helper,
138  const Acts::Surface* targetSurface = nullptr // optional target surface - defaults to perigee in global origin
139  ) const override;
140 
142  virtual std::unique_ptr<Trk::Track> fit(
143  const EventContext& ctx,
144  const Trk::Track&,
145  const Trk::MeasurementSet&,
146  const Trk::RunOutlierRemoval runOutlier = false,
147  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
148 
150  virtual std::unique_ptr<Trk::Track> fit(
151  const EventContext& ctx,
152  const Trk::Track& intrk1,
153  const Trk::Track& intrk2,
154  const Trk::RunOutlierRemoval runOutlier = false,
155  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
156 
158  virtual
159  std::unique_ptr< ActsTrk::MutableTrackContainer >
160  fit(const EventContext& ctx,
161  const ActsTrk::Seed &seed,
162  const Acts::BoundTrackParameters& initialParams,
163  const Acts::GeometryContext& tgContext,
164  const Acts::MagneticFieldContext& mfContext,
165  const Acts::CalibrationContext& calContext,
166  const TrackingSurfaceHelper &tracking_surface_helper) const override;
167 
169  // Private methods:
171 private:
172 
173  // Create a track from the fitter result
174  std::unique_ptr<Trk::Track> makeTrack(const EventContext& ctx,
175  Acts::GeometryContext& tgContext,
177  Acts::Result<ActsTrk::MutableTrackContainer::TrackProxy, std::error_code>& fitResult, bool SourceLinkType = false) const;
178  //parameter (bool) SourceLinkType to distinguish between ATLASSourceLink and PRDSourceLink implementation.
179  //bool SourceLinkType = false for ATLASSourceLink
180  //bool SourceLinkType = true for PRDSourceLink
181 
182  ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", ""};
183  ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", ""};
184  ToolHandle<ActsTrk::IActsToTrkConverterTool> m_ATLASConverterTool{this, "ATLASConverterTool", ""};
185  ToolHandle<Trk::IExtendedTrackSummaryTool> m_trkSummaryTool {this, "SummaryTool", "", "ToolHandle for track summary tool"};
186  ToolHandle<Trk::IBoundaryCheckTool> m_boundaryCheckTool {this,
187  "BoundaryCheckTool",
188  "",
189  "Boundary checking tool for detector sensitivities"};
190 
191  // the settable job options
192  Gaudi::Property< double > m_option_outlierChi2Cut {this, "OutlierChi2Cut", 12.5,
193  "Chi2 cut used by the outlier finder" };
194  Gaudi::Property< double > m_option_ReverseFilteringPt {this, "ReverseFilteringPt", 1.0 * Acts::UnitConstants::GeV,
195  "Pt cut used for the ReverseFiltering logic"};
196  Gaudi::Property< int > m_option_maxPropagationStep {this, "MaxPropagationStep", 5000,
197  "Maximum number of steps for one propagate call"};
198  Gaudi::Property< double > m_option_seedCovarianceScale {this, "SeedCovarianceScale", 100.,
199  "Scale factor for the input seed covariance when doing refitting"};
200 
201  Gaudi::Property<double> m_overstepLimit{this, "OverstepLimit", 100 * Acts::UnitConstants::mm,
202  "Overstep limit / tolerance for the Eigen stepper (use ACTS units!)"};
203 
204  std::unique_ptr<TrkMeasurementCalibrator> m_calibrator;
205 
207  using Fitter = Acts::KalmanFitter<Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator>, ActsTrk::MutableTrackStateBackend>;
208  std::unique_ptr<Fitter> m_fitter {nullptr};
209 
210  using DirectFitter = Acts::KalmanFitter<Acts::Propagator<Acts::EigenStepper<>, Acts::DirectNavigator>, ActsTrk::MutableTrackStateBackend>;
211  std::unique_ptr<DirectFitter> m_directFitter {nullptr};
212 
213  Acts::KalmanFitterExtensions<ActsTrk::MutableTrackStateBackend> m_kfExtensions;
214 
217 
219  const Acts::Logger& logger() const {
220  return *m_logger;
221  }
222 
224  std::unique_ptr<const Acts::Logger> m_logger;
225 
226  ToolHandle<Trk::IRIO_OnTrackCreator> m_broadROTcreator {this, "BroadRotCreatorTool", ""};
227  ToolHandle<Trk::IRIO_OnTrackCreator> m_ROTcreator {this, "RotCreatorTool", ""};
228  //Gaudi Property to choose from PRD or ROT measurment ReFit
229  Gaudi::Property<bool> m_doReFitFromPRD{this, "DoReFitFromPRD", false, "Do Refit From PRD instead of ROT"};
230 }; // end of namespace
231 
232 }
233 #endif
234 
TrackingSurfaceHelper
Simple helper class which allows to access the tracking surface associated to a certain (Si-)measurem...
Definition: TrackingSurfaceHelper.h:17
ActsTrk::KalmanFitter::initialize
virtual StatusCode initialize() override
Definition: KalmanFitter.cxx:176
ActsTrk::PRDSourceLinkSurfaceAccessor::converterTool
const ActsTrk::IActsToTrkConverterTool * converterTool
Definition: KalmanFitter.h:83
ActsTrk::KalmanFitter::m_option_seedCovarianceScale
Gaudi::Property< double > m_option_seedCovarianceScale
Definition: KalmanFitter.h:198
ActsTrk::KalmanFitter::m_trackingGeometryTool
ToolHandle< IActsTrackingGeometryTool > m_trackingGeometryTool
Definition: KalmanFitter.h:183
Trk::PrepRawDataSet
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
Definition: FitterTypes.h:26
ActsTrk::KalmanFitter::m_outlierFinder
ActsTrk::FitterHelperFunctions::ATLASOutlierFinder m_outlierFinder
Definition: KalmanFitter.h:215
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
ActsTrk::PRDSourceLinkCalibrator::rotCreator
const Trk::IRIO_OnTrackCreator * rotCreator
Definition: KalmanFitter.h:77
ActsTrk::PRDSourceLinkCalibrator::converterTool
const ActsTrk::IActsToTrkConverterTool * converterTool
Definition: KalmanFitter.h:79
ActsTrk::KalmanFitter::m_directFitter
std::unique_ptr< DirectFitter > m_directFitter
Definition: KalmanFitter.h:211
ActsTrk::KalmanFitter::m_option_maxPropagationStep
Gaudi::Property< int > m_option_maxPropagationStep
Definition: KalmanFitter.h:196
ActsTrk::KalmanFitter::m_broadROTcreator
ToolHandle< Trk::IRIO_OnTrackCreator > m_broadROTcreator
Definition: KalmanFitter.h:226
IRIO_OnTrackCreator.h
ActsTrk::Seed
Acts::Seed< xAOD::SpacePoint > Seed
Definition: Seed.h:13
ActsTrk::KalmanFitter::m_reverseFilteringLogic
ActsTrk::FitterHelperFunctions::ReverseFilteringLogic m_reverseFilteringLogic
Definition: KalmanFitter.h:216
ActsTrk::KalmanFitter::m_boundaryCheckTool
ToolHandle< Trk::IBoundaryCheckTool > m_boundaryCheckTool
Definition: KalmanFitter.h:186
ActsTrk::KalmanFitter::Fitter
Acts::KalmanFitter< Acts::Propagator< Acts::EigenStepper<>, Acts::Navigator >, ActsTrk::MutableTrackStateBackend > Fitter
Type erased track fitter function.
Definition: KalmanFitter.h:207
ActsTrk::PRDSourceLinkCalibrator::broadRotCreator
const Trk::IRIO_OnTrackCreator * broadRotCreator
Definition: KalmanFitter.h:78
PdgToParticleHypothesis.h
PrepRawData.h
ActsTrk::KalmanFitter::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: KalmanFitter.h:182
Trk::RunOutlierRemoval
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition: FitterTypes.h:22
ActsTrk::KalmanFitter::KalmanFitter
KalmanFitter(const std::string &, const std::string &, const IInterface *)
Definition: KalmanFitter.cxx:171
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:81
OnTrackCalibrator.h
ActsTrk::KalmanFitter::m_doReFitFromPRD
Gaudi::Property< bool > m_doReFitFromPRD
Definition: KalmanFitter.h:229
ActsTrk::KalmanFitter::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: KalmanFitter.h:224
ActsTrk::KalmanFitter::m_calibrator
std::unique_ptr< TrkMeasurementCalibrator > m_calibrator
Definition: KalmanFitter.h:204
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ActsTrk::IActsToTrkConverterTool
Definition: IActsToTrkConverterTool.h:43
AthAlgTool.h
ActsTrk::KalmanFitter::m_ROTcreator
ToolHandle< Trk::IRIO_OnTrackCreator > m_ROTcreator
Definition: KalmanFitter.h:227
ActsTrk::PRDSourceLinkCalibrator
Definition: KalmanFitter.h:70
Trk::ParametersBase
Definition: ParametersBase.h:55
ActsTrk::KalmanFitter::m_option_ReverseFilteringPt
Gaudi::Property< double > m_option_ReverseFilteringPt
Definition: KalmanFitter.h:194
ActsTrk::KalmanFitter::m_kfExtensions
Acts::KalmanFitterExtensions< ActsTrk::MutableTrackStateBackend > m_kfExtensions
Definition: KalmanFitter.h:213
Trk::MeasurementSet
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition: FitterTypes.h:30
Trk::PrepRawData
Definition: PrepRawData.h:62
MeasurementCalibrator.h
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
ActsTrk::KalmanFitter::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: KalmanFitter.h:184
ActsTrk::KalmanFitter::~KalmanFitter
virtual ~KalmanFitter()=default
ActsTrk::KalmanFitter::m_trkSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trkSummaryTool
Definition: KalmanFitter.h:185
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
IFitterTool.h
ActsTrk::KalmanFitter::m_fitter
std::unique_ptr< Fitter > m_fitter
Definition: KalmanFitter.h:208
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
FitterHelperFunctions.h
ActsTrk::KalmanFitter::m_option_outlierChi2Cut
Gaudi::Property< double > m_option_outlierChi2Cut
Definition: KalmanFitter.h:192
ActsTrk::KalmanFitter::m_overstepLimit
Gaudi::Property< double > m_overstepLimit
Definition: KalmanFitter.h:201
IExtendedTrackSummaryTool.h
ActsTrk::KalmanFitter
Definition: KalmanFitter.h:88
ActsTrk::PRDSourceLinkCalibrator::calibrate
void calibrate(const Acts::GeometryContext &gctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &sl, typename trajectory_t::TrackStateProxy trackState) const
Definition: KalmanFitter.cxx:57
ActsTrk::PRDSourceLinkSurfaceAccessor::operator()
const Acts::Surface * operator()(const Acts::SourceLink &sourceLink) const
Definition: KalmanFitter.cxx:164
IBoundaryCheckTool.h
ActsTrk::PRDSourceLinkSurfaceAccessor
Definition: KalmanFitter.h:82
IActsToTrkConverterTool.h
ActsTrk::FitterHelperFunctions::ReverseFilteringLogic
Determine if the smoothing of a track should be done with or without reverse filtering.
Definition: FitterHelperFunctions.h:79
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:34
ActsTrk::KalmanFitter::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: KalmanFitter.h:219
Trk::IRIO_OnTrackCreator
Interface class for transforming Trk::PrepRawData to Trk::RIO_OnTrack using a local track hypothesis.
Definition: IRIO_OnTrackCreator.h:32
ActsTrk::MutableTrackContainer
Definition: TrackContainer.h:122
ActsTrk::KalmanFitter::makeTrack
std::unique_ptr< Trk::Track > makeTrack(const EventContext &ctx, Acts::GeometryContext &tgContext, ActsTrk::MutableTrackContainer &tracks, Acts::Result< ActsTrk::MutableTrackContainer::TrackProxy, std::error_code > &fitResult, bool SourceLinkType=false) const
Definition: KalmanFitter.cxx:691
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
ITrackFitter.h
TrackContainer.h
IActsTrackingGeometryTool.h
ActsTrk::KalmanFitter::DirectFitter
Acts::KalmanFitter< Acts::Propagator< Acts::EigenStepper<>, Acts::DirectNavigator >, ActsTrk::MutableTrackStateBackend > DirectFitter
Definition: KalmanFitter.h:210
IActsExtrapolationTool.h
ActsTrk::FitterHelperFunctions::ATLASOutlierFinder
Outlier finder using a Chi2 cut.
Definition: FitterHelperFunctions.h:39
ActsTrk::KalmanFitter::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: KalmanFitter.cxx:229