]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/TRDbase/AliTRDrecoParam.cxx
Add threshold on cluster charge
[u/mrichter/AliRoot.git] / TRD / TRDbase / AliTRDrecoParam.cxx
CommitLineData
e4f2f73d 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18///////////////////////////////////////////////////////////////////////////////
19// //
20// Parameter class for the TRD reconstruction //
21// //
22// Authors: //
23// Alex Bercuci <A.Bercuci@gsi.de> //
24// Markus Fasel <M.Fasel@gsi.de> //
25// //
26///////////////////////////////////////////////////////////////////////////////
27
8df1f8f5 28#include "AliLog.h"
29
e4f2f73d 30#include "AliTRDrecoParam.h"
31
32ClassImp(AliTRDrecoParam)
33
a2fbb6ec 34
e4f2f73d 35//______________________________________________________________
36AliTRDrecoParam::AliTRDrecoParam()
37 :AliDetectorRecoParam()
8ae98148 38 ,fkdNchdy(12.)
91834b8d 39 ,fkMaxTheta(1.0)
40 ,fkMaxPhi(2.0)
e4f2f73d 41 ,fkRoad0y(6.0)
42 ,fkRoad0z(8.5)
43 ,fkRoad1y(2.0)
44 ,fkRoad1z(20.0)
45 ,fkRoad2y(3.0)
46 ,fkRoad2z(20.0)
b06a50a5 47 ,fkPtThreshold(2.0)
e4f2f73d 48 ,fkPlaneQualityThreshold(5.0)// 4.2? under Investigation
566bf887 49 ,fkRoadzMultiplicator(1.5)
e4f2f73d 50 ,fkFindable(.333)
eb38ed55 51 ,fkChi2Z(30./*14.*//*12.5*/)
e4f2f73d 52 ,fkChi2Y(.25)
5a2e200c 53 ,fkChi2YSlope(7.73)
54 ,fkChi2ZSlope(0.069)
39d9c03c 55 ,fChi2Cut(25)
8c499dbf 56 ,fkChi2YCut(0.5)
5a2e200c 57 ,fkPhiSlope(10.6)
8ae98148 58 ,fkNMeanClusters(20.)
59 ,fkNSigmaClusters(2.)
60 ,fkNClusterNoise(0.)
61 ,fkNMeanTracklets(5.5)
e4f2f73d 62 ,fkTrackLikelihood(-15.)
8c499dbf 63 ,fNumberOfConfigs(3)
a2fbb6ec 64 ,fFlags(0)
9dcc64cc 65 ,fRawStreamVersion("DEFAULT")
86a261ed 66 ,fdzdxXcrossFactor(0.)
df83a620 67 ,fMinMaxCutSigma(4.)
68 ,fMinLeftRightCutSigma(8.)
fc546d21 69 ,fClusMaxThresh(4.5)
70 ,fClusSigThresh(3.5)
56b32fd7 71 ,fTCnexp(1)
8c499dbf 72 ,fRecEveryNTB(1)
f93536ce 73 ,fClusterQmin(0)
4e459a9d 74 ,fNumberOfPresamples(0)
75 ,fNumberOfPostsamples(0)
e4f2f73d 76{
77 //
78 // Default constructor
79 //
d937ad7a 80 fSysCovMatrix[0] = 0.; // y direction (1 cm)
81 fSysCovMatrix[1] = 0.; // z direction (1 cm)
3afdab72 82 fSysCovMatrix[2] = 0.; // snp
83 fSysCovMatrix[3] = 0.; // tgl
84 fSysCovMatrix[4] = 0.; // 1/pt
22a4ab0c 85
a2fbb6ec 86 // Xe tail cancellation parameters
87 fTCParams[0] = 1.156; // r1
88 fTCParams[1] = 0.130; // r2
89 fTCParams[2] = 0.114; // c1
90 fTCParams[3] = 0.624; // c2
91 // Ar tail cancellation parameters
92 fTCParams[4] = 6.; // r1
93 fTCParams[5] = 0.62; // r2
94 fTCParams[6] = 0.0087;// c1
95 fTCParams[7] = 0.07; // c2
96
22a4ab0c 97 memset(fPIDThreshold, 0, AliTRDCalPID::kNMom*sizeof(Double_t));
a2fbb6ec 98 memset(fStreamLevel, 0, kTRDreconstructionTasks * sizeof(Int_t));
99
9dcc64cc 100 SetPIDmethod(AliTRDPIDResponse::kLQ1D);
a2fbb6ec 101 SetEightSlices();
102 SetImproveTracklets();
103 SetLUT();
104 SetTailCancelation();
86a261ed 105 SetTrackletParams();
e4f2f73d 106}
107
a7ac01d2 108//______________________________________________________________
109AliTRDrecoParam::AliTRDrecoParam(const AliTRDrecoParam &ref)
110 :AliDetectorRecoParam(ref)
8ae98148 111 ,fkdNchdy(ref.fkdNchdy)
a7ac01d2 112 ,fkMaxTheta(ref.fkMaxTheta)
113 ,fkMaxPhi(ref.fkMaxPhi)
114 ,fkRoad0y(ref.fkRoad0y)
d6171f43 115 ,fkRoad0z(ref.fkRoad0z)
a7ac01d2 116 ,fkRoad1y(ref.fkRoad1y)
d6171f43 117 ,fkRoad1z(ref.fkRoad1z)
a7ac01d2 118 ,fkRoad2y(ref.fkRoad2y)
119 ,fkRoad2z(ref.fkRoad2z)
d6171f43 120 ,fkPtThreshold(ref.fkPtThreshold)
a7ac01d2 121 ,fkPlaneQualityThreshold(ref.fkPlaneQualityThreshold)
566bf887 122 ,fkRoadzMultiplicator(ref.fkRoadzMultiplicator)
a7ac01d2 123 ,fkFindable(ref.fkFindable)
124 ,fkChi2Z(ref.fkChi2Z)
125 ,fkChi2Y(ref.fkChi2Y)
5a2e200c 126 ,fkChi2YSlope(ref.fkChi2YSlope)
127 ,fkChi2ZSlope(ref.fkChi2ZSlope)
39d9c03c 128 ,fChi2Cut(ref.fChi2Cut)
8c499dbf 129 ,fkChi2YCut(ref.fkChi2YCut)
5a2e200c 130 ,fkPhiSlope(ref.fkPhiSlope)
8ae98148 131 ,fkNMeanClusters(ref.fkNMeanClusters)
132 ,fkNSigmaClusters(ref.fkNSigmaClusters)
133 ,fkNClusterNoise(ref.fkNClusterNoise)
134 ,fkNMeanTracklets(ref.fkNMeanTracklets)
a7ac01d2 135 ,fkTrackLikelihood(ref.fkTrackLikelihood)
8c499dbf 136 ,fNumberOfConfigs(ref.fNumberOfConfigs)
a2fbb6ec 137 ,fFlags(ref.fFlags)
138 ,fRawStreamVersion(ref.fRawStreamVersion)
86a261ed 139 ,fdzdxXcrossFactor(ref.fdzdxXcrossFactor)
a7ac01d2 140 ,fMinMaxCutSigma(ref.fMinMaxCutSigma)
141 ,fMinLeftRightCutSigma(ref.fMinLeftRightCutSigma)
142 ,fClusMaxThresh(ref.fClusMaxThresh)
143 ,fClusSigThresh(ref.fClusSigThresh)
144 ,fTCnexp(ref.fTCnexp)
8c499dbf 145 ,fRecEveryNTB(ref.fRecEveryNTB)
f93536ce 146 ,fClusterQmin(ref.fClusterQmin)
4e459a9d 147 ,fNumberOfPresamples(ref.fNumberOfPresamples)
148 ,fNumberOfPostsamples(ref.fNumberOfPostsamples)
a7ac01d2 149{
150 //
151 // Copy constructor
152 //
a7ac01d2 153 memcpy(fSysCovMatrix, ref.fSysCovMatrix, 5*sizeof(Double_t));
a2fbb6ec 154 memcpy(fTCParams, ref.fTCParams, 8*sizeof(Double_t));
22a4ab0c 155 memcpy(fPIDThreshold, ref.fPIDThreshold, AliTRDCalPID::kNMom*sizeof(Double_t));
a2fbb6ec 156 memcpy(fStreamLevel, ref.fStreamLevel, kTRDreconstructionTasks * sizeof(Int_t));
86a261ed 157
158 // tracklet params
159 memcpy(fdzdxCorrFactor, ref.fdzdxCorrFactor, 2*sizeof(Double_t));
160 memcpy(fdzdxCorrRCbias, ref.fdzdxCorrRCbias, 2*sizeof(Double_t));
cb29fcbf 161 memcpy(fYcorrTailCancel, ref.fdzdxCorrRCbias, 12*sizeof(Double_t));
162 memcpy(fS2Ycorr, ref.fS2Ycorr, 4*sizeof(Double_t));
a7ac01d2 163}
164
d6171f43 165//______________________________________________________________
f09f3167 166AliTRDrecoParam& AliTRDrecoParam::operator=(const AliTRDrecoParam &ref)
d6171f43 167{
168 //
169 // assignment operator
170 //
171
172 if(this == &ref) return *this;
173 AliDetectorRecoParam::operator=(ref);
174 fkdNchdy = ref.fkdNchdy;
175 fkMaxTheta = ref.fkMaxTheta;
176 fkMaxPhi = ref.fkMaxPhi;
177 fkRoad0y = ref.fkRoad0y;
178 fkRoad0z = ref.fkRoad0z;
179 fkRoad1y = ref.fkRoad1y;
180 fkRoad1z = ref.fkRoad1z;
181 fkRoad2y = ref.fkRoad2y;
182 fkRoad2z = ref.fkRoad2z;
183 fkPtThreshold = ref.fkPtThreshold;
184 fkPlaneQualityThreshold= ref.fkPlaneQualityThreshold;
185 fkRoadzMultiplicator = ref.fkRoadzMultiplicator;
186 fkFindable = ref.fkFindable;
187 fkChi2Z = ref.fkChi2Z;
188 fkChi2Y = ref.fkChi2Y;
189 fkChi2YSlope = ref.fkChi2YSlope;
190 fkChi2ZSlope = ref.fkChi2ZSlope;
39d9c03c 191 fChi2Cut = ref.fChi2Cut;
d6171f43 192 fkChi2YCut = ref.fkChi2YCut;
193 fkPhiSlope = ref.fkPhiSlope;
194 fkNMeanClusters = ref.fkNMeanClusters;
195 fkNSigmaClusters = ref.fkNSigmaClusters;
196 fkNClusterNoise = ref.fkNClusterNoise;
197 fkNMeanTracklets = ref.fkNMeanTracklets;
198 fkTrackLikelihood = ref.fkTrackLikelihood;
199 fNumberOfConfigs = ref.fNumberOfConfigs;
200 fFlags = ref.fFlags;
201 fRawStreamVersion = ref.fRawStreamVersion;
86a261ed 202 fdzdxXcrossFactor = ref.fdzdxXcrossFactor;
d6171f43 203 fMinMaxCutSigma = ref.fMinMaxCutSigma;
204 fMinLeftRightCutSigma = ref.fMinLeftRightCutSigma;
205 fClusMaxThresh = ref.fClusMaxThresh;
206 fClusSigThresh = ref.fClusSigThresh;
207 fTCnexp = ref.fTCnexp;
208 fRecEveryNTB = ref.fRecEveryNTB;
f93536ce 209 fClusterQmin = ref.fClusterQmin;
d6171f43 210 fNumberOfPresamples = ref.fNumberOfPresamples;
211 fNumberOfPostsamples = ref.fNumberOfPostsamples;
212
213 memcpy(fSysCovMatrix, ref.fSysCovMatrix, 5*sizeof(Double_t));
214 memcpy(fTCParams, ref.fTCParams, 8*sizeof(Double_t));
215 memcpy(fPIDThreshold, ref.fPIDThreshold, AliTRDCalPID::kNMom*sizeof(Double_t));
216 memcpy(fStreamLevel, ref.fStreamLevel, kTRDreconstructionTasks * sizeof(Int_t));
86a261ed 217
218 // tracklet params
219 memcpy(fdzdxCorrFactor, ref.fdzdxCorrFactor, 2*sizeof(Double_t));
220 memcpy(fdzdxCorrRCbias, ref.fdzdxCorrRCbias, 2*sizeof(Double_t));
cb29fcbf 221 memcpy(fYcorrTailCancel, ref.fdzdxCorrRCbias, 12*sizeof(Double_t));
222 memcpy(fS2Ycorr, ref.fS2Ycorr, 4*sizeof(Double_t));
d6171f43 223 return *this;
224}
225
e4f2f73d 226//______________________________________________________________
227AliTRDrecoParam *AliTRDrecoParam::GetLowFluxParam()
228{
229 //
230 // Parameters for the low flux environment
231 //
232
8ae98148 233 AliTRDrecoParam *rec = new AliTRDrecoParam();
234 rec->fkdNchdy = 12.; // pp in TRD
a2fbb6ec 235 rec->SetVertexConstrained();
828c6f80 236 rec->SetCheckTimeConsistency();
8ae98148 237 return rec;
e4f2f73d 238
239}
240
8c499dbf 241//______________________________________________________________
242AliTRDrecoParam *AliTRDrecoParam::GetLowFluxHLTParam()
243{
244 //
245 // Parameters for the high flux environment in HLT
246 //
247
248 AliTRDrecoParam *rec = GetLowFluxParam();
82ddb093 249 rec->fNumberOfConfigs = 2;
8c499dbf 250 return rec;
251
252}
253
e4f2f73d 254//______________________________________________________________
255AliTRDrecoParam *AliTRDrecoParam::GetHighFluxParam()
256{
257 //
258 // Parameters for the high flux environment
259 //
260
fb872574 261 AliTRDrecoParam *rec = new AliTRDrecoParam();
8ae98148 262 rec->fkdNchdy = 4000.; // PbPb in TRD
a2fbb6ec 263 rec->SetVertexConstrained();
828c6f80 264 rec->SetCheckTimeConsistency();
fb872574 265 return rec;
e4f2f73d 266
267}
9716329b 268
8c499dbf 269//______________________________________________________________
270AliTRDrecoParam *AliTRDrecoParam::GetHighFluxHLTParam()
271{
272 //
273 // Parameters for the high flux environment in HLT
274 //
275
276 AliTRDrecoParam *rec = GetHighFluxParam();
277 rec->fNumberOfConfigs = 1;
8c499dbf 278 return rec;
279
280}
281
9716329b 282//______________________________________________________________
283AliTRDrecoParam *AliTRDrecoParam::GetCosmicTestParam()
284{
285 //
286 // Parameters for the cosmics data
287 //
288
9716329b 289 AliTRDrecoParam *par = new AliTRDrecoParam();
6e39bde4 290 par->fSysCovMatrix[0] = 2.; // y direction (1 cm)
291 par->fSysCovMatrix[1] = 2.; // z direction (1 cm)
b72f4eaf 292 par->fkChi2YSlope = 0.11853;
293 par->fkChi2ZSlope = 0.04527;
39d9c03c 294 par->fkChi2YCut = 25.;
b72f4eaf 295 par->fkChi2YCut = 1.;
6e39bde4 296 par->fkPhiSlope = 10.; //3.17954;
8ae98148 297 par->fkMaxTheta = 2.1445;
298 par->fkMaxPhi = 2.7475;
5a2e200c 299 par->fkNMeanClusters = 12.89;
300 par->fkNSigmaClusters = 2.095;
566bf887 301 par->fkRoadzMultiplicator = 3.;
a2fbb6ec 302 par->fStreamLevel[kTracker] = 1;
828c6f80 303 par->SetCheckTimeConsistency();
9716329b 304 return par;
305
306}
8ae98148 307
308
309//______________________________________________________________
310Float_t AliTRDrecoParam::GetNClusters() const
311{
312 // Estimate the number of clusters in the TRD detector
313
314 Float_t nclusters = (fkNMeanClusters + 2*fkNSigmaClusters)*fkNMeanTracklets*fkdNchdy;
315 nclusters *= 1.+fkNClusterNoise;
316 return nclusters;
317}
11d80e40 318
319//______________________________________________________________
320void AliTRDrecoParam::SetPIDLQslices(Int_t s)
321{
322// Setting number of slices used by the PID LQ method s={1, 2}
323// If PID NN is set this function will change to PID LQ.
324
325 if(IsPIDNeuralNetwork()){
326 AliWarning("PID set to NN. Changing to LQ.");
327 SetPIDNeuralNetwork(kFALSE);
328 }
329
330 switch(s){
331 case 1:
332 if(TESTBIT(fFlags, kLQ2D)) CLRBIT(fFlags, kLQ2D);
333 break;
334 case 2:
335 SETBIT(fFlags, kLQ2D);
336 break;
337 default:
338 AliWarning(Form("N[%d] PID LQ slices not implemented. Using default 2.", s));
339 SETBIT(fFlags, kLQ2D);
340 break;
341 }
342}
343
86a261ed 344//___________________________________________________
345void AliTRDrecoParam::SetTrackletParams(Double_t *par)
346{
347 // Load tracklet reconstruction parameters. If none are set use defaults
348 if(par){
349 // correct dzdx for the bias in z
350 fdzdxCorrFactor[0] = par[0]; // !RC
351 fdzdxCorrFactor[1] = par[1]; // RC
352 // correct dzdx in RC tracklets for the bias in cluster attachment
353 fdzdxCorrRCbias[0] = par[2]; // dz/dx > 0
354 fdzdxCorrRCbias[1] = par[3]; // dz/dx < 0
355 /// correct x_cross for the bias in dzdx
356 fdzdxXcrossFactor = par[4];
cb29fcbf 357 // y correction due to wrong tail cancellation.
358 fYcorrTailCancel[0][0] = par[5];fYcorrTailCancel[0][1] = par[6];fYcorrTailCancel[0][2] = par[7];
359 fYcorrTailCancel[1][0] = par[8];fYcorrTailCancel[1][1] = par[9];fYcorrTailCancel[1][2] = par[10];
2e351ca7 360 fYcorrTailCancel[2][0] = par[11];fYcorrTailCancel[2][1] = par[12];fYcorrTailCancel[2][2] = par[13];
361 fYcorrTailCancel[3][0] = par[14];fYcorrTailCancel[3][1] = par[15];fYcorrTailCancel[3][2] = par[16];
86a261ed 362 // inflation factor of error parameterization in r-phi due to wrong estimation of residuals.
cb29fcbf 363 fS2Ycorr[0] = par[17];
364 fS2Ycorr[1] = par[18];
365 fS2Ycorr[2] = par[19];
366 fS2Ycorr[3] = par[20];
86a261ed 367
368 } else {
369 // correct dzdx for the bias in z
370 fdzdxCorrFactor[0] = 1.09; // !RC
371 fdzdxCorrFactor[1] = 1.05; // RC
372 // correct dzdx in RC tracklets for the bias in cluster attachment
373 fdzdxCorrRCbias[0] = 0.; // dz/dx > 0
374 fdzdxCorrRCbias[1] = -0.012; // dz/dx < 0
375 /// correct x_cross for the bias in dzdx
376 fdzdxXcrossFactor = 0.14;
cb29fcbf 377 // y correction due to wrong tail cancellation.
378 // bz<0 && !RC
379 fYcorrTailCancel[0][0] = 0.04; fYcorrTailCancel[0][1] = 2.151; fYcorrTailCancel[0][2] = 0.013;
380 // bz>0 && !RC
381 fYcorrTailCancel[1][0] = 0.034; fYcorrTailCancel[1][1] = 1.817; fYcorrTailCancel[1][2] = -0.01;
382 // bz<0 && RC
383 fYcorrTailCancel[2][0] = 0.04; fYcorrTailCancel[2][1] = 2.513; fYcorrTailCancel[2][2] = 0.015;
384 // bz>0 && RC
385 fYcorrTailCancel[3][0] = 0.034; fYcorrTailCancel[3][1] = 2.476; fYcorrTailCancel[3][2] = -0.01;
86a261ed 386 // inflation factor of error parameterization in r-phi due to wrong estimation of residuals.
cb29fcbf 387 // chg<0 && !RC
388 fS2Ycorr[0] = 5.52;
389 // chg>0 && !RC
390 fS2Ycorr[1] = 3.61;
391 // chg<0 && RC
392 fS2Ycorr[2] = 4.84;
393 // chg>0 && RC
394 fS2Ycorr[3] = 3.24;
86a261ed 395 }
396}