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 fSAOnePointTracks(kFALSE),
136 fSAUseAllClusters(kFALSE),
138 fUseUnfoldingInClusterFinderSPD(kFALSE),
139 fUseUnfoldingInClusterFinderSDD(kTRUE),
140 fUseUnfoldingInClusterFinderSSD(kTRUE),
141 fUseChargeMatchingInClusterFinderSSD(kTRUE),
142 fTrackleterOnlyOneTrackletPerC2(kTRUE),
143 fTrackleterPhiWindow(0.08),
144 fTrackleterZetaWindow(1.00),
145 fTrackleterRemoveClustersFromOverlaps(kFALSE),
146 fTrackleterPhiOverlapCut(0.005),
147 fTrackleterZetaOverlapCut(0.05),
148 fUseCosmicRunShiftsSSD(kFALSE)
156 SetLayersParameters();
157 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) fLayersToSkip[i]=0;
158 SetUseTGeoInTracker(3);
159 SetStepSizeTGeo(0.1);
160 SetAllowSharedClusters(kTRUE);
162 SetAddVirtualClustersInDeadZone(kFALSE);
163 SetUseAmplitudeInfo(kTRUE);
164 SetClusterErrorsParam(1);
165 SetClusterMisalError(0.);
166 SetVertexer3DDefaults();
168 //_____________________________________________________________________________
169 AliITSRecoParam::~AliITSRecoParam()
175 //_____________________________________________________________________________
176 AliITSRecoParam *AliITSRecoParam::GetHighFluxParam()
179 // make default reconstruction parameters for hig flux env.
181 AliITSRecoParam *param = new AliITSRecoParam();
182 param->SetVertexerZ();
184 // use of bads from OCDB
185 param->SetUseBadZonesFromOCDB(kTRUE);
186 param->SetUseSingleBadChannelsFromOCDB(kFALSE);
187 // extended eta acceptance
188 param->SetExtendedEtaAcceptance(kFALSE);
189 // allow to skip layer if no cluster and no bad
190 param->SetAllowProlongationWithEmptyRoad(kFALSE);
193 param->fMaxSnp = 0.95;
195 param->fNSigmaYLayerForRoadY = 4.;
196 param->fNSigmaRoadY = 7.5;
197 param->fNSigmaZLayerForRoadZ = 4.;
198 param->fNSigmaRoadZ = 7.5;
200 param->fNSigma2RoadZC = 60.; //7.75^2
201 param->fNSigma2RoadYC = 60.; //7.75^2
202 param->fNSigma2RoadZNonC = 50.; //7.07^2
203 param->fNSigma2RoadYNonC = 50.; //7.07^2
205 param->fMaxChi2PerCluster[0] = 11.; //7
206 param->fMaxChi2PerCluster[1] = 12.; //5
207 param->fMaxChi2PerCluster[2] = 12.; //8
208 param->fMaxChi2PerCluster[3] = 5.; //8
209 param->fMaxChi2PerCluster[4] = 12.; //6.5
211 param->fMaxNormChi2NonC[0] = 7.;
212 param->fMaxNormChi2NonC[1] = 8.;
213 param->fMaxNormChi2NonC[2] = 8.;
214 param->fMaxNormChi2NonC[3] = 11.;
215 param->fMaxNormChi2NonC[4] = 14.;
216 param->fMaxNormChi2NonC[5] = 25.;
218 param->fMaxNormChi2C[0] = 11.;
219 param->fMaxNormChi2C[1] = 13.;
220 param->fMaxNormChi2C[2] = 15.;
221 param->fMaxNormChi2C[3] = 18.;
222 param->fMaxNormChi2C[4] = 30.;
223 param->fMaxNormChi2C[5] = 35.;
225 param->fMaxNormChi2NonCForHypothesis = 7.;
227 param->fMaxChi2 = 35.;
229 param->fMaxChi2s[0] = 25.; //40
230 param->fMaxChi2s[1] = 25.; //40
231 param->fMaxChi2s[2] = 25.; //40
232 param->fMaxChi2s[3] = 25.; //40
233 param->fMaxChi2s[4] = 40.; //40
234 param->fMaxChi2s[5] = 50.; //40
236 param->fMaxRoad = 6.;
239 param->fMaxChi2In = 16.;
241 param->fMaxChi2sR[0] = 10.;
242 param->fMaxChi2sR[1] = 10.;
243 param->fMaxChi2sR[2] = 10.;
244 param->fMaxChi2sR[3] = 10.;
245 param->fMaxChi2sR[4] = 30.;
246 param->fMaxChi2sR[5] = 40.;
248 param->fChi2PerCluster = 9.;
254 param->fSigmaXV = 0.0050;
255 param->fSigmaYV = 0.0050;
256 param->fSigmaZV = 0.0100;
258 param->fVertexCut = 25.;
260 param->fMaxDZforPrimTrk = 0.4;
261 param->fMaxDZToUseConstraint = 3.;
263 param->fMaxDforV0dghtrForProlongation = 30.;
264 param->fMaxDForProlongation = 40.;//10.;
265 param->fMaxDZForProlongation = 60.;//20.;
266 param->fMinPtForProlongation = 0.120;
268 param->fZWindowDeadZone = 2.0;
269 param->fSigmaXDeadZoneHit2 = 0.004/12.;
270 param->fSigmaZDeadZoneHit2 = 0.001/12.;
271 param->fXPassDeadZoneHits = 0.018;
275 //_____________________________________________________________________________
276 AliITSRecoParam *AliITSRecoParam::GetLowFluxParam()
279 // make default reconstruction parameters for low flux env.
281 AliITSRecoParam *param = new AliITSRecoParam();
282 param->SetVertexer3DDefaults();
284 // full use of bads from OCDB
285 param->SetUseBadZonesFromOCDB(kTRUE);
286 param->SetUseSingleBadChannelsFromOCDB(kTRUE);
287 // extended eta acceptance
288 param->SetExtendedEtaAcceptance(kTRUE);
289 // allow to skip layer if no cluster and no bad
290 param->SetAllowProlongationWithEmptyRoad(kTRUE);
293 param->fMaxSnp = 0.95;
295 param->fNSigmaYLayerForRoadY = 4.;
296 param->fNSigmaRoadY = 7.5;
297 param->fNSigmaZLayerForRoadZ = 4.;
298 param->fNSigmaRoadZ = 7.5;
300 param->fNSigma2RoadZC = 60.; //7.75^2
301 param->fNSigma2RoadYC = 60.; //7.75^2
302 param->fNSigma2RoadZNonC = 50.; //7.07^2
303 param->fNSigma2RoadYNonC = 50.; //7.07^2
305 param->fMaxChi2PerCluster[0] = 11.; //7
306 param->fMaxChi2PerCluster[1] = 12.; //5
307 param->fMaxChi2PerCluster[2] = 12.; //8
308 param->fMaxChi2PerCluster[3] = 5.; //8
309 param->fMaxChi2PerCluster[4] = 12.; //6.5
311 param->fMaxNormChi2NonC[0] = 7.;
312 param->fMaxNormChi2NonC[1] = 8.;
313 param->fMaxNormChi2NonC[2] = 8.;
314 param->fMaxNormChi2NonC[3] = 11.;
315 param->fMaxNormChi2NonC[4] = 14.;
316 param->fMaxNormChi2NonC[5] = 25.;
318 param->fMaxNormChi2C[0] = 11.;
319 param->fMaxNormChi2C[1] = 13.;
320 param->fMaxNormChi2C[2] = 15.;
321 param->fMaxNormChi2C[3] = 18.;
322 param->fMaxNormChi2C[4] = 30.;
323 param->fMaxNormChi2C[5] = 35.;
325 param->fMaxNormChi2NonCForHypothesis = 7.;
327 param->fMaxChi2 = 35.;
329 param->fMaxChi2s[0] = 25.; //40
330 param->fMaxChi2s[1] = 25.; //40
331 param->fMaxChi2s[2] = 25.; //40
332 param->fMaxChi2s[3] = 25.; //40
333 param->fMaxChi2s[4] = 40.; //40
334 param->fMaxChi2s[5] = 50.; //40
336 param->fMaxRoad = 6.;
339 param->fMaxChi2In = 16.;
341 param->fMaxChi2sR[0] = 10.;
342 param->fMaxChi2sR[1] = 10.;
343 param->fMaxChi2sR[2] = 10.;
344 param->fMaxChi2sR[3] = 10.;
345 param->fMaxChi2sR[4] = 30.;
346 param->fMaxChi2sR[5] = 40.;
348 param->fChi2PerCluster = 9.;
354 param->fSigmaXV = 0.0050;
355 param->fSigmaYV = 0.0050;
356 param->fSigmaZV = 0.0100;
358 param->fVertexCut = 25.;
360 param->fMaxDZforPrimTrk = 0.4;
361 param->fMaxDZToUseConstraint = 3.;
363 param->fMaxDforV0dghtrForProlongation = 30.;
364 param->fMaxDForProlongation = 40.;//10.;
365 param->fMaxDZForProlongation = 60.;//20.;
366 param->fMinPtForProlongation = 0.120;
368 param->fZWindowDeadZone = 2.0;
369 param->fSigmaXDeadZoneHit2 = 0.004/12.;
370 param->fSigmaZDeadZoneHit2 = 0.001/12.;
371 param->fXPassDeadZoneHits = 0.018;
372 param->SetNLoopsSA(10);
376 //_____________________________________________________________________________
377 AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam()
380 // make default reconstruction parameters for cosmics
382 AliITSRecoParam *param = new AliITSRecoParam();
384 // vertexer for cosmics
385 param->SetVertexer(2);
387 // find independently ITS SA tracks
388 param->SetSAUseAllClusters();
389 param->SetOuterStartLayerSA(AliITSgeomTGeo::GetNLayers()-2);
391 // larger seach windows for SA (in case of large misalignments)
392 param->SetFactorSAWindowSizes(3.);
394 param->fMaxSnp = 0.95;
396 param->fNSigmaYLayerForRoadY = 4.;
397 param->fNSigmaRoadY = 7.5;
398 param->fNSigmaZLayerForRoadZ = 4.;
399 param->fNSigmaRoadZ = 7.5;
401 param->fNSigma2RoadZC = 60.; //7.75^2
402 param->fNSigma2RoadYC = 60.; //7.75^2
403 param->fNSigma2RoadZNonC = 50.; //7.07^2
404 param->fNSigma2RoadYNonC = 50.; //7.07^2
406 param->fMaxChi2PerCluster[0] = 11.; //7
407 param->fMaxChi2PerCluster[1] = 12.; //5
408 param->fMaxChi2PerCluster[2] = 12.; //8
409 param->fMaxChi2PerCluster[3] = 5.; //8
410 param->fMaxChi2PerCluster[4] = 12.; //6.5
412 param->fMaxNormChi2NonC[0] = 7.;
413 param->fMaxNormChi2NonC[1] = 8.;
414 param->fMaxNormChi2NonC[2] = 8.;
415 param->fMaxNormChi2NonC[3] = 11.;
416 param->fMaxNormChi2NonC[4] = 14.;
417 param->fMaxNormChi2NonC[5] = 25.;
419 param->fMaxNormChi2C[0] = 11.;
420 param->fMaxNormChi2C[1] = 13.;
421 param->fMaxNormChi2C[2] = 15.;
422 param->fMaxNormChi2C[3] = 18.;
423 param->fMaxNormChi2C[4] = 30.;
424 param->fMaxNormChi2C[5] = 35.;
426 param->fMaxNormChi2NonCForHypothesis = 7.;
428 param->fMaxChi2 = 35.;
430 param->fMaxChi2s[0] = 25.; //40
431 param->fMaxChi2s[1] = 25.; //40
432 param->fMaxChi2s[2] = 25.; //40
433 param->fMaxChi2s[3] = 25.; //40
434 param->fMaxChi2s[4] = 40.; //40
435 param->fMaxChi2s[5] = 50.; //40
437 param->fMaxRoad = 6.;
440 param->fMaxChi2In = 16.;
442 param->fMaxChi2sR[0] = 10.;
443 param->fMaxChi2sR[1] = 10.;
444 param->fMaxChi2sR[2] = 10.;
445 param->fMaxChi2sR[3] = 10.;
446 param->fMaxChi2sR[4] = 30.;
447 param->fMaxChi2sR[5] = 40.;
449 param->fChi2PerCluster = 9.;
455 param->fSigmaXV = 0.0050;
456 param->fSigmaYV = 0.0050;
457 param->fSigmaZV = 0.0100;
459 param->fVertexCut = 25.;
461 param->fMaxDZforPrimTrk = 0.4;
462 param->fMaxDZToUseConstraint = 3.;
464 param->fMaxDforV0dghtrForProlongation = 30.;
465 param->fMaxDForProlongation = 10.;
466 param->fMaxDZForProlongation = 20.;
467 param->fMinPtForProlongation = 0.120;
469 param->fZWindowDeadZone = 2.0;
470 param->fSigmaXDeadZoneHit2 = 0.004/12.;
471 param->fSigmaZDeadZoneHit2 = 0.001/12.;
472 param->fXPassDeadZoneHits = 0.018;
477 //_____________________________________________________________________________
478 AliITSRecoParam *AliITSRecoParam::GetPlaneEffParam(Int_t i)
481 // make special reconstruction parameters for Plane Efficiency study on layer i
483 if (i<0 || i>=AliITSgeomTGeo::kNLayers) {
484 printf("AliITSRecoParam::GetPlaneEffParam: index of ITS Plane not in the range [0,5]\n");
485 printf("returning null pointer");
488 AliITSRecoParam *param;
489 param = GetHighFluxParam();
490 param->SetComputePlaneEff();
491 param->SetLayerToSkip(i);
492 param->SetIPlanePlaneEff(i);
493 // optimized setting for SPD0 (i==0)
495 param->fMinPtPlaneEff = 0.200; // high pt particles
496 param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
497 param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SPD1 must be
498 //param->fOnlyConstraintPlaneEff = kTRUE;
501 param->fMinPtPlaneEff = 0.200; // high pt particles
502 param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
503 param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
504 //param->fOnlyConstraintPlaneEff = kTRUE;
507 param->fMinPtPlaneEff = 0.200; // high pt particles
508 param->fMaxMissingClustersPlaneEff = 0; // at most 1 layer out of 5 without cluster
509 param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
510 //param->fOnlyConstraintPlaneEff = kTRUE;
513 param->fMinPtPlaneEff = 0.200; // high pt particles
518 //_____________________________________________________________________________
519 void AliITSRecoParam::SetLayersParameters()
522 // number of layers and layers spatial resolutions
525 // spatial resolutions of the detectors
526 // y: 12 12 38 38 20 20 micron
529 fSigmaY2[2]=1.444e-5;
530 fSigmaY2[3]=1.444e-5;
533 // z: 120 120 28 28 830 830 micron
538 fSigmaZ2[4]=6.889e-3;
539 fSigmaZ2[5]=6.889e-3;
543 //_____________________________________________________________________________
544 void AliITSRecoParam::PrintParameters() const
550 printf("============================= AliITSRecoParam::PrintParameters ");
551 printf("============================= \n\n");
552 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
553 if(!fLayersToSkip[i]) {
554 printf("ITS Traking: using layer %d\n",i);
556 printf("ITS Traking: skipping layer %d\n",i);
559 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
560 if(fUseAmplitudeInfo[i]) {
561 printf("ITS Traking: use amplitude info for layer %d\n",i);
563 printf("ITS Traking: don't use amplitude info for layer %d\n",i);
566 for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++)
567 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]);