ATLAS Offline Software
GaussianSumFitterTool.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_GAUSSIANSUMFITTERTOOL_H
6 #define ACTSTRACKRECONSTRUCTION_GAUSSIANSUMFITTERTOOL_H
7 
8 // ATHENA
10 #include "GaudiKernel/ToolHandle.h"
14 
15 // ACTS
16 #include "Acts/EventData/VectorMultiTrajectory.hpp"
17 #include "Acts/Geometry/GeometryContext.hpp"
18 #include "Acts/Utilities/Result.hpp"
19 #include "Acts/TrackFitting/GaussianSumFitter.hpp"
20 #include "Acts/Propagator/Propagator.hpp"
21 #include "Acts/Propagator/MultiEigenStepperLoop.hpp"
22 #include "Acts/Propagator/Navigator.hpp"
23 #include "Acts/TrackFitting/BetheHeitlerApprox.hpp"
24 #include "Acts/TrackFitting/GsfOptions.hpp"
25 #include "Acts/Utilities/Logger.hpp"
26 
27 // PACKAGE
34 
37 
38 // STL
39 #include <string>
40 #include <memory>
41 
42 
43 
44 namespace ActsTrk {
45 
47  : public extends<AthAlgTool, Trk::ITrackFitter, ActsTrk::IFitterTool> {
48 public:
49 
50  GaussianSumFitterTool(const std::string&, const std::string&, const IInterface*);
51  virtual ~GaussianSumFitterTool() = default;
52 
53  // standard Athena methods
54  virtual StatusCode initialize() override;
55 
57  virtual std::unique_ptr<Trk::Track> fit(
58  const EventContext& ctx,
59  const Trk::Track&,
60  const Trk::RunOutlierRemoval runOutlier = false,
61  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
62 
64  virtual std::unique_ptr<Trk::Track> fit(
65  const EventContext& ctx,
66  const Trk::PrepRawDataSet&,
67  const Trk::TrackParameters&,
68  const Trk::RunOutlierRemoval runOutlier = false,
69  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
70 
72  virtual std::unique_ptr<Trk::Track> fit(
73  const EventContext& ctx,
74  const Trk::MeasurementSet&,
75  const Trk::TrackParameters&,
76  const Trk::RunOutlierRemoval runOutlier = false,
77  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
78 
80  virtual std::unique_ptr<Trk::Track> fit(
81  const EventContext& ctx,
82  const Trk::Track&,
83  const Trk::PrepRawDataSet&,
84  const Trk::RunOutlierRemoval runOutlier = false,
85  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
86 
88  virtual std::unique_ptr<Trk::Track> fit(
89  const EventContext& ctx,
90  const Trk::Track&,
91  const Trk::MeasurementSet&,
92  const Trk::RunOutlierRemoval runOutlier = false,
93  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
94 
96  virtual std::unique_ptr<Trk::Track> fit(
97  const EventContext& ctx,
98  const Trk::Track& intrk1,
99  const Trk::Track& intrk2,
100  const Trk::RunOutlierRemoval runOutlier = false,
101  const Trk::ParticleHypothesis matEffects = Trk::nonInteracting) const override;
102 
104  virtual
105  std::unique_ptr< ActsTrk::MutableTrackContainer >
106  fit(const ActsTrk::Seed &seed,
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) const override;
112 
113  virtual
114  std::unique_ptr< ActsTrk::MutableTrackContainer >
115  fit(const std::vector< ActsTrk::ATLASUncalibSourceLink> & clusterList,
116  const Acts::BoundTrackParameters& initialParams,
117  const Acts::GeometryContext& tgContext,
118  const Acts::MagneticFieldContext& mfContext,
119  const Acts::CalibrationContext& calContext,
120  const Acts::Surface* targetSurface) const override;
121 
122  virtual StatusCode fit(
123  const EventContext& ctx,
124  const ActsTrk::TrackContainer::ConstTrackProxy& track,
126  const Acts::PerigeeSurface& pSurface) const override;
127 
129  // Private methods:
131 private:
132  Acts::GsfOptions<ActsTrk::MutableTrackStateBackend> prepareOptions(const Acts::GeometryContext& tgContext,
133  const Acts::MagneticFieldContext& mfContext,
134  const Acts::CalibrationContext& calContext,
135  const Acts::PerigeeSurface& surface) const;
136 
137  std::unique_ptr<Trk::Track> performFit(const EventContext& ctx,
138  const Acts::GeometryContext& tgContext,
139  const Acts::GsfOptions<ActsTrk::MutableTrackStateBackend>& gsfOptions,
140  const std::vector<Acts::SourceLink>& trackSourceLinks,
141  const Acts::BoundTrackParameters& initialParams) const;
142 
143  std::unique_ptr<Trk::Track> performDirectFit(const EventContext& ctx,
144  const Acts::GeometryContext& tgContext,
145  const Acts::GsfOptions<ActsTrk::MutableTrackStateBackend>& gsfOptions,
146  const std::vector<Acts::SourceLink>& trackSourceLinks,
147  const Acts::BoundTrackParameters& initialParams,
148  const std::vector<const Acts::Surface*>& surfaces) const;
149 
150  // Create a track from the fitter result
151  std::unique_ptr<Trk::Track> makeTrack(const EventContext& ctx,
152  const Acts::GeometryContext& tgContext,
154  Acts::Result<typename ActsTrk::MutableTrackContainer::TrackProxy, std::error_code>& fitResult) const;
155 
156  const Acts::GsfExtensions<ActsTrk::MutableTrackStateBackend>& getExtensions() const;
157 
159  const Acts::Logger& logger() const;
160 
161  private:
162  ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", ""};
163  PublicToolHandle<ActsTrk::ITrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", ""};
164  ToolHandle<ActsTrk::IActsToTrkConverterTool> m_ATLASConverterTool{this, "ATLASConverterTool", ""};
165  ToolHandle<Trk::IExtendedTrackSummaryTool> m_trkSummaryTool {this, "SummaryTool", "", "ToolHandle for track summary tool"};
166  ToolHandle<Trk::IBoundaryCheckTool> m_boundaryCheckTool {this,
167  "BoundaryCheckTool",
168  "",
169  "Boundary checking tool for detector sensitivities"};
170 
171  // the settable job options
172  Gaudi::Property< double > m_option_outlierChi2Cut {this, "OutlierChi2Cut", 12.5,
173  "Chi2 cut used by the outlier finder" };
174  Gaudi::Property< int > m_option_maxPropagationStep {this, "MaxPropagationStep", 5000,
175  "Maximum number of steps for one propagate call"};
176 
177  Gaudi::Property< int > m_maxComponents {this, "MaxComponents", 12,
178  "Maximum number of components in GSF"};
179 
180  Gaudi::Property<bool> m_useDirectNavigation{this, "UseDirectNavigation", false,
181  "GSF with direct navigation when refitting measurements"};
182 
183  Gaudi::Property<bool> m_refitOnly{this, "RefitOnly", false,
184  "Do refit only. Track summary will not be added"};
185 
186  Gaudi::Property< double > m_weightCutOff {this, "WeightCutOff", 1.e-4,
187  "component weight cut off"};
188 
189  Gaudi::Property<std::string> m_option_componentMergeMethod{this, "ComponentMergeMethod", "MaxWeight"
190  , "method to merge components {Mean, MaxWeight}"};
191 
192  Acts::ComponentMergeMethod m_componentMergeMethod;
193 
195  using Fitter = Acts::GaussianSumFitter< Acts::Propagator<Acts::MultiEigenStepperLoop<>, Acts::Navigator>,
196  Acts::AtlasBetheHeitlerApprox<6, 5>,
198 
199  std::unique_ptr<ActsTrk::detail::TrkMeasurementCalibrator> m_calibrator {nullptr};
200  std::unique_ptr<Fitter> m_fitter {nullptr};
201 
202  using DirectFitter = Acts::GaussianSumFitter< Acts::Propagator<Acts::MultiEigenStepperLoop<>, Acts::DirectNavigator>,
203  Acts::AtlasBetheHeitlerApprox<6, 5>,
205  std::unique_ptr<DirectFitter> m_directFitter {nullptr};
206 
207 
209  Acts::GsfExtensions<ActsTrk::MutableTrackStateBackend> m_gsfExtensions;
210 
212 
214  std::unique_ptr<const Acts::Logger> m_logger {nullptr};
215 
216 }; // end of namespace
217 
218 }
219 
220 #endif
221 
Trk::PrepRawDataSet
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
Definition: FitterTypes.h:26
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
ActsTrk::GaussianSumFitterTool::prepareOptions
Acts::GsfOptions< ActsTrk::MutableTrackStateBackend > prepareOptions(const Acts::GeometryContext &tgContext, const Acts::MagneticFieldContext &mfContext, const Acts::CalibrationContext &calContext, const Acts::PerigeeSurface &surface) const
Definition: GaussianSumFitterTool.cxx:631
ActsTrk::GaussianSumFitterTool::m_trkSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trkSummaryTool
Definition: GaussianSumFitterTool.h:165
ActsTrk::GaussianSumFitterTool::~GaussianSumFitterTool
virtual ~GaussianSumFitterTool()=default
ActsTrk::detail::Navigator
Acts::Navigator Navigator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:31
ActsTrk::MutableTrackContainer
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
Definition: TrackContainer.h:26
ActsTrk::GaussianSumFitterTool::initialize
virtual StatusCode initialize() override
Definition: GaussianSumFitterTool.cxx:56
ActsTrk::GaussianSumFitterTool::m_componentMergeMethod
Acts::ComponentMergeMethod m_componentMergeMethod
Definition: GaussianSumFitterTool.h:192
ActsTrk::GaussianSumFitterTool::performFit
std::unique_ptr< Trk::Track > performFit(const EventContext &ctx, const Acts::GeometryContext &tgContext, const Acts::GsfOptions< ActsTrk::MutableTrackStateBackend > &gsfOptions, const std::vector< Acts::SourceLink > &trackSourceLinks, const Acts::BoundTrackParameters &initialParams) const
Definition: GaussianSumFitterToolFullFit.cxx:20
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder
Outlier finder using a Chi2 cut.
Definition: FitterHelperFunctions.h:49
ActsTrk::GaussianSumFitterTool::GaussianSumFitterTool
GaussianSumFitterTool(const std::string &, const std::string &, const IInterface *)
Definition: GaussianSumFitterTool.cxx:50
Trk::RunOutlierRemoval
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition: FitterTypes.h:22
ActsTrk::GaussianSumFitterTool::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: GaussianSumFitterTool.h:214
ActsTrk::GaussianSumFitterTool::m_maxComponents
Gaudi::Property< int > m_maxComponents
Definition: GaussianSumFitterTool.h:177
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:28
ActsTrk::GaussianSumFitterTool::m_boundaryCheckTool
ToolHandle< Trk::IBoundaryCheckTool > m_boundaryCheckTool
Definition: GaussianSumFitterTool.h:166
ActsTrk::GaussianSumFitterTool::performDirectFit
std::unique_ptr< Trk::Track > performDirectFit(const EventContext &ctx, const Acts::GeometryContext &tgContext, const Acts::GsfOptions< ActsTrk::MutableTrackStateBackend > &gsfOptions, const std::vector< Acts::SourceLink > &trackSourceLinks, const Acts::BoundTrackParameters &initialParams, const std::vector< const Acts::Surface * > &surfaces) const
Definition: GaussianSumFitterToolDirectFit.cxx:23
ActsTrk::GaussianSumFitterTool::m_trackingGeometryTool
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
Definition: GaussianSumFitterTool.h:163
ActsTrk::GaussianSumFitterTool::m_option_componentMergeMethod
Gaudi::Property< std::string > m_option_componentMergeMethod
Definition: GaussianSumFitterTool.h:189
ActsTrk::GaussianSumFitterTool::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: GaussianSumFitterTool.cxx:625
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
ActsTrk::GaussianSumFitterTool::m_option_maxPropagationStep
Gaudi::Property< int > m_option_maxPropagationStep
Definition: GaussianSumFitterTool.h:174
ActsTrk::GaussianSumFitterTool::m_outlierFinder
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder m_outlierFinder
Definition: GaussianSumFitterTool.h:211
Trk::ParametersBase
Definition: ParametersBase.h:55
python.TrackLeptonConfig.trackContainer
string trackContainer
Definition: TrackLeptonConfig.py:23
ActsTrk::GaussianSumFitterTool::Fitter
Acts::GaussianSumFitter< Acts::Propagator< Acts::MultiEigenStepperLoop<>, Acts::Navigator >, Acts::AtlasBetheHeitlerApprox< 6, 5 >, ActsTrk::MutableTrackStateBackend > Fitter
Type erased track fitter function.
Definition: GaussianSumFitterTool.h:197
ActsTrk::GaussianSumFitterTool::m_gsfExtensions
Acts::GsfExtensions< ActsTrk::MutableTrackStateBackend > m_gsfExtensions
Definition: GaussianSumFitterTool.h:209
ActsTrk::GaussianSumFitterTool::m_useDirectNavigation
Gaudi::Property< bool > m_useDirectNavigation
Definition: GaussianSumFitterTool.h:180
ActsTrk::GaussianSumFitterTool::m_refitOnly
Gaudi::Property< bool > m_refitOnly
Definition: GaussianSumFitterTool.h:183
Trk::MeasurementSet
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition: FitterTypes.h:30
ActsTrk::GaussianSumFitterTool
Definition: GaussianSumFitterTool.h:47
ActsTrk::GaussianSumFitterTool::m_calibrator
std::unique_ptr< ActsTrk::detail::TrkMeasurementCalibrator > m_calibrator
Definition: GaussianSumFitterTool.h:199
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:28
IFitterTool.h
ActsTrk::GaussianSumFitterTool::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: GaussianSumFitterTool.cxx:125
ActsTrk::GaussianSumFitterTool::m_weightCutOff
Gaudi::Property< double > m_weightCutOff
Definition: GaussianSumFitterTool.h:186
ActsTrk::MutableTrackStateBackend
Acts::VectorMultiTrajectory MutableTrackStateBackend
Definition: TrackContainer.h:17
ActsTrk::ActsSeed
Definition: Seed.h:18
TrkMeasSurfaceAccessor.h
ActsTrk::GaussianSumFitterTool::getExtensions
const Acts::GsfExtensions< ActsTrk::MutableTrackStateBackend > & getExtensions() const
Definition: GaussianSumFitterTool.cxx:618
ActsTrk::GaussianSumFitterTool::m_directFitter
std::unique_ptr< DirectFitter > m_directFitter
Definition: GaussianSumFitterTool.h:205
FitterHelperFunctions.h
IExtendedTrackSummaryTool.h
ActsTrk::GaussianSumFitterTool::m_surfaceAccessor
detail::TrkMeasSurfaceAccessor m_surfaceAccessor
Definition: GaussianSumFitterTool.h:208
ActsTrk::GaussianSumFitterTool::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: GaussianSumFitterTool.h:164
IBoundaryCheckTool.h
TrkMeasurementCalibrator.h
ITrackingGeometryTool.h
IActsToTrkConverterTool.h
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:24
ActsTrk::GaussianSumFitterTool::m_fitter
std::unique_ptr< Fitter > m_fitter
Definition: GaussianSumFitterTool.h:200
ActsTrk::GaussianSumFitterTool::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: GaussianSumFitterTool.h:162
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
ActsTrk::GaussianSumFitterTool::m_option_outlierChi2Cut
Gaudi::Property< double > m_option_outlierChi2Cut
Definition: GaussianSumFitterTool.h:172
ActsTrk::GaussianSumFitterTool::DirectFitter
Acts::GaussianSumFitter< Acts::Propagator< Acts::MultiEigenStepperLoop<>, Acts::DirectNavigator >, Acts::AtlasBetheHeitlerApprox< 6, 5 >, ActsTrk::MutableTrackStateBackend > DirectFitter
Definition: GaussianSumFitterTool.h:204
ActsTrk::GaussianSumFitterTool::makeTrack
std::unique_ptr< Trk::Track > makeTrack(const EventContext &ctx, const Acts::GeometryContext &tgContext, ActsTrk::MutableTrackContainer &tracks, Acts::Result< typename ActsTrk::MutableTrackContainer::TrackProxy, std::error_code > &fitResult) const
Definition: GaussianSumFitterTool.cxx:465
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
IActsExtrapolationTool.h