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