ATLAS Offline Software
Loading...
Searching...
No Matches
GlobalChiSquareFitterTool.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 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#include "Acts/Propagator/EigenStepper.hpp"
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
55namespace Trk {
56class Track;
57class PrepRawData;
58} // namespace Trk
59
60namespace 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&,
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&,
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,
143 MutableTrackContainer& trackContainer,
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::EigenStepper<>, 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<ActsTrk::IExtrapolationTool> 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};
207 Gaudi::Property<bool> m_doJacobianCorr{this, "DoFreeToBoundCorrection", false };
209 Gaudi::Property<unsigned> m_nIterMax{this, "MaxIterations", 5};
223 static constexpr unsigned s_nExtensions = static_cast<unsigned>(detail::SourceLinkType::nTypes);
224 std::array<Gx2FitterExtension_t, s_nExtensions> m_gx2fExtensions{};
226 std::unique_ptr<CurvedFitter_t> m_fitter{nullptr};
228 std::unique_ptr<StraightFitter_t> m_slFitter{nullptr};
229
231
233 const Acts::Logger& logger() const { return *m_logger; }
234
236 std::unique_ptr<const Acts::Logger> m_logger;
237
238
239};
240
241} // namespace ActsTrk
242#endif
Acts::Experimental::Gx2FitterOptions< MutableTrackStateBackend > Gx2FitterOptions_t
Abbrivation of the configuration to launch the fit.
Gaudi::Property< bool > m_doReFitFromPRD
Convert the PRD to a ROT during the calibration.
Gaudi::Property< double > m_option_outlierChi2Cut
Chi2 cut used by the outlier finder.
virtual ~GlobalChiSquareFitterTool()=default
Acts::Experimental::Gx2Fitter< CurvedPropagator_t, MutableTrackStateBackend > CurvedFitter_t
std::unique_ptr< const Acts::Logger > m_logger
logging instance
static constexpr unsigned s_nExtensions
Array of all configured fitter extensions depending on which source link type is in use.
detail::TrkMeasSurfaceAccessor m_trkMeasSurfAcc
Surface accessor delegate for Trk::MeasurementBase objects.
detail::TrkPrepRawDataCalibrator m_prdCalibrator
Calibrator of the uncalibrated Trk::PrepRawData objects to RIO_OnTrack objects.
Acts::Propagator< Acts::StraightLineStepper, Acts::Navigator > StraightPropagator_t
Type erased track fitter function.
const Acts::Logger & logger() const
Private access to the logger.
Gaudi::Property< bool > m_doJacobianCorr
Account for non linear effects from free -> bound jacobian.
ToolHandle< MuonR4::ISpacePointCalibrator > m_muonCalibrator
ToolHandle< ActsTrk::IExtrapolationTool > m_extrapolationTool
ToolHandle< IActsToTrkConverterTool > m_ATLASConverterTool
Acts::Experimental::Gx2FitterExtensions< MutableTrackStateBackend > Gx2FitterExtension_t
Abbrivation of the fitter extensions.
std::array< Gx2FitterExtension_t, s_nExtensions > m_gx2fExtensions
Gaudi::Property< unsigned > m_option_maxPropagationStep
Maximum number of steps per propagation call.
detail::FitterHelperFunctions::ATLASOutlierFinder m_outlierFinder
Gaudi::Property< bool > m_option_includeScat
Consider multiple scattering of the particle.
PublicToolHandle< ITrackingGeometryTool > m_trackingGeometryTool
IActsToTrkConverterTool::TrackFitResult_t TrackFitResult_t
detail::TrkPrepRawDataSurfaceAcc m_prdSurfaceAcc
Surface accessor delegate for Trk::PrepRawData objects.
ToolHandle< Trk::IRIO_OnTrackCreator > m_ROTcreator
std::unique_ptr< StraightFitter_t > m_slFitter
The underlying straight line Acts fitter.
Gaudi::Property< bool > m_option_includeELoss
Consider particle's energy loss in the fit.
Gaudi::Property< unsigned > m_option_maxNavSurfaces
Number of maximum surfaces to be tried before the navigrator aborts.
std::unique_ptr< CurvedFitter_t > m_fitter
The underlying curved Acts fitter.
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.
detail::TrkMeasurementCalibrator m_trkMeasCalibrator
Pass through calibrator of the Trk::MeasurementBase objects from the TrackState container.
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
detail::xAODUncalibMeasSurfAcc m_unalibMeasSurfAcc
Surface accessor delegate for xAOD::UncalibratedMeasurement objects.
Acts::Experimental::Gx2Fitter< StraightPropagator_t, MutableTrackStateBackend > StraightFitter_t
Acts::Propagator< Acts::EigenStepper<>, Acts::Navigator > CurvedPropagator_t
Gaudi::Property< unsigned > m_nIterMax
Number of iterations a fit may take.
Gaudi::Property< bool > m_doStraightLine
Option to toggle whether a straight line fitter shall be used.
detail::xAODUncalibMeasCalibrator m_uncalibMeasCalibrator
Calibrator for the uncalibrated xAOD::UnCalibratedMeasurement objects.
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.
Helper class to access the Acts::Surface for a given Acts::SourceLink which is poiniting to a Trk::Me...
Calibrator class that links the legacy Trk::MeasurementBase objects with the Acts MultiTrajectory tra...
Class to calibrate the Acts track states with uncalibrated Trk::PrepRaw data objects.
Helper class to access the Acts::surface associated with a Trk::PrepRawData measurement.
Source link calibrator implementation for xAOD::Uncalibrated measurements.
Helper class to access the Acts::surface associated with an Uncalibrated xAOD measurement.
SourceLinkType
Enumeration to distinguish between the ATLAS EDM -> Acts::SourceLink variants.
@ nTypes
Uncalbirated xAOD::UnCalibratedMEeasurement objects.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
Ensure that the ATLAS eigen extensions are properly loaded.
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition FitterTypes.h:30
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition FitterTypes.h:22
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
Definition FitterTypes.h:26