CGEM BOSS 6.6.5.g
BESIII Offline Software System
Loading...
Searching...
No Matches
Reconstruction/KalFitAlg/KalFitAlg-00-15-14/KalFitAlg/helix/Helix.h
Go to the documentation of this file.
1
2
3
4// Author Date comments
5// Y.Ohnishi 03/01/1997 original version
6// Y.Ohnishi 06/03/1997 updated
7// Y.Iwasaki 17/02/1998 BFILED removed, func. name changed, func. added
8// J.Tanaka 06/12/1998 add some utilities.
9// Y.Iwasaki 07/07/1998 cache added to speed up
10// Y.Iwasaki 25/04/2001 cache m_ac[5] added to speed up
11//
12#ifndef KalmanFit_Helix_FLAG_
13#define KalmanFit_Helix_FLAG_
14
16#include "GaudiKernel/IInterface.h"
17#include "GaudiKernel/Kernel.h"
18#include "GaudiKernel/Service.h"
21
22#include "CLHEP/Matrix/Vector.h"
23#include "CLHEP/Matrix/SymMatrix.h"
24//#ifndef CLHEP_THREEVECTOR_H
25#include "CLHEP/Vector/ThreeVector.h"
26//#endif
27#include "CLHEP/Vector/LorentzVector.h"
28//#ifndef CLHEP_POINT3D_H
29#include "CLHEP/Geometry/Point3D.h"
30//#endif
31
32#ifndef ENABLE_BACKWARDS_COMPATIBILITY
34#endif
35
36using namespace CLHEP;
37
38namespace KalmanFit{
39
40/// Helix parameter class
41class Helix {
42
43 public:
44 Helix();
45 /// Constructor with pivot, helix parameter a, and its error matrix.
46 Helix(const HepPoint3D & pivot,
47 const HepVector & a,
48 const HepSymMatrix & Ea);
49
50 /// Constructor without error matrix.
51 Helix(const HepPoint3D & pivot,
52 const HepVector & a);
53
54 /// Constructor with position, momentum, and charge.
55 Helix(const HepPoint3D & position,
56 const Hep3Vector & momentum,
57 double charge);
58
59 Helix(const Helix& i);
60 /// Destructor
61 virtual ~Helix();
62
63 public:// Selectors
64 /// returns position of helix center(z = 0.);
65 const HepPoint3D & center(void) const;
66
67 /// returns pivot position.
68 const HepPoint3D & pivot(void) const;
69
70 /// returns radious of helix.
71 double radius(void) const;
72
73 /// returns position after rotating angle dPhi in phi direction.
74 HepPoint3D x(double dPhi = 0.) const;
75 double * x(double dPhi, double p[3]) const;
76
77 /// returns position and convariance matrix(Ex) after rotation.
78 HepPoint3D x(double dPhi, HepSymMatrix & Ex) const;
79
80 /// returns direction vector after rotating angle dPhi in phi direction.
81 Hep3Vector direction(double dPhi = 0.) const;
82
83 /// returns momentum vector after rotating angle dPhi in phi direction.
84 Hep3Vector momentum(double dPhi = 0.) const;
85
86 /// returns momentum vector after rotating angle dPhi in phi direction.
87 Hep3Vector momentum(double dPhi, HepSymMatrix & Em) const;
88
89 /// returns 4momentum vector after rotating angle dPhi in phi direction.
90 HepLorentzVector momentum(double dPhi, double mass) const;
91
92 /// returns 4momentum vector after rotating angle dPhi in phi direction.
93 HepLorentzVector momentum(double dPhi, double mass, HepSymMatrix & Em) const;
94
95 /// returns 4momentum vector after rotating angle dPhi in phi direction.
96 HepLorentzVector momentum(double dPhi, double mass, HepPoint3D & x, HepSymMatrix & Emx) const;
97
98 public:// Parametrization dependent functions. Prepared for tracking codes. Users should not use them.
99 /// returns an element of parameters.
100 double dr(void) const;
101 double phi0(void) const;
102 double kappa(void) const;
103 double dz(void) const;
104 double tanl(void) const;
105 double curv(void) const;
106 double sinPhi0(void) const;
107 double cosPhi0(void) const;
108
109 /// returns helix parameters.
110 const HepVector & a(void) const;
111
112 /// returns error matrix.
113 const HepSymMatrix & Ea(void) const;
114
115 double pt(void) const{ return m_pt; }
116 double cosTheta(void) const{ return m_a[4]/sqrt(1.+ m_a[4]*m_a[4]); }
117
118 double approach(KalFitHitMdc& hit, bool doSagCorrection) const;
119
120 double approach(HepPoint3D pfwd, HepPoint3D pbwd, bool doSagCorrection) const;
121
122
123 public:// Modifiers
124 /// sets helix parameters.
125 const HepVector & a(const HepVector & newA);
126
127 /// sets helix paramters and error matrix.
128 const HepSymMatrix & Ea(const HepSymMatrix & newdA);
129
130 /// sets pivot position.
131 const HepPoint3D & pivot(const HepPoint3D & newPivot);
132
133 /// sets helix pivot position, parameters, and error matrix.
134 void set(const HepPoint3D & pivot,
135 const HepVector & a,
136 const HepSymMatrix & Ea);
137
138 /// unsets error matrix. Error calculations will be ignored after this function call until an error matrix be set again. 0 matrix will be return as a return value for error matrix when you call functions which returns an error matrix.
139 void ignoreErrorMatrix(void);
140
141 /// sets/returns z componet of the magnetic field.
142 double bFieldZ(double);
143 double bFieldZ(void) const;
144
145 ///
146 double alpha(void) const;
147
148 public:// Operators
149 /// Copy operator
150 Helix & operator = (const Helix &);
151
152 public:// Mathmatical functions
153 HepMatrix delApDelA(const HepVector & ap) const;
154 HepMatrix delXDelA(double phi) const;
155 HepMatrix delMDelA(double phi) const;
156 HepMatrix del4MDelA(double phi, double mass) const;
157 HepMatrix del4MXDelA(double phi, double mass) const;
158 double IntersectCylinder(double r) const;
159 double flightArc(HepPoint3D& hit)const;
160 double flightLength(HepPoint3D& hit)const;
161 double flightArc(double r)const;
162 double flightLength(double r)const;
163 double dPhi(HepPoint3D& hit) const;
164
165 private:
166 IMagneticFieldSvc* m_pmgnIMF;
167
168 private:
169 void updateCache(void);
170
171 public:
172 /// Constant alpha for uniform field.
173 static const double ConstantAlpha;
174
175 private:
176 double m_bField;
177 double m_alpha;
178 HepPoint3D m_pivot;
179 HepVector m_a;
180 HepSymMatrix m_Ea;
181 bool m_matrixValid;
182
183 private: // caches
184 HepPoint3D m_center;
185 double m_cp;
186 double m_sp;
187 double m_pt;
188 double m_r;
189 double m_ac[5];
190};
191
192//-----------------------------------------------------------------------------
193
194#ifdef Helix_NO_INLINE
195#define inline
196#else
197#undef inline
198#define Helix_INLINE_DEFINE_HERE
199#endif
200
201#ifdef Helix_INLINE_DEFINE_HERE
202
203inline
204const HepPoint3D &
205Helix::center(void) const {
206 return m_center;
207}
208
209inline
210const HepPoint3D &
211Helix::pivot(void) const {
212 return m_pivot;
213}
214
215inline
216double
217Helix::radius(void) const {
218 return m_r;
219}
220
221inline
222Hep3Vector
223Helix::direction(double phi) const {
224 return momentum(phi).unit();
225}
226
227inline
228double
229Helix::dr(void) const {
230 return m_ac[0];
231}
232
233inline
234double
235Helix::phi0(void) const {
236 return m_ac[1];
237}
238
239inline
240double
241Helix::kappa(void) const {
242 return m_ac[2];
243}
244
245inline
246double
247Helix::dz(void) const {
248 return m_ac[3];
249}
250
251inline
252double
253Helix::tanl(void) const {
254 return m_ac[4];
255}
256
257inline
258double
259Helix::curv(void) const {
260 return m_r;
261}
262
263inline
264const HepVector &
265Helix::a(void) const {
266 return m_a;
267}
268
269inline
270const HepSymMatrix &
271Helix::Ea(void) const {
272 return m_Ea;
273}
274
275inline
276const HepVector &
277Helix::a(const HepVector & i) {
278 m_a = i;
279 updateCache();
280 return m_a;
281}
282
283inline
284const HepSymMatrix &
285Helix::Ea(const HepSymMatrix & i) {
286 return m_Ea = i;
287}
288
289inline
290double
291Helix::bFieldZ(double a) {
292 m_bField = a;
293 m_alpha = 10000. / 2.99792458 / m_bField;
294
295 //std::cout<<"m_alpha: "<<m_alpha<<std::endl;
296 updateCache();
297 return m_bField;
298}
299
300
301inline
302double
303Helix::alpha(void) const {
304
305 return m_alpha;
306}
307
308
309inline
310double
311Helix::bFieldZ(void) const {
312 return m_bField;
313}
314
315inline
316double
317Helix::sinPhi0(void) const {
318 return m_sp;
319}
320
321inline
322double
323Helix::cosPhi0(void) const {
324 return m_cp;
325}
326
327#endif
328
329#undef inline
330
331}
332
333
334#endif /* KalmanFit_Helix_FLAG_ */
**********INTEGER nmxhep !maximum number of particles DOUBLE PRECISION vhep INTEGER jdahep COMMON hepevt $ !serial number $ !number of particles $ !status code $ !particle ident KF $ !parent particles $ !childreen particles $ !four momentum
double mass
Double_t x[10]
Description of a Hit in Mdc.
Definition: KalFitHitMdc.h:17
const HepPoint3D & center(void) const
returns position of helix center(z = 0.);
void set(const HepPoint3D &pivot, const HepVector &a, const HepSymMatrix &Ea)
sets helix pivot position, parameters, and error matrix.
double approach(KalFitHitMdc &hit, bool doSagCorrection) const
Definition: KalFitDoca.cxx:19
void ignoreErrorMatrix(void)
unsets error matrix. Error calculations will be ignored after this function call until an error matri...
static const double ConstantAlpha
Constant alpha for uniform field.
const HepSymMatrix & Ea(void) const
returns error matrix.
HepPoint3D x(double dPhi=0.) const
returns position after rotating angle dPhi in phi direction.
double dr(void) const
returns an element of parameters.
const HepVector & a(void) const
returns helix parameters.
const HepPoint3D & pivot(void) const
returns pivot position.
Hep3Vector direction(double dPhi=0.) const
returns direction vector after rotating angle dPhi in phi direction.