Belle II Software  release-05-01-25
Helix.h
1 //-----------------------------------------------------------------------------
2 // $Id$
3 //-----------------------------------------------------------------------------
4 // Filename : Helix.h
5 // Section : TRG CDC
6 // Owner : Yoshihito Iwasaki
7 // Email : yoshihito.iwasaki@kek.jp
8 //-----------------------------------------------------------------------------
9 // Description : A class to represent a track helix parameter in Belle style
10 //-----------------------------------------------------------------------------
11 // $Log$
12 //-----------------------------------------------------------------------------
13 
14 #ifndef TRGCDCHelix_FLAG_
15 #define TRGCDCHelix_FLAG_
16 
17 #include <string>
18 #include "CLHEP/Matrix/Vector.h"
19 #include "CLHEP/Matrix/SymMatrix.h"
20 #include "CLHEP/Vector/ThreeVector.h"
21 #include "CLHEP/Vector/LorentzVector.h"
22 #include "CLHEP/Geometry/Point3D.h"
23 
24 #ifdef TRGCDC_SHORT_NAMES
25 #define TCHelix TRGCDCHelix
26 #endif
27 
28 namespace Belle2 {
34  class TRGCDCHelix {
36 
37  public:
40  const CLHEP::HepVector& a,
41  const CLHEP::HepSymMatrix& Ea);
42 
45  const CLHEP::HepVector& a);
46 
48  TRGCDCHelix(const HepGeom::Point3D<double>& position,
49  const CLHEP::Hep3Vector& momentum,
50  double charge);
51 
53  virtual ~TRGCDCHelix();
54 
55  public:// Selectors
56 
58  const HepGeom::Point3D<double>& center(void) const;
59 
61  const HepGeom::Point3D<double>& pivot(void) const;
62 
64  double radius(void) const;
65 
67  HepGeom::Point3D<double> x(double dPhi = 0.) const;
68 
70  double* x(double dPhi, double p[3]) const;
71 
73  HepGeom::Point3D<double> x(double dPhi, CLHEP::HepSymMatrix& Ex) const;
74 
76  CLHEP::Hep3Vector direction(double dPhi = 0.) const;
77 
79  CLHEP::Hep3Vector momentum(double dPhi = 0.) const;
80 
82  CLHEP::Hep3Vector momentum(double dPhi, CLHEP::HepSymMatrix& Em) const;
83 
85  CLHEP::HepLorentzVector momentum(double dPhi, double mass) const;
86 
88  CLHEP::HepLorentzVector momentum(double dPhi, double mass, CLHEP::HepSymMatrix& Em) const;
89 
91  CLHEP::HepLorentzVector momentum(double dPhi, double mass, HepGeom::Point3D<double>& x, CLHEP::HepSymMatrix& Emx) const;
92 
93  public:// Parametrization dependent functions. Prepared for tracking codes. Users should not use them.
94 
96  double dr(void) const;
97 
99  double phi0(void) const;
100 
102  double kappa(void) const;
103 
105  double dz(void) const;
106 
108  double tanl(void) const;
109 
111  double curv(void) const;
112 
114  double sinPhi0(void) const;
115 
117  double cosPhi0(void) const;
118 
120  const CLHEP::HepVector& a(void) const;
121 
123  const CLHEP::HepSymMatrix& Ea(void) const;
124 
125  public:// Modifiers
127  const CLHEP::HepVector& a(const CLHEP::HepVector& newA);
128 
130  const CLHEP::HepSymMatrix& Ea(const CLHEP::HepSymMatrix& newdA);
131 
134 
136  void set(const HepGeom::Point3D<double>& pivot,
137  const CLHEP::HepVector& a,
138  const CLHEP::HepSymMatrix& Ea);
139 
141  void ignoreErrorMatrix(void);
142 
144  double bFieldZ(void) const;
145 
147  double bFieldZ(double);
148 
150  static void set_limits(const CLHEP::HepVector& a_min,
151  const CLHEP::HepVector& a_max);
152 
154  static bool set_exception(bool);
155 
157  static bool set_print(bool);
158 
159  private:
161  static CLHEP::HepVector ms_amin;
163  static CLHEP::HepVector ms_amax;
165  static bool ms_check_range;
167  static bool ms_print_debug;
169  static bool ms_throw_exception;
170 
171 
172  public:// Operators
175 
176  public:// Mathmatical functions
178  CLHEP::HepMatrix delApDelA(const CLHEP::HepVector& ap) const;
180  CLHEP::HepMatrix delXDelA(double phi) const;
182  CLHEP::HepMatrix delMDelA(double phi) const;
184  CLHEP::HepMatrix del4MDelA(double phi, double mass) const;
186  CLHEP::HepMatrix del4MXDelA(double phi, double mass) const;
187 
188  private:
190  void updateCache(void);
192  void checkValid(void);
194  void debugPrint(void) const;
196  void debugTRGCDCHelix(void) const;
197 
198  public:
200  static const double ConstantAlpha;
201 
202  private:
208  double m_bField;
210  double m_alpha;
214  CLHEP::HepVector m_a;
216  CLHEP::HepSymMatrix m_Ea;
217 
218  private: // caches
222  double m_cp;
224  double m_sp;
226  double m_pt;
228  double m_r;
230  double m_ac[5];
231 
233  static const std::string invalidhelix;
234 
235  };
236 
237 //-----------------------------------------------------------------------------
238 
239  inline
242  {
243  return m_center;
244  }
245 
246  inline
248  TRGCDCHelix::pivot(void) const
249  {
250  return m_pivot;
251  }
252 
253  inline
254  double
256  {
257  return m_r;
258  }
259 
260  inline
261  CLHEP::Hep3Vector
262  TRGCDCHelix::direction(double phi) const
263  {
264  return momentum(phi).unit();
265  }
266 
267  inline
268  double
269  TRGCDCHelix::dr(void) const
270  {
271  return m_ac[0];
272  }
273 
274  inline
275  double
276  TRGCDCHelix::phi0(void) const
277  {
278  return m_ac[1];
279  }
280 
281  inline
282  double
283  TRGCDCHelix::kappa(void) const
284  {
285  return m_ac[2];
286  }
287 
288  inline
289  double
290  TRGCDCHelix::dz(void) const
291  {
292  return m_ac[3];
293  }
294 
295  inline
296  double
297  TRGCDCHelix::tanl(void) const
298  {
299  return m_ac[4];
300  }
301 
302  inline
303  double
304  TRGCDCHelix::curv(void) const
305  {
306  return m_r;
307  }
308 
309  inline
310  const CLHEP::HepVector&
311  TRGCDCHelix::a(void) const
312  {
313  return m_a;
314  }
315 
316  inline
317  const CLHEP::HepSymMatrix&
318  TRGCDCHelix::Ea(void) const
319  {
320  return m_Ea;
321  }
322 
323  inline
324  const CLHEP::HepVector&
325  TRGCDCHelix::a(const CLHEP::HepVector& i)
326  {
327  if (i.num_row() == 5) {
328  m_a = i;
329  m_helixValid = false;
330  updateCache();
331  }
332  return m_a;
333  }
334 
335  inline
336  const CLHEP::HepSymMatrix&
337  TRGCDCHelix::Ea(const CLHEP::HepSymMatrix& i)
338  {
339  return m_Ea = i;
340  }
341 
342  inline
343  double
345  {
346  m_bField = a;
347  m_alpha = 10000. / 2.99792458 / m_bField;
348  updateCache();
349  return m_bField;
350  }
351 
352  inline
353  double
355  {
356  return m_bField;
357  }
358 
359  inline
360  double
362  {
363  return m_sp;
364  }
365 
366  inline
367  double
369  {
370  return m_cp;
371  }
372 
374 } // namespace Belle2
375 
376 #endif /* TRGCDCHelix_FLAG_ */
Belle2::TRGCDCHelix::m_alpha
double m_alpha
alpha parameter
Definition: Helix.h:210
Belle2::TRGCDCHelix::phi0
double phi0(void) const
returns phi0.
Definition: Helix.h:276
Belle2::TRGCDCHelix::Ea
const CLHEP::HepSymMatrix & Ea(void) const
returns error matrix.
Definition: Helix.h:318
Belle2::TRGCDCHelix::center
const HepGeom::Point3D< double > & center(void) const
returns position of helix center(z = 0.);
Definition: Helix.h:241
Belle2::TRGCDCHelix::ms_throw_exception
static bool ms_throw_exception
throw exception or not
Definition: Helix.h:169
Belle2::TRGCDCHelix::ConstantAlpha
static const double ConstantAlpha
Constant alpha for uniform field.
Definition: Helix.h:200
Belle2::TRGCDCHelix::m_center
HepGeom::Point3D< double > m_center
caches
Definition: Helix.h:220
Belle2::TRGCDCHelix::sinPhi0
double sinPhi0(void) const
returns sin(phi0).
Definition: Helix.h:361
Belle2::TRGCDCHelix::m_sp
double m_sp
caches
Definition: Helix.h:224
Belle2::TRGCDCHelix::set_limits
static void set_limits(const CLHEP::HepVector &a_min, const CLHEP::HepVector &a_max)
set limits for helix parameters
Definition: Helix.cc:62
Belle2::TRGCDCHelix::checkValid
void checkValid(void)
check validity
Definition: Helix.cc:816
Belle2::TRGCDCHelix::~TRGCDCHelix
virtual ~TRGCDCHelix()
Destructor.
Definition: Helix.cc:131
Belle2::TRGCDCHelix::kappa
double kappa(void) const
returns kappa.
Definition: Helix.h:283
Belle2::TRGCDCHelix::momentum
CLHEP::Hep3Vector momentum(double dPhi=0.) const
returns momentum vector after rotating angle dPhi in phi direction.
Definition: Helix.cc:195
Belle2::TRGCDCHelix::m_r
double m_r
caches
Definition: Helix.h:228
Belle2::TRGCDCHelix::m_ac
double m_ac[5]
caches
Definition: Helix.h:230
Belle2::TRGCDCHelix::ms_check_range
static bool ms_check_range
range in checked or not
Definition: Helix.h:165
Belle2::TRGCDCHelix::updateCache
void updateCache(void)
update Caches
Definition: Helix.cc:437
Belle2::TRGCDCHelix::m_Ea
CLHEP::HepSymMatrix m_Ea
Ea HepSymMatrix parameter.
Definition: Helix.h:216
Belle2::TRGCDCHelix::set_exception
static bool set_exception(bool)
set to throw exception or not
Definition: Helix.cc:51
Belle2::TRGCDCHelix::m_pt
double m_pt
caches
Definition: Helix.h:226
Belle2::TRGCDCHelix
TRGCDCHelix parameter class.
Definition: Helix.h:35
Belle2::TRGCDCHelix::operator=
TRGCDCHelix & operator=(const TRGCDCHelix &)
Copy operator.
Definition: Helix.cc:410
Belle2::TRGCDCHelix::radius
double radius(void) const
returns radious of helix.
Definition: Helix.h:255
Belle2::TRGCDCHelix::ms_print_debug
static bool ms_print_debug
print debug info or not
Definition: Helix.h:167
Belle2::TRGCDCHelix::delMDelA
CLHEP::HepMatrix delMDelA(double phi) const
Mathmatical functions.
Definition: Helix.cc:634
Belle2::TRGCDCHelix::TRGCDCHelix
TRGCDCHelix(const HepGeom::Point3D< double > &pivot, const CLHEP::HepVector &a, const CLHEP::HepSymMatrix &Ea)
Constructor with pivot, helix parameter a, and its error matrix.
Definition: Helix.cc:71
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TRGCDCHelix::m_cp
double m_cp
caches
Definition: Helix.h:222
Belle2::TRGCDCHelix::cosPhi0
double cosPhi0(void) const
return cos(phi0).
Definition: Helix.h:368
Belle2::TRGCDCHelix::m_bField
double m_bField
magnetic field
Definition: Helix.h:208
Belle2::TRGCDCHelix::set_print
static bool set_print(bool)
set to print debug info or not
Definition: Helix.cc:56
Belle2::TRGCDCHelix::debugPrint
void debugPrint(void) const
print debug info
Definition: Helix.cc:800
Belle2::TRGCDCHelix::m_helixValid
bool m_helixValid
helix validity
Definition: Helix.h:206
Belle2::TRGCDCHelix::dr
double dr(void) const
returns dr.
Definition: Helix.h:269
Belle2::TRGCDCHelix::curv
double curv(void) const
returns curvurture.
Definition: Helix.h:304
Belle2::TRGCDCHelix::ms_amin
static CLHEP::HepVector ms_amin
limits for helix parameters
Definition: Helix.h:161
Belle2::TRGCDCHelix::delApDelA
CLHEP::HepMatrix delApDelA(const CLHEP::HepVector &ap) const
Mathmatical functions.
Definition: Helix.cc:510
Belle2::TRGCDCHelix::tanl
double tanl(void) const
returns tanl.
Definition: Helix.h:297
Belle2::TRGCDCHelix::bFieldZ
double bFieldZ(void) const
returns z componet of the magnetic field.
Definition: Helix.h:354
Belle2::TRGCDCHelix::dz
double dz(void) const
returns dz.
Definition: Helix.h:290
Belle2::TRGCDCHelix::del4MXDelA
CLHEP::HepMatrix del4MXDelA(double phi, double mass) const
Mathmatical functions.
Definition: Helix.cc:720
Belle2::TRGCDCHelix::debugTRGCDCHelix
void debugTRGCDCHelix(void) const
function not defined
Belle2::TRGCDCHelix::m_a
CLHEP::HepVector m_a
a HepVector parameter
Definition: Helix.h:214
HepGeom::Point3D< double >
Belle2::TRGCDCHelix::x
HepGeom::Point3D< double > x(double dPhi=0.) const
returns position after rotating angle dPhi in phi direction.
Definition: Helix.cc:136
Belle2::TRGCDCHelix::ms_amax
static CLHEP::HepVector ms_amax
limits for helix parameters
Definition: Helix.h:163
Belle2::TRGCDCHelix::delXDelA
CLHEP::HepMatrix delXDelA(double phi) const
Mathmatical functions.
Definition: Helix.cc:579
Belle2::TRGCDCHelix::a
const CLHEP::HepVector & a(void) const
returns helix parameters.
Definition: Helix.h:311
Belle2::TRGCDCHelix::invalidhelix
static const std::string invalidhelix
string of invalid helix
Definition: Helix.h:233
Belle2::TRGCDCHelix::direction
CLHEP::Hep3Vector direction(double dPhi=0.) const
returns direction vector after rotating angle dPhi in phi direction.
Definition: Helix.h:262
Belle2::TRGCDCHelix::del4MDelA
CLHEP::HepMatrix del4MDelA(double phi, double mass) const
Mathmatical functions.
Definition: Helix.cc:672
Belle2::TRGCDCHelix::set
void set(const HepGeom::Point3D< double > &pivot, const CLHEP::HepVector &a, const CLHEP::HepSymMatrix &Ea)
sets helix pivot position, parameters, and error matrix.
Definition: Helix.cc:397
Belle2::TRGCDCHelix::m_pivot
HepGeom::Point3D< double > m_pivot
pivot
Definition: Helix.h:212
Belle2::TRGCDCHelix::pivot
const HepGeom::Point3D< double > & pivot(void) const
returns pivot position.
Definition: Helix.h:248
Belle2::TRGCDCHelix::ignoreErrorMatrix
void ignoreErrorMatrix(void)
unsets error matrix. Error calculations will be ignored after this function call until an error matri...
Definition: Helix.cc:793
Belle2::TRGCDCHelix::m_matrixValid
bool m_matrixValid
matrix validity
Definition: Helix.h:204