ATLAS Offline Software
Loading...
Searching...
No Matches
FitParameters.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5/************************************************************************************
6 local parameter values used during fitter iterations
7 note the extra parameters for handling detector misalignment and Coulomb
8scattering for brevity (mis-)named alignment and scatterer
9*************************************************************************************/
10
11#ifndef TRKIPATFITTERUTILS_FITPARAMETERS_H
12#define TRKIPATFITTERUTILS_FITPARAMETERS_H
13
14#include <utility>
15#include <vector>
16
22
23class MsgStream;
24
25namespace Trk {
26class Surface;
28
30 public:
32
33 FitParameters(double d0, double z0, double cosPhi, double sinPhi,
34 double cotTheta, double ptInv0, const PerigeeSurface& surface);
35
36 FitParameters(const FitParameters& parameters) = default;
40 ~FitParameters(void) = default;
41
42 void addAlignment(bool constrained, double localAngle, double localOffset);
43 void addScatterer(double phi, double theta);
44 double alignmentAngle(int alignment) const;
45 double alignmentAngleConstraint(int alignment) const;
46 double alignmentOffset(int alignment) const;
47 double alignmentOffsetConstraint(int alignment) const;
48 const Surface* associatedSurface(void) const;
49 double cosPhi(void) const;
50 double cosTheta(void) const;
51 double cotTheta(void) const;
54 double d0(void) const;
55 void d0(double value);
56 double difference(int param) const;
57 const Amg::VectorX& differences(void) const;
58 Amg::Vector3D direction(void) const;
59 bool extremeMomentum(void) const;
60 void extremeMomentum(bool value);
61 const Amg::MatrixX* finalCovariance(void) const;
62 int firstAlignmentParameter(void) const;
63 void firstAlignmentParameter(int value);
64 int firstScatteringParameter(void) const;
65 void firstScatteringParameter(int value);
66 bool fitEnergyDeposit(void) const;
67 void fitEnergyDeposit(double minEnergyDeposit);
68 bool fitMomentum(void) const;
69 void fitMomentum(bool value);
70 const Amg::MatrixX* fullCovariance(void) const;
72 int numberAlignments(void) const;
74 int numberOscillations(void) const;
75 int numberParameters(void) const;
77 int numberScatterers(void) const;
79 void performCutStep(double cutStep);
80 bool phiInstability(void) const;
81 double ptInv0(void) const;
82 const Amg::MatrixX parameterDifference(const Amg::VectorX& parameters) const;
83 Perigee* perigee(void) const;
84 const Amg::Vector3D& position(void) const;
85 void print(MsgStream& log) const;
86 void printCovariance(MsgStream& log) const;
87 void printVerbose(MsgStream& log) const;
88 double qOverP(void) const;
89 void qOverP(double value);
90 double qOverP1(void) const;
91 void qOverP1(double value);
92 void reset(const FitParameters& parameters);
93 void resetOscillations(void);
94 double scattererPhi(int scatterer) const;
95 double scattererTheta(int scatterer) const;
97 int scatterer = -1) const;
98 void setPhiInstability(void);
99 double sinPhi(void) const;
100 double sinTheta(void) const;
101 Perigee* startingPerigee(void) const;
102 // The following can update parameters
103 TrackParameters* trackParameters(MsgStream& log,
104 const FitMeasurement& measurement,
105 bool withCovariance = false);
106 void update(const Amg::VectorX& differences);
108 const Amg::MatrixX& leadingCovariance);
109 const Amg::Vector3D& vertex(void) const;
110 double z0(void) const;
111
112 private:
113 std::vector<double> m_alignmentAngle;
114 std::vector<double> m_alignmentAngleConstraint;
115 std::vector<double> m_alignmentOffset;
116 std::vector<double> m_alignmentOffsetConstraint;
117 double m_cosPhi;
118 double m_cosPhi1;
122 double m_d0;
124 bool m_eigen{};
126 Amg::MatrixX* m_finalCovariance;//not owning plain ptr
131 const Amg::MatrixX* m_fullCovariance;//not owning plain ptr
138 const Perigee* m_perigee; //not owning plain ptr
141 double m_qOverP;
142 double m_qOverP1;
143 std::vector<double> m_scattererPhi;
144 std::vector<double> m_scattererTheta;
145 double m_sinPhi;
146 double m_sinPhi1;
149 const Surface* m_surface; //not owning plain ptr
151 double m_z0;
152};
153
154//<<<<<< INLINE PUBLIC MEMBER FUNCTIONS >>>>>>
155
156inline double FitParameters::alignmentAngle(int alignment) const {
158}
159
163
166}
167
171
172inline double FitParameters::cosPhi(void) const {
173 return m_cosPhi;
174}
175
176inline double FitParameters::cosTheta(void) const {
177 return m_cosTheta;
178}
179
180inline double FitParameters::cotTheta(void) const {
181 return m_cotTheta;
182}
183
184inline double FitParameters::d0(void) const {
185 return m_d0;
186}
187
188inline double FitParameters::difference(int param) const {
189 if (m_differences.size() == 0) {
190 return 0.;
191 }
193 return std::as_const(m_differences)(param);
194}
195
196inline const Amg::VectorX& FitParameters::differences(void) const {
197 return m_differences;
198}
199
204
205inline bool FitParameters::extremeMomentum(void) const {
206 return m_extremeMomentum;
207}
208
210 return m_finalCovariance;
211}
212
216
220
221inline bool FitParameters::fitEnergyDeposit(void) const {
222 return m_fitEnergyDeposit;
223}
224
225inline bool FitParameters::fitMomentum(void) const {
226 return m_fitMomentum;
227}
228
230 return m_fullCovariance;
231}
232
233inline int FitParameters::numberAlignments(void) const {
234 return m_numberAlignments;
235}
236
237inline int FitParameters::numberOscillations(void) const {
239}
240
241inline int FitParameters::numberParameters(void) const {
242 return m_numberParameters;
243}
244
245inline int FitParameters::numberScatterers(void) const {
246 return m_numberScatterers;
247}
248
249inline double FitParameters::ptInv0(void) const {
250 return m_qOverP / m_sinTheta;
251}
252
253inline const Amg::Vector3D& FitParameters::position(void) const {
254 return m_position;
255}
256
257inline double FitParameters::qOverP(void) const {
258 return m_qOverP;
259}
260
261inline double FitParameters::qOverP1(void) const {
262 return m_qOverP1;
263}
264
265inline double FitParameters::scattererPhi(int scatterer) const {
266 return m_scattererPhi[scatterer];
267}
268
269inline double FitParameters::scattererTheta(int scatterer) const {
270 return m_scattererTheta[scatterer];
271}
272
273inline double FitParameters::sinPhi(void) const {
274 return m_sinPhi;
275}
276
277inline double FitParameters::sinTheta(void) const {
278 return m_sinTheta;
279}
280
284
285inline const Amg::Vector3D& FitParameters::vertex(void) const {
286 return m_vertex;
287}
288
289inline double FitParameters::z0(void) const {
290 return m_position.z();
291}
292
293} // namespace Trk
294
295#endif // TRKIPATFITTERUTILS_FITPARAMETERS_H
void addScatterer(double phi, double theta)
void firstAlignmentParameter(int value)
int numberOscillations(void) const
int numberScatterers(void) const
Amg::Vector3D direction(void) const
const Surface * m_surface
int firstAlignmentParameter(void) const
Amg::Vector3D m_position
TrackParameters * trackParameters(MsgStream &log, const FitMeasurement &measurement, bool withCovariance=false)
double qOverP(void) const
double difference(int param) const
const Amg::Vector3D & vertex(void) const
Amg::Vector3D m_vertex
const Amg::Vector3D & position(void) const
int numberParameters(void) const
void reset(const FitParameters &parameters)
double alignmentOffsetConstraint(int alignment) const
std::vector< double > m_alignmentOffsetConstraint
Perigee * perigee(void) const
std::vector< double > m_alignmentOffset
bool extremeMomentum(void) const
Amg::MatrixX * m_finalCovariance
void performCutStep(double cutStep)
int firstScatteringParameter(void) const
double z0(void) const
FitParameters & operator=(FitParameters &&)=default
void addAlignment(bool constrained, double localAngle, double localOffset)
double sinPhi(void) const
int numberAlignments(void) const
const Perigee * m_perigee
void firstScatteringParameter(int value)
const Amg::MatrixX parameterDifference(const Amg::VectorX &parameters) const
std::vector< double > m_scattererTheta
double scattererPhi(int scatterer) const
void print(MsgStream &log) const
FitParameters(FitParameters &&)=default
double ptInv0(void) const
std::vector< double > m_alignmentAngleConstraint
bool phiInstability(void) const
TrackSurfaceIntersection intersection(void) const
Perigee * startingPerigee(void) const
bool fitMomentum(void) const
void setPhiInstability(void)
double d0(void) const
bool fitEnergyDeposit(void) const
const Amg::MatrixX * m_fullCovariance
double cotTheta(void) const
double cosTheta(void) const
void printVerbose(MsgStream &log) const
void covariance(Amg::MatrixX *finalCovariance, const Amg::MatrixX *fullCovariance)
double qOverP1(void) const
~FitParameters(void)=default
double alignmentAngle(int alignment) const
FitParameters(const FitParameters &parameters)=default
const Surface * associatedSurface(void) const
const Amg::MatrixX * finalCovariance(void) const
FitParameters & operator=(const FitParameters &)=default
const Amg::VectorX & differences(void) const
void printCovariance(MsgStream &log) const
const Amg::MatrixX * fullCovariance(void) const
double alignmentOffset(int alignment) const
std::vector< double > m_alignmentAngle
FitParameters(const Perigee &perigee)
double alignmentAngleConstraint(int alignment) const
double scattererTheta(int scatterer) const
double cosPhi(void) const
ScatteringAngles scatteringAngles(const FitMeasurement &fitMeasurement, int scatterer=-1) const
double sinTheta(void) const
std::vector< double > m_scattererPhi
Amg::VectorX m_differences
void resetOscillations(void)
void update(const Amg::VectorX &differences)
Class describing the Line to which the Perigee refers to.
represents a deflection of the track caused through multiple scattering in material.
Abstract Base Class for tracking surfaces.
An intersection with a Surface is given by.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
@ theta
Definition ParamDefs.h:66
@ phi
Definition ParamDefs.h:75
ParametersBase< TrackParametersDim, Charged > TrackParameters