Belle II Software development
CDCKarimakiFitter Class Reference

Class implementing the fitter using Karimakis method. More...

#include <CDCKarimakiFitter.h>

Inheritance diagram for CDCKarimakiFitter:
CDCFitter2D< KarimakisMethod > KarimakisMethod

Public Member Functions

 CDCKarimakiFitter ()
 Default constructor.
 
 ~CDCKarimakiFitter ()
 Default destructor.
 
TrackingUtilities::CDCTrajectory2D fit (const CDCObservations2D &observations2D) const
 Fits a collection of observation drift circles.
 
TrackingUtilities::CDCTrajectory2D fit (CDCObservations2D &&observations2D) const
 Fits a collection of observation drift circles.
 
TrackingUtilities::CDCTrajectory2D fit (const TrackingUtilities::CDCTrack &track) const
 Fits the track.
 
TrackingUtilities::CDCTrajectory2D fit (const TrackingUtilities::CDCSegment3D &segment) const
 Fits the segment.
 
TrackingUtilities::CDCTrajectory2D fit (const TrackingUtilities::CDCSegment2D &fromSegment, const TrackingUtilities::CDCSegment2D &toSegment) const
 Fits to the two segments.
 
TrackingUtilities::CDCTrajectory2D fit (const TrackingUtilities::CDCSegment2D &segment) const
 Fits the segment.
 
TrackingUtilities::CDCTrajectory2D fit (const std::vector< const TrackingUtilities::CDCWireHit * > &wireHit) const
 Fits to the wire hit observations.
 
TrackingUtilities::CDCTrajectory2D fit (const std::vector< const CDC::CDCWire * > &wires) const
 Fits to the wire positions. Explicit specialisation to be used from python.
 
TrackingUtilities::CDCTrajectory2D fit (const TrackingUtilities::CDCWireHitSegment &wireHits) const
 Fits to the wire positions. Explicit specialisation to be used from python.
 
void update (TrackingUtilities::CDCTrajectory2D &trajectory2D, const CDCObservations2D &observations2D) const
 Update the trajectory with a fit to the observations.
 
void update (TrackingUtilities::CDCTrajectory2D &trajectory2D, CDCObservations2D &&observations2D) const
 Update the trajectory with a fit to the observations.
 
void update (TrackingUtilities::CDCTrajectory2D &trajectory2D, const TrackingUtilities::CDCSegment2D &segment) const
 Updates the given trajectory inplace from the given segment.
 
void update (TrackingUtilities::CDCTrajectory2D &trajectory2D, const TrackingUtilities::CDCAxialSegmentPair &axialSegmentPair) const
 Updates the given trajectory inplace from the given segment pair.
 
void update (TrackingUtilities::CDCTrajectory2D &trajectory2D, CDCObservations2D &observations2D) const
 Executes the fit and updates the trajectory parameters. This may render the information in the observation object.
 
void useOnlyPosition ()
 Setup the fitter to use only the reconstructed positions of the hits.
 
void useOnlyOrientation ()
 Setup the fitter to use only reference position and the drift length with right left orientation.
 
void usePositionAndOrientation ()
 Setup the fitter to use both the reconstructed position and the reference position and the drift length with right left orientation.
 
void setFitVariance (EFitVariance fitVariance)
 Setup the fitter to use the given variance measure by default.
 
bool isLineConstrained () const
 Getter for the indicator that lines should be fitted by this fitter.
 
void setLineConstrained (bool constrained=true)
 Indicator if this fitter is setup to fit lines.
 

Static Public Member Functions

static const CDCKarimakiFittergetFitter ()
 Static getter for a general fitter instance with Karimakis method.
 
static const CDCKarimakiFittergetLineFitter ()
 Static getter for a line fitter.
 
static const CDCKarimakiFittergetNoDriftVarianceFitter ()
 Static getter for a general fitter that does not use the drift length variances.
 

Private Member Functions

TrackingUtilities::CDCTrajectory2D fitGeneric (const AHits &hits) const
 Fits a collection of hit typs which are convertible to observation circles.
 
