ATLAS Offline Software
Loading...
Searching...
No Matches
iPatFitter.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRKIPATFITTER_IPATFITTER_H
6#define TRKIPATFITTER_IPATFITTER_H
7
8#include <memory>
9#include <mutex>
10#include <vector>
11
13#include "GaudiKernel/EventContext.h"
14#include "GaudiKernel/ToolHandle.h"
23#include "TrkTrack/Track.h"
24#include "TrkTrack/TrackInfo.h"
31namespace Trk {
32class FitQuality;
37class iPatFitter : public AthAlgTool, virtual public ITrackFitter {
38 public:
40
41 // standard AlgTool methods
42 iPatFitter(const std::string& type, const std::string& name,
43 const IInterface* parent, bool isGlobalFit = false);
44 virtual ~iPatFitter() = default;
45
46 // standard Athena methods
47 virtual StatusCode initialize() override;
48 virtual StatusCode finalize() override;
49
50 // iPat Fitter settings (FIXME: to provide??):
51 // RunOutlierRemoval - use logic to remove bad hits
52
53 // refit a track
54 virtual std::unique_ptr<Track> fit(
55 const EventContext& ctx, const Track&,
56 const RunOutlierRemoval runOutlier = false,
57 const ParticleHypothesis particleHypothesis =
58 Trk::nonInteracting) const override;
59
60 // refit a track adding a PrepRawDataSet
61 virtual std::unique_ptr<Track> fit(
62 const EventContext& ctx, const Track&, const PrepRawDataSet&,
63 const RunOutlierRemoval runOutlier = false,
64 const ParticleHypothesis particleHypothesis =
65 Trk::nonInteracting) const override;
66
67 // fit a set of PrepRawData objects
68 virtual std::unique_ptr<Track> fit(
69 const EventContext& ctx, const PrepRawDataSet&,
70 const TrackParameters& perigeeStartValue,
71 const RunOutlierRemoval runOutlier = false,
72 const ParticleHypothesis particleHypothesis =
73 Trk::nonInteracting) const override;
74
75 // refit a track adding a MeasurementSet
76 virtual std::unique_ptr<Track> fit(
77 const EventContext& ctx, const Track&, const MeasurementSet&,
78 const RunOutlierRemoval runOutlier = false,
79 const ParticleHypothesis particleHypothesis =
80 Trk::nonInteracting) const override;
81
82 // fit a set of MeasurementBase objects with starting value for
83 // perigeeParameters
84 virtual std::unique_ptr<Track> fit(
85 const EventContext& ctx, const MeasurementSet&,
86 const TrackParameters& perigeeStartValue,
87 const RunOutlierRemoval runOutlier = false,
88 const ParticleHypothesis particleHypothesis =
89 Trk::nonInteracting) const override;
90
91 // combined muon fit
92 virtual std::unique_ptr<Track> fit(
93 const EventContext& ctx, const Track&, const Track&,
94 const RunOutlierRemoval runOutlier = false,
95 const ParticleHypothesis particleHypothesis =
96 Trk::nonInteracting) const override;
97
98 protected:
99 class FitState {
100 public:
102
104 if (m_measurements) {
105 for (auto m : *m_measurements) {
106 delete m;
107 }
108 }
109 }
110
113 m_measurements = std::make_unique<std::vector<FitMeasurement*>>();
114 }
115
116 std::vector<FitMeasurement*>& getMeasurements() {
117 if (m_measurements) {
118 return *m_measurements;
119 } else {
120 throw std::runtime_error("no measurements exist");
121 }
122 }
123
124 const std::vector<FitMeasurement*>& getMeasurements() const {
125 if (m_measurements) {
126 return *m_measurements;
127 } else {
128 throw std::runtime_error("no measurements exist");
129 }
130 }
131
132 bool hasMeasurements() const { return m_measurements.get() != nullptr; }
133
134 std::unique_ptr<FitParameters> parameters = nullptr;
135 int iterations = 0;
136
137 private:
138 std::unique_ptr<std::vector<FitMeasurement*>> m_measurements = nullptr;
139 };
140
141 // fitWithState that creates and returns state
142 std::pair<std::unique_ptr<Track>, std::unique_ptr<FitState>> fitWithState(
143 const EventContext& ctx, const Track&,
144 const RunOutlierRemoval runOutlier = false,
145 const ParticleHypothesis particleHypothesis = Trk::nonInteracting) const;
146
147 // class implementing the algorithmic code for fitting
148 std::unique_ptr<FitProcedure> m_fitProcedure;
149 mutable std::mutex m_fitProcedureMutex;
150
151 // flag to indicate global fitter, only used for logging
152 const bool m_globalFit = false;
153
154 private:
155 // add MeasurementSet
156 void addMeasurements(const EventContext& ctx,
157 std::vector<FitMeasurement*>& measurements,
158 const MeasurementSet& measurementSet,
159 const FitParameters& parameters) const;
160
161 // add TrackStateOnSurfaces (true means material already allocated on
162 // trackTSOS)
163 bool addMeasurements(
164 const EventContext& ctx, std::vector<FitMeasurement*>& measurements,
165 const FitParameters& parameters, ParticleHypothesis particleHypothesis,
166 const Trk::TrackStates& trackTSOS) const;
167
168 // perform fit
169 std::unique_ptr<Track> performFit(
170 const EventContext& ctx,
171 FitState& fitState, const ParticleHypothesis particleHypothesis,
172 const TrackInfo& trackInfo,
173 const Trk::TrackStates* leadingTSOS,
174 const FitQuality* perigeeQuality, Garbage_t& garbage) const;
175
176 // print TSOS on a track (debugging aid)
177 void printTSOS(const Track&) const;
178
179 void refit(const EventContext& ctx, FitState& fitState, const Track& track,
180 const RunOutlierRemoval runOutlier,
181 const ParticleHypothesis particleHypothesis) const;
182
183 // configurables (tools and options)
184 Gaudi::Property<bool> m_aggregateMaterial{this, "AggregateMaterial", true};
185 Gaudi::Property<bool> m_asymmetricCaloEnergy{this, "AsymmetricCaloEnergy",
186 true};
187 Gaudi::Property<bool> m_fullCombinedFit{this, "FullCombinedFit", true};
188 Gaudi::Property<bool> m_lineFit{this, "LineFit", false};
189 Gaudi::Property<double> m_lineMomentum{this, "LineMomentum",
190 100. * Gaudi::Units::GeV};
191
192 ToolHandle<IMaterialAllocator> m_materialAllocator{
193 this, "MaterialAllocator", "Trk::MaterialAllocator/MaterialAllocator"};
194 ToolHandle<IIntersector> m_rungeKuttaIntersector{
195 this, "RungeKuttaIntersector",
196 "Trk::RungeKuttaIntersector/RungeKuttaIntersector"};
197 ToolHandle<IIntersector> m_solenoidalIntersector{
198 this, "SolenoidalIntersector",
199 "Trk::SolenoidalIntersector/SolenoidalIntersector"};
200 ToolHandle<IPropagator> m_stepPropagator{
201 this, "Propagator", "Trk::STEP_Propagator/AtlasSTEP_Propagator"};
202 ToolHandle<IIntersector> m_straightLineIntersector{
203 this, "StraightLineIntersector",
204 "Trk::StraightLineIntersector/StraightLineIntersector"};
206 this, "TrackingVolumesSvc", "Trk::TrackingVolumesSvc/TrackingVolumesSvc"};
207 ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{
208 this, "TrackSummaryTool", "MuonTrackSummaryTool"};
209
210 // configurable tolerances, warnings
211 Gaudi::Property<double> m_orderingTolerance{this, "OrderingTolerance",
212 1. * Gaudi::Units::mm};
213 Gaudi::Property<unsigned> m_maxWarnings{
214 this, "MaxNumberOfWarnings", 10,
215 "Maximum number of permitted WARNING messages per message type."};
216
217 // configurables for validation purposes
218 Gaudi::Property<bool> m_constrainedAlignmentEffects{
219 this, "ConstrainedAlignmentEffects", false};
220 Gaudi::Property<bool> m_extendedDebug{this, "ExtendedDebug", false};
221 Gaudi::Property<int> m_forcedRefitsForValidation{
222 this, "ForcedRefitsForValidation", 0};
223 Gaudi::Property<int> m_maxIterations{this, "MaxIterations", 25};
224
225 // constants
226 std::unique_ptr<Trk::Volume> m_calorimeterVolume;
227 std::unique_ptr<Trk::Volume> m_indetVolume;
229
230 // counters
231 mutable std::atomic<unsigned> m_countFitAttempts = 0;
232 mutable std::atomic<unsigned> m_countGoodFits = 0;
233 mutable std::atomic<unsigned> m_countIterations = 0;
234 mutable std::atomic<unsigned> m_countRefitAttempts = 0;
235 mutable std::atomic<unsigned> m_countGoodRefits = 0;
236 mutable std::atomic<unsigned> m_countRefitIterations = 0;
237
238 // count warnings
239 std::unique_ptr<MessageHelper> m_messageHelper;
240};
241
242} // end of namespace Trk
243
244#endif // TRKIPATFITTER_IPATFITTER_H
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition FitQuality.h:97
std::vector< std::unique_ptr< const TrackStateOnSurface > > Garbage_t
Provides the abstract interface for track fitting in the common ATLAS Tracking EDM.
magnetic field properties to steer the behavior of the extrapolation
Contains information about the 'fitter' of this track.
represents the track state (measurement, material, fit parameters and quality) at a surface.
const std::vector< FitMeasurement * > & getMeasurements() const
Definition iPatFitter.h:124
bool hasMeasurements() const
Definition iPatFitter.h:132
std::unique_ptr< std::vector< FitMeasurement * > > m_measurements
Definition iPatFitter.h:138
std::vector< FitMeasurement * > & getMeasurements()
Definition iPatFitter.h:116
std::unique_ptr< FitParameters > parameters
Definition iPatFitter.h:134
std::unique_ptr< Trk::Volume > m_calorimeterVolume
Definition iPatFitter.h:226
virtual ~iPatFitter()=default
iPatFitter(const std::string &type, const std::string &name, const IInterface *parent, bool isGlobalFit=false)
Gaudi::Property< unsigned > m_maxWarnings
Definition iPatFitter.h:213
ToolHandle< IMaterialAllocator > m_materialAllocator
Definition iPatFitter.h:192
std::atomic< unsigned > m_countGoodRefits
Definition iPatFitter.h:235
std::unique_ptr< Trk::Volume > m_indetVolume
Definition iPatFitter.h:227
virtual StatusCode initialize() override
Gaudi::Property< bool > m_constrainedAlignmentEffects
Definition iPatFitter.h:218
Gaudi::Property< double > m_orderingTolerance
Definition iPatFitter.h:211
std::pair< std::unique_ptr< Track >, std::unique_ptr< FitState > > fitWithState(const EventContext &ctx, const Track &, const RunOutlierRemoval runOutlier=false, const ParticleHypothesis particleHypothesis=Trk::nonInteracting) const
std::atomic< unsigned > m_countGoodFits
Definition iPatFitter.h:232
IMaterialAllocator::Garbage_t Garbage_t
Definition iPatFitter.h:39
Gaudi::Property< int > m_forcedRefitsForValidation
Definition iPatFitter.h:221
Trk::MagneticFieldProperties m_stepField
Definition iPatFitter.h:228
std::atomic< unsigned > m_countFitAttempts
Definition iPatFitter.h:231
Gaudi::Property< bool > m_aggregateMaterial
Definition iPatFitter.h:184
Gaudi::Property< bool > m_asymmetricCaloEnergy
Definition iPatFitter.h:185
ServiceHandle< ITrackingVolumesSvc > m_trackingVolumesSvc
Definition iPatFitter.h:205
std::atomic< unsigned > m_countRefitAttempts
Definition iPatFitter.h:234
Gaudi::Property< bool > m_lineFit
Definition iPatFitter.h:188
ToolHandle< IIntersector > m_straightLineIntersector
Definition iPatFitter.h:202
Gaudi::Property< double > m_lineMomentum
Definition iPatFitter.h:189
Gaudi::Property< bool > m_fullCombinedFit
Definition iPatFitter.h:187
ToolHandle< IPropagator > m_stepPropagator
Definition iPatFitter.h:200
void addMeasurements(const EventContext &ctx, std::vector< FitMeasurement * > &measurements, const MeasurementSet &measurementSet, const FitParameters &parameters) const
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition iPatFitter.h:207
std::unique_ptr< FitProcedure > m_fitProcedure
Definition iPatFitter.h:148
std::atomic< unsigned > m_countRefitIterations
Definition iPatFitter.h:236
virtual StatusCode finalize() override
std::mutex m_fitProcedureMutex
Definition iPatFitter.h:149
const bool m_globalFit
Definition iPatFitter.h:152
std::atomic< unsigned > m_countIterations
Definition iPatFitter.h:233
void printTSOS(const Track &) const
virtual std::unique_ptr< Track > fit(const EventContext &ctx, const Track &, const RunOutlierRemoval runOutlier=false, const ParticleHypothesis particleHypothesis=Trk::nonInteracting) const override
RE-FIT A TRACK.
void refit(const EventContext &ctx, FitState &fitState, const Track &track, const RunOutlierRemoval runOutlier, const ParticleHypothesis particleHypothesis) const
std::unique_ptr< Track > performFit(const EventContext &ctx, FitState &fitState, const ParticleHypothesis particleHypothesis, const TrackInfo &trackInfo, const Trk::TrackStates *leadingTSOS, const FitQuality *perigeeQuality, Garbage_t &garbage) const
std::unique_ptr< MessageHelper > m_messageHelper
Definition iPatFitter.h:239
Gaudi::Property< int > m_maxIterations
Definition iPatFitter.h:223
ToolHandle< IIntersector > m_solenoidalIntersector
Definition iPatFitter.h:197
ToolHandle< IIntersector > m_rungeKuttaIntersector
Definition iPatFitter.h:194
Gaudi::Property< bool > m_extendedDebug
Definition iPatFitter.h:220
Ensure that the ATLAS eigen extensions are properly loaded.
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition FitterTypes.h:30
DataVector< const Trk::TrackStateOnSurface > TrackStates
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