ATLAS Offline Software
Loading...
Searching...
No Matches
iPatFitter.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 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 FitState& fitState, const ParticleHypothesis particleHypothesis,
171 const TrackInfo& trackInfo,
172 const Trk::TrackStates* leadingTSOS,
173 const FitQuality* perigeeQuality, Garbage_t& garbage) const;
174
175 // print TSOS on a track (debugging aid)
176 void printTSOS(const Track&) const;
177
178 void refit(const EventContext& ctx, FitState& fitState, const Track& track,
179 const RunOutlierRemoval runOutlier,
180 const ParticleHypothesis particleHypothesis) const;
181
182 // configurables (tools and options)
183 Gaudi::Property<bool> m_aggregateMaterial{this, "AggregateMaterial", true};
184 Gaudi::Property<bool> m_asymmetricCaloEnergy{this, "AsymmetricCaloEnergy",
185 true};
186 Gaudi::Property<bool> m_fullCombinedFit{this, "FullCombinedFit", true};
187 Gaudi::Property<bool> m_lineFit{this, "LineFit", false};
188 Gaudi::Property<double> m_lineMomentum{this, "LineMomentum",
189 100. * Gaudi::Units::GeV};
190
191 ToolHandle<IMaterialAllocator> m_materialAllocator{
192 this, "MaterialAllocator", "Trk::MaterialAllocator/MaterialAllocator"};
193 ToolHandle<IIntersector> m_rungeKuttaIntersector{
194 this, "RungeKuttaIntersector",
195 "Trk::RungeKuttaIntersector/RungeKuttaIntersector"};
196 ToolHandle<IIntersector> m_solenoidalIntersector{
197 this, "SolenoidalIntersector",
198 "Trk::SolenoidalIntersector/SolenoidalIntersector"};
199 ToolHandle<IPropagator> m_stepPropagator{
200 this, "Propagator", "Trk::STEP_Propagator/AtlasSTEP_Propagator"};
201 ToolHandle<IIntersector> m_straightLineIntersector{
202 this, "StraightLineIntersector",
203 "Trk::StraightLineIntersector/StraightLineIntersector"};
205 this, "TrackingVolumesSvc", "Trk::TrackingVolumesSvc/TrackingVolumesSvc"};
206 ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{
207 this, "TrackSummaryTool", "MuonTrackSummaryTool"};
208
209 // configurable tolerances, warnings
210 Gaudi::Property<double> m_orderingTolerance{this, "OrderingTolerance",
211 1. * Gaudi::Units::mm};
212 Gaudi::Property<unsigned> m_maxWarnings{
213 this, "MaxNumberOfWarnings", 10,
214 "Maximum number of permitted WARNING messages per message type."};
215
216 // configurables for validation purposes
217 Gaudi::Property<bool> m_constrainedAlignmentEffects{
218 this, "ConstrainedAlignmentEffects", false};
219 Gaudi::Property<bool> m_extendedDebug{this, "ExtendedDebug", false};
220 Gaudi::Property<int> m_forcedRefitsForValidation{
221 this, "ForcedRefitsForValidation", 0};
222 Gaudi::Property<int> m_maxIterations{this, "MaxIterations", 25};
223
224 // constants
225 std::unique_ptr<Trk::Volume> m_calorimeterVolume;
226 std::unique_ptr<Trk::Volume> m_indetVolume;
228
229 // counters
230 mutable std::atomic<unsigned> m_countFitAttempts = 0;
231 mutable std::atomic<unsigned> m_countGoodFits = 0;
232 mutable std::atomic<unsigned> m_countIterations = 0;
233 mutable std::atomic<unsigned> m_countRefitAttempts = 0;
234 mutable std::atomic<unsigned> m_countGoodRefits = 0;
235 mutable std::atomic<unsigned> m_countRefitIterations = 0;
236
237 // count warnings
238 std::unique_ptr<MessageHelper> m_messageHelper;
239};
240
241} // end of namespace Trk
242
243#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:225
virtual ~iPatFitter()=default
std::unique_ptr< Track > performFit(FitState &fitState, const ParticleHypothesis particleHypothesis, const TrackInfo &trackInfo, const Trk::TrackStates *leadingTSOS, const FitQuality *perigeeQuality, Garbage_t &garbage) const
iPatFitter(const std::string &type, const std::string &name, const IInterface *parent, bool isGlobalFit=false)
Gaudi::Property< unsigned > m_maxWarnings
Definition iPatFitter.h:212
ToolHandle< IMaterialAllocator > m_materialAllocator
Definition iPatFitter.h:191
std::atomic< unsigned > m_countGoodRefits
Definition iPatFitter.h:234
std::unique_ptr< Trk::Volume > m_indetVolume
Definition iPatFitter.h:226
virtual StatusCode initialize() override
Gaudi::Property< bool > m_constrainedAlignmentEffects
Definition iPatFitter.h:217
Gaudi::Property< double > m_orderingTolerance
Definition iPatFitter.h:210
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:231
IMaterialAllocator::Garbage_t Garbage_t
Definition iPatFitter.h:39
Gaudi::Property< int > m_forcedRefitsForValidation
Definition iPatFitter.h:220
Trk::MagneticFieldProperties m_stepField
Definition iPatFitter.h:227
std::atomic< unsigned > m_countFitAttempts
Definition iPatFitter.h:230
Gaudi::Property< bool > m_aggregateMaterial
Definition iPatFitter.h:183
Gaudi::Property< bool > m_asymmetricCaloEnergy
Definition iPatFitter.h:184
ServiceHandle< ITrackingVolumesSvc > m_trackingVolumesSvc
Definition iPatFitter.h:204
std::atomic< unsigned > m_countRefitAttempts
Definition iPatFitter.h:233
Gaudi::Property< bool > m_lineFit
Definition iPatFitter.h:187
ToolHandle< IIntersector > m_straightLineIntersector
Definition iPatFitter.h:201
Gaudi::Property< double > m_lineMomentum
Definition iPatFitter.h:188
Gaudi::Property< bool > m_fullCombinedFit
Definition iPatFitter.h:186
ToolHandle< IPropagator > m_stepPropagator
Definition iPatFitter.h:199
void addMeasurements(const EventContext &ctx, std::vector< FitMeasurement * > &measurements, const MeasurementSet &measurementSet, const FitParameters &parameters) const
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition iPatFitter.h:206
std::unique_ptr< FitProcedure > m_fitProcedure
Definition iPatFitter.h:148
std::atomic< unsigned > m_countRefitIterations
Definition iPatFitter.h:235
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:232
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< MessageHelper > m_messageHelper
Definition iPatFitter.h:238
Gaudi::Property< int > m_maxIterations
Definition iPatFitter.h:222
ToolHandle< IIntersector > m_solenoidalIntersector
Definition iPatFitter.h:196
ToolHandle< IIntersector > m_rungeKuttaIntersector
Definition iPatFitter.h:193
Gaudi::Property< bool > m_extendedDebug
Definition iPatFitter.h:219
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