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
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 EventContext& ctx,
107  const ActsTrk::Seed &seed,
108  const Acts::BoundTrackParameters& initialParams,
109  const Acts::GeometryContext& tgContext,
110  const Acts::MagneticFieldContext& mfContext,
111  const Acts::CalibrationContext& calContext,
112  const DetectorElementToActsGeometryIdMap &detectorElementToGeometryIdMap) const override;
113 
114  virtual
115  std::unique_ptr< ActsTrk::MutableTrackContainer >
116  fit(const EventContext& ctx,
117  const std::vector< ActsTrk::ATLASUncalibSourceLink> & clusterList,
118  const Acts::BoundTrackParameters& initialParams,
119  const Acts::GeometryContext& tgContext,
120  const Acts::MagneticFieldContext& mfContext,
121  const Acts::CalibrationContext& calContext,
122  const DetectorElementToActsGeometryIdMap &detectorElementToGeometryIdMap,
123  const Acts::Surface* targetSurface) const override;
124 
125  virtual StatusCode fit(
126  const EventContext& ctx,
127  const ActsTrk::TrackContainer::ConstTrackProxy& track,
129 
131  // Private methods:
133 private:
134  Acts::GsfOptions<ActsTrk::MutableTrackStateBackend> prepareOptions(const Acts::GeometryContext& tgContext,
135  const Acts::MagneticFieldContext& mfContext,
136  const Acts::CalibrationContext& calContext,
137  const Acts::PerigeeSurface& surface) const;
138 
139  std::unique_ptr<Trk::Track> performFit(const EventContext& ctx,
140  const Acts::GeometryContext& tgContext,
141  const Acts::GsfOptions<ActsTrk::MutableTrackStateBackend>& gsfOptions,
142  const std::vector<Acts::SourceLink>& trackSourceLinks,
143  const Acts::BoundTrackParameters& initialParams) const;
144 
145  std::unique_ptr<Trk::Track> performDirectFit(const EventContext& ctx,
146  const Acts::GeometryContext& tgContext,
147  const Acts::GsfOptions<ActsTrk::MutableTrackStateBackend>& gsfOptions,
148  const std::vector<Acts::SourceLink>& trackSourceLinks,
149  const Acts::BoundTrackParameters& initialParams,
150  const std::vector<const Acts::Surface*>& surfaces) const;
151 
152  // Create a track from the fitter result
153  std::unique_ptr<Trk::Track> makeTrack(const EventContext& ctx,
154  const Acts::GeometryContext& tgContext,
156  Acts::Result<typename ActsTrk::MutableTrackContainer::TrackProxy, std::error_code>& fitResult) const;
157 
158  const Acts::GsfExtensions<ActsTrk::MutableTrackStateBackend>& getExtensions() const;
159 
161  const Acts::Logger& logger() const;
162 
163  private:
164  ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", ""};
165  ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", ""};
166  ToolHandle<ActsTrk::IActsToTrkConverterTool> m_ATLASConverterTool{this, "ATLASConverterTool", ""};
167  ToolHandle<Trk::IExtendedTrackSummaryTool> m_trkSummaryTool {this, "SummaryTool", "", "ToolHandle for track summary tool"};
168  ToolHandle<Trk::IBoundaryCheckTool> m_boundaryCheckTool {this,
169  "BoundaryCheckTool",
170  "",
171  "Boundary checking tool for detector sensitivities"};
172 
173  // the settable job options
174  Gaudi::Property< double > m_option_outlierChi2Cut {this, "OutlierChi2Cut", 12.5,
175  "Chi2 cut used by the outlier finder" };
176  Gaudi::Property< int > m_option_maxPropagationStep {this, "MaxPropagationStep", 5000,
177  "Maximum number of steps for one propagate call"};
178 
179  Gaudi::Property< int > m_maxComponents {this, "MaxComponents", 12,
180  "Maximum number of components in GSF"};
181 
182  Gaudi::Property<bool> m_useDirectNavigation{this, "UseDirectNavigation", false,
183  "GSF with direct navigation when refitting measurements"};
184 
185  Gaudi::Property<bool> m_refitOnly{this, "RefitOnly", false,
186  "Do refit only. Track summary will not be added"};
187 
188  Gaudi::Property< double > m_weightCutOff {this, "WeightCutOff", 1.e-4,
189  "component weight cut off"};
190 
191  Gaudi::Property<std::string> m_option_componentMergeMethod{this, "ComponentMergeMethod", "MaxWeight"
192  , "method to merge components {Mean, MaxWeight}"};
193 
194  Acts::ComponentMergeMethod m_componentMergeMethod;
195 
197  using Fitter = Acts::GaussianSumFitter< Acts::Propagator<Acts::MultiEigenStepperLoop<>, Acts::Navigator>,
198  Acts::AtlasBetheHeitlerApprox<6, 5>,
200 
201  std::unique_ptr<ActsTrk::detail::TrkMeasurementCalibrator> m_calibrator {nullptr};
202  std::unique_ptr<Fitter> m_fitter {nullptr};
203 
204  using DirectFitter = Acts::GaussianSumFitter< Acts::Propagator<Acts::MultiEigenStepperLoop<>, Acts::DirectNavigator>,
205  Acts::AtlasBetheHeitlerApprox<6, 5>,
207  std::unique_ptr<DirectFitter> m_directFitter {nullptr};
208 
209 
211  Acts::GsfExtensions<ActsTrk::MutableTrackStateBackend> m_gsfExtensions;
212 
214 
216  std::unique_ptr<const Acts::Logger> m_logger {nullptr};
217 
218 }; // end of namespace
219 
220 }
221 
222 #endif
223 
Trk::PrepRawDataSet
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
Definition: FitterTypes.h:26
ActsTrk::DetectorElementToActsGeometryIdMap
Definition: DetectorElementToActsGeometryIdMap.h:31
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:652
ActsTrk::GaussianSumFitterTool::m_trkSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trkSummaryTool
Definition: GaussianSumFitterTool.h:167
ActsTrk::GaussianSumFitterTool::~GaussianSumFitterTool
virtual ~GaussianSumFitterTool()=default
ActsTrk::detail::Navigator
Acts::Navigator Navigator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:31
ActsTrk::GaussianSumFitterTool::m_trackingGeometryTool
ToolHandle< IActsTrackingGeometryTool > m_trackingGeometryTool
Definition: GaussianSumFitterTool.h:165
ActsTrk::GaussianSumFitterTool::initialize
virtual StatusCode initialize() override
Definition: GaussianSumFitterTool.cxx:54
ActsTrk::GaussianSumFitterTool::m_componentMergeMethod
Acts::ComponentMergeMethod m_componentMergeMethod
Definition: GaussianSumFitterTool.h:194
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:48
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:216
ActsTrk::GaussianSumFitterTool::m_maxComponents
Gaudi::Property< int > m_maxComponents
Definition: GaussianSumFitterTool.h:179
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
ActsTrk::GaussianSumFitterTool::m_boundaryCheckTool
ToolHandle< Trk::IBoundaryCheckTool > m_boundaryCheckTool
Definition: GaussianSumFitterTool.h:168
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_option_componentMergeMethod
Gaudi::Property< std::string > m_option_componentMergeMethod
Definition: GaussianSumFitterTool.h:191
ActsTrk::GaussianSumFitterTool::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: GaussianSumFitterTool.cxx:646
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:176
ActsTrk::GaussianSumFitterTool::m_outlierFinder
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder m_outlierFinder
Definition: GaussianSumFitterTool.h:213
ActsTrk::Seed
Acts::Seed< xAOD::SpacePoint, 3ul > Seed
Definition: Seed.h:12
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:199
ActsTrk::GaussianSumFitterTool::m_surfaceAccessor
ATLASSourceLinkSurfaceAccessor m_surfaceAccessor
Definition: GaussianSumFitterTool.h:210
ActsTrk::GaussianSumFitterTool::m_gsfExtensions
Acts::GsfExtensions< ActsTrk::MutableTrackStateBackend > m_gsfExtensions
Definition: GaussianSumFitterTool.h:211
ActsTrk::GaussianSumFitterTool::m_useDirectNavigation
Gaudi::Property< bool > m_useDirectNavigation
Definition: GaussianSumFitterTool.h:182
ActsTrk::GaussianSumFitterTool::m_refitOnly
Gaudi::Property< bool > m_refitOnly
Definition: GaussianSumFitterTool.h:185
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:201
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
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:123
ActsTrk::GaussianSumFitterTool::m_weightCutOff
Gaudi::Property< double > m_weightCutOff
Definition: GaussianSumFitterTool.h:188
ActsTrk::GaussianSumFitterTool::getExtensions
const Acts::GsfExtensions< ActsTrk::MutableTrackStateBackend > & getExtensions() const
Definition: GaussianSumFitterTool.cxx:639
ActsTrk::GaussianSumFitterTool::m_directFitter
std::unique_ptr< DirectFitter > m_directFitter
Definition: GaussianSumFitterTool.h:207
ActsTrk::ATLASSourceLinkSurfaceAccessor
Definition: ATLASSourceLinkSurfaceAccessor.h:20
FitterHelperFunctions.h
IExtendedTrackSummaryTool.h
ActsTrk::GaussianSumFitterTool::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: GaussianSumFitterTool.h:166
IBoundaryCheckTool.h
TrkMeasurementCalibrator.h
ATLASSourceLinkSurfaceAccessor.h
IActsToTrkConverterTool.h
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
ActsTrk::GaussianSumFitterTool::m_fitter
std::unique_ptr< Fitter > m_fitter
Definition: GaussianSumFitterTool.h:202
ActsTrk::GaussianSumFitterTool::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: GaussianSumFitterTool.h:164
ActsTrk::GaussianSumFitterTool::m_option_outlierChi2Cut
Gaudi::Property< double > m_option_outlierChi2Cut
Definition: GaussianSumFitterTool.h:174
ActsTrk::GaussianSumFitterTool::DirectFitter
Acts::GaussianSumFitter< Acts::Propagator< Acts::MultiEigenStepperLoop<>, Acts::DirectNavigator >, Acts::AtlasBetheHeitlerApprox< 6, 5 >, ActsTrk::MutableTrackStateBackend > DirectFitter
Definition: GaussianSumFitterTool.h:206
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:486
ActsTrk::MutableTrackContainer
Definition: TrackContainer.h:122
ITrackFitter.h
TrackContainer.h
IActsTrackingGeometryTool.h
IActsExtrapolationTool.h
DetectorElementToActsGeometryIdMap.h