ATLAS Offline Software
GlobalChiSquareFitterTool.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_GLOBALCHISQUAREFITTERTOOL_H
6 #define ACTSGEOMETRY_GLOBALCHISQUAREFITTERTOOL_H
7 
16 
17 
19 // ACTS
20 #include "Acts/EventData/TrackParameters.hpp"
21 #include "Acts/EventData/TrackProxy.hpp"
22 #include "Acts/EventData/VectorTrackContainer.hpp"
23 #include "Acts/Geometry/GeometryIdentifier.hpp"
24 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
25 #include "Acts/Propagator/Navigator.hpp"
26 #include "Acts/Propagator/Propagator.hpp"
27 #include "Acts/Propagator/SympyStepper.hpp"
28 #include "Acts/Propagator/StraightLineStepper.hpp"
29 
30 #include "Acts/TrackFitting/GlobalChiSquareFitter.hpp"
31 
32 // PACKAGE
37 
44 
45 // STL
46 #include <cmath> //std::abs
47 #include <limits> //for numeric_limits
48 #include <memory> //unique_ptr
49 #include <string>
50 
52 
53 
54 
55 namespace Trk {
56 class Track;
57 class PrepRawData;
58 } // namespace Trk
59 
60 namespace ActsTrk {
61 
62 
63 
65  : public extends<AthAlgTool, Trk::ITrackFitter, IFitterTool> {
66  public:
67 
68  using base_class::base_class;
69  virtual ~GlobalChiSquareFitterTool() = default;
70 
71  // standard Athena methods
72  virtual StatusCode initialize() override;
73 
75  virtual std::unique_ptr<Trk::Track> fit(
76  const EventContext& ctx, const Trk::Track&,
77  const Trk::RunOutlierRemoval runOutlier = false,
78  const Trk::ParticleHypothesis matEffects =
79  Trk::nonInteracting) const override;
80 
82  virtual std::unique_ptr<Trk::Track> fit(
83  const EventContext& ctx, const Trk::PrepRawDataSet&,
84  const Trk::TrackParameters&,
85  const Trk::RunOutlierRemoval runOutlier = false,
86  const Trk::ParticleHypothesis matEffects =
87  Trk::nonInteracting) const override;
88 
90  virtual std::unique_ptr<Trk::Track> fit(
91  const EventContext& ctx, const Trk::MeasurementSet&,
92  const Trk::TrackParameters&,
93  const Trk::RunOutlierRemoval runOutlier = false,
94  const Trk::ParticleHypothesis matEffects =
95  Trk::nonInteracting) const override;
96 
98  virtual std::unique_ptr<Trk::Track> fit(
99  const EventContext& ctx, const Trk::Track&, const Trk::PrepRawDataSet&,
100  const Trk::RunOutlierRemoval runOutlier = false,
101  const Trk::ParticleHypothesis matEffects =
102  Trk::nonInteracting) const override;
103 
105  virtual std::unique_ptr<MutableTrackContainer> fit(
106  const std::vector<ATLASUncalibSourceLink>& clusterList,
107  const Acts::BoundTrackParameters& initialParams,
108  const Acts::GeometryContext& tgContext,
109  const Acts::MagneticFieldContext& mfContext,
110  const Acts::CalibrationContext& calContext,
111  const Acts::Surface* targetSurface =
112  nullptr // optional target surface - defaults to perigee in global
113  // origin
114  ) const override;
115 
117  virtual std::unique_ptr<Trk::Track> fit(
118  const EventContext& ctx, const Trk::Track&, const Trk::MeasurementSet&,
119  const Trk::RunOutlierRemoval runOutlier = false,
120  const Trk::ParticleHypothesis matEffects =
121  Trk::nonInteracting) const override;
122 
124  virtual std::unique_ptr<Trk::Track> fit(
125  const EventContext& ctx, const Trk::Track& intrk1,
126  const Trk::Track& intrk2, const Trk::RunOutlierRemoval runOutlier = false,
127  const Trk::ParticleHypothesis matEffects =
128  Trk::nonInteracting) const override;
129 
131  virtual std::unique_ptr<MutableTrackContainer> fit(
132  const Seed& seed,
133  const Acts::BoundTrackParameters& initialParams,
134  const Acts::GeometryContext& tgContext,
135  const Acts::MagneticFieldContext& mfContext,
136  const Acts::CalibrationContext& calContext,
137  const Acts::Surface& targetSurface) const override;
138 
139 
140  virtual StatusCode fit(
141  const EventContext& ctx,
142  const TrackContainer::ConstTrackProxy& track,
144  const Acts::PerigeeSurface& pSurface) const override;
145 
146 
148  using StraightPropagator_t = Acts::Propagator<Acts::StraightLineStepper, Acts::Navigator>;
149  using CurvedPropagator_t = Acts::Propagator<Acts::SympyStepper, Acts::Navigator>;
150 
151  using StraightFitter_t = Acts::Experimental::Gx2Fitter<StraightPropagator_t, MutableTrackStateBackend>;
152  using CurvedFitter_t = Acts::Experimental::Gx2Fitter<CurvedPropagator_t, MutableTrackStateBackend>;
153 
155  using Gx2FitterOptions_t = Acts::Experimental::Gx2FitterOptions<MutableTrackStateBackend>;
157  using Gx2FitterExtension_t = Acts::Experimental::Gx2FitterExtensions<MutableTrackStateBackend>;
158 
159  private:
166  TrackFitResult_t fit(const std::vector<Acts::SourceLink>& soureLinks,
167  const Acts::BoundTrackParameters& initialPars,
168  const Gx2FitterOptions_t& gx2fOptions,
169  MutableTrackContainer& tracks) const;
178  Gx2FitterOptions_t configureFit(const Acts::GeometryContext& tgContext,
179  const Acts::MagneticFieldContext& mfContext,
180  const Acts::CalibrationContext& calContext,
181  const Acts::Surface* surface,
182  detail::SourceLinkType slType) const;
183 
184  ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", ""};
185  PublicToolHandle<ITrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", ""};
186  ToolHandle<IActsToTrkConverterTool> m_ATLASConverterTool{this, "ATLASConverterTool", ""};
187 
188  ToolHandle<MuonR4::ISpacePointCalibrator> m_muonCalibrator{this, "MuonCalibrationTool", ""};
189 
190  ToolHandle<Trk::IRIO_OnTrackCreator> m_ROTcreator{this, "RotCreatorTool", ""};
191 
193  Gaudi::Property<double> m_option_outlierChi2Cut{this, "OutlierChi2Cut", 12.5};
195  Gaudi::Property<unsigned> m_option_maxPropagationStep{this, "MaxPropagationStep", 5000};
197  Gaudi::Property<unsigned> m_option_maxNavSurfaces{this, "MaxSurfacesPerNavStep", 100};
199  Gaudi::Property<bool> m_option_includeELoss{this, "IncludeELoss", true};
201  Gaudi::Property<bool> m_option_includeScat{this, "IncludeScattering", true};
203  Gaudi::Property<bool> m_doReFitFromPRD{this, "DoReFitFromPRD", false};
205  Gaudi::Property<bool> m_doStraightLine{this, "DoStraightLine" , false};
206 
220  static constexpr unsigned s_nExtensions = static_cast<unsigned>(detail::SourceLinkType::nTypes);
221  std::array<Gx2FitterExtension_t, s_nExtensions> m_gx2fExtensions{};
223  std::unique_ptr<CurvedFitter_t> m_fitter{nullptr};
225  std::unique_ptr<StraightFitter_t> m_slFitter{nullptr};
226 
228 
230  const Acts::Logger& logger() const { return *m_logger; }
231 
233  std::unique_ptr<const Acts::Logger> m_logger;
234 
235 
236 };
237 
238 } // namespace ActsTrk
239 #endif
ActsTrk::GlobalChiSquareFitterTool::m_ATLASConverterTool
ToolHandle< IActsToTrkConverterTool > m_ATLASConverterTool
Definition: GlobalChiSquareFitterTool.h:186
TrkPrepRawDataSurfaceAcc.h
ActsTrk::GlobalChiSquareFitterTool::m_doReFitFromPRD
Gaudi::Property< bool > m_doReFitFromPRD
Convert the PRD to a ROT during the calibration.
Definition: GlobalChiSquareFitterTool.h:203
ActsTrk::GlobalChiSquareFitterTool::CurvedFitter_t
Acts::Experimental::Gx2Fitter< CurvedPropagator_t, MutableTrackStateBackend > CurvedFitter_t
Definition: GlobalChiSquareFitterTool.h:152
Trk::PrepRawDataSet
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
Definition: FitterTypes.h:26
ActsTrk::GlobalChiSquareFitterTool::m_trkMeasCalibrator
detail::TrkMeasurementCalibrator m_trkMeasCalibrator
Pass through calibrator of the Trk::MeasurementBase objects from the TrackState container.
Definition: GlobalChiSquareFitterTool.h:208
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
ActsTrk::GlobalChiSquareFitterTool::~GlobalChiSquareFitterTool
virtual ~GlobalChiSquareFitterTool()=default
ActsTrk::GlobalChiSquareFitterTool::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: GlobalChiSquareFitterTool.h:184
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
IRIO_OnTrackCreator.h
ActsTrk::MutableTrackContainer
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
Definition: TrackContainer.h:26
ActsTrk::GlobalChiSquareFitterTool::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: GlobalChiSquareFitterTool.h:233
ISpacePointCalibrator.h
ActsTrk::GlobalChiSquareFitterTool::m_gx2fExtensions
std::array< Gx2FitterExtension_t, s_nExtensions > m_gx2fExtensions
Definition: GlobalChiSquareFitterTool.h:221
ActsTrk::GlobalChiSquareFitterTool::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: GlobalChiSquareFitterTool.h:230
xAODUncalibMeasCalibrator.h
ActsTrk::GlobalChiSquareFitterTool::StraightFitter_t
Acts::Experimental::Gx2Fitter< StraightPropagator_t, MutableTrackStateBackend > StraightFitter_t
Definition: GlobalChiSquareFitterTool.h:151
ActsTrk::GlobalChiSquareFitterTool::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: GlobalChiSquareFitterTool.cxx:148
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder
Outlier finder using a Chi2 cut.
Definition: FitterHelperFunctions.h:49
PdgToParticleHypothesis.h
ActsTrk::GlobalChiSquareFitterTool::m_option_outlierChi2Cut
Gaudi::Property< double > m_option_outlierChi2Cut
Chi2 cut used by the outlier finder.
Definition: GlobalChiSquareFitterTool.h:193
PrepRawData.h
TrkPrepRawDataCalibrator.h
Trk::RunOutlierRemoval
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition: FitterTypes.h:22
ActsTrk::GlobalChiSquareFitterTool::m_uncalibMeasCalibrator
detail::xAODUncalibMeasCalibrator m_uncalibMeasCalibrator
Calibrator for the uncalibrated xAOD::UnCalibratedMeasurement objects.
Definition: GlobalChiSquareFitterTool.h:218
ActsTrk::GlobalChiSquareFitterTool::m_prdSurfaceAcc
detail::TrkPrepRawDataSurfaceAcc m_prdSurfaceAcc
Surface accessor delegate for Trk::PrepRawData objects.
Definition: GlobalChiSquareFitterTool.h:214
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:28
ActsTrk::GlobalChiSquareFitterTool::StraightPropagator_t
Acts::Propagator< Acts::StraightLineStepper, Acts::Navigator > StraightPropagator_t
Type erased track fitter function.
Definition: GlobalChiSquareFitterTool.h:148
ActsTrk::GlobalChiSquareFitterTool::m_option_maxNavSurfaces
Gaudi::Property< unsigned > m_option_maxNavSurfaces
Number of maximum surfaces to be tried before the navigrator aborts.
Definition: GlobalChiSquareFitterTool.h:197
ActsTrk::GlobalChiSquareFitterTool::m_trackingGeometryTool
PublicToolHandle< ITrackingGeometryTool > m_trackingGeometryTool
Definition: GlobalChiSquareFitterTool.h:185
ActsTrk::GlobalChiSquareFitterTool::m_muonCalibrator
ToolHandle< MuonR4::ISpacePointCalibrator > m_muonCalibrator
Definition: GlobalChiSquareFitterTool.h:188
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
ActsTrk::GlobalChiSquareFitterTool::m_prdCalibrator
detail::TrkPrepRawDataCalibrator m_prdCalibrator
Calibrator of the uncalibrated Trk::PrepRawData objects to RIO_OnTrack objects.
Definition: GlobalChiSquareFitterTool.h:210
ActsTrk::GlobalChiSquareFitterTool
Definition: GlobalChiSquareFitterTool.h:65
ActsTrk::GlobalChiSquareFitterTool::m_option_maxPropagationStep
Gaudi::Property< unsigned > m_option_maxPropagationStep
Maximum number of steps per propagation call.
Definition: GlobalChiSquareFitterTool.h:195
ActsTrk::detail::SourceLinkType
SourceLinkType
Enumeration to distinguish between the ATLAS EDM -> Acts::SourceLink variants.
Definition: SourceLinkType.h:9
Trk::ParametersBase
Definition: ParametersBase.h:55
python.TrackLeptonConfig.trackContainer
string trackContainer
Definition: TrackLeptonConfig.py:23
ActsTrk::GlobalChiSquareFitterTool::TrackFitResult_t
IActsToTrkConverterTool::TrackFitResult_t TrackFitResult_t
Definition: GlobalChiSquareFitterTool.h:160
ActsTrk::GlobalChiSquareFitterTool::m_trkMeasSurfAcc
detail::TrkMeasSurfaceAccessor m_trkMeasSurfAcc
Surface accessor delegate for Trk::MeasurementBase objects.
Definition: GlobalChiSquareFitterTool.h:212
Trk::MeasurementSet
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition: FitterTypes.h:30
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
ActsTrk::GlobalChiSquareFitterTool::initialize
virtual StatusCode initialize() override
Definition: GlobalChiSquareFitterTool.cxx:45
ActsTrk::GlobalChiSquareFitterTool::m_ROTcreator
ToolHandle< Trk::IRIO_OnTrackCreator > m_ROTcreator
Definition: GlobalChiSquareFitterTool.h:190
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:28
IFitterTool.h
ActsTrk::GlobalChiSquareFitterTool::m_option_includeScat
Gaudi::Property< bool > m_option_includeScat
Consider multiple scattering of the particle.
Definition: GlobalChiSquareFitterTool.h:201
ActsTrk::GlobalChiSquareFitterTool::m_fitter
std::unique_ptr< CurvedFitter_t > m_fitter
The underlying curved Acts fitter.
Definition: GlobalChiSquareFitterTool.h:223
ActsTrk::ActsSeed
Definition: Seed.h:18
ActsTrk::GlobalChiSquareFitterTool::m_slFitter
std::unique_ptr< StraightFitter_t > m_slFitter
The underlying straight line Acts fitter.
Definition: GlobalChiSquareFitterTool.h:225
ActsTrk::GlobalChiSquareFitterTool::Gx2FitterExtension_t
Acts::Experimental::Gx2FitterExtensions< MutableTrackStateBackend > Gx2FitterExtension_t
Abbrivation of the fitter extensions.
Definition: GlobalChiSquareFitterTool.h:157
xAODUncalibMeasSurfAcc.h
TrkMeasSurfaceAccessor.h
ActsTrk::detail::xAODUncalibMeasCalibrator
Source link calibrator implementation for xAOD::Uncalibrated measurements.
Definition: xAODUncalibMeasCalibrator.h:19
ActsTrk::GlobalChiSquareFitterTool::m_unalibMeasSurfAcc
detail::xAODUncalibMeasSurfAcc m_unalibMeasSurfAcc
Surface accessor delegate for xAOD::UncalibratedMeasurement objects.
Definition: GlobalChiSquareFitterTool.h:216
FitterHelperFunctions.h
IExtendedTrackSummaryTool.h
ActsTrk::GlobalChiSquareFitterTool::Gx2FitterOptions_t
Acts::Experimental::Gx2FitterOptions< MutableTrackStateBackend > Gx2FitterOptions_t
Abbrivation of the configuration to launch the fit
Definition: GlobalChiSquareFitterTool.h:155
ActsTrk::GlobalChiSquareFitterTool::configureFit
Gx2FitterOptions_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: GlobalChiSquareFitterTool.cxx:130
IBoundaryCheckTool.h
TrkMeasurementCalibrator.h
ITrackingGeometryTool.h
ActsTrk::IActsToTrkConverterTool::TrackFitResult_t
Acts::Result< ActsTrk::MutableTrackContainer::TrackProxy, std::error_code > TrackFitResult_t
Convert the Acts fit result into a Trk::Track object, if the fit was successful.
Definition: IActsToTrkConverterTool.h:100
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:25
ActsTrk::GlobalChiSquareFitterTool::m_doStraightLine
Gaudi::Property< bool > m_doStraightLine
Option to toggle whether a straight line fitter shall be used.
Definition: GlobalChiSquareFitterTool.h:205
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::SourceLinkType::nTypes
@ nTypes
Uncalbirated xAOD::UnCalibratedMEeasurement objects.
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
ActsTrk::GlobalChiSquareFitterTool::m_outlierFinder
detail::FitterHelperFunctions::ATLASOutlierFinder m_outlierFinder
Definition: GlobalChiSquareFitterTool.h:227
IActsExtrapolationTool.h
ActsTrk::GlobalChiSquareFitterTool::m_option_includeELoss
Gaudi::Property< bool > m_option_includeELoss
Consider particle's energy loss in the fit
Definition: GlobalChiSquareFitterTool.h:199
ActsTrk::GlobalChiSquareFitterTool::s_nExtensions
static constexpr unsigned s_nExtensions
Array of all configured fitter extensions depending on which source link type is in use.
Definition: GlobalChiSquareFitterTool.h:220
ActsTrk::GlobalChiSquareFitterTool::CurvedPropagator_t
Acts::Propagator< Acts::SympyStepper, Acts::Navigator > CurvedPropagator_t
Definition: GlobalChiSquareFitterTool.h:149