1 /**************************************************************************
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 #include "AliITSRecoParam.h"
20 ///////////////////////////////////////////////////////////////////////////////
22 // Class with ITS reconstruction parameters //
23 // Origin: andrea.dainese@lnl.infn.it //
25 ///////////////////////////////////////////////////////////////////////////////
29 ClassImp(AliITSRecoParam)
31 const Int_t AliITSRecoParam::fgkLayersNotToSkip[AliITSgeomTGeo::kNLayers]={0,0,0,0,0,0};
32 const Int_t AliITSRecoParam::fgkLastLayerToTrackTo=0;
33 const Int_t AliITSRecoParam::fgkMaxDetectorPerLayer=1000;
34 const Double_t AliITSRecoParam::fgkriw=80.0;
35 const Double_t AliITSRecoParam::fgkdiw=0.0053;
36 const Double_t AliITSRecoParam::fgkX0iw=30.0;
37 const Double_t AliITSRecoParam::fgkrcd=61.0;
38 const Double_t AliITSRecoParam::fgkdcd=0.0053;
39 const Double_t AliITSRecoParam::fgkX0cd=30.0;
40 const Double_t AliITSRecoParam::fgkyr=12.8;
41 const Double_t AliITSRecoParam::fgkdr=0.03;
42 const Double_t AliITSRecoParam::fgkzm=0.2;
43 const Double_t AliITSRecoParam::fgkdm=0.40;
44 const Double_t AliITSRecoParam::fgkrs=50.0;
45 const Double_t AliITSRecoParam::fgkds=0.001;
46 const Double_t AliITSRecoParam::fgkrInsideITSscreen=49.0;
47 const Double_t AliITSRecoParam::fgkrInsideSPD1=3.7;
48 const Double_t AliITSRecoParam::fgkrPipe=3.;
49 const Double_t AliITSRecoParam::fgkrInsidePipe=2.7;
50 const Double_t AliITSRecoParam::fgkrOutsidePipe=3.3;
51 const Double_t AliITSRecoParam::fgkdPipe=0.0028;
52 const Double_t AliITSRecoParam::fgkrInsideShield[2]={7.5,25.0};
53 const Double_t AliITSRecoParam::fgkrOutsideShield[2]={10.5,30.0};
54 const Double_t AliITSRecoParam::fgkdshield[2]={0.0097,0.0034};
55 const Double_t AliITSRecoParam::fgkX0shield[2]={38.6,42.0};
56 const Double_t AliITSRecoParam::fgkX0Air=21.82;
57 const Double_t AliITSRecoParam::fgkX0Be=65.19;
58 const Double_t AliITSRecoParam::fgkBoundaryWidth=0.2;
59 const Double_t AliITSRecoParam::fgkDeltaXNeighbDets=0.5;
60 const Double_t AliITSRecoParam::fgkSPDdetzlength=6.960; // 7.072-2*0.056
61 const Double_t AliITSRecoParam::fgkSPDdetxlength=1.298; // 1.410-2*0.056
63 //_____________________________________________________________________________
64 AliITSRecoParam::AliITSRecoParam() : AliDetectorRecoParam(),
72 fVtxr3DZCutNarrow(0.),
73 fVtxr3DRCutNarrow(0.),
74 fVtxr3DPhiCutLoose(0.),
75 fVtxr3DPhiCutTight(0.),
78 fNSigmaYLayerForRoadY(0),
80 fNSigmaZLayerForRoadZ(0),
87 fMaxNormChi2NonCForHypothesis(0),
100 fMaxDZToUseConstraint(0),
101 fMaxDforV0dghtrForProlongation(0),
102 fMaxDForProlongation(0),
103 fMaxDZForProlongation(0),
104 fMinPtForProlongation(0),
105 fAddVirtualClustersInDeadZone(kFALSE),
107 fSigmaXDeadZoneHit2(0),
108 fSigmaZDeadZoneHit2(0),
109 fXPassDeadZoneHits(0),
110 fUseTGeoInTracker(3),
112 fAllowSharedClusters(kTRUE),
113 fClusterErrorsParam(1),
114 fComputePlaneEff(kFALSE),
115 fHistoPlaneEff(kFALSE),
117 fReadPlaneEffFromOCDB(kFALSE),
119 fMaxMissingClustersPlaneEff(0),
120 fRequireClusterInOuterLayerPlaneEff(kFALSE),
121 fRequireClusterInInnerLayerPlaneEff(kFALSE),
122 fOnlyConstraintPlaneEff(kFALSE),
123 fExtendedEtaAcceptance(kFALSE),
124 fUseBadZonesFromOCDB(kTRUE),
125 fUseSingleBadChannelsFromOCDB(kFALSE),
126 fMinFractionOfBadInRoad(0),
127 fAllowProlongationWithEmptyRoad(kFALSE),
128 fOuterStartLayerSA(0),
129 fFactorSAWindowSizes(1.),
135 fMinClusterChargeSA(0.),
136 fSAOnePointTracks(kFALSE),
137 fSAUseAllClusters(kFALSE),
139 fUseUnfoldingInClusterFinderSPD(kFALSE),
140 fUseUnfoldingInClusterFinderSDD(kTRUE),
141 fUseUnfoldingInClusterFinderSSD(kTRUE),
142 fUseChargeMatchingInClusterFinderSSD(kTRUE),
143 fTrackleterOnlyOneTrackletPerC2(kTRUE),
144 fTrackleterPhiWindow(0.08),
145 fTrackleterZetaWindow(1.00),
146 fTrackleterRemoveClustersFromOverlaps(kFALSE),
147 fTrackleterPhiOverlapCut(0.005),
148 fTrackleterZetaOverlapCut(0.05),
149 fUseCosmicRunShiftsSSD(kFALSE)
157 SetLayersParameters();
158 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) fLayersToSkip[i]=0;
159 SetUseTGeoInTracker(3);
160 SetStepSizeTGeo(0.1);
161 SetAllowSharedClusters(kTRUE);
163 SetAddVirtualClustersInDeadZone(kFALSE);
164 SetUseAmplitudeInfo(kTRUE);
165 SetClusterErrorsParam(1);
166 SetClusterMisalError(0.);
167 SetVertexer3DDefaults();
169 //_____________________________________________________________________________
170 AliITSRecoParam::~AliITSRecoParam()
176 //_____________________________________________________________________________
177 AliITSRecoParam *AliITSRecoParam::GetHighFluxParam()
180 // make default reconstruction parameters for hig flux env.
182 AliITSRecoParam *param = new AliITSRecoParam();
183 param->SetVertexerZ();
185 // use of bads from OCDB
186 param->SetUseBadZonesFromOCDB(kTRUE);
187 param->SetUseSingleBadChannelsFromOCDB(kFALSE);
188 // extended eta acceptance
189 param->SetExtendedEtaAcceptance(kFALSE);
190 // allow to skip layer if no cluster and no bad
191 param->SetAllowProlongationWithEmptyRoad(kFALSE);
194 param->fMaxSnp = 0.95;
196 param->fNSigmaYLayerForRoadY = 4.;
197 param->fNSigmaRoadY = 7.5;
198 param->fNSigmaZLayerForRoadZ = 4.;
199 param->fNSigmaRoadZ = 7.5;
201 param->fNSigma2RoadZC = 60.; //7.75^2
202 param->fNSigma2RoadYC = 60.; //7.75^2
203 param->fNSigma2RoadZNonC = 50.; //7.07^2
204 param->fNSigma2RoadYNonC = 50.; //7.07^2
206 param->fMaxChi2PerCluster[0] = 11.; //7
207 param->fMaxChi2PerCluster[1] = 12.; //5
208 param->fMaxChi2PerCluster[2] = 12.; //8
209 param->fMaxChi2PerCluster[3] = 5.; //8
210 param->fMaxChi2PerCluster[4] = 12.; //6.5
212 param->fMaxNormChi2NonC[0] = 7.;
213 param->fMaxNormChi2NonC[1] = 8.;
214 param->fMaxNormChi2NonC[2] = 8.;
215 param->fMaxNormChi2NonC[3] = 11.;
216 param->fMaxNormChi2NonC[4] = 14.;
217 param->fMaxNormChi2NonC[5] = 25.;
219 param->fMaxNormChi2C[0] = 11.;
220 param->fMaxNormChi2C[1] = 13.;
221 param->fMaxNormChi2C[2] = 15.;
222 param->fMaxNormChi2C[3] = 18.;
223 param->fMaxNormChi2C[4] = 30.;
224 param->fMaxNormChi2C[5] = 35.;
226 param->fMaxNormChi2NonCForHypothesis = 7.;
228 param->fMaxChi2 = 35.;
230 param->fMaxChi2s[0] = 25.; //40
231 param->fMaxChi2s[1] = 25.; //40
232 param->fMaxChi2s[2] = 25.; //40
233 param->fMaxChi2s[3] = 25.; //40
234 param->fMaxChi2s[4] = 40.; //40
235 param->fMaxChi2s[5] = 50.; //40
237 param->fMaxRoad = 6.;
240 param->fMaxChi2In = 16.;
242 param->fMaxChi2sR[0] = 10.;
243 param->fMaxChi2sR[1] = 10.;
244 param->fMaxChi2sR[2] = 10.;
245 param->fMaxChi2sR[3] = 10.;
246 param->fMaxChi2sR[4] = 30.;
247 param->fMaxChi2sR[5] = 40.;
249 param->fChi2PerCluster = 9.;
255 param->fSigmaXV = 0.0050;
256 param->fSigmaYV = 0.0050;
257 param->fSigmaZV = 0.0100;
259 param->fVertexCut = 25.;
261 param->fMaxDZforPrimTrk = 0.4;
262 param->fMaxDZToUseConstraint = 3.;
264 param->fMaxDforV0dghtrForProlongation = 30.;
265 param->fMaxDForProlongation = 40.;//10.;
266 param->fMaxDZForProlongation = 60.;//20.;
267 param->fMinPtForProlongation = 0.120;
269 param->fZWindowDeadZone = 2.0;
270 param->fSigmaXDeadZoneHit2 = 0.004/12.;
271 param->fSigmaZDeadZoneHit2 = 0.001/12.;
272 param->fXPassDeadZoneHits = 0.018;
276 //_____________________________________________________________________________
277 AliITSRecoParam *AliITSRecoParam::GetLowFluxParam()
280 // make default reconstruction parameters for low flux env.
282 AliITSRecoParam *param = new AliITSRecoParam();
283 param->SetVertexer3DDefaults();
285 // full use of bads from OCDB
286 param->SetUseBadZonesFromOCDB(kTRUE);
287 param->SetUseSingleBadChannelsFromOCDB(kTRUE);
288 // extended eta acceptance
289 param->SetExtendedEtaAcceptance(kTRUE);
290 // allow to skip layer if no cluster and no bad
291 param->SetAllowProlongationWithEmptyRoad(kTRUE);
294 param->fMaxSnp = 0.95;
296 param->fNSigmaYLayerForRoadY = 4.;
297 param->fNSigmaRoadY = 7.5;
298 param->fNSigmaZLayerForRoadZ = 4.;
299 param->fNSigmaRoadZ = 7.5;
301 param->fNSigma2RoadZC = 60.; //7.75^2
302 param->fNSigma2RoadYC = 60.; //7.75^2
303 param->fNSigma2RoadZNonC = 50.; //7.07^2
304 param->fNSigma2RoadYNonC = 50.; //7.07^2
306 param->fMaxChi2PerCluster[0] = 11.; //7
307 param->fMaxChi2PerCluster[1] = 12.; //5
308 param->fMaxChi2PerCluster[2] = 12.; //8
309 param->fMaxChi2PerCluster[3] = 5.; //8
310 param->fMaxChi2PerCluster[4] = 12.; //6.5
312 param->fMaxNormChi2NonC[0] = 7.;
313 param->fMaxNormChi2NonC[1] = 8.;
314 param->fMaxNormChi2NonC[2] = 8.;
315 param->fMaxNormChi2NonC[3] = 11.;
316 param->fMaxNormChi2NonC[4] = 14.;
317 param->fMaxNormChi2NonC[5] = 25.;
319 param->fMaxNormChi2C[0] = 11.;
320 param->fMaxNormChi2C[1] = 13.;
321 param->fMaxNormChi2C[2] = 15.;
322 param->fMaxNormChi2C[3] = 18.;
323 param->fMaxNormChi2C[4] = 30.;
324 param->fMaxNormChi2C[5] = 35.;
326 param->fMaxNormChi2NonCForHypothesis = 7.;
328 param->fMaxChi2 = 35.;
330 param->fMaxChi2s[0] = 25.; //40
331 param->fMaxChi2s[1] = 25.; //40
332 param->fMaxChi2s[2] = 25.; //40
333 param->fMaxChi2s[3] = 25.; //40
334 param->fMaxChi2s[4] = 40.; //40
335 param->fMaxChi2s[5] = 50.; //40
337 param->fMaxRoad = 6.;
340 param->fMaxChi2In = 16.;
342 param->fMaxChi2sR[0] = 10.;
343 param->fMaxChi2sR[1] = 10.;
344 param->fMaxChi2sR[2] = 10.;
345 param->fMaxChi2sR[3] = 10.;
346 param->fMaxChi2sR[4] = 30.;
347 param->fMaxChi2sR[5] = 40.;
349 param->fChi2PerCluster = 9.;
355 param->fSigmaXV = 0.0050;
356 param->fSigmaYV = 0.0050;
357 param->fSigmaZV = 0.0100;
359 param->fVertexCut = 25.;
361 param->fMaxDZforPrimTrk = 0.4;
362 param->fMaxDZToUseConstraint = 3.;
364 param->fMaxDforV0dghtrForProlongation = 30.;
365 param->fMaxDForProlongation = 40.;//10.;
366 param->fMaxDZForProlongation = 60.;//20.;
367 param->fMinPtForProlongation = 0.120;
369 param->fZWindowDeadZone = 2.0;
370 param->fSigmaXDeadZoneHit2 = 0.004/12.;
371 param->fSigmaZDeadZoneHit2 = 0.001/12.;
372 param->fXPassDeadZoneHits = 0.018;
373 param->SetNLoopsSA(20);
374 param->fMaxPhiSA = 0.07;
375 param->fMaxLambdaSA = 0.04;
378 //_____________________________________________________________________________
379 AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam()
382 // make default reconstruction parameters for cosmics
384 AliITSRecoParam *param = new AliITSRecoParam();
386 // vertexer for cosmics
387 param->SetVertexer(2);
389 // find independently ITS SA tracks
390 param->SetSAUseAllClusters();
391 param->SetOuterStartLayerSA(AliITSgeomTGeo::GetNLayers()-2);
393 // larger seach windows for SA (in case of large misalignments)
394 param->SetFactorSAWindowSizes(3.);
396 param->fMaxSnp = 0.95;
398 param->fNSigmaYLayerForRoadY = 4.;
399 param->fNSigmaRoadY = 7.5;
400 param->fNSigmaZLayerForRoadZ = 4.;
401 param->fNSigmaRoadZ = 7.5;
403 param->fNSigma2RoadZC = 60.; //7.75^2
404 param->fNSigma2RoadYC = 60.; //7.75^2
405 param->fNSigma2RoadZNonC = 50.; //7.07^2
406 param->fNSigma2RoadYNonC = 50.; //7.07^2
408 param->fMaxChi2PerCluster[0] = 11.; //7
409 param->fMaxChi2PerCluster[1] = 12.; //5
410 param->fMaxChi2PerCluster[2] = 12.; //8
411 param->fMaxChi2PerCluster[3] = 5.; //8
412 param->fMaxChi2PerCluster[4] = 12.; //6.5
414 param->fMaxNormChi2NonC[0] = 7.;
415 param->fMaxNormChi2NonC[1] = 8.;
416 param->fMaxNormChi2NonC[2] = 8.;
417 param->fMaxNormChi2NonC[3] = 11.;
418 param->fMaxNormChi2NonC[4] = 14.;
419 param->fMaxNormChi2NonC[5] = 25.;
421 param->fMaxNormChi2C[0] = 11.;
422 param->fMaxNormChi2C[1] = 13.;
423 param->fMaxNormChi2C[2] = 15.;
424 param->fMaxNormChi2C[3] = 18.;
425 param->fMaxNormChi2C[4] = 30.;
426 param->fMaxNormChi2C[5] = 35.;
428 param->fMaxNormChi2NonCForHypothesis = 7.;
430 param->fMaxChi2 = 35.;
432 param->fMaxChi2s[0] = 25.; //40
433 param->fMaxChi2s[1] = 25.; //40
434 param->fMaxChi2s[2] = 25.; //40
435 param->fMaxChi2s[3] = 25.; //40
436 param->fMaxChi2s[4] = 40.; //40
437 param->fMaxChi2s[5] = 50.; //40
439 param->fMaxRoad = 6.;
442 param->fMaxChi2In = 16.;
444 param->fMaxChi2sR[0] = 10.;
445 param->fMaxChi2sR[1] = 10.;
446 param->fMaxChi2sR[2] = 10.;
447 param->fMaxChi2sR[3] = 10.;
448 param->fMaxChi2sR[4] = 30.;
449 param->fMaxChi2sR[5] = 40.;
451 param->fChi2PerCluster = 9.;
457 param->fSigmaXV = 0.0050;
458 param->fSigmaYV = 0.0050;
459 param->fSigmaZV = 0.0100;
461 param->fVertexCut = 25.;
463 param->fMaxDZforPrimTrk = 0.4;
464 param->fMaxDZToUseConstraint = 3.;
466 param->fMaxDforV0dghtrForProlongation = 30.;
467 param->fMaxDForProlongation = 10.;
468 param->fMaxDZForProlongation = 20.;
469 param->fMinPtForProlongation = 0.120;
471 param->fZWindowDeadZone = 2.0;
472 param->fSigmaXDeadZoneHit2 = 0.004/12.;
473 param->fSigmaZDeadZoneHit2 = 0.001/12.;
474 param->fXPassDeadZoneHits = 0.018;
479 //_____________________________________________________________________________
480 AliITSRecoParam *AliITSRecoParam::GetPlaneEffParam(Int_t i)
483 // make special reconstruction parameters for Plane Efficiency study on layer i
485 if (i<0 || i>=AliITSgeomTGeo::kNLayers) {
486 printf("AliITSRecoParam::GetPlaneEffParam: index of ITS Plane not in the range [0,5]\n");
487 printf("returning null pointer");
490 AliITSRecoParam *param;
491 param = GetHighFluxParam();
492 param->SetComputePlaneEff();
493 param->SetLayerToSkip(i);
494 param->SetIPlanePlaneEff(i);
495 // optimized setting for SPD0 (i==0)
497 param->fMinPtPlaneEff = 0.200; // high pt particles
498 param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
499 param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SPD1 must be
500 //param->fOnlyConstraintPlaneEff = kTRUE;
503 param->fMinPtPlaneEff = 0.200; // high pt particles
504 param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
505 param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
506 //param->fOnlyConstraintPlaneEff = kTRUE;
509 param->fMinPtPlaneEff = 0.200; // high pt particles
510 param->fMaxMissingClustersPlaneEff = 0; // at most 1 layer out of 5 without cluster
511 param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
512 //param->fOnlyConstraintPlaneEff = kTRUE;
515 param->fMinPtPlaneEff = 0.200; // high pt particles
520 //_____________________________________________________________________________
521 void AliITSRecoParam::SetLayersParameters()
524 // number of layers and layers spatial resolutions
527 // spatial resolutions of the detectors
528 // y: 12 12 38 38 20 20 micron
531 fSigmaY2[2]=1.444e-5;
532 fSigmaY2[3]=1.444e-5;
535 // z: 120 120 28 28 830 830 micron
540 fSigmaZ2[4]=6.889e-3;
541 fSigmaZ2[5]=6.889e-3;
545 //_____________________________________________________________________________
546 void AliITSRecoParam::PrintParameters() const
552 printf("============================= AliITSRecoParam::PrintParameters ");
553 printf("============================= \n\n");
554 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
555 if(!fLayersToSkip[i]) {
556 printf("ITS Traking: using layer %d\n",i);
558 printf("ITS Traking: skipping layer %d\n",i);
561 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
562 if(fUseAmplitudeInfo[i]) {
563 printf("ITS Traking: use amplitude info for layer %d\n",i);
565 printf("ITS Traking: don't use amplitude info for layer %d\n",i);
568 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++)
569 printf("Layer %d:\n sigmaY2 %f, sigmaZ2 %f\n sigmaMisalY %f, sigmaMisalZ %f\n max norm chi2 for non constrained tracks %f\n max norm chi2 for constrained tracks %f\n max predicted chi2 (cluster & track prol.) %f\n",i,fSigmaY2[i],fSigmaZ2[i],fClusterMisalErrorY[i],fClusterMisalErrorZ[i],fMaxNormChi2NonC[i],fMaxNormChi2C[i],fMaxChi2s[i]);