]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/kalman/AliHLTKalmanTrack.h
Interface to FASTJET. (Rafael Diaz)
[u/mrichter/AliRoot.git] / HLT / kalman / AliHLTKalmanTrack.h
1 // @(#) $Id$
2
3 #ifndef ALIL3_KALMANTRACK
4 #define ALIL3_KALMANTRACK
5
6 /*
7 * The state vector is:
8 *  fP0 (x[0]) : local y-coordinate
9 *  fP1 (x[1]) : local z-coordinate
10 *  fP2 (x[2]) : local sine of track momentum dip angle 
11 *  fP3 (x[3]) : tangent of track momentum dip angle
12 *  fP4 (x[4]) : 1/pt
13 *
14 * The covariance matrix is:
15 *  fC00                     
16 *  fC10 fC11
17 *  fC20 fC21 fC22
18 *  fC30 fC31 fC32 fC33
19 *  fC40 fC41 fC42 fC43 fC44
20 *
21 * To accsess this use: GetStateVector(Float_t xx[5])
22 *                      GetCovariance(Float_t xx[15])              
23 */
24
25 #include "AliHLTRootTypes.h"
26 #include "AliHLTTrack.h"
27
28 // includes for offline comparison, will be removed
29 #include "AliTPCtrack.h"
30 // includes for offline comparison, will be removed
31
32 class AliHLTSpacePointData;
33
34 class AliHLTKalmanTrack : public AliHLTTrack {
35 //class AliHLTKalmanTrack {
36
37  private:
38
39   Float_t fP0;             // Y-coordinate of a track
40   Float_t fP1;             // Z-coordinate of a track
41   Float_t fP2;             // C*x0
42   Float_t fP3;             // tangent of the track momentum dip angle
43   Float_t fP4;             // track curvature
44
45   Float_t fC00;                         // covariance
46   Float_t fC10, fC11;                   // matrix
47   Float_t fC20, fC21, fC22;             // of the
48   Float_t fC30, fC31, fC32, fC33;       // track
49   Float_t fC40, fC41, fC42, fC43, fC44; // parameters
50
51   Float_t fChisq; 
52   Float_t fMaxChi2;
53
54   Float_t fX;
55
56   Int_t fNHits;
57
58  public:
59
60   AliHLTKalmanTrack();
61   virtual ~AliHLTKalmanTrack();
62 Int_t MakeSeed(AliHLTTrack *track, AliHLTSpacePointData *points0, UInt_t pos0, Int_t slice0, AliHLTSpacePointData *points1, UInt_t pos1, Int_t slice1, AliHLTSpacePointData *points2, UInt_t pos2, Int_t slice2);
63   Int_t Init(AliHLTTrack *track, AliHLTSpacePointData *points, UInt_t pos,Int_t slice);
64   Int_t Propagate(AliHLTSpacePointData *points, UInt_t pos, Int_t slice);
65   Int_t UpdateTrack(AliHLTSpacePointData *points, UInt_t pos, Int_t slice);
66   Int_t UpdateTrackII(AliHLTSpacePointData *points, UInt_t pos);
67   void AddTrack();
68   //  Float_t GetStateVector(Float_t xx[5]) const {
69   void GetStateVector(Float_t xx[5]) const {
70     xx[0] = fP0;
71     xx[1] = fP1;
72     xx[2] = fP2;
73     xx[3] = fP3;
74     xx[4] = fP4;
75   }
76
77   Float_t GetX0() {return fP0;}
78   Float_t GetX1() {return fP1;}
79   Float_t GetX2() {return fP2;}
80   Float_t GetX3() {return fP3;}
81   Float_t GetX4() {return fP4;}
82
83   Float_t GetC0() {return fC00;}
84   Float_t GetC1() {return fC10;}
85   Float_t GetC2() {return fC11;}
86   Float_t GetC3() {return fC20;}
87   Float_t GetC4() {return fC21;}
88   Float_t GetC5() {return fC22;}
89   Float_t GetC6() {return fC30;}
90   Float_t GetC7() {return fC31;}
91   Float_t GetC8() {return fC32;}
92   Float_t GetC9() {return fC33;}
93   Float_t GetC10() {return fC40;}
94   Float_t GetC11() {return fC41;}
95   Float_t GetC12() {return fC42;}
96   Float_t GetC13() {return fC43;}
97   Float_t GetC14() {return fC44;}
98
99   void SetX(Float_t f) {fX = f;}
100   void SetX0(Float_t f) {fP0 = f;}
101   void SetX1(Float_t f) {fP1 = f;}
102   void SetX2(Float_t f) {fP2 = f;}
103   void SetX3(Float_t f) {fP3 = f;}
104   void SetX4(Float_t f) {fP4 = f;}
105
106   void SetC0(Float_t f) {fC00 = f;}
107   void SetC1(Float_t f) {fC10 = f;}
108   void SetC2(Float_t f) {fC11 = f;}
109   void SetC3(Float_t f) {fC20 = f;}
110   void SetC4(Float_t f) {fC21 = f;}
111   void SetC5(Float_t f) {fC22 = f;}
112   void SetC6(Float_t f) {fC30 = f;}
113   void SetC7(Float_t f) {fC31 = f;}
114   void SetC8(Float_t f) {fC32 = f;}
115   void SetC9(Float_t f) {fC33 = f;}
116   void SetC10(Float_t f) {fC40 = f;}
117   void SetC11(Float_t f) {fC41 = f;}
118   void SetC12(Float_t f) {fC42 = f;}
119   void SetC13(Float_t f) {fC43 = f;} 
120   void SetC14(Float_t f) {fC44 = f;}
121
122   //  Float_t GetCovariance(Float_t cc[15]) const {
123   void GetCovariance(Float_t cc[15]) const {
124     cc[0 ]=fC00;
125     cc[1 ]=fC10;  cc[2 ]=fC11;
126     cc[3 ]=fC20;  cc[4 ]=fC21;  cc[5 ]=fC22;
127     cc[6 ]=fC40;  cc[7 ]=fC41;  cc[8 ]=fC42;  cc[9 ]=fC44;
128     cc[10]=fC30;  cc[11]=fC31;  cc[12]=fC32;  cc[13]=fC43;  cc[14]=fC33;
129   }
130
131   Float_t GetChisq() {if(!fChisq) return 0; return fChisq;} 
132   Float_t GetX() {return fX;}
133   void SetStateVector(Float_t f[5]) {fP0 = f[0]; fP1 = f[1]; fP2 = f[2]; 
134                                      fP3 = f[3]; fP4 = f[4];}
135   void SetCovariance(Float_t f[15]) {fC00 = f[0];  fC10 = f[1]; fC11 = f[2];
136   fC21 = f[3]; fC21 = f[4]; fC22 = f[5]; fC30 = f[6]; fC31 = f[7]; fC32 = f[8];
137   fC33 = f[9]; fC40 = f[10]; fC41 = f[11]; fC42 = f[12]; fC43 = f[13]; 
138   fC44 = f[14];}
139   void SetChisq(Float_t f) {fChisq = f;}
140   void SetMaxChi2(Float_t f) {fMaxChi2 = f;}
141   //Float_t GetChisqIncrement(AliHLTSpacePointData *points, UInt_t pos);
142   Float_t GetChisqIncrement(Float_t y, Float_t error_y, Float_t z, Float_t error_z);
143   Float_t f2(Float_t x1,Float_t y1, Float_t x2,Float_t y2, Float_t x3,Float_t y3);
144   Float_t f3(Float_t x1,Float_t y1, Float_t x2,Float_t y2, Float_t z1,Float_t z2);
145   Float_t f4(Float_t x1,Float_t y1, Float_t x2,Float_t y2, Float_t x3,Float_t y3);
146   void Set(AliHLTKalmanTrack *track);
147
148   Int_t GetNHits() const {return fNHits;}
149   void SetNHits(Int_t f) {fNHits = f;}
150
151   Int_t PropagateOfflineTrack(Double_t x, Double_t y, Double_t z, Double_t ey, Double_t ez);
152   Int_t UpdateOfflineTrack(Double_t x, Double_t y, Double_t z, Double_t ey, Double_t ez);
153   Float_t GetChisqIncrementOfflineTrack(Double_t y, Double_t z, Double_t ey, Double_t ez);
154   
155 };
156
157 typedef AliHLTKalmanTrack AliL3KalmanTrack; // for backward compatibility
158
159 #endif