TrackingUtilities::CDCTrajectory2D fitGeneric (const AStartHits &startHits, const AEndHits &endHits) const
 Fits together two collections of hit types which are convertible to observation circles.
 
void updateGeneric (TrackingUtilities::CDCTrajectory2D &trajectory2D, const AHits &hits) const
 Updates a given trajectory with a fit to a collection of hits types, which are convertible to observation circles.
 
void updateGeneric (TrackingUtilities::CDCTrajectory2D &trajectory2D, const AStartHits &startHits, const AEndHits &endHits) const
 Updates a given trajectory with a fit to two collection of hit types, which are convertible to observation circles.
 
TrackingUtilities::UncertainPerigeeCircle fitInternal (CDCObservations2D &observations2D) const
 Internal method doing the heavy work.
 

Private Attributes

bool m_usePosition
 Flag indicating the reconstructed position shall be used in the fit.
 
bool m_useOrientation
 Flag indicating the reference position and drift length with right left orientation shall be used in the fit.
 
EFitVariance m_fitVariance
 Default variance to be used in the fit.
 
bool m_lineConstrained
 Memory for the flag indicating that lines should be fitted.
 

Detailed Description

Class implementing the fitter using Karimakis method.

Definition at line 23 of file CDCKarimakiFitter.h.

Member Function Documentation

◆ fit() [1/9]

TrackingUtilities::CDCTrajectory2D fit ( CDCObservations2D && observations2D) const
inherited

Fits a collection of observation drift circles.

Definition at line 49 of file CDCFitter2D.icc.h.

45 {
46 TrackingUtilities::CDCTrajectory2D result;
47 update(result, observations2D);
48 return result;
49 }

◆ fit() [2/9]

TrackingUtilities::CDCTrajectory2D fit ( const CDCObservations2D & observations2D) const
inherited

Fits a collection of observation drift circles.

Definition at line 46 of file CDCFitter2D.icc.h.

39 {
40 return fit(CDCObservations2D(observations2D));
41 }

◆ fit() [3/9]

TrackingUtilities::CDCTrajectory2D fit ( const std::vector< const CDC::CDCWire * > & wires) const
inherited

Fits to the wire positions. Explicit specialisation to be used from python.

Definition at line 74 of file CDCFitter2D.icc.h.

91 {
92 return fitGeneric(wires);
93 }

◆ fit() [4/9]

TrackingUtilities::CDCTrajectory2D fit ( const std::vector< const TrackingUtilities::CDCWireHit * > & wireHit) const
inherited

Fits to the wire hit observations.

Definition at line 71 of file CDCFitter2D.icc.h.

85 {
86 return fitGeneric(wireHits);
87 }

◆ fit() [5/9]

TrackingUtilities::CDCTrajectory2D fit ( const TrackingUtilities::CDCSegment2D & fromSegment,
const TrackingUtilities::CDCSegment2D & toSegment ) const
inherited

Fits to the two segments.

Definition at line 64 of file CDCFitter2D.icc.h.

104 {
105 return fitGeneric(fromSegment, toSegment);
106 }

◆ fit() [6/9]

Fits the segment.

Definition at line 68 of file CDCFitter2D.icc.h.

78 {
79 return fitGeneric(segment);
80 }

◆ fit() [7/9]

Fits the segment.

Definition at line 61 of file CDCFitter2D.icc.h.

72 {
73 return fitGeneric(segment);
74 }

◆ fit() [8/9]

Fits the track.

Definition at line 58 of file CDCFitter2D.icc.h.

66 {
67 return fitGeneric(track);
68 }

◆ fit() [9/9]

Fits to the wire positions. Explicit specialisation to be used from python.

Definition at line 77 of file CDCFitter2D.icc.h.

97 {
98 return fitGeneric(wireHits);
99 }

◆ fitGeneric() [1/2]

TrackingUtilities::CDCTrajectory2D fitGeneric ( const AHits & hits) const
privateinherited

Fits a collection of hit typs which are convertible to observation circles.

Definition at line 88 of file CDCFitter2D.icc.h.

125 {
126 TrackingUtilities::CDCTrajectory2D result;
127 updateGeneric(result, hits);
128 return result;
129 }

