]>
Commit | Line | Data |
---|---|---|
326c2d4b | 1 | //-*- Mode: C++ -*- |
2 | // @(#) $Id$ | |
ce565086 | 3 | // ************************************************************************ |
fbb9b71b | 4 | // This file is property of and copyright by the ALICE HLT Project * |
ce565086 | 5 | // ALICE Experiment at CERN, All rights reserved. * |
6 | // See cxx source for full Copyright notice * | |
7 | // * | |
8 | //************************************************************************* | |
326c2d4b | 9 | |
10 | #ifndef ALIHLTTPCCAPARAM_H | |
11 | #define ALIHLTTPCCAPARAM_H | |
12 | ||
00d07bcd | 13 | #include "AliHLTTPCCADef.h" |
15d2e9cf | 14 | #include "AliHLTTPCCAMath.h" |
15 | #include "AliHLTTPCCATrackParam.h" | |
16fc8dc8 | 16 | |
4687b8fc | 17 | #include <iostream> |
00d07bcd | 18 | |
326c2d4b | 19 | |
20 | /** | |
21 | * @class ALIHLTTPCCAParam | |
d54804bf | 22 | * parameters of the AliHLTTPCCATracker, including geometry information |
326c2d4b | 23 | * and some reconstructon constants. |
dc4788ec | 24 | * |
25 | * The class is under construction. | |
26 | * | |
326c2d4b | 27 | */ |
28 | class AliHLTTPCCAParam | |
29 | { | |
fbb9b71b | 30 | public: |
c7d6f78b | 31 | AliHLTTPCCAParam(); |
32 | ~AliHLTTPCCAParam() {} | |
326c2d4b | 33 | |
fbb9b71b | 34 | #if !defined(HLTCA_GPUCODE) |
7be9b0d7 | 35 | void Initialize( int iSlice, int nRows, float rowX[], |
fbb9b71b | 36 | float alpha, float dAlpha, |
37 | float rMin, float rMax, float zMin, float zMax, | |
38 | float padPitch, float zSigma, float bz ); | |
7be9b0d7 | 39 | void Update(); |
31649d4b | 40 | #endif //!HLTCA_GPUCODE |
fbb9b71b | 41 | |
7be9b0d7 | 42 | GPUd() void Slice2Global( float x, float y, float z, |
fbb9b71b | 43 | float *X, float *Y, float *Z ) const; |
44 | ||
45 | GPUd() void Global2Slice( float x, float y, float z, | |
46 | float *X, float *Y, float *Z ) const; | |
47 | ||
48 | ||
49 | GPUhd() int ISlice() const { return fISlice;} | |
50 | GPUhd() int NRows() const { return fNRows;} | |
51 | ||
52 | GPUhd() float RowX( int iRow ) const { return fRowX[iRow]; } | |
53 | ||
54 | GPUd() float Alpha() const { return fAlpha;} | |
55 | GPUd() float Alpha( int iSlice ) const { return 0.174533 + DAlpha()*iSlice;} | |
56 | GPUd() float DAlpha() const { return fDAlpha;} | |
57 | GPUd() float CosAlpha() const { return fCosAlpha;} | |
58 | GPUd() float SinAlpha() const { return fSinAlpha;} | |
59 | GPUd() float AngleMin() const { return fAngleMin;} | |
60 | GPUd() float AngleMax() const { return fAngleMax;} | |
61 | GPUd() float RMin() const { return fRMin;} | |
62 | GPUd() float RMax() const { return fRMax;} | |
63 | GPUd() float ZMin() const { return fZMin;} | |
64 | GPUd() float ZMax() const { return fZMax;} | |
65 | GPUd() float ErrZ() const { return fErrZ;} | |
66 | GPUd() float ErrX() const { return fErrX;} | |
67 | GPUd() float ErrY() const { return fErrY;} | |
91794c67 | 68 | GPUd() float BzkG() const { return fBzkG;} |
69 | GPUd() float ConstBz() const { return fConstBz;} | |
fbb9b71b | 70 | |
f0fb467d | 71 | GPUd() float NeighboursSearchArea() const { return fNeighboursSearchArea; } |
fbb9b71b | 72 | GPUd() float TrackConnectionFactor() const { return fTrackConnectionFactor; } |
73 | GPUd() float TrackChiCut() const { return fTrackChiCut; } | |
74 | GPUd() float TrackChi2Cut() const { return fTrackChi2Cut; } | |
75 | GPUd() int MaxTrackMatchDRow() const { return fMaxTrackMatchDRow; } | |
76 | GPUd() float HitPickUpFactor() const { return fHitPickUpFactor; } | |
f0fb467d | 77 | GPUd() float ClusterError2CorrectionY() const { return fClusterError2CorrectionY; } |
78 | GPUd() float ClusterError2CorrectionZ() const { return fClusterError2CorrectionZ; } | |
36e3690e | 79 | GPUd() int MinNTrackClusters() const { return fMinNTrackClusters; } |
80 | GPUd() float MaxTrackQPt() const { return fMaxTrackQPt; } | |
fbb9b71b | 81 | |
82 | ||
83 | ||
84 | GPUhd() void SetISlice( int v ) { fISlice = v;} | |
85 | GPUhd() void SetNRows( int v ) { fNRows = v;} | |
86 | GPUhd() void SetRowX( int iRow, float v ) { fRowX[iRow] = v; } | |
87 | GPUd() void SetAlpha( float v ) { fAlpha = v;} | |
88 | GPUd() void SetDAlpha( float v ) { fDAlpha = v;} | |
89 | GPUd() void SetCosAlpha( float v ) { fCosAlpha = v;} | |
90 | GPUd() void SetSinAlpha( float v ) { fSinAlpha = v;} | |
91 | GPUd() void SetAngleMin( float v ) { fAngleMin = v;} | |
92 | GPUd() void SetAngleMax( float v ) { fAngleMax = v;} | |
93 | GPUd() void SetRMin( float v ) { fRMin = v;} | |
94 | GPUd() void SetRMax( float v ) { fRMax = v;} | |
95 | GPUd() void SetZMin( float v ) { fZMin = v;} | |
96 | GPUd() void SetZMax( float v ) { fZMax = v;} | |
97 | GPUd() void SetErrZ( float v ) { fErrZ = v;} | |
98 | GPUd() void SetErrX( float v ) { fErrX = v;} | |
99 | GPUd() void SetErrY( float v ) { fErrY = v;} | |
91794c67 | 100 | GPUd() void SetBzkG( float v ) { fBzkG = v;} |
f0fb467d | 101 | |
102 | GPUd() void SetNeighboursSearchArea( float v ) { fNeighboursSearchArea = v;} | |
fbb9b71b | 103 | GPUd() void SetTrackConnectionFactor( float v ) { fTrackConnectionFactor = v;} |
104 | GPUd() void SetTrackChiCut( float v ) { fTrackChiCut = v; } | |
f0fb467d | 105 | GPUd() void SetTrackChi2Cut( float v ) { fTrackChi2Cut = v; } |
fbb9b71b | 106 | GPUd() void SetMaxTrackMatchDRow( int v ) { fMaxTrackMatchDRow = v; } |
107 | GPUd() void SetHitPickUpFactor( float v ) { fHitPickUpFactor = v; } | |
f0fb467d | 108 | GPUd() void SetClusterError2CorrectionY( float v ) { fClusterError2CorrectionY = v; } |
109 | GPUd() void SetClusterError2CorrectionZ( float v ) { fClusterError2CorrectionZ = v; } | |
fbb9b71b | 110 | |
36e3690e | 111 | GPUd() void SetMinNTrackClusters( int v ){ fMinNTrackClusters = v; } |
15689bf8 | 112 | GPUd() void SetMinTrackPt( float v ){ fMaxTrackQPt = CAMath::Abs(v)>0.02 ?1./CAMath::Abs(v) :1./0.02; } |
fbb9b71b | 113 | |
114 | GPUd() float GetClusterError2( int yz, int type, float z, float angle ) const; | |
6d869045 | 115 | GPUd() void GetClusterErrors2( int row, float z, float sinPhi, float cosPhi, float DzDs, float &Err2Y, float &Err2Z ) const; |
116 | GPUd() void GetClusterErrors2v1( int rowType, float z, float sinPhi, float cosPhi, float DzDs, float &Err2Y, float &Err2Z ) const; | |
fbb9b71b | 117 | |
118 | void WriteSettings( std::ostream &out ) const; | |
119 | void ReadSettings( std::istream &in ); | |
120 | ||
121 | GPUd() void SetParamS0Par( int i, int j, int k, float val ) { | |
122 | fParamS0Par[i][j][k] = val; | |
123 | } | |
6d869045 | 124 | |
125 | GPUd() const float *GetParamS0Par(int i, int j) const { return fParamS0Par[i][j]; } | |
126 | ||
91794c67 | 127 | GPUd() float GetBzkG() const { return fBzkG;} |
128 | GPUd() float GetConstBz() const { return fConstBz;} | |
fbb9b71b | 129 | GPUd() float GetBz( float x, float y, float z ) const; |
130 | GPUd() float GetBz( const AliHLTTPCCATrackParam &t ) const; | |
15d2e9cf | 131 | |
00d07bcd | 132 | protected: |
fbb9b71b | 133 | int fISlice; // slice number |
134 | int fNRows; // number of rows | |
d54804bf | 135 | |
fbb9b71b | 136 | float fAlpha, fDAlpha; // slice angle and angular size |
137 | float fCosAlpha, fSinAlpha;// sign and cosine of the slice angle | |
138 | float fAngleMin, fAngleMax; // minimal and maximal angle | |
139 | float fRMin, fRMax;// slice R range | |
140 | float fZMin, fZMax;// slice Z range | |
141 | float fErrX, fErrY, fErrZ;// default cluster errors | |
142 | float fPadPitch; // pad pitch | |
91794c67 | 143 | float fBzkG; // constant magnetic field value in kG |
144 | float fConstBz; // constant magnetic field value in kG*clight | |
eb30eb49 | 145 | |
fbb9b71b | 146 | float fHitPickUpFactor;// multiplier for the chi2 window for hit pick up procedure |
eb30eb49 | 147 | |
fbb9b71b | 148 | int fMaxTrackMatchDRow;// maximal jump in TPC row for connecting track segments |
f0fb467d | 149 | |
150 | float fNeighboursSearchArea; // area in cm for the search of neighbours | |
151 | ||
fbb9b71b | 152 | float fTrackConnectionFactor; // allowed distance in Chi^2/3.5 for neighbouring tracks |
153 | float fTrackChiCut; // cut for track Sqrt(Chi2/NDF); | |
154 | float fTrackChi2Cut;// cut for track Chi^2/NDF | |
f0fb467d | 155 | float fClusterError2CorrectionY; // correction for the squared cluster error during tracking |
156 | float fClusterError2CorrectionZ; // correction for the squared cluster error during tracking | |
36e3690e | 157 | int fMinNTrackClusters; //* required min number of clusters on the track |
158 | float fMaxTrackQPt; //* required max Q/Pt (==min Pt) of tracks | |
159 | ||
fbb9b71b | 160 | float fRowX[200];// X-coordinate of rows |
161 | float fParamS0Par[2][3][7]; // cluster error parameterization coeficients | |
162 | float fPolinomialFieldBz[6]; // field coefficients | |
dc4788ec | 163 | |
326c2d4b | 164 | }; |
165 | ||
166 | ||
15d2e9cf | 167 | |
fbb9b71b | 168 | GPUd() inline float AliHLTTPCCAParam::GetBz( float x, float y, float z ) const |
15d2e9cf | 169 | { |
fbb9b71b | 170 | float r2 = x * x + y * y; |
15d2e9cf | 171 | float r = CAMath::Sqrt( r2 ); |
172 | const float *c = fPolinomialFieldBz; | |
173 | return ( c[0] + c[1]*z + c[2]*r + c[3]*z*z + c[4]*z*r + c[5]*r2 ); | |
174 | } | |
175 | ||
fbb9b71b | 176 | GPUd() inline float AliHLTTPCCAParam::GetBz( const AliHLTTPCCATrackParam &t ) const |
15d2e9cf | 177 | { |
178 | return GetBz( t.X(), t.Y(), t.Z() ); | |
179 | } | |
180 | ||
31649d4b | 181 | #endif //ALIHLTTPCCAPARAM_H |