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.
 
CDCTrajectory2D fit (const CDCObservations2D &observations2D) const
 Fits a collection of observation drift circles.
 
CDCTrajectory2D fit (CDCObservations2D &&observations2D) const
 Fits a collection of observation drift circles.
 
CDCTrajectory2D fit (const CDCTrack &track) const
 Fits the track.
 
CDCTrajectory2D fit (const CDCSegment3D &segment) const
 Fits the segment.
 
CDCTrajectory2D fit (const CDCSegment2D &fromSegment, const CDCSegment2D &toSegment) const
 Fits to the two segments.
 
CDCTrajectory2D fit (const CDCSegment2D &segment) const
 Fits the segment.
 
CDCTrajectory2D fit (const std::vector< const CDCWireHit * > &wireHit) const
 Fits to the wire hit observations.
 
CDCTrajectory2D fit (const std::vector< const CDCWire * > &wires) const
 Fits to the wire positions. Explicit specialisation to be used from python.
 
CDCTrajectory2D fit (const CDCWireHitSegment &wireHits) const
 Fits to the wire positions. Explicit specialisation to be used from python.
 
void update (CDCTrajectory2D &trajectory2D, const CDCObservations2D &observations2D) const
 Update the trajectory with a fit to the observations.
 
void update (CDCTrajectory2D &trajectory2D, CDCObservations2D &&observations2D) const
 Update the trajectory with a fit to the observations.
 
void update (CDCTrajectory2D &trajectory2D, const CDCSegment2D &segment) const
 Updates the given trajectory inplace from the given segment.
 
void update (CDCTrajectory2D &trajectory2D, const CDCAxialSegmentPair &axialSegmentPair) const
 Updates the given trajectory inplace from the given segment pair.
 
void update (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 indictor 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

CDCTrajectory2D fitGeneric (const AHits &hits) const
 Fits a collection of hit typs which are convertable to observation circles.
 
CDCTrajectory2D fitGeneric (const AStartHits &startHits, const AEndHits &endHits) const
 Fits together two collections of hit types which are convertable to observation circles.
 
void updateGeneric (CDCTrajectory2D &trajectory2D, const AHits &hits) const
 Updates a given trajectory with a fit to a collection of hits types, which are convertable to observation circles.
 
void updateGeneric (CDCTrajectory2D &trajectory2D, const AStartHits &startHits, const AEndHits &endHits) const
 Updates a given trajectory with a fit to two collection of hit types, which are convertable to observation circles.
 
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]

CDCTrajectory2D fit ( CDCObservations2D &&  observations2D) const
inherited

Fits a collection of observation drift circles.

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

45 {
46 CDCTrajectory2D result;
47 update(result, observations2D);
48 return result;
49 }
void update(CDCTrajectory2D &trajectory2D, const CDCObservations2D &observations2D) const
Update the trajectory with a fit to the observations.

◆ fit() [2/9]

CDCTrajectory2D fit ( const CDCObservations2D observations2D) const
inherited

Fits a collection of observation drift circles.

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

39 {
40 return fit(CDCObservations2D(observations2D));
41 }
CDCTrajectory2D fit(const CDCObservations2D &observations2D) const
Fits a collection of observation drift circles.

◆ fit() [3/9]

CDCTrajectory2D fit ( const CDCSegment2D fromSegment,
const CDCSegment2D toSegment 
) const
inherited

Fits to the two segments.

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

103 {
104 return fitGeneric(fromSegment, toSegment);
105 }
CDCTrajectory2D fitGeneric(const AHits &hits) const
Fits a collection of hit typs which are convertable to observation circles.

◆ fit() [4/9]

CDCTrajectory2D fit ( const CDCSegment2D segment) const
inherited

Fits the segment.

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

78 {
79 return fitGeneric(segment);
80 }

◆ fit() [5/9]

CDCTrajectory2D fit ( const CDCSegment3D segment) const
inherited

Fits the segment.

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

