]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/tracking-ca/AliHLTTPCCATrackParam.h
90a7418c2a718341840cc9ccd5c37efcc1bf22cc
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCATrackParam.h
1 //-*- Mode: C++ -*-
2 // $Id$
3 // ************************************************************************
4 // This file is property of and copyright by the ALICE HLT Project        * 
5 // ALICE Experiment at CERN, All rights reserved.                         *
6 // See cxx source for full Copyright notice                               *
7 //                                                                        *
8 //*************************************************************************
9
10
11 #ifndef ALIHLTTPCCATRACKPARAM_H
12 #define ALIHLTTPCCATRACKPARAM_H
13
14 #include "AliHLTTPCCADef.h"
15 #include "AliHLTTPCCAMath.h"
16
17 class AliHLTTPCCATrackLinearisation;
18
19 /**
20  * @class AliHLTTPCCATrackParam
21  *
22  * AliHLTTPCCATrackParam class describes the track parametrisation
23  * which is used by the AliHLTTPCCATracker slice tracker.
24  *
25  */
26 class AliHLTTPCCATrackParam
27 {
28  public:
29
30   struct AliHLTTPCCATrackFitParam
31   {
32     Float_t fBethe, fE,fTheta2, fEP2, fSigmadE2, fK22,fK33,fK43,fK44;// parameters
33   };
34
35   GPUd() Float_t X()      const { return fX;    }
36   GPUd() Float_t Y()      const { return fP[0]; }
37   GPUd() Float_t Z()      const { return fP[1]; }
38   GPUd() Float_t SinPhi() const { return fP[2]; }
39   GPUd() Float_t DzDs()   const { return fP[3]; }
40   GPUd() Float_t QPt()    const { return fP[4]; }
41   GPUd() Float_t SignCosPhi() const { return fSignCosPhi; }
42   GPUd() Float_t Chi2()  const { return fChi2; }
43   GPUd() Int_t   NDF()   const { return fNDF; }
44
45   Float_t Err2Y()      const { return fC[0]; }
46   Float_t Err2Z()      const { return fC[2]; }
47   Float_t Err2SinPhi() const { return fC[5]; }
48   Float_t Err2DzDs()   const { return fC[9]; }
49   Float_t Err2QPt()    const { return fC[14]; }
50
51   GPUd() Float_t GetX()      const { return fX; }
52   GPUd() Float_t GetY()      const { return fP[0]; }
53   GPUd() Float_t GetZ()      const { return fP[1]; }
54   GPUd() Float_t GetSinPhi() const { return fP[2]; }
55   GPUd() Float_t GetDzDs()   const { return fP[3]; }
56   GPUd() Float_t GetQPt()    const { return fP[4]; }
57   GPUd() Float_t GetSignCosPhi() const { return fSignCosPhi; }
58   GPUd() Float_t GetChi2()   const { return fChi2; }
59   GPUd() Int_t   GetNDF()    const { return fNDF; }
60
61   GPUd() Float_t GetKappa( Float_t Bz ) const { return fP[4]*Bz; }
62   GPUd() Float_t GetCosPhi() const { return fSignCosPhi*CAMath::Sqrt(1-SinPhi()*SinPhi()); }
63
64   GPUd() Float_t GetErr2Y()      const { return fC[0]; }
65   GPUd() Float_t GetErr2Z()      const { return fC[2]; }
66   GPUd() Float_t GetErr2SinPhi() const { return fC[5]; }
67   GPUd() Float_t GetErr2DzDs()   const { return fC[9]; }
68   GPUd() Float_t GetErr2QPt()    const { return fC[14]; }
69
70   GPUhd() const Float_t *Par() const { return fP; }
71   GPUhd() const Float_t *Cov() const { return fC; }
72
73   const Float_t *GetPar() const { return fP; }
74   const Float_t *GetCov() const { return fC; }
75
76   GPUhd() void SetPar( Int_t i, Float_t v ){ fP[i] = v; }
77   GPUhd() void SetCov( Int_t i, Float_t v ){ fC[i] = v; }
78
79   GPUd() void SetX( Float_t v )     {  fX = v;    }
80   GPUd() void SetY( Float_t v )     {  fP[0] = v; }
81   GPUd() void SetZ( Float_t v )     {  fP[1] = v; }
82   GPUd() void SetSinPhi( Float_t v ){  fP[2] = v; }
83   GPUd() void SetDzDs( Float_t v )  {  fP[3] = v; }
84   GPUd() void SetQPt( Float_t v )   {  fP[4] = v; }
85   GPUd() void SetSignCosPhi( Float_t v ){  fSignCosPhi = v; }
86   GPUd() void SetChi2( Float_t v )  {  fChi2 = v; }
87   GPUd() void SetNDF( Int_t v )   { fNDF = v; }  
88
89
90   GPUd() Float_t GetDist2( const AliHLTTPCCATrackParam &t ) const;
91   GPUd() Float_t GetDistXZ2( const AliHLTTPCCATrackParam &t ) const;
92
93
94   GPUd() Float_t GetS( Float_t x, Float_t y, Float_t Bz  ) const;
95
96   GPUd() void GetDCAPoint( Float_t x, Float_t y, Float_t z,
97                            Float_t &px, Float_t &py, Float_t &pz, Float_t Bz  ) const;
98
99   
100   GPUd() Bool_t TransportToX( Float_t x, Float_t Bz, Float_t maxSinPhi=.999 );
101   GPUd() Bool_t TransportToXWithMaterial( Float_t x, Float_t Bz, Float_t maxSinPhi=.999 );
102
103   GPUd() Bool_t  TransportToX( Float_t x, AliHLTTPCCATrackLinearisation &t0, 
104                                Float_t Bz,  Float_t maxSinPhi=.999, Float_t *DL=0 ); 
105
106   GPUd() Bool_t  TransportToX( Float_t x, Float_t sinPhi0, Float_t cosPhi0,  Float_t Bz, Float_t maxSinPhi=.999 );
107
108  
109   GPUd() Bool_t  TransportToXWithMaterial( Float_t x,  AliHLTTPCCATrackLinearisation &t0, 
110                                            AliHLTTPCCATrackFitParam &par, Float_t Bz, Float_t maxSinPhi=.999 );
111
112   GPUd() Bool_t  TransportToXWithMaterial( Float_t x, 
113                                            AliHLTTPCCATrackFitParam &par, Float_t Bz, Float_t maxSinPhi=.999 );
114
115
116
117   GPUd() static Float_t ApproximateBetheBloch( Float_t beta2 );
118   GPUd() static Float_t BetheBlochGeant(Float_t bg,
119                                         Float_t kp0=2.33,
120                                         Float_t kp1=0.20,
121                                         Float_t kp2=3.00,
122                                         Float_t kp3=173e-9,
123                                         Float_t kp4=0.49848
124                                         );    
125   GPUd() static Float_t BetheBlochSolid(Float_t bg);
126   GPUd() static Float_t BetheBlochGas(Float_t bg);
127
128
129   GPUd() void CalculateFitParameters( AliHLTTPCCATrackFitParam &par, Float_t mass= 0.13957 );
130   GPUd() Bool_t CorrectForMeanMaterial( Float_t xOverX0,  Float_t xTimesRho, const AliHLTTPCCATrackFitParam &par );
131
132   GPUd() Bool_t Rotate( Float_t alpha, Float_t maxSinPhi = .999 );
133   GPUd() Bool_t Rotate( Float_t alpha, AliHLTTPCCATrackLinearisation &t0, Float_t maxSinPhi=.999 );
134   GPUd() Bool_t Filter( Float_t y, Float_t z, Float_t err2Y, Float_t err2Z, Float_t maxSinPhi=.999 );
135
136
137   GPUd() void Print() const;
138
139 private:
140
141   Float_t fX;      // x position
142   Float_t fSignCosPhi; // sign of cosPhi
143   Float_t fP[5];   // 'active' track parameters: Y, Z, SinPhi, DzDs, q/Pt
144   Float_t fC[15];  // the covariance matrix for Y,Z,SinPhi,..
145   Float_t fChi2;   // the chi^2 value
146   Int_t   fNDF;    // the Number of Degrees of Freedom
147 };
148
149 #endif