◆ fitGeneric() [2/2]

TrackingUtilities::CDCTrajectory2D fitGeneric ( const AStartHits & startHits,
const AEndHits & endHits ) const
privateinherited

Fits together two collections of hit types which are convertible to observation circles.

Definition at line 92 of file CDCFitter2D.icc.h.

135 {
136 TrackingUtilities::CDCTrajectory2D result;
137 updateGeneric(result, startHits, endHits);
138 return result;
139 }

◆ fitInternal()

UncertainPerigeeCircle fitInternal ( CDCObservations2D & observations2D) const
privateinherited

Internal method doing the heavy work.

Definition at line 215 of file KarimakisMethod.cc.

216{
217 // Matrix of weighted sums
218 Eigen::Matrix< double, 4, 4> sNoL = getWXYRSumMatrix(observations2D);
219
220 // Matrix of averages
221 Eigen::Matrix<double, 4, 4> aNoL = sNoL / sNoL(iW);
222
223 // Measurement means
224 Eigen::Matrix<double, 4, 1> meansNoL = aNoL.row(iW);
225
226 // Covariance matrix
227 Eigen::Matrix<double, 4, 4> cNoL = aNoL - meansNoL * meansNoL.transpose();
228
229 // Determine NDF : Circle fit eats up to 3 degrees of freedom debpending on the constraints
230 size_t ndf = observations2D.size() - 2;
231
232 if (not isLineConstrained()) {
233 --ndf;
234 }
235
236 // Parameters to be fitted
237 UncertainPerigeeCircle resultCircle = fitKarimaki(sNoL(iW), meansNoL, cNoL, isLineConstrained());
238 double chi2 = calcChi2Karimaki(resultCircle, sNoL(iW), cNoL);
239
240 PerigeePrecision perigeePrecision = calcPrecisionKarimaki(resultCircle, sNoL, isLineConstrained());
241
242 // Use in pivotingin caset the matrix is not full rank as is for the constrained cases-
243 PerigeeCovariance perigeeCovariance = PerigeeUtil::covarianceFromPrecision(perigeePrecision);
244
245 resultCircle.setChi2(chi2);
246 resultCircle.setNDF(ndf);
247 resultCircle.setPerigeeCovariance(perigeeCovariance);
248 return resultCircle;
249}
std::size_t size() const
Returns the number of observations stored.
bool isLineConstrained() const
Getter for the indicator that lines should be fitted by this fitter.
void setPerigeeCovariance(const PerigeeCovariance &perigeeCovariance)
Setter for the whole covariance matrix of the perigee parameters.
void setNDF(std::size_t ndf)
Setter for the number of degrees of freediom used in the circle fit.
void setChi2(const double chi2)
Setter for the chi square value of the circle fit.

◆ getFitter()

const CDCKarimakiFitter & getFitter ( )
static

Static getter for a general fitter instance with Karimakis method.

Definition at line 20 of file CDCKarimakiFitter.cc.

21{
22 static CDCKarimakiFitter fitter;
23 return fitter;
24}

◆ getLineFitter()

const CDCKarimakiFitter & getLineFitter ( )
static

Static getter for a line fitter.

Definition at line 26 of file CDCKarimakiFitter.cc.

27{
28 static CDCKarimakiFitter lineFitter;
29 lineFitter.setLineConstrained();
30 return lineFitter;
31}
void setLineConstrained(bool constrained=true)
Indicator if this fitter is setup to fit lines.

◆ getNoDriftVarianceFitter()

const CDCKarimakiFitter & getNoDriftVarianceFitter ( )
static

Static getter for a general fitter that does not use the drift length variances.

Definition at line 33 of file CDCKarimakiFitter.cc.

34{
35 static CDCKarimakiFitter noDriftVarianceFitter;
36 noDriftVarianceFitter.setFitVariance(EFitVariance::c_DriftLength);
37 return noDriftVarianceFitter;
38}
void setFitVariance(EFitVariance fitVariance)
Setup the fitter to use the given variance measure by default.

◆ isLineConstrained()

bool isLineConstrained ( ) const
inlineinherited

