ATLAS Offline Software
Loading...
Searching...
No Matches
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
44namespace ActsTrk {
45
47 : public extends<AthAlgTool, Trk::ITrackFitter, ActsTrk::IFitterTool> {
48public:
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,
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,
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&,
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&,
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,
125 ActsTrk::MutableTrackContainer& trackContainer,
126 const Acts::PerigeeSurface& pSurface) const override;
127
129 // Private methods:
131private:
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<ActsTrk::IExtrapolationTool> 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
const Acts::Logger & logger() const
Private access to the logger.
detail::TrkMeasSurfaceAccessor m_surfaceAccessor
Gaudi::Property< std::string > m_option_componentMergeMethod
Acts::GsfOptions< ActsTrk::MutableTrackStateBackend > prepareOptions(const Acts::GeometryContext &tgContext, const Acts::MagneticFieldContext &mfContext, const Acts::CalibrationContext &calContext, const Acts::PerigeeSurface &surface) const
std::unique_ptr< ActsTrk::detail::TrkMeasurementCalibrator > m_calibrator
Gaudi::Property< double > m_weightCutOff
Gaudi::Property< int > m_option_maxPropagationStep
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
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
Acts::GsfExtensions< ActsTrk::MutableTrackStateBackend > m_gsfExtensions
GaussianSumFitterTool(const std::string &, const std::string &, const IInterface *)
virtual StatusCode initialize() override
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
Acts::ComponentMergeMethod m_componentMergeMethod
Gaudi::Property< double > m_option_outlierChi2Cut
virtual ~GaussianSumFitterTool()=default
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
Acts::GaussianSumFitter< Acts::Propagator< Acts::MultiEigenStepperLoop<>, Acts::Navigator >, Acts::AtlasBetheHeitlerApprox< 6, 5 >, ActsTrk::MutableTrackStateBackend > Fitter
Type erased track fitter function.
Gaudi::Property< bool > m_useDirectNavigation
std::unique_ptr< Fitter > m_fitter
Acts::GaussianSumFitter< Acts::Propagator< Acts::MultiEigenStepperLoop<>, Acts::DirectNavigator >, Acts::AtlasBetheHeitlerApprox< 6, 5 >, ActsTrk::MutableTrackStateBackend > DirectFitter
ToolHandle< ActsTrk::IExtrapolationTool > m_extrapolationTool
std::unique_ptr< const Acts::Logger > m_logger
logging instance
const Acts::GsfExtensions< ActsTrk::MutableTrackStateBackend > & getExtensions() const
std::unique_ptr< DirectFitter > m_directFitter
ToolHandle< Trk::IBoundaryCheckTool > m_boundaryCheckTool
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder m_outlierFinder
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
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trkSummaryTool
Helper class to access the Acts::Surface for a given Acts::SourceLink which is poiniting to a Trk::Me...
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Acts::VectorMultiTrajectory MutableTrackStateBackend
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
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