MarlinTPC  1.2.0
SimpleHelixTrackModel.h
1 #ifndef SIMPLEHELIXTRACKMODEL_H
2 #define SIMPLEHELIXTRACKMODEL_H
3 
4 #include <gearimpl/Vector3D.h>
5 
6 #include "TVectorD.h"
7 #include "TMatrixD.h"
8 #include "TMatrixDSym.h"
9 
10 #include "EVENT/Track.h"
11 
12 
13 namespace marlintpc {
14 
16 
23 class simpleHelix {
24  public:
25  simpleHelix(const double, const double, const double, const double, const double, const double*, const double);
26  simpleHelix(const double*, const double*, const double);
27  void dump() const;
28  double getArcLengthXY(const double*) const;
29  void getZSDirection(double*) const;
30  void getPosAtArcLength(const double, double*) const;
31  bool getExpectedPlanePos(const double*, const double, double&, double&, double&, double&, double&) const;
32  TMatrixD analyticalHelixJacobian(const double, const double) const;
33  TMatrixD simplifiedHelixJacobian(const double, const double) const;
34  TMatrixD curvilinearToPerigeeJacobian() const;
35  TMatrixD perigeeToILDJacobian() const;
36  TMatrixD perigeeToLCIOJacobian() const;
37  TMatrixD helixToLCIOJacobian() const;
38  void moveTo(const double, const double, const double, double*);
39  void getStateAt(const double, const double, const double, TMatrixDSym&, TVectorD&, TMatrixDSym&);
40 
41  protected:
43  const double _xref;
45  const double _yref;
47  const double _zref;
49  const double _bzc;
51  const double _rinv;
53  const double _phi0;
55  const double _dca;
57  const double _dzds;
59  const double _z0;
61  const double _xRelCenter;
63  const double _yRelCenter;
65  const double _eps;
66 };
67 
69 
83 class localHelix {
84  public:
85  localHelix(const double*, const double*, const double);
86  void dump() const;
87  TMatrixD propagateTo(const double*, const double);
89 
90  private:
92  double _bfac;
94  gear::Vector3D _bFieldc;
96  TVectorD _offset;
98  TMatrixD _rotation;
100  TMatrixD _rotInv;
102  gear::Vector3D _trackDir;
104  double _cosLambda;
106  double _qbyp;
108  double _localPar[5];
110  double _localRef[3];
111 
112  gear::Vector3D getBFieldc(const double*) const;
113  void calcLocal();
114  void calcGlobal();
115 };
116 
118 
121 class simpleFitXY {
122  public:
123  simpleFitXY(bool, double, double);
124  void addPoint(double, double, double);
125  void addTrack(EVENT::Track const *);
126  int fit(double&, int&);
127  TVectorD getPar() const;
128  TMatrixDSym getCov() const;
129 
130  private:
132  const bool _curved;
134  const int _npar;
136  const double _xRef;
138  const double _yRef;
140  int _numPoints;
142  double _sx;
144  double _sy;
146  double _sxx;
148  double _sxy;
150  double _syy;
152  double _sw;
154  double _sr;
156  double _sxr;
158  double _syr;
160  double _srr;
162  TVectorD _parameters;
164  TMatrixDSym _covariance;
165 };
166 
168 
171 class simpleFitZS {
172  public:
173  simpleFitZS();
174  void addPoint(double, double, double);
175  int fit(double&, int&);
176  TVectorD getPar() const;
177  TMatrixDSym getCov() const;
178 
179  private:
181  const int _npar;
183  int _numPoints;
185  double _sx;
187  double _sy;
189  double _sxx;
191  double _sxy;
193  double _syy;
195  double _sw;
197  TVectorD _parameters;
199  TMatrixDSym _covariance;
200 };
201 
202 } // namespace marlintpc
203 
204 #endif // SIMPLEHELIXTRACKMODEL_H
const double _bzc
Z component of magnetic field (*c)
Definition: SimpleHelixTrackModel.h:49
const double _z0
Z position at distance of closest approach.
Definition: SimpleHelixTrackModel.h:59
TMatrixD perigeeToILDJacobian() const
Get transformation from perigee to L3/ILD track parameters (at reference point)
Definition: SimpleHelixTrackModel.cc:345
Simple fit in ZS.
Definition: SimpleHelixTrackModel.h:171
const double _phi0
flight direction at point of closest approach (in XY)
Definition: SimpleHelixTrackModel.h:53
simpleHelix getSimpleHelix() const
Get simple helix.
Definition: SimpleHelixTrackModel.cc:663
simpleFitXY(bool, double, double)
Constructor for simple fit in XY.
Definition: SimpleHelixTrackModel.cc:691
TMatrixD analyticalHelixJacobian(const double, const double) const
Get analytical helix propagator (in constant solenoidal magnetic field)
Definition: SimpleHelixTrackModel.cc:255
TMatrixD curvilinearToPerigeeJacobian() const
Get transformation from curivilinear to perigee track parameters (at reference point) ...
Definition: SimpleHelixTrackModel.cc:294
Simple Helix.
Definition: SimpleHelixTrackModel.h:23
TVectorD getPar() const
Get parameters vector.
Definition: SimpleHelixTrackModel.cc:829
void getStateAt(const double, const double, const double, TMatrixDSym &, TVectorD &, TMatrixDSym &)
Get state (parameters, covariance matrix) at point.
Definition: SimpleHelixTrackModel.cc:444
Local Helix.
Definition: SimpleHelixTrackModel.h:83
Simple fit in XY.
Definition: SimpleHelixTrackModel.h:121
TMatrixDSym getCov() const
Get covariance matrix.
Definition: SimpleHelixTrackModel.cc:837
TMatrixD helixToLCIOJacobian() const
Get transformation from helix to LCIO track parameters (at reference point)
Definition: SimpleHelixTrackModel.cc:384
const double _rinv
1/R
Definition: SimpleHelixTrackModel.h:51
void addPoint(double, double, double)
Add point.
Definition: SimpleHelixTrackModel.cc:704
void moveTo(const double, const double, const double, double *)
Change reference point.
Definition: SimpleHelixTrackModel.cc:403
const double _xref
X of reference point.
Definition: SimpleHelixTrackModel.h:43
void getPosAtArcLength(const double, double *) const
Get position (on helix) at arc length.
Definition: SimpleHelixTrackModel.cc:179
simpleHelix(const double, const double, const double, const double, const double, const double *, const double)
Constructor.
Definition: SimpleHelixTrackModel.cc:125
void dump() const
Dump helix.
Definition: SimpleHelixTrackModel.cc:139
localHelix(const double *, const double *, const double)
Constructor.
Definition: SimpleHelixTrackModel.cc:510
TMatrixD simplifiedHelixJacobian(const double, const double) const
Get simplified helix propagator (in constant solenoidal magnetic field)
Definition: SimpleHelixTrackModel.cc:277
const double _eps
cut off for straight line approximation (|relevant scale / R| < _eps)
Definition: SimpleHelixTrackModel.h:65
void addPoint(double, double, double)
Add point.
Definition: SimpleHelixTrackModel.cc:854
void addTrack(EVENT::Track const *)
add a complete Track.
Definition: SimpleHelixTrackModel.cc:727
TMatrixD propagateTo(const double *, const double)
Propagate stepwise (close) to point.
Definition: SimpleHelixTrackModel.cc:595
void getZSDirection(double *) const
Get ZS direction (cosLambda, sinLambda).
Definition: SimpleHelixTrackModel.cc:167
const double _xRelCenter
XY circle parameter: X position of center / R.
Definition: SimpleHelixTrackModel.h:61
void dump() const
Dump helix.
Definition: SimpleHelixTrackModel.cc:577
TMatrixD perigeeToLCIOJacobian() const
Get transformation from helix to LCIO track parameters (at reference point)
Definition: SimpleHelixTrackModel.cc:364
const double _zref
Z of reference point.
Definition: SimpleHelixTrackModel.h:47
int fit(double &, int &)
Perform fit.
Definition: SimpleHelixTrackModel.cc:871
const double _yRelCenter
XY circle parameter: Y position of center / R.
Definition: SimpleHelixTrackModel.h:63
bool getExpectedPlanePos(const double *, const double, double &, double &, double &, double &, double &) const
Get expected position (and direction) in plane.
Definition: SimpleHelixTrackModel.cc:207
double getArcLengthXY(const double *) const
Get (2D) arc length for given point.
Definition: SimpleHelixTrackModel.cc:153
const double _yref
Y of reference point.
Definition: SimpleHelixTrackModel.h:45
int fit(double &, int &)
Perform fit.
Definition: SimpleHelixTrackModel.cc:741
TVectorD getPar() const
Get parameters vector.
Definition: SimpleHelixTrackModel.cc:897
TMatrixDSym getCov() const
Get covariance matrix.
Definition: SimpleHelixTrackModel.cc:905
const double _dzds
dZ/ds
Definition: SimpleHelixTrackModel.h:57
simpleFitZS()
Constructor for simple fit in ZS.
Definition: SimpleHelixTrackModel.cc:842
const double _dca
distance of closest approach in (XY)
Definition: SimpleHelixTrackModel.h:55