Getter for the indicator that lines should be fitted by this fitter.

Definition at line 38 of file KarimakisMethod.h.

39 {
40 return m_lineConstrained;
41 }

◆ setFitVariance()

void setFitVariance ( EFitVariance fitVariance)
inherited

Setup the fitter to use the given variance measure by default.

Definition at line 124 of file CDCFitter2D.icc.h.

222 {
223 m_fitVariance = fitVariance;
224 }

◆ setLineConstrained()

void setLineConstrained ( bool constrained = true)
inlineinherited

Indicator if this fitter is setup to fit lines.

Definition at line 44 of file KarimakisMethod.h.

45 {
46 m_lineConstrained = constrained;
47 }

◆ update() [1/5]

void update ( TrackingUtilities::CDCTrajectory2D & trajectory2D,
CDCObservations2D && observations2D ) const
inherited

Update the trajectory with a fit to the observations.

Definition at line 55 of file CDCFitter2D.icc.h.

60 {
61 AFitMethod::update(trajectory2D, observations2D);
62 }

◆ update() [2/5]

void update ( TrackingUtilities::CDCTrajectory2D & trajectory2D,
const CDCObservations2D & observations2D ) const
inherited

Update the trajectory with a fit to the observations.

Definition at line 52 of file CDCFitter2D.icc.h.

54 {
55 return update(trajectory2D, CDCObservations2D(observations2D));
56 }

◆ update() [3/5]

void update ( TrackingUtilities::CDCTrajectory2D & trajectory2D,
const TrackingUtilities::CDCAxialSegmentPair & axialSegmentPair ) const
inherited

Updates the given trajectory inplace from the given segment pair.

Definition at line 83 of file CDCFitter2D.icc.h.

118 {
119 return updateGeneric(trajectory2D, axialSegmentPair);
120 }

◆ update() [4/5]

void update ( TrackingUtilities::CDCTrajectory2D & trajectory2D,
const TrackingUtilities::CDCSegment2D & segment ) const
inherited

Updates the given trajectory inplace from the given segment.

Definition at line 80 of file CDCFitter2D.icc.h.

111 {
112 updateGeneric(trajectory2D, segment);
113 }

◆ update() [5/5]

void update ( TrackingUtilities::CDCTrajectory2D & trajectory2D,
CDCObservations2D & observations2D ) const
inherited

Executes the fit and updates the trajectory parameters. This may render the information in the observation object.

Definition at line 30 of file KarimakisMethod.cc.

32{
33 size_t nObservations = observations2D.size();
34 trajectory2D.clear();
35 if (not nObservations) return;
36
37 Vector2D ref = observations2D.getCentralPoint();
38 observations2D.passiveMoveBy(ref);
39
40 UncertainPerigeeCircle perigeeCircle = fitInternal(observations2D);
41
42 double frontX = observations2D.getX(0);
43 double frontY = observations2D.getY(0);
44 Vector2D frontPos(frontX, frontY);
45
46 double backX = observations2D.getX(nObservations - 1);
47 double backY = observations2D.getY(nObservations - 1);
48 Vector2D backPos(backX, backY);
49
50 Vector2D overPos(0, 0);
51 double totalPerps = (perigeeCircle->arcLengthBetween(frontPos, overPos) +
52 perigeeCircle->arcLengthBetween(overPos, backPos));
53
54 if (totalPerps < 0) {
55 perigeeCircle.reverse();
56 }
57
58 trajectory2D.setLocalOrigin(ref);
59 trajectory2D.setLocalCircle(perigeeCircle);
60}
double getX(int iObservation) const
Getter for the x value of the observation at the given index.
double getY(int iObservation) const
Getter for the y value of the observation at the given index.
TrackingUtilities::Vector2D getCentralPoint() const
Extracts the observation center that is at the index in the middle.
void passiveMoveBy(const TrackingUtilities::Vector2D &origin)
Moves all observations passively such that the given vector becomes to origin of the new coordinate s...
TrackingUtilities::UncertainPerigeeCircle fitInternal(CDCObservations2D &observations2D) const
Internal method doing the heavy work.
double arcLengthBetween(const Vector2D &from, const Vector2D &to) const
Calculates the arc length between two points of closest approach on the circle.
void reverse()
Flips the orientation of the circle in place.

