Belle II Software development
UncertainPerigeeCircle.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#pragma once
9
10#include <tracking/trackFindingCDC/geometry/PerigeeCircle.h>
11#include <tracking/trackFindingCDC/geometry/PerigeeParameters.h>
12
13#include <cstddef>
14#include <iosfwd>
15
16namespace Belle2 {
21
22 namespace TrackFindingCDC {
24 class Vector2D;
25
30
31 public:
36
42 UncertainPerigeeCircle(const double curvature,
43 const double phi0Vec,
44 const double impact,
45 const PerigeeCovariance& perigeeCovariance = PerigeeUtil::identity(),
46 const double chi2 = 0.0,
47 std::size_t ndf = 0)
48 : m_perigeeCircle(curvature, phi0Vec, impact)
50 , m_chi2(chi2)
51 , m_ndf(ndf)
52 {
53 }
54
60 UncertainPerigeeCircle(const double curvature,
61 const Vector2D& phi0,
62 const double impact,
63 const PerigeeCovariance& perigeeCovariance = PerigeeUtil::identity(),
64 const double chi2 = 0.0,
65 std::size_t ndf = 0)
66 : m_perigeeCircle(curvature, phi0, impact)
68 , m_chi2(chi2)
69 , m_ndf(ndf)
70 {
71 }
72
75 const PerigeeCovariance& perigeeCovariance = PerigeeUtil::identity(),
76 const double chi2 = 0.0,
77 std::size_t ndf = 0)
80 , m_chi2(chi2)
81 , m_ndf(ndf)
82 {
83 }
84
86 explicit UncertainPerigeeCircle(const GeneralizedCircle& generalizedCircle,
87 const PerigeeCovariance& perigeeCovariance = PerigeeUtil::identity(),
88 const double chi2 = 0.0,
89 std::size_t ndf = 0)
90 : m_perigeeCircle(generalizedCircle)
92 , m_chi2(chi2)
93 , m_ndf(ndf)
94 {
95 }
96
99 const PerigeeParameters& parameters,
100 const PerigeeCovariance& perigeeCovariance = PerigeeUtil::identity(),
101 const double chi2 = 0.0,
102 std::size_t ndf = 0)
103 : m_perigeeCircle(parameters)
105 , m_chi2(chi2)
106 , m_ndf(ndf)
107 {
108 }
109
112 static UncertainPerigeeCircle average(const UncertainPerigeeCircle& fromPerigeeCircle,
113 const UncertainPerigeeCircle& toPerigeeCircle);
114
115 public:
126 {
127 return &m_perigeeCircle;
128 }
129
131 operator const PerigeeCircle& () const
132 {
133 return m_perigeeCircle;
134 }
135
138 {
139 return m_perigeeCircle;
140 }
141
143 PerigeeParameters perigeeParameters() const
144 {
145 return m_perigeeCircle.perigeeParameters();
146 }
147
148 public:
150 void setPerigeeCovariance(const PerigeeCovariance& perigeeCovariance)
151 {
153 }
154
156 const PerigeeCovariance& perigeeCovariance() const
157 {
158 return m_perigeeCovariance;
159 }
160
162 double covariance(const EPerigeeParameter& iRow, const EPerigeeParameter& iCol) const
163 {
164 return perigeeCovariance()(iRow, iCol);
165 }
166
168 double variance(const EPerigeeParameter& i) const
169 {
170 return perigeeCovariance()(i, i);
171 }
172
174 double chi2() const
175 {
176 return m_chi2;
177 }
178
180 void setChi2(const double chi2)
181 {
182 m_chi2 = chi2;
183 }
184
186 std::size_t ndf() const
187 {
188 return m_ndf;
189 }
190
192 void setNDF(std::size_t ndf)
193 {
194 m_ndf = ndf;
195 }
196
199 {
200 m_perigeeCircle.invalidate();
202 m_chi2 = 0.0;
203 }
204
205 public:
207 void reverse()
208 {
209 m_perigeeCircle.reverse();
211 }
212
221
222 public:
228 void passiveMoveBy(const Vector2D& by)
229 {
230 // Move the covariance matrix first to have access to the original parameters
231 PerigeeJacobian jacobian = m_perigeeCircle.passiveMoveByJacobian(by);
233 m_perigeeCircle.passiveMoveBy(by);
234 }
235
241 PerigeeCovariance passiveMovedCovarianceBy(const Vector2D& by) const
242 {
243 PerigeeJacobian jacobian = m_perigeeCircle.passiveMoveByJacobian(by);
245 }
246
247 private:
250
253
255 double m_chi2 = 0.0;
256
258 size_t m_ndf = 0.0;
259
260 };
261
263 std::ostream& operator<<(std::ostream& output, const UncertainPerigeeCircle& circle);
264 }
266}
Extension of the generalized circle also caching the perigee coordinates.
Adds an uncertainty matrix to the circle in perigee parameterisation.
const PerigeeCircle & perigeeCircle() const
Getter for the underlying circle.
UncertainPerigeeCircle()
Default constructor for ROOT compatibility.
double covariance(const EPerigeeParameter &iRow, const EPerigeeParameter &iCol) const
Getter for individual elements of the covariance matrix.
UncertainPerigeeCircle(const GeneralizedCircle &generalizedCircle, const PerigeeCovariance &perigeeCovariance=PerigeeUtil::identity(), const double chi2=0.0, std::size_t ndf=0)
Augments a plain perigee circle with a covariance matrix. Covariance defaults to zero.
void reverse()
Flips the orientation of the circle in place.
void passiveMoveBy(const Vector2D &by)
Moves the coordinate system by the vector by and calculates the new perigee and its covariance matrix...
double variance(const EPerigeeParameter &i) const
Getter for individual diagonal elements of the covariance matrix.
double m_chi2
Memory for the chi square value of the fit of this circle.
void invalidate()
Sets all circle parameters to zero including the covariance matrix.
UncertainPerigeeCircle(const PerigeeParameters &parameters, const PerigeeCovariance &perigeeCovariance=PerigeeUtil::identity(), const double chi2=0.0, std::size_t ndf=0)
Constructor taking all stored parameters as a SVector.
PerigeeParameters perigeeParameters() const
Getter for the perigee parameters in the order defined by EPerigeeParameter.h.
UncertainPerigeeCircle(const double curvature, const double phi0Vec, const double impact, const PerigeeCovariance &perigeeCovariance=PerigeeUtil::identity(), const double chi2=0.0, std::size_t ndf=0)
Composes an uncertain perigee circle from the perigee parameters and a 3x3 covariance matrix.
void setPerigeeCovariance(const PerigeeCovariance &perigeeCovariance)
Setter for the whole covariance matrix of the perigee parameters.
PerigeeCovariance m_perigeeCovariance
Memory for the 3x3 covariance matrix of the perigee parameters.
double chi2() const
Getter for the chi square value of the circle fit.
void setNDF(std::size_t ndf)
Setter for the number of degrees of freediom used in the circle fit.
size_t m_ndf
Memory for the number of degrees of freedim of the fit of this circle.
UncertainPerigeeCircle reversed() const
Returns a copy of the circle with opposite orientation.
UncertainPerigeeCircle(const PerigeeCircle &perigeeCircle, const PerigeeCovariance &perigeeCovariance=PerigeeUtil::identity(), const double chi2=0.0, std::size_t ndf=0)
Augments a plain perigee circle with a covariance matrix. Covariance defaults to zero.
PerigeeCovariance passiveMovedCovarianceBy(const Vector2D &by) const
Calculates the jacobian matrix that is needed for the translation of the parameter covariance for a p...
UncertainPerigeeCircle(const double curvature, const Vector2D &phi0, const double impact, const PerigeeCovariance &perigeeCovariance=PerigeeUtil::identity(), const double chi2=0.0, std::size_t ndf=0)
Composes an uncertain perigee circle from the perigee parameters and a 3x3 covariance matrix.
void setChi2(const double chi2)
Setter for the chi square value of the circle fit.
const PerigeeCovariance & perigeeCovariance() const
Getter for the whole covariance matrix of the perigee parameters.
std::size_t ndf() const
Getter for the number of degrees of freediom used in the circle fit.
static UncertainPerigeeCircle average(const UncertainPerigeeCircle &fromPerigeeCircle, const UncertainPerigeeCircle &toPerigeeCircle)
Average the parameters of the two given perigee circles properly considering their covariance matrix.
PerigeeCircle m_perigeeCircle
Memory for the underlying circle.
const PerigeeCircle * operator->() const
Access to the constant interface of the underlying parameter line Allows the user of this "super" cla...
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
Definition Vector2D.h:32
Abstract base class for different kinds of events.
static CovarianceMatrix transported(const JacobianMatrix &jacobian, const CovarianceMatrix &cov)
static void transport(const JacobianMatrix &jacobian, CovarianceMatrix &cov)