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 *
8 //*************************************************************************
11 #ifndef ALIHLTTPCCATRACKPARAM_H
12 #define ALIHLTTPCCATRACKPARAM_H
14 #include "AliHLTTPCCADef.h"
15 #include "AliHLTTPCCAMath.h"
17 class AliHLTTPCCATrackLinearisation;
20 * @class AliHLTTPCCATrackParam
22 * AliHLTTPCCATrackParam class describes the track parametrisation
23 * which is used by the AliHLTTPCCATracker slice tracker.
26 class AliHLTTPCCATrackParam
30 struct AliHLTTPCCATrackFitParam
32 Float_t fBethe, fE,fTheta2, fEP2, fSigmadE2, fK22,fK33,fK43,fK44;// parameters
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; }
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]; }
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; }
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()); }
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]; }
70 GPUhd() const Float_t *Par() const { return fP; }
71 GPUhd() const Float_t *Cov() const { return fC; }
73 const Float_t *GetPar() const { return fP; }
74 const Float_t *GetCov() const { return fC; }
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; }
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; }
90 GPUd() Float_t GetDist2( const AliHLTTPCCATrackParam &t ) const;
91 GPUd() Float_t GetDistXZ2( const AliHLTTPCCATrackParam &t ) const;
94 GPUd() Float_t GetS( Float_t x, Float_t y, Float_t Bz ) const;
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;
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 );
103 GPUd() Bool_t TransportToX( Float_t x, AliHLTTPCCATrackLinearisation &t0,
104 Float_t Bz, Float_t maxSinPhi=.999, Float_t *DL=0 );
106 GPUd() Bool_t TransportToX( Float_t x, Float_t sinPhi0, Float_t cosPhi0, Float_t Bz, Float_t maxSinPhi=.999 );
109 GPUd() Bool_t TransportToXWithMaterial( Float_t x, AliHLTTPCCATrackLinearisation &t0,
110 AliHLTTPCCATrackFitParam &par, Float_t Bz, Float_t maxSinPhi=.999 );
112 GPUd() Bool_t TransportToXWithMaterial( Float_t x,
113 AliHLTTPCCATrackFitParam &par, Float_t Bz, Float_t maxSinPhi=.999 );
117 GPUd() static Float_t ApproximateBetheBloch( Float_t beta2 );
118 GPUd() static Float_t BetheBlochGeant(Float_t bg,
125 GPUd() static Float_t BetheBlochSolid(Float_t bg);
126 GPUd() static Float_t BetheBlochGas(Float_t bg);
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 );
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 );
137 GPUd() void Print() const;
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