72 {
73 return fitGeneric(segment);
74 }

◆ fit() [6/9]

CDCTrajectory2D fit ( const CDCTrack track) const
inherited

Fits the track.

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

66 {
67 return fitGeneric(track);
68 }

◆ fit() [7/9]

CDCTrajectory2D fit ( const CDCWireHitSegment wireHits) const
inherited

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

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

96 {
97 return fitGeneric(wireHits);
98 }

◆ fit() [8/9]

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

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

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

90 {
91 return fitGeneric(wires);
92 }

◆ fit() [9/9]

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

Fits to the wire hit observations.

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

84 {
85 return fitGeneric(wireHits);
86 }

◆ fitGeneric() [1/2]

CDCTrajectory2D fitGeneric ( const AHits &  hits) const
privateinherited

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

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

124 {
125 CDCTrajectory2D result;
126 updateGeneric(result, hits);
127 return result;
128 }
void updateGeneric(CDCTrajectory2D &trajectory2D, const AHits &hits) const
Updates a given trajectory with a fit to a collection of hits types, which are convertable to observa...

◆ fitGeneric() [2/2]

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

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

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

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

◆ fitInternal()

UncertainPerigeeCircle fitInternal ( CDCObservations2D observations2D) const
privateinherited

Internal method doing the heavy work.

Definition at line 214 of file KarimakisMethod.cc.

215{
216 // Matrix of weighted sums
217 Eigen::Matrix< double, 4, 4> sNoL = getWXYRSumMatrix(observations2D);
218
219 // Matrix of averages
220 Eigen::Matrix<double, 4, 4> aNoL = sNoL / sNoL(iW);
221
222 // Measurement means
223 Eigen::Matrix<double, 4, 1> meansNoL = aNoL.row(iW);
224
225 // Covariance matrix
226 Eigen::Matrix<double, 4, 4> cNoL = aNoL - meansNoL * meansNoL.transpose();
227
228 // Determine NDF : Circle fit eats up to 3 degrees of freedom debpending on the constraints
229 size_t ndf = observations2D.size() - 2;
230
231 if (not isLineConstrained()) {
232 --ndf;
233 }
234
235 // Parameters to be fitted
236 UncertainPerigeeCircle resultCircle = fitKarimaki(sNoL(iW), meansNoL, cNoL, isLineConstrained());
237 double chi2 = calcChi2Karimaki(resultCircle, sNoL(iW), cNoL);
238
239 PerigeePrecision perigeePrecision = calcPrecisionKarimaki(resultCircle, sNoL, isLineConstrained());
240
241 // Use in pivotingin caset the matrix is not full rank as is for the constrained cases-
242 PerigeeCovariance perigeeCovariance = PerigeeUtil::covarianceFromPrecision(perigeePrecision);
243
244 resultCircle.setChi2(chi2);
245 resultCircle.setNDF(ndf);
246 resultCircle.setPerigeeCovariance(perigeeCovariance);
247 return resultCircle;
248}
std::size_t size() const
Returns the number of observations stored.
bool isLineConstrained() const
Getter for the indictor that lines should be fitted by this fitter.
A matrix implementation to be used as an interface typ through out the track finder.
Definition: PlainMatrix.h:40
Adds an uncertainty matrix to the circle in perigee parameterisation.
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.
static CovarianceMatrix covarianceFromPrecision(const PrecisionMatrix &prec)
Convert the precision matrix to the corresponding covariance matrix.

◆ 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}
Class implementing the fitter using Karimakis method.

◆ 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 indictor that lines should be fitted by this fitter.

Definition at line 36 of file KarimakisMethod.h.

37 {
38 return m_lineConstrained;
39 }
bool m_lineConstrained
Memory for the flag indicating that lines should be fitted.

◆ setFitVariance()

void setFitVariance ( EFitVariance  fitVariance)
inherited

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

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

221 {
222 m_fitVariance = fitVariance;
223 }
EFitVariance m_fitVariance
Default variance to be used in the fit.
Definition: CDCFitter2D.h:130

