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"
18 * @class AliHLTTPCCATrackParam
20 * AliHLTTPCCATrackParam class describes the track parametrisation
21 * which is used by the AliHLTTPCCATracker slice tracker.
24 class AliHLTTPCCATrackParam
28 struct AliHLTTPCCATrackFitParam
30 Float_t fBethe, fE,fTheta2, fEP2, fSigmadE2, fK22,fK33,fK43,fK44;// parameters
33 GPUd() Float_t X() const { return fX; }
34 GPUd() Float_t Y() const { return fP[0]; }
35 GPUd() Float_t Z() const { return fP[1]; }
36 GPUd() Float_t SinPhi()const { return fP[2]; }
37 GPUd() Float_t DzDs() const { return fP[3]; }
38 GPUd() Float_t Kappa() const { return fP[4]; }
39 GPUd() Float_t CosPhi()const { return fCosPhi; }
40 GPUd() Float_t Chi2() const { return fChi2; }
41 GPUd() Int_t NDF() const { return fNDF; }
43 Float_t Err2Y() const { return fC[0]; }
44 Float_t Err2Z() const { return fC[2]; }
45 Float_t Err2SinPhi() const { return fC[5]; }
46 Float_t Err2DzDs() const { return fC[9]; }
47 Float_t Err2Kappa() const { return fC[14]; }
49 GPUd() Float_t GetX() const { return fX; }
50 GPUd() Float_t GetY() const { return fP[0]; }
51 GPUd() Float_t GetZ() const { return fP[1]; }
52 GPUd() Float_t GetSinPhi() const { return fP[2]; }
53 GPUd() Float_t GetDzDs() const { return fP[3]; }
54 GPUd() Float_t GetKappa() const { return fP[4]; }
55 GPUd() Float_t GetCosPhi() const { return fCosPhi; }
56 GPUd() Float_t GetChi2() const { return fChi2; }
57 GPUd() Int_t GetNDF() const { return fNDF; }
59 GPUd() Float_t GetErr2Y() const { return fC[0]; }
60 GPUd() Float_t GetErr2Z() const { return fC[2]; }
61 GPUd() Float_t GetErr2SinPhi() const { return fC[5]; }
62 GPUd() Float_t GetErr2DzDs() const { return fC[9]; }
63 GPUd() Float_t GetErr2Kappa() const { return fC[14]; }
65 GPUhd() const Float_t *Par() const { return fP; }
66 GPUhd() const Float_t *Cov() const { return fC; }
68 const Float_t *GetPar() const { return fP; }
69 const Float_t *GetCov() const { return fC; }
71 GPUhd() void SetPar( Int_t i, Float_t v ){ fP[i] = v; }
72 GPUhd() void SetCov( Int_t i, Float_t v ){ fC[i] = v; }
74 GPUd() void SetX( Float_t v ) { fX = v; }
75 GPUd() void SetY( Float_t v ) { fP[0] = v; }
76 GPUd() void SetZ( Float_t v ) { fP[1] = v; }
77 GPUd() void SetSinPhi( Float_t v ){ fP[2] = v; }
78 GPUd() void SetDzDs( Float_t v ) { fP[3] = v; }
79 GPUd() void SetKappa( Float_t v ) { fP[4] = v; }
80 GPUd() void SetCosPhi( Float_t v ){ fCosPhi = v; }
81 GPUd() void SetChi2( Float_t v ) { fChi2 = v; }
82 GPUd() void SetNDF( Int_t v ) { fNDF = v; }
85 GPUd() Float_t GetDist2( const AliHLTTPCCATrackParam &t ) const;
86 GPUd() Float_t GetDistXZ2( const AliHLTTPCCATrackParam &t ) const;
88 GPUd() void ConstructXY3( const Float_t x[3], const Float_t y[3], const Float_t sigmaY2[3], Float_t CosPhi0 );
90 GPUd() void ConstructXYZ3( const Float_t p0[5], const Float_t p1[5], const Float_t p2[5],
91 Float_t CosPhi0, Float_t t0[]=0 );
93 GPUd() Float_t GetS( Float_t x, Float_t y ) const;
95 GPUd() void GetDCAPoint( Float_t x, Float_t y, Float_t z,
96 Float_t &px, Float_t &py, Float_t &pz ) const;
98 GPUd() Int_t TransportToX( Float_t X, Float_t maxSinPhi );
99 GPUd() Int_t TransportToX( Float_t X, AliHLTTPCCATrackParam &t0, Float_t maxSinPhi );
101 GPUd() Bool_t TransportToXWithMaterial( Float_t X, AliHLTTPCCATrackFitParam &par );
102 GPUd() Bool_t TransportToXWithMaterial( Float_t X, AliHLTTPCCATrackParam &t0, AliHLTTPCCATrackFitParam &par );
103 GPUd() Bool_t TransportToXWithMaterial( Float_t X, Float_t Bz );
104 GPUd() Bool_t Rotate( Float_t alpha, Float_t maxSinPhi=.99 );
105 GPUd() Bool_t RotateNoCos( Float_t alpha, AliHLTTPCCATrackParam &t0, Float_t maxSinPhi=.99 );
107 GPUd() Bool_t Filter2( Float_t y, Float_t z, Float_t err2Y, Float_t err2Z, Float_t maxSinPhi=.99 );
108 GPUd() Bool_t Filter2NoCos( Float_t y, Float_t z, Float_t err2Y, Float_t err2Z );
110 GPUd() Int_t TransportToX0( Float_t X, Float_t sinPhi, Float_t cosPhi );
111 GPUd() Int_t TransportToX0( Float_t X, Float_t maxSinPhi );
112 GPUd() Bool_t Filter20( Float_t y, Float_t z, Float_t err2Y, Float_t err2Z, Float_t maxSinPhi=.99 );
113 GPUd() Bool_t Filter200( Float_t y, Float_t z, Float_t err2Y, Float_t err2Z );
115 GPUd() Bool_t Filter2v1( Float_t y, Float_t z, Float_t err2Y, Float_t err2Z, Float_t maxSinPhi=.99 );
116 GPUd() void FilterY( Float_t y, Float_t erry );
117 GPUd() void FilterZ( Float_t z, Float_t errz );
119 GPUd() static Float_t ApproximateBetheBloch( Float_t beta2 );
120 GPUd() void CalculateFitParameters( AliHLTTPCCATrackFitParam &par, Float_t Bz, Float_t mass = 0.13957 );
121 GPUd() Bool_t CorrectForMeanMaterial( Float_t xOverX0, Float_t xTimesRho, const AliHLTTPCCATrackFitParam &par );
122 GPUd() void Print() const;
126 Float_t fX; // x position
127 Float_t fCosPhi; // cosPhi
128 Float_t fP[5]; // 'active' track parameters: Y, Z, SinPhi, DzDs, Kappa
129 Float_t fC[15]; // the covariance matrix for Y,Z,SinPhi,..
130 Float_t fChi2; // the chi^2 value
131 Int_t fNDF; // the Number of Degrees of Freedom