◆ updateGeneric() [1/2]

void updateGeneric ( TrackingUtilities::CDCTrajectory2D & trajectory2D,
const AHits & hits ) const
privateinherited

Updates a given trajectory with a fit to a collection of hits types, which are convertible to observation circles.

Definition at line 99 of file CDCFitter2D.icc.h.

179 {
180 CDCObservations2D observations2D;
181 observations2D.setFitVariance(m_fitVariance);
182
183 if (m_usePosition) {
184 observations2D.setFitPos(EFitPos::c_RecoPos);
185 observations2D.appendRange(hits);
186 }
187 if (m_useOrientation) {
188 observations2D.setFitPos(EFitPos::c_RLDriftCircle);
189 observations2D.appendRange(hits);
190 }
191
192 if (observations2D.size() < 4) {
193 trajectory2D.clear();
194 } else {
195 AFitMethod::update(trajectory2D, observations2D);
196 }
197 }

◆ updateGeneric() [2/2]

void updateGeneric ( TrackingUtilities::CDCTrajectory2D & trajectory2D,
const AStartHits & startHits,
const AEndHits & endHits ) const
privateinherited

Updates a given trajectory with a fit to two collection of hit types, which are convertible to observation circles.

Definition at line 106 of file CDCFitter2D.icc.h.

146 {
147 CDCObservations2D observations2D;
148 observations2D.setFitVariance(m_fitVariance);
149
150 if (m_usePosition) {
151 observations2D.setFitPos(EFitPos::c_RecoPos);
152 observations2D.appendRange(startHits);
153 }
154 if (m_useOrientation) {
155 observations2D.setFitPos(EFitPos::c_RLDriftCircle);
156 observations2D.appendRange(startHits);
157 }
158
159 if (m_usePosition) {
160 observations2D.setFitPos(EFitPos::c_RecoPos);
161 observations2D.appendRange(endHits);
162 }
163 if (m_useOrientation) {
164 observations2D.setFitPos(EFitPos::c_RLDriftCircle);
165 observations2D.appendRange(endHits);
166 }
167
168 if (observations2D.size() < 4) {
169 trajectory2D.clear();
170 } else {
171 AFitMethod::update(trajectory2D, observations2D);
172 }
173 }

◆ useOnlyOrientation()

void useOnlyOrientation ( )
inherited

Setup the fitter to use only reference position and the drift length with right left orientation.

Definition at line 118 of file CDCFitter2D.icc.h.

208 {
209 m_usePosition = false;
210 m_useOrientation = true;
211 }

◆ useOnlyPosition()

void useOnlyPosition ( )
inherited

Setup the fitter to use only the reconstructed positions of the hits.

Definition at line 115 of file CDCFitter2D.icc.h.

201 {
202 m_usePosition = true;
203 m_useOrientation = false;
204 }

◆ usePositionAndOrientation()

void usePositionAndOrientation ( )
inherited

Setup the fitter to use both the reconstructed position and the reference position and the drift length with right left orientation.

Definition at line 121 of file CDCFitter2D.icc.h.

215 {
216 m_usePosition = true;
217 m_useOrientation = true;
218 }

Member Data Documentation

◆ m_fitVariance

EFitVariance m_fitVariance
privateinherited

Default variance to be used in the fit.

Definition at line 134 of file CDCFitter2D.h.

◆ m_lineConstrained

bool m_lineConstrained
privateinherited

Memory for the flag indicating that lines should be fitted.

Definition at line 51 of file KarimakisMethod.h.

◆ m_useOrientation

bool m_useOrientation
privateinherited

Flag indicating the reference position and drift length with right left orientation shall be used in the fit.

Definition at line 131 of file CDCFitter2D.h.

◆ m_usePosition

bool m_usePosition
privateinherited

Flag indicating the reconstructed position shall be used in the fit.

Definition at line 128 of file CDCFitter2D.h.


The documentation for this class was generated from the following files: