]>
Commit | Line | Data |
---|---|---|
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 | ||
32 | ClassImp(AliTRDrecoParam) | |
33 | ||
a2fbb6ec | 34 | |
e4f2f73d | 35 | //______________________________________________________________ |
36 | AliTRDrecoParam::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 | //______________________________________________________________ |
109 | AliTRDrecoParam::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 | 166 | AliTRDrecoParam& 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 | //______________________________________________________________ |
227 | AliTRDrecoParam *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 | //______________________________________________________________ |
242 | AliTRDrecoParam *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 | //______________________________________________________________ |
255 | AliTRDrecoParam *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 | //______________________________________________________________ |
270 | AliTRDrecoParam *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 | //______________________________________________________________ |
283 | AliTRDrecoParam *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 | //______________________________________________________________ | |
310 | Float_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 | //______________________________________________________________ | |
320 | void 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 | //___________________________________________________ |
345 | void 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 | } |