◆ setLineConstrained()

void setLineConstrained ( bool  constrained = true)
inlineinherited

Indicator if this fitter is setup to fit lines.

Definition at line 42 of file KarimakisMethod.h.

43 {
44 m_lineConstrained = constrained;
45 }

◆ update() [1/5]

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

Update the trajectory with a fit to the observations.

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

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

◆ update() [2/5]

void update ( 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 29 of file KarimakisMethod.cc.

31{
32 size_t nObservations = observations2D.size();
33 trajectory2D.clear();
34 if (not nObservations) return;
35
36 Vector2D ref = observations2D.getCentralPoint();
37 observations2D.passiveMoveBy(ref);
38
39 UncertainPerigeeCircle perigeeCircle = fitInternal(observations2D);
40
41 double frontX = observations2D.getX(0);
42 double frontY = observations2D.getY(0);
43 Vector2D frontPos(frontX, frontY);
44
45 double backX = observations2D.getX(nObservations - 1);
46 double backY = observations2D.getY(nObservations - 1);
47 Vector2D backPos(backX, backY);
48
49 Vector2D overPos(0, 0);
50 double totalPerps = (perigeeCircle->arcLengthBetween(frontPos, overPos) +
51 perigeeCircle->arcLengthBetween(overPos, backPos));
52
53 if (totalPerps < 0) {
54 perigeeCircle.reverse();
55 }
56
57 trajectory2D.setLocalOrigin(ref);
58 trajectory2D.setLocalCircle(perigeeCircle);
59}
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.
Vector2D getCentralPoint() const
Extracts the observation center that is at the index in the middle.
void passiveMoveBy(const Vector2D &origin)
Moves all observations passively such that the given vector becomes to origin of the new coordinate s...
double setLocalOrigin(const Vector2D &localOrigin)
Setter for the origin of the local coordinate system.
void setLocalCircle(const UncertainPerigeeCircle &localPerigeeCircle)
Setter for the generalized circle that describes the trajectory.
void clear()
Clears all information from this trajectoy.
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.
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:32

◆ update() [3/5]

void update ( CDCTrajectory2D trajectory2D,
const CDCAxialSegmentPair axialSegmentPair 
) const
inherited

Updates the given trajectory inplace from the given segment pair.

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

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

◆ update() [4/5]

void update ( CDCTrajectory2D trajectory2D,
const CDCObservations2D observations2D 
) const
inherited

Update the trajectory with a fit to the observations.

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

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

◆ update() [5/5]

void update ( CDCTrajectory2D trajectory2D,
const CDCSegment2D segment 
) const
inherited

Updates the given trajectory inplace from the given segment.

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

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

◆ updateGeneric() [1/2]

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

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

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

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

◆ updateGeneric() [2/2]

void updateGeneric ( 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 convertable to observation circles.

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

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

◆ useOnlyOrientation()

void useOnlyOrientation
inherited

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

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

207 {
208 m_usePosition = false;
209 m_useOrientation = true;
210 }
bool m_useOrientation
Flag indicating the reference position and drift length with right left orientation shall be used in ...
Definition: CDCFitter2D.h:127
bool m_usePosition
Flag indicating the reconstructed position shall be used in the fit.
Definition: CDCFitter2D.h:124

◆ useOnlyPosition()

void useOnlyPosition
inherited

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

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

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

◆ 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 117 of file CDCFitter2D.icc.h.

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

Member Data Documentation

◆ m_fitVariance

EFitVariance m_fitVariance
privateinherited

Default variance to be used in the fit.

Definition at line 130 of file CDCFitter2D.h.

◆ m_lineConstrained

bool m_lineConstrained
privateinherited

Memory for the flag indicating that lines should be fitted.

Definition at line 49 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 127 of file CDCFitter2D.h.

◆ m_usePosition

bool m_usePosition
privateinherited

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

Definition at line 124 of file CDCFitter2D.h.


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