merge in cycles
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCAParam.cxx
CommitLineData
326c2d4b 1// @(#) $Id$
ce565086 2// **************************************************************************
fbb9b71b 3// This file is property of and copyright by the ALICE HLT Project *
d54804bf 4// ALICE Experiment at CERN, All rights reserved. *
5// *
6// Primary Authors: Sergey Gorbunov <sergey.gorbunov@kip.uni-heidelberg.de> *
7// Ivan Kisel <kisel@kip.uni-heidelberg.de> *
8// for The ALICE HLT Project. *
9// *
10// Permission to use, copy, modify and distribute this software and its *
11// documentation strictly for non-commercial purposes is hereby granted *
12// without fee, provided that the above copyright notice appears in all *
13// copies and that both the copyright notice and this permission notice *
14// appear in the supporting documentation. The authors make no claims *
15// about the suitability of this software for any purpose. It is *
16// provided "as is" without express or implied warranty. *
ce565086 17// *
d54804bf 18//***************************************************************************
326c2d4b 19
ce565086 20
326c2d4b 21#include "AliHLTTPCCAParam.h"
00d07bcd 22#include "AliHLTTPCCAMath.h"
326c2d4b 23
24
fbb9b71b 25#if !defined(HLTCA_GPUCODE)
00d07bcd 26
27GPUd() AliHLTTPCCAParam::AliHLTTPCCAParam()
fbb9b71b 28 : fISlice( 0 ), fNRows( 63 ), fAlpha( 0.174533 ), fDAlpha( 0.349066 ),
29 fCosAlpha( 0 ), fSinAlpha( 0 ), fAngleMin( 0 ), fAngleMax( 0 ), fRMin( 83.65 ), fRMax( 133.3 ),
30 fZMin( 0.0529937 ), fZMax( 249.778 ), fErrX( 0 ), fErrY( 0 ), fErrZ( 0.228808 ), fPadPitch( 0.4 ), fBz( -5. ),
31 fHitPickUpFactor( 1. ),
32 fMaxTrackMatchDRow( 4 ), fTrackConnectionFactor( 3.5 ), fTrackChiCut( 3.5 ), fTrackChi2Cut( 10 )
326c2d4b 33{
00d07bcd 34 // constructor
eb30eb49 35 fParamS0Par[0][0][0] = 0.00047013;
36 fParamS0Par[0][0][1] = 2.00135e-05;
37 fParamS0Par[0][0][2] = 0.0106533;
38 fParamS0Par[0][0][3] = 5.27104e-08;
39 fParamS0Par[0][0][4] = 0.012829;
40 fParamS0Par[0][0][5] = 0.000147125;
41 fParamS0Par[0][0][6] = 4.99432;
42 fParamS0Par[0][1][0] = 0.000883342;
43 fParamS0Par[0][1][1] = 1.07011e-05;
44 fParamS0Par[0][1][2] = 0.0103187;
45 fParamS0Par[0][1][3] = 4.25141e-08;
46 fParamS0Par[0][1][4] = 0.0224292;
47 fParamS0Par[0][1][5] = 8.27274e-05;
48 fParamS0Par[0][1][6] = 4.17233;
49 fParamS0Par[0][2][0] = 0.000745399;
50 fParamS0Par[0][2][1] = 5.62408e-06;
51 fParamS0Par[0][2][2] = 0.0151562;
52 fParamS0Par[0][2][3] = 5.08757e-08;
53 fParamS0Par[0][2][4] = 0.0601004;
54 fParamS0Par[0][2][5] = 7.97129e-05;
55 fParamS0Par[0][2][6] = 4.84913;
56 fParamS0Par[1][0][0] = 0.00215126;
57 fParamS0Par[1][0][1] = 6.82233e-05;
58 fParamS0Par[1][0][2] = 0.0221867;
59 fParamS0Par[1][0][3] = -6.27825e-09;
60 fParamS0Par[1][0][4] = -0.00745378;
61 fParamS0Par[1][0][5] = 0.000172629;
62 fParamS0Par[1][0][6] = 6.24987;
63 fParamS0Par[1][1][0] = 0.00181667;
64 fParamS0Par[1][1][1] = -4.17772e-06;
65 fParamS0Par[1][1][2] = 0.0253429;
66 fParamS0Par[1][1][3] = 1.3011e-07;
67 fParamS0Par[1][1][4] = -0.00362827;
68 fParamS0Par[1][1][5] = 0.00030406;
69 fParamS0Par[1][1][6] = 17.7775;
70 fParamS0Par[1][2][0] = 0.00158251;
71 fParamS0Par[1][2][1] = -3.55911e-06;
72 fParamS0Par[1][2][2] = 0.0247899;
73 fParamS0Par[1][2][3] = 7.20604e-08;
74 fParamS0Par[1][2][4] = 0.0179946;
75 fParamS0Par[1][2][5] = 0.000425504;
76 fParamS0Par[1][2][6] = 20.9294;
77
fbb9b71b 78 const double kCLight = 0.000299792458;
79
80 fPolinomialFieldBz[0] = kCLight * 4.99643;
81 fPolinomialFieldBz[1] = kCLight * -2.27193e-06;
82 fPolinomialFieldBz[2] = kCLight * 0.000116475;
83 fPolinomialFieldBz[3] = kCLight * -1.49956e-06;
84 fPolinomialFieldBz[4] = kCLight * -1.01721e-07;
85 fPolinomialFieldBz[5] = kCLight * 4.85701e-07;
15d2e9cf 86
326c2d4b 87 Update();
88}
00d07bcd 89#endif
326c2d4b 90
fbb9b71b 91GPUd() void AliHLTTPCCAParam::Initialize( int iSlice,
92 int nRows, float rowX[],
93 float alpha, float dAlpha,
94 float rMin, float rMax,
95 float zMin, float zMax,
96 float padPitch, float zSigma,
97 float bz
98 )
326c2d4b 99{
fbb9b71b 100 // initialization
d54804bf 101 fISlice = iSlice;
102 fAlpha = alpha;
103 fDAlpha = dAlpha;
104 fRMin = rMin;
105 fRMax = rMax;
106 fZMin = zMin;
107 fZMax = zMax;
108 fPadPitch = padPitch;
326c2d4b 109 fErrY = 1.; // not in use
d54804bf 110 fErrZ = zSigma;
111 fBz = bz;
112 fNRows = nRows;
fbb9b71b 113 for ( int irow = 0; irow < nRows; irow++ ) {
d54804bf 114 fRowX[irow] = rowX[irow];
c1cab320 115 //std::cout << " row " << irow << " x= " << rowX[irow] << std::endl;
dc4788ec 116 }
117
326c2d4b 118 Update();
119}
120
00d07bcd 121GPUd() void AliHLTTPCCAParam::Update()
326c2d4b 122{
123 // update of calculated values
fbb9b71b 124 fCosAlpha = CAMath::Cos( fAlpha );
125 fSinAlpha = CAMath::Sin( fAlpha );
126 fAngleMin = fAlpha - fDAlpha / 2.;
127 fAngleMax = fAlpha + fDAlpha / 2.;
128 fErrX = fPadPitch / CAMath::Sqrt( 12. );
326c2d4b 129 fTrackChi2Cut = fTrackChiCut * fTrackChiCut;
130}
131
fbb9b71b 132GPUd() void AliHLTTPCCAParam::Slice2Global( float x, float y, float z,
133 float *X, float *Y, float *Z ) const
134{
326c2d4b 135 // conversion of coorinates sector->global
fbb9b71b 136 *X = x * fCosAlpha - y * fSinAlpha;
137 *Y = y * fCosAlpha + x * fSinAlpha;
326c2d4b 138 *Z = z;
139}
fbb9b71b 140
141GPUd() void AliHLTTPCCAParam::Global2Slice( float X, float Y, float Z,
142 float *x, float *y, float *z ) const
326c2d4b 143{
144 // conversion of coorinates global->sector
fbb9b71b 145 *x = X * fCosAlpha + Y * fSinAlpha;
146 *y = Y * fCosAlpha - X * fSinAlpha;
326c2d4b 147 *z = Z;
148}
eb30eb49 149
fbb9b71b 150GPUd() float AliHLTTPCCAParam::GetClusterError2( int yz, int type, float z, float angle ) const
eb30eb49 151{
152 //* recalculate the cluster error wih respect to the track slope
6de2bc40 153
fbb9b71b 154 float angle2 = angle * angle;
155 const float *c = fParamS0Par[yz][type];
156 float v = c[0] + z * ( c[1] + c[3] * z ) + angle2 * ( c[2] + angle2 * c[4] + c[5] * z );
157 return CAMath::Abs( v );
eb30eb49 158}
159
fbb9b71b 160GPUd() void AliHLTTPCCAParam::GetClusterErrors2( int iRow, float z, float sinPhi, float cosPhi, float DzDs, float &Err2Y, float &Err2Z ) const
63d8b79d 161{
162 //
163 // Use calibrated cluster error from OCDB
164 //
165
fbb9b71b 166 z = CAMath::Abs( ( 250. - 0.275 ) - CAMath::Abs( z ) );
167 int type = ( iRow < 63 ) ? 0 : ( ( iRow > 126 ) ? 1 : 2 );
168 float cosPhiInv = CAMath::Abs( cosPhi ) > 1.e-2 ? 1. / cosPhi : 0;
6de2bc40 169 float angleY = sinPhi * cosPhiInv ; // dy/dx
170 float angleZ = DzDs * cosPhiInv ; // dz/dx
63d8b79d 171
fbb9b71b 172 Err2Y = GetClusterError2( 0, type, z, angleY );
173 Err2Z = GetClusterError2( 1, type, z, angleZ );
63d8b79d 174}
175
176
fbb9b71b 177GPUh() void AliHLTTPCCAParam::WriteSettings( std::ostream &out ) const
eb30eb49 178{
00d07bcd 179 // write settings to the file
fbb9b71b 180 out << fISlice << std::endl;
181 out << fNRows << std::endl;
182 out << fAlpha << std::endl;
183 out << fDAlpha << std::endl;
184 out << fCosAlpha << std::endl;
185 out << fSinAlpha << std::endl;
186 out << fAngleMin << std::endl;
187 out << fAngleMax << std::endl;
188 out << fRMin << std::endl;
189 out << fRMax << std::endl;
190 out << fZMin << std::endl;
191 out << fZMax << std::endl;
192 out << fErrX << std::endl;
193 out << fErrY << std::endl;
194 out << fErrZ << std::endl;
195 out << fPadPitch << std::endl;
196 out << fBz << std::endl;
197 out << fHitPickUpFactor << std::endl;
198 out << fMaxTrackMatchDRow << std::endl;
199 out << fTrackConnectionFactor << std::endl;
200 out << fTrackChiCut << std::endl;
201 out << fTrackChi2Cut << std::endl;
202 for ( int iRow = 0; iRow < fNRows; iRow++ ) {
203 out << fRowX[iRow] << std::endl;
eb30eb49 204 }
fbb9b71b 205 out << std::endl;
206 for ( int i = 0; i < 2; i++ )
207 for ( int j = 0; j < 3; j++ )
208 for ( int k = 0; k < 7; k++ )
209 out << fParamS0Par[i][j][k] << std::endl;
210 out << std::endl;
eb30eb49 211}
212
00d07bcd 213GPUh() void AliHLTTPCCAParam::ReadSettings( std::istream &in )
eb30eb49 214{
00d07bcd 215 // Read settings from the file
216
eb30eb49 217 in >> fISlice;
218 in >> fNRows;
219 in >> fAlpha;
220 in >> fDAlpha;
221 in >> fCosAlpha;
222 in >> fSinAlpha;
223 in >> fAngleMin;
224 in >> fAngleMax;
225 in >> fRMin;
226 in >> fRMax;
227 in >> fZMin;
228 in >> fZMax;
229 in >> fErrX;
230 in >> fErrY;
231 in >> fErrZ;
232 in >> fPadPitch;
233 in >> fBz;
693d2443 234 in >> fHitPickUpFactor;
eb30eb49 235 in >> fMaxTrackMatchDRow;
236 in >> fTrackConnectionFactor;
237 in >> fTrackChiCut;
238 in >> fTrackChi2Cut;
fbb9b71b 239 for ( int iRow = 0; iRow < fNRows; iRow++ ) {
eb30eb49 240 in >> fRowX[iRow];
241 }
fbb9b71b 242 for ( int i = 0; i < 2; i++ )
243 for ( int j = 0; j < 3; j++ )
244 for ( int k = 0; k < 7; k++ )
245 in >> fParamS0Par[i][j][k];
eb30eb49 246}