]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSRecoParam.cxx
Initialize magnetic field in RunLego as it is done in Run in case we get
[u/mrichter/AliRoot.git] / ITS / AliITSRecoParam.cxx
1 /**************************************************************************
2  * Copyright(c) 2007-2009, 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 #include "AliITSRecoParam.h"
17 #include "AliESDV0Params.h"
18 #include "AliLog.h"
19
20 /* $Id$ */
21
22 ///////////////////////////////////////////////////////////////////////////////
23 //                                                                           //
24 // Class with ITS reconstruction parameters                                  //
25 // Origin: andrea.dainese@lnl.infn.it                                        //
26 //                                                                           //
27 ///////////////////////////////////////////////////////////////////////////////
28
29
30
31 ClassImp(AliITSRecoParam)
32
33 const Int_t AliITSRecoParam::fgkLayersNotToSkip[AliITSgeomTGeo::kNLayers]={0,0,0,0,0,0};
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.5;
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;
61 const Double_t AliITSRecoParam::fgkSPDdetxlength=1.298;
62
63 //_____________________________________________________________________________
64 AliITSRecoParam::AliITSRecoParam() : AliDetectorRecoParam(),
65 fTracker(0),
66 fITSonly(kFALSE),
67 fVertexer(0),
68 fPID(0),
69 fVtxr3DZCutWide(0.),
70 fVtxr3DRCutWide(0.),
71 fVtxr3DZCutNarrow(0.),
72 fVtxr3DRCutNarrow(0.),
73 fVtxr3DPhiCutLoose(0.),
74 fVtxr3DPhiCutTight(0.),
75 fVtxr3DDCACut(0.),
76 fVtxr3DPileupAlgo(1),
77 fVtxr3DHighMultAlgo(1),
78 fMaxSnp(1.),
79 fNSigmaYLayerForRoadY(0),
80 fNSigmaRoadY(0),
81 fNSigmaZLayerForRoadZ(0),
82 fNSigmaRoadZ(0),
83 fNSigma2RoadZC(0),
84 fNSigma2RoadYC(0),
85 fNSigma2RoadZNonC(0),
86 fNSigma2RoadYNonC(0),
87 fRoadMisal(0),
88 fMaxNormChi2NonCForHypothesis(0),
89 fMaxChi2(0),
90 fMaxRoad(0),
91 fMaxChi2In(0),
92 fChi2PerCluster(0),
93 fSearchForExtras(kTRUE),                             
94 fXV(0), 
95 fYV(0),
96 fZV(0),
97 fSigmaXV(0),
98 fSigmaYV(0),
99 fSigmaZV(0),
100 fVertexCut(0),
101 fMaxDZforPrimTrk(0),
102 fMaxDZToUseConstraint(0), 
103 fMaxDforV0dghtrForProlongation(0),
104 fMaxDForProlongation(0),
105 fMaxDZForProlongation(0),
106 fMinPtForProlongation(0),
107 fAddVirtualClustersInDeadZone(kFALSE),
108 fZWindowDeadZone(0),
109 fSigmaXDeadZoneHit2(0),
110 fSigmaZDeadZoneHit2(0),
111 fXPassDeadZoneHits(0),
112 fSkipSubdetsNotInTriggerCluster(kTRUE),
113 fUseTGeoInTracker(3),
114 fStepSizeTGeo(5.),
115 fAllowSharedClusters(kTRUE),
116 fClusterErrorsParam(1),
117 fComputePlaneEff(kFALSE),
118 fHistoPlaneEff(kFALSE),
119 fUseTrackletsPlaneEff(kFALSE),
120 fMCTrackletsPlaneEff(kFALSE),
121 fBkgTrackletsPlaneEff(kFALSE),
122 fTrackleterPhiWindowL1(0.10),
123 fTrackleterPhiWindowL2(0.07),
124 fTrackleterZetaWindowL1(0.6),
125 fTrackleterZetaWindowL2(0.4),
126 fUpdateOncePerEventPlaneEff(kTRUE),
127 fMinContVtxPlaneEff(3),
128 fIPlanePlaneEff(0),
129 fReadPlaneEffFromOCDB(kFALSE),
130 fMinPtPlaneEff(0),
131 fMaxMissingClustersPlaneEff(5),
132 fMaxMissingClustersOutPlaneEff(5),
133 fRequireClusterInOuterLayerPlaneEff(kFALSE),
134 fRequireClusterInInnerLayerPlaneEff(kFALSE),
135 fOnlyConstraintPlaneEff(kFALSE),
136 fNSigXFromBoundaryPlaneEff(0.),
137 fNSigZFromBoundaryPlaneEff(0.),
138 fDistXFromBoundaryPlaneEff(0.),
139 fDistZFromBoundaryPlaneEff(0.),
140 fSwitchOnMaxDistNSigFrmBndPlaneEff(kFALSE),
141 fSwitchOffStdSearchClusPlaneEff(kFALSE),
142 fNSigXSearchClusterPlaneEff(0.),
143 fNSigZSearchClusterPlaneEff(0.),
144 fDistXSearchClusterPlaneEff(0.),
145 fDistZSearchClusterPlaneEff(0.),
146 fSwitchOnMaxDistNSigSrhClusPlaneEff(kFALSE),
147 fDCACutPlaneEff(999.),
148 fVertexChi2CutPlaneEff(999999999.),
149 fImproveWithVertex(kFALSE),
150 fExtendedEtaAcceptance(kFALSE),
151 fUseBadZonesFromOCDB(kTRUE),
152 fUseSingleBadChannelsFromOCDB(kFALSE),
153 fMinFractionOfBadInRoad(0),
154 fAllowProlongationWithEmptyRoad(kFALSE),
155 fInwardFlagSA(kFALSE),
156 fOuterStartLayerSA(2),
157 fInnerStartLayerSA(3),
158 fMinNPointsSA(3),
159 fFactorSAWindowSizes(1.),
160 fNLoopsSA(32),
161 fMinPhiSA(0.002),
162 fMaxPhiSA(0.0145),
163 fMinLambdaSA(0.003),
164 fMaxLambdaSA(0.008),
165 fMinClusterChargeSA(0.),
166 fSAOnePointTracks(kFALSE),
167 fSAUseAllClusters(kFALSE),
168 fMaxSPDcontrForSAToUseAllClusters(1000000),
169 fSAUsedEdxInfo(kFALSE),
170 fSelectBestMIP03(kFALSE),
171 fFlagFakes(kFALSE),
172 fUseImproveKalman(kFALSE),
173 fFindV0s(kTRUE),
174 fStoreLikeSignV0s(kFALSE),
175 fUseUnfoldingInClusterFinderSPD(kFALSE),
176 fUseUnfoldingInClusterFinderSDD(kTRUE),
177 fUseUnfoldingInClusterFinderSSD(kFALSE),
178 fUseBadChannelsInClusterFinderSSD(kFALSE),
179 fUseSDDCorrectionMaps(kTRUE),
180 fUseSDDClusterSizeSelection(kFALSE),
181 fMinClusterChargeSDD(0.),
182 fUseChargeMatchingInClusterFinderSSD(kTRUE),
183 fTrackleterPhiWindow(0.08),
184 fTrackleterThetaWindow(0.025),
185 fTrackleterPhiShift(0.0045),
186 fTrackleterRemoveClustersFromOverlaps(kFALSE),
187 fTrackleterPhiOverlapCut(0.005),
188 fTrackleterZetaOverlapCut(0.05),
189 fTrackleterPhiRotationAngle(0.0),
190 fTrackleterNStdDev(1.5),
191 fScaleDTBySin2T(kFALSE),
192 fTrackleterStoreSPD2SingleCl(kFALSE),
193 fTrackleterBuildCl2TrkRefs(kTRUE),
194 //
195 fUseCosmicRunShiftsSSD(kFALSE),
196 fSPDRemoveNoisyFlag(kTRUE),
197 fSPDRemoveDeadFlag(kTRUE),
198 fVertexerFastSmearX(0.005),
199 fVertexerFastSmearY(0.005),
200 fVertexerFastSmearZ(0.01),
201 fAlignFilterCosmics(kFALSE),
202 fAlignFilterCosmicMergeTracks(kTRUE),
203 fAlignFilterMinITSPoints(4),
204 fAlignFilterMinITSPointsMerged(4),
205 fAlignFilterOnlyITSSATracks(kTRUE),
206 fAlignFilterOnlyITSTPCTracks(kFALSE),
207 fAlignFilterSkipExtra(kFALSE),
208 fAlignFilterMaxMatchingAngle(0.085),
209 fAlignFilterMinAngleWrtModulePlanes(0.52),
210 fAlignFilterMinPt(0.),
211 fAlignFilterMaxPt(1.e10),
212 fAlignFilterFillQANtuples(kTRUE),
213 //
214 fMultCutPxDrSPDin(0.1),
215 fMultCutPxDrSPDout(0.15),
216 fMultCutPxDz(0.2),
217 fMultCutDCArz(0.5),
218 fMultCutMinElectronProbTPC(0.5),
219 fMultCutMinElectronProbESD(0.1),
220 fMultCutMinP(0.05),
221 fMultCutMinRGamma(2.),
222 fMultCutMinRK0(1.),
223 fMultCutMinPointAngle(0.98),
224 fMultCutMaxDCADauther(0.5),
225 fMultCutMassGamma(0.03),
226 fMultCutMassGammaNSigma(5.),
227 fMultCutMassK0(0.03),
228 fMultCutMassK0NSigma(5.),
229 fMultCutChi2cGamma(2.),
230 fMultCutChi2cK0(2.),
231 fMultCutGammaSFromDecay(-10.),
232 fMultCutK0SFromDecay(-10.),
233 fMultCutMaxDCA(1.),
234 //
235 fCorrectLorentzAngleSPD(kTRUE),
236 fTanLorentzAngleHolesSPD(0.017455), // tan(1 degree)
237 fCorrectLorentzAngleSSD(kTRUE),
238 fTanLorentzAngleHolesSSD(0.016),  // tan(0.94 degrees)
239 fTanLorentzAngleElectronsSSD(0.068), // tan(3.98 degrees)
240 //
241 fOptReco("All"),
242 fESDV0Params(NULL)
243 {
244   //
245   // constructor
246   //
247   SetName("ITS");
248   SetTitle("ITS");
249
250   SetLayersParameters();
251   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) fLayersToSkip[i]=0;
252   SetUseTGeoInTracker(3);
253   SetStepSizeTGeo(5.);
254   SetAllowSharedClusters(kTRUE);
255   SetFindV0s(kTRUE);
256   SetAddVirtualClustersInDeadZone(kFALSE);
257   SetUseAmplitudeInfo(kTRUE);
258   SetClusterErrorsParam(1);
259   SetClusterMisalError(0.);
260   SetClusterMisalErrorBOn(0.);
261   SetVertexer3DDefaults();
262
263   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) fAlignFilterUseLayer[i]=kTRUE;
264   fESDV0Params = new AliESDV0Params();
265   
266   fESDV0Params->SetMaxDist0(0.1);
267   fESDV0Params->SetMaxDist1(0.1);
268   fESDV0Params->SetMaxDist(1.);
269   fESDV0Params->SetMinPointAngle(0.85);
270   fESDV0Params->SetMinPointAngle2(0.99);
271   fESDV0Params->SetMinR(0.5);
272   fESDV0Params->SetMaxR(220.);
273   fESDV0Params->SetMinPABestConst(0.9999);
274   fESDV0Params->SetMaxRBestConst(10.);
275   fESDV0Params->SetCausality0Cut(0.19);
276   fESDV0Params->SetLikelihood01Cut(0.45);
277   fESDV0Params->SetLikelihood1Cut(0.5);  
278   fESDV0Params->SetCombinedCut(0.55);
279   fESDV0Params->SetMinClFullTrk(5.0);
280   fESDV0Params->SetMinTgl0(1.05);
281   fESDV0Params->SetMinRTgl0(40.0);
282
283   fESDV0Params->SetMinNormDistForbTgl0(3.0);
284   fESDV0Params->SetMinClForb0(4.5);
285   fESDV0Params->SetMinNormDistForb1(3.0);
286   fESDV0Params->SetMinNormDistForb2(2.0);
287   fESDV0Params->SetMinNormDistForb3(1.0);
288   fESDV0Params->SetMinNormDistForb4(4.0);
289   fESDV0Params->SetMinNormDistForb5(5.0);
290   fESDV0Params->SetMinNormDistForbProt(2.0);
291   fESDV0Params->SetMaxPidProbPionForb(0.5);
292
293   fESDV0Params->SetMinRTPCdensity(40.);
294   fESDV0Params->SetMaxRTPCdensity0(110.);
295   fESDV0Params->SetMaxRTPCdensity10(120.);
296   fESDV0Params->SetMaxRTPCdensity20(130.);
297   fESDV0Params->SetMaxRTPCdensity30(140.);
298
299   fESDV0Params->SetMinTPCdensity(0.6);
300   fESDV0Params->SetMinTgl1(1.1);
301   fESDV0Params->SetMinTgl2(1.0);
302   fESDV0Params->SetMinchi2before0(16.);
303   fESDV0Params->SetMinchi2before1(16.);
304   fESDV0Params->SetMinchi2after0(16.);
305   fESDV0Params->SetMinchi2after1(16.);
306   fESDV0Params->SetAddchi2SharedCl(18.);
307   fESDV0Params->SetAddchi2NegCl0(25.);
308   fESDV0Params->SetAddchi2NegCl1(30.);
309   fESDV0Params->SetSigp0Par0(0.0001);
310   fESDV0Params->SetSigp0Par1(0.001);
311   fESDV0Params->SetSigp0Par2(0.1);
312   fESDV0Params->SetSigpPar0(0.5);
313   fESDV0Params->SetSigpPar1(0.6);
314   fESDV0Params->SetSigpPar2(0.4);
315   fESDV0Params->SetMaxDcaLh0(0.5);
316   fESDV0Params->SetStreamLevel(0);
317   fESDV0Params->SetChi2KF(100);
318   fESDV0Params->SetRobustChi2KF(100);
319   
320 }
321 //_____________________________________________________________________________
322 AliITSRecoParam::~AliITSRecoParam() 
323 {
324   //
325   // destructor
326   //  
327   if(fESDV0Params){
328     delete fESDV0Params;
329     fESDV0Params=NULL;
330   }
331 }
332 //_____________________________________________________________________________
333 AliITSRecoParam *AliITSRecoParam::GetHighFluxParam() 
334 {
335   //
336   // make default reconstruction  parameters for hig  flux env.
337   //
338   AliITSRecoParam *param = new AliITSRecoParam();
339   param->SetVertexer3DDefaults();
340   param->SetSPDVertexerPileupAlgoOff();
341   // use of bads from OCDB
342   param->SetUseBadZonesFromOCDB(kTRUE);
343   param->SetUseSingleBadChannelsFromOCDB(kFALSE);
344   // use pointing to vertex during prolongation
345   param->SetImproveWithVertex(kTRUE);
346   // extended eta acceptance
347   param->SetExtendedEtaAcceptance(kFALSE);
348   // allow to skip layer if no cluster and no bad
349   param->SetAllowProlongationWithEmptyRoad(kFALSE);
350   // set event specie
351   param->SetEventSpecie(AliRecoParam::kHighMult);
352
353   param->fMaxSnp = 0.95;
354
355   param->fNSigmaYLayerForRoadY = 4.;
356   param->fNSigmaRoadY = 7.5;
357   param->fNSigmaZLayerForRoadZ = 4.;
358   param->fNSigmaRoadZ = 7.5;
359
360   param->fNSigma2RoadZC = 60.; //7.75^2
361   param->fNSigma2RoadYC = 60.; //7.75^2
362   param->fNSigma2RoadZNonC = 50.; //7.07^2
363   param->fNSigma2RoadYNonC = 50.; //7.07^2
364
365   param->fMaxChi2PerCluster[0] = 11.; //7
366   param->fMaxChi2PerCluster[1] = 12.; //5
367   param->fMaxChi2PerCluster[2] = 12.; //8
368   param->fMaxChi2PerCluster[3] = 5.;  //8
369   param->fMaxChi2PerCluster[4] = 12.; //6.5
370
371   param->fMaxNormChi2NonC[0] = 7.;
372   param->fMaxNormChi2NonC[1] = 8.;
373   param->fMaxNormChi2NonC[2] = 8.;
374   param->fMaxNormChi2NonC[3] = 11.;
375   param->fMaxNormChi2NonC[4] = 14.;
376   param->fMaxNormChi2NonC[5] = 25.;
377
378   param->fMaxNormChi2C[0] = 11.;
379   param->fMaxNormChi2C[1] = 13.;
380   param->fMaxNormChi2C[2] = 15.;
381   param->fMaxNormChi2C[3] = 18.;
382   param->fMaxNormChi2C[4] = 30.;
383   param->fMaxNormChi2C[5] = 35.;
384
385   param->fMaxNormChi2NonCForHypothesis = 7.;
386   
387   param->fMaxChi2 = 35.;
388
389   param->fMaxChi2s[0] = 25.; //40   
390   param->fMaxChi2s[1] = 25.; //40   
391   param->fMaxChi2s[2] = 25.; //40   
392   param->fMaxChi2s[3] = 25.; //40   
393   param->fMaxChi2s[4] = 40.; //40   
394   param->fMaxChi2s[5] = 50.; //40
395
396   param->fMaxRoad = 6.;
397
398   // not used
399   param->fMaxChi2In = 16.;
400    
401   param->fMaxChi2sR[0] = 10.;   
402   param->fMaxChi2sR[1] = 10.;   
403   param->fMaxChi2sR[2] = 10.;   
404   param->fMaxChi2sR[3] = 10.;   
405   param->fMaxChi2sR[4] = 30.;   
406   param->fMaxChi2sR[5] = 40.;   
407
408
409   param->fChi2PerCluster = 9.;
410   // not used
411   param->fSearchForExtras = kFALSE;
412
413   param->fXV = 0.;
414   param->fYV = 0.;
415   param->fZV = 0.;
416   param->fSigmaXV = 0.0050;
417   param->fSigmaYV = 0.0050;
418   param->fSigmaZV = 0.0100;
419
420   param->fVertexCut = 25.;
421
422   param->fMaxDZforPrimTrk = 0.4;
423   param->fMaxDZToUseConstraint = 3.;
424
425   param->fMaxDforV0dghtrForProlongation = 30.;
426   param->fMaxDForProlongation = 40.;//10.;
427   param->fMaxDZForProlongation = 60.;//20.;
428   param->fMinPtForProlongation = 0.120;
429
430   param->fZWindowDeadZone = 2.0;
431   param->fSigmaXDeadZoneHit2 = 0.004/12.;
432   param->fSigmaZDeadZoneHit2 = 0.001/12.;
433   param->fXPassDeadZoneHits = 0.018;
434   //
435   // mult reco
436   param->fMultCutPxDrSPDin = 0.1;
437   param->fMultCutPxDrSPDout = 0.15;
438   param->fMultCutPxDz = 0.2;
439   param->fMultCutDCArz = 0.5;
440   param->fMultCutMinElectronProbTPC = 0.5;
441   param->fMultCutMinElectronProbESD = 0.1;
442   param->fMultCutMinP = 0.05;
443   param->fMultCutMinRGamma = 2.;
444   param->fMultCutMinRK0 = 1.;
445   param->fMultCutMinPointAngle = 0.98;
446   param->fMultCutMaxDCADauther = 0.5;
447   param->fMultCutMassGamma = 0.03;
448   param->fMultCutMassGammaNSigma = 5.;
449   param->fMultCutMassK0 = 0.03;
450   param->fMultCutMassK0NSigma = 5.;
451   param->fMultCutChi2cGamma = 2.;
452   param->fMultCutChi2cK0 = 2.;
453   param->fMultCutGammaSFromDecay = -10.;
454   param->fMultCutK0SFromDecay = -10.;
455   param->fMultCutMaxDCA = 1.;  
456   //
457   // trackleter
458   param->fTrackleterPhiWindow = 0.06;
459   param->fTrackleterBuildCl2TrkRefs = kFALSE;
460   param->fScaleDTBySin2T = kTRUE;
461   //
462   param->fSelectBestMIP03 = kFALSE;//kTRUE;
463   param->fFlagFakes       = kTRUE;
464   param->fUseImproveKalman= kFALSE;
465   //
466   return param;
467 }
468 //_____________________________________________________________________________
469 AliITSRecoParam *AliITSRecoParam::GetLowFluxParam() 
470 {
471   //
472   // make default reconstruction  parameters for low  flux env.
473   //
474   AliITSRecoParam *param = new AliITSRecoParam();
475   param->SetVertexer3DDefaults();
476
477   // full use of bads from OCDB
478   param->SetUseBadZonesFromOCDB(kTRUE);
479   param->SetUseSingleBadChannelsFromOCDB(kTRUE);
480   // extended eta acceptance
481   param->SetExtendedEtaAcceptance(kTRUE);
482   // allow to skip layer if no cluster and no bad
483   param->SetAllowProlongationWithEmptyRoad(kTRUE);
484   // set event specie
485   param->SetEventSpecie(AliRecoParam::kLowMult);
486
487   param->fMaxSnp = 0.95;
488
489   param->fNSigmaYLayerForRoadY = 4.;
490   param->fNSigmaRoadY = 7.5;
491   param->fNSigmaZLayerForRoadZ = 4.;
492   param->fNSigmaRoadZ = 7.5;
493
494   param->fNSigma2RoadZC = 60.; //7.75^2
495   param->fNSigma2RoadYC = 60.; //7.75^2
496   param->fNSigma2RoadZNonC = 50.; //7.07^2
497   param->fNSigma2RoadYNonC = 50.; //7.07^2
498
499   param->fMaxChi2PerCluster[0] = 11.; //7
500   param->fMaxChi2PerCluster[1] = 12.; //5
501   param->fMaxChi2PerCluster[2] = 12.; //8
502   param->fMaxChi2PerCluster[3] = 5.;  //8
503   param->fMaxChi2PerCluster[4] = 12.; //6.5
504
505   param->fMaxNormChi2NonC[0] = 7.;
506   param->fMaxNormChi2NonC[1] = 8.;
507   param->fMaxNormChi2NonC[2] = 8.;
508   param->fMaxNormChi2NonC[3] = 11.;
509   param->fMaxNormChi2NonC[4] = 14.;
510   param->fMaxNormChi2NonC[5] = 25.;
511
512   param->fMaxNormChi2C[0] = 11.;
513   param->fMaxNormChi2C[1] = 13.;
514   param->fMaxNormChi2C[2] = 15.;
515   param->fMaxNormChi2C[3] = 18.;
516   param->fMaxNormChi2C[4] = 30.;
517   param->fMaxNormChi2C[5] = 35.;
518
519   param->fMaxNormChi2NonCForHypothesis = 7.;
520   
521   param->fMaxChi2 = 35.;
522
523   param->fMaxChi2s[0] = 25.; //40   
524   param->fMaxChi2s[1] = 25.; //40   
525   param->fMaxChi2s[2] = 25.; //40   
526   param->fMaxChi2s[3] = 25.; //40   
527   param->fMaxChi2s[4] = 40.; //40   
528   param->fMaxChi2s[5] = 50.; //40
529
530   param->fMaxRoad = 6.;
531
532   // not used
533   param->fMaxChi2In = 16.;
534    
535   param->fMaxChi2sR[0] = 10.;   
536   param->fMaxChi2sR[1] = 10.;   
537   param->fMaxChi2sR[2] = 10.;   
538   param->fMaxChi2sR[3] = 10.;   
539   param->fMaxChi2sR[4] = 30.;   
540   param->fMaxChi2sR[5] = 40.;   
541
542   param->fChi2PerCluster = 9.;
543   // not used
544
545   param->fXV = 0.;
546   param->fYV = 0.;
547   param->fZV = 0.;
548   param->fSigmaXV = 0.0050;
549   param->fSigmaYV = 0.0050;
550   param->fSigmaZV = 0.0100;
551
552   param->fVertexCut = 25.;
553
554   param->fMaxDZforPrimTrk = 0.4;
555   param->fMaxDZToUseConstraint = 3.;
556
557   param->fMaxDforV0dghtrForProlongation = 30.;
558   param->fMaxDForProlongation = 40.;//10.;
559   param->fMaxDZForProlongation = 60.;//20.;
560   param->fMinPtForProlongation = 0.120;
561
562   param->fZWindowDeadZone = 2.0;
563   param->fSigmaXDeadZoneHit2 = 0.004/12.;
564   param->fSigmaZDeadZoneHit2 = 0.001/12.;
565   param->fXPassDeadZoneHits = 0.018;
566   param->SetNLoopsSA(20);
567   param->fMaxPhiSA = 0.07;
568   param->fMaxLambdaSA = 0.04;
569  
570   param->GetESDV0Params()->SetMinRTgl0(0.5);
571   param->GetESDV0Params()->SetMaxDist(1.5);
572   param->GetESDV0Params()->SetMaxDcaLh0(1.5);
573   param->GetESDV0Params()->SetMaxRBestConst(80);
574   param->GetESDV0Params()->SetMinPABestConst(0.99);
575   param->GetESDV0Params()->SetMinNormDistForbTgl0(1.);
576   param->GetESDV0Params()->SetMinNormDistForb1(2.);
577   param->GetESDV0Params()->SetMinNormDistForbProt(1.);
578   param->GetESDV0Params()->SetMaxPidProbPionForb(0.7);
579   param->GetESDV0Params()->SetLikelihood01Cut(0.3);
580   param->GetESDV0Params()->SetLikelihood1Cut(0.35);
581   param->GetESDV0Params()->SetCombinedCut(0.4);
582
583   // trackleter
584   param->fTrackleterBuildCl2TrkRefs = kTRUE;
585
586   // mult reco
587   param->fMultCutPxDrSPDin = 0.1;
588   param->fMultCutPxDrSPDout = 0.15;
589   param->fMultCutPxDz = 0.2;
590   param->fMultCutDCArz = 0.5;
591   param->fMultCutMinElectronProbTPC = 0.5;
592   param->fMultCutMinElectronProbESD = 0.1;
593   param->fMultCutMinP = 0.05;
594   param->fMultCutMinRGamma = 2.;
595   param->fMultCutMinRK0 = 1.;
596   param->fMultCutMinPointAngle = 0.98;
597   param->fMultCutMaxDCADauther = 0.5;
598   param->fMultCutMassGamma = 0.03;
599   param->fMultCutMassGammaNSigma = 5.;
600   param->fMultCutMassK0 = 0.03;
601   param->fMultCutMassK0NSigma = 5.;
602   param->fMultCutChi2cGamma = 2.;
603   param->fMultCutChi2cK0 = 2.;
604   param->fMultCutGammaSFromDecay = -10.;
605   param->fMultCutK0SFromDecay = -10.;
606   param->fMultCutMaxDCA = 1.;  
607   //
608
609   return param;
610 }
611 //_____________________________________________________________________________
612 AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam() 
613 {
614   //
615   // make default reconstruction  parameters for cosmics
616   //
617   AliITSRecoParam *param = new AliITSRecoParam();
618
619   // vertexer for cosmics
620   param->SetVertexer(2);
621
622   param->SetClusterErrorsParam(2);
623   param->SetFindV0s(kFALSE);
624   param->SetAddVirtualClustersInDeadZone(kFALSE);
625   param->SetUseAmplitudeInfo(kFALSE);
626
627   // set event specie
628   param->SetEventSpecie(AliRecoParam::kCosmic);
629
630   // full use of bads from OCDB
631   param->SetUseBadZonesFromOCDB(kTRUE);
632   param->SetUseSingleBadChannelsFromOCDB(kTRUE);
633
634   // find independently ITS SA tracks 
635   param->SetSAUseAllClusters();
636   param->SetOuterStartLayerSA(AliITSgeomTGeo::GetNLayers()-2);
637
638   //****** COSMICS 2009 (same as COSMICS 2008) *********************
639
640   // to maximize efficiency
641   param->SetAllowProlongationWithEmptyRoad();
642   param->SetMinNPointsSA(2);
643
644   // larger seach windows for SA (in case of large misalignments)
645   param->SetNLoopsSA(32);
646   param->SetFactorSAWindowSizes(20);
647
648   // additional error due to misal (B off)
649   param->SetClusterMisalErrorY(1.0,1.0,1.0,1.0,1.0,1.0); // [cm]
650   param->SetClusterMisalErrorZ(1.0,1.0,1.0,1.0,1.0,1.0); // [cm]
651   // additional error due to misal (B on)
652   param->SetClusterMisalErrorYBOn(0.0,0.0,0.1,0.1,0.1,0.1); // [cm]
653   param->SetClusterMisalErrorZBOn(0.1,0.1,0.1,0.1,0.1,0.1); // [cm]
654
655
656   // SDD configuration 
657   param->fUseSDDCorrectionMaps = kFALSE;
658   param->fUseSDDClusterSizeSelection=kTRUE;
659   param->fMinClusterChargeSDD=30.;
660   
661
662   // alignment data filter
663   param->SetAlignFilterCosmics(kTRUE);
664   param->SetAlignFilterCosmicMergeTracks(kTRUE); 
665   param->SetAlignFilterMinITSPoints(1);
666   param->SetAlignFilterMinITSPointsMerged(3);
667   param->SetAlignFilterOnlyITSSATracks(kTRUE);
668   param->SetAlignFilterOnlyITSTPCTracks(kFALSE);
669   param->SetAlignFilterSkipExtra(kFALSE);
670   param->SetAlignFilterMaxMatchingAngle(0.085/*5deg*/);
671   param->SetAlignFilterMinPt(0.2);          
672   param->SetAlignFilterMaxPt(1.e10);          
673   param->SetAlignFilterFillQANtuples(kTRUE);    
674
675   //******************************************************************
676
677   param->fMaxSnp = 0.95;
678
679   param->fNSigmaYLayerForRoadY = 4.;
680   param->fNSigmaRoadY = 7.5;
681   param->fNSigmaZLayerForRoadZ = 4.;
682   param->fNSigmaRoadZ = 7.5;
683
684   param->fNSigma2RoadZC = 60.; //7.75^2
685   param->fNSigma2RoadYC = 60.; //7.75^2
686   param->fNSigma2RoadZNonC = 50.; //7.07^2
687   param->fNSigma2RoadYNonC = 50.; //7.07^2
688
689   param->fMaxChi2PerCluster[0] = 11.; //7
690   param->fMaxChi2PerCluster[1] = 12.; //5
691   param->fMaxChi2PerCluster[2] = 12.; //8
692   param->fMaxChi2PerCluster[3] = 5.;  //8
693   param->fMaxChi2PerCluster[4] = 12.; //6.5
694
695   param->fMaxNormChi2NonC[0] = 7.;
696   param->fMaxNormChi2NonC[1] = 8.;
697   param->fMaxNormChi2NonC[2] = 8.;
698   param->fMaxNormChi2NonC[3] = 11.;
699   param->fMaxNormChi2NonC[4] = 14.;
700   param->fMaxNormChi2NonC[5] = 25.;
701
702   param->fMaxNormChi2C[0] = 11.;
703   param->fMaxNormChi2C[1] = 13.;
704   param->fMaxNormChi2C[2] = 15.;
705   param->fMaxNormChi2C[3] = 18.;
706   param->fMaxNormChi2C[4] = 30.;
707   param->fMaxNormChi2C[5] = 35.;
708
709   param->fMaxNormChi2NonCForHypothesis = 7.;
710   
711   param->fMaxChi2 = 35.;
712
713   param->fMaxChi2s[0] = 25.; //40   
714   param->fMaxChi2s[1] = 25.; //40   
715   param->fMaxChi2s[2] = 25.; //40   
716   param->fMaxChi2s[3] = 25.; //40   
717   param->fMaxChi2s[4] = 40.; //40   
718   param->fMaxChi2s[5] = 50.; //40
719
720   param->fMaxRoad = 6.;
721
722   // not used
723   param->fMaxChi2In = 16.;
724    
725   param->fMaxChi2sR[0] = 10.;   
726   param->fMaxChi2sR[1] = 10.;   
727   param->fMaxChi2sR[2] = 10.;   
728   param->fMaxChi2sR[3] = 10.;   
729   param->fMaxChi2sR[4] = 30.;   
730   param->fMaxChi2sR[5] = 40.;   
731
732   param->fChi2PerCluster = 9.;
733   // not used
734
735   param->fXV = 0.;
736   param->fYV = 0.;
737   param->fZV = 0.;
738   param->fSigmaXV = 0.0050;
739   param->fSigmaYV = 0.0050;
740   param->fSigmaZV = 0.0100;
741
742   param->fVertexCut = 25.;
743
744   param->fMaxDZforPrimTrk = 0.4;
745   param->fMaxDZToUseConstraint = 3.;
746
747   param->fMaxDforV0dghtrForProlongation = 30.;
748   param->fMaxDForProlongation = 10.;
749   param->fMaxDZForProlongation = 20.;
750   param->fMinPtForProlongation = 0.120;
751
752   param->fZWindowDeadZone = 2.0;
753   param->fSigmaXDeadZoneHit2 = 0.004/12.;
754   param->fSigmaZDeadZoneHit2 = 0.001/12.;
755   param->fXPassDeadZoneHits = 0.018;
756
757   // trackleter
758   param->fTrackleterBuildCl2TrkRefs = kFALSE;
759
760   return param;
761 }
762 //_____________________________________________________________________________
763 AliITSRecoParam *AliITSRecoParam::GetPlaneEffParam(Int_t i)
764 {
765   //
766   // make special reconstruction parameters for Plane Efficiency study on layer i (0,5)
767   // 
768   // if i=-1, then the evaluation for both pixel layers is tried with the tracklet method
769   //
770  if (i<-1 || i>=AliITSgeomTGeo::kNLayers) {
771     printf("AliITSRecoParam::GetPlaneEffParam: index of ITS Plane nor in the range [0,5] neither =-1\n");
772     printf("returning null pointer");
773     return NULL;
774   }
775   if(i>=0) {  // Method using tracks (remove given plane from tracking)
776     AliITSRecoParam *param;
777     param = GetLowFluxParam();
778     param->SetClusterErrorsParam(2);
779     // find independently ITS SA tracks 
780     param->SetSAUseAllClusters();
781     param->SetOuterStartLayerSA(2);
782     param->SetAllowProlongationWithEmptyRoad(kTRUE);
783     // larger seach windows for SA (in case of large misalignments)
784     param->SetFactorSAWindowSizes(2);
785
786     // Misalignment syst errors decided at ITS meeting 25.03.2010
787     // additional error due to misal (B off)
788     param->SetClusterMisalErrorY(0.0010,0.0010,0.0300,0.0300,0.0020,0.0020); // [cm]
789     param->SetClusterMisalErrorZ(0.0100,0.0100,0.0100,0.0100,0.0500,0.0500); // [cm]
790     // additional error due to misal (B on)
791     param->SetClusterMisalErrorYBOn(0.0010,0.0030,0.0500,0.0500,0.0020,0.0020); // [cm]
792     param->SetClusterMisalErrorZBOn(0.0100,0.0100,0.0100,0.0100,0.0500,0.0500); // [cm]
793     //----
794
795     // SDD configuration 
796     param->SetUseSDDCorrectionMaps(kTRUE); // changed 30.04.2010
797     param->SetUseSDDClusterSizeSelection(kTRUE);
798     param->SetMinClusterChargeSDD(30.);
799     param->SetUseUnfoldingInClusterFinderSDD(kFALSE);
800     //
801     param->SetComputePlaneEff();
802     param->SetLayerToSkip(i);
803     param->SetIPlanePlaneEff(i);
804     param->fNSigXFromBoundaryPlaneEff= 1.;
805     param->fNSigZFromBoundaryPlaneEff= 1.;
806     // optimized setting for SPD0 (i==0)
807     if (i==0) {
808       param->fMinPtPlaneEff = 0.200; // high pt particles
809       param->fMaxMissingClustersPlaneEff = 2; // at most 2 layers out of 5 without cluster
810       param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layers out of 5 external ones without cluster
811       param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SPD1 must be
812       //param->fOnlyConstraintPlaneEff = kTRUE;
813     }
814     if (i==1 ) {
815       param->fMinPtPlaneEff = 0.200; // high pt particles
816       param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
817       param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layer out of 4 external ones without cluster
818       //param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SSD1 must be
819     }
820     if (i==2) {
821       param->fMinPtPlaneEff = 0.200; // high pt particles
822       param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
823       param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layer out of 3 external ones without cluster
824       //param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
825       //param->fOnlyConstraintPlaneEff = kTRUE;
826     }
827     if (i==3) {
828       param->fMinPtPlaneEff = 0.200; // high pt particles
829       param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
830       param->fMaxMissingClustersOutPlaneEff = 1; // at most 1 layer out of 2 external ones without cluster
831     }
832     if (i==4) {
833       param->fMinPtPlaneEff = 0.200; // high pt particles
834       param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
835       param->fMaxMissingClustersOutPlaneEff = 1; // at most 1 layer out of 1 external ones without cluster
836       // param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
837       //param->fOnlyConstraintPlaneEff = kTRUE;
838     }
839     if (i==5) {
840       param->fMinPtPlaneEff = 0.200; // high pt particles
841       param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
842     }
843     //
844     return param;
845   }
846   else if (i==-1) { // Method using tracklets
847     AliITSRecoParam *param;
848     param = GetLowFluxParam();
849     param->SetIPlanePlaneEff(i);
850     param->SetComputePlaneEff(kTRUE,kFALSE);
851     param->SetUseTrackletsPlaneEff(kTRUE);
852     param->SetTrackleterPhiWindowL2(0.07);
853     param->SetTrackleterZetaWindowL2(0.4);
854     param->SetTrackleterPhiWindowL1(0.10);
855     param->SetTrackleterZetaWindowL1(0.6);
856     param->SetUpdateOncePerEventPlaneEff(kTRUE);
857     param->SetMinContVtxPlaneEff(3);
858     return param;
859   }
860   else {
861     AliErrorGeneral("AliITSRecoParam",Form("Unrecognised value of i %d\n",i));
862     return 0;
863   }
864 }
865
866 //_____________________________________________________________________________
867 void AliITSRecoParam::SetLayersParameters() 
868 {
869   //
870   // number of layers and layers spatial resolutions
871   //
872
873   // spatial resolutions of the detectors
874   // y: 12 12 38 38 20 20 micron
875   fSigmaY2[0]=1.44e-6;
876   fSigmaY2[1]=1.44e-6;
877   fSigmaY2[2]=1.444e-5;
878   fSigmaY2[3]=1.444e-5;
879   fSigmaY2[4]=4.0e-6;
880   fSigmaY2[5]=4.0e-6;
881   // z: 120 120 28 28 830 830 micron
882   fSigmaZ2[0]=1.44e-4;
883   fSigmaZ2[1]=1.44e-4;
884   fSigmaZ2[2]=7.84e-6;
885   fSigmaZ2[3]=7.84e-6;
886   fSigmaZ2[4]=6.889e-3;
887   fSigmaZ2[5]=6.889e-3;
888
889   return;
890 }
891 //_____________________________________________________________________________
892 void AliITSRecoParam::PrintParameters() const 
893 {
894   //
895   // print parameters
896   //
897
898   printf("=============================  AliITSRecoParam::PrintParameters ");
899   printf("============================= \n\n");
900   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
901     if(!fLayersToSkip[i]) {
902       printf("ITS Traking: using layer %d\n",i);
903     } else {
904       printf("ITS Traking: skipping layer %d\n",i);
905     }
906   }
907   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
908     if(fUseAmplitudeInfo[i]) {
909       printf("ITS Traking: use amplitude info for layer %d\n",i);
910     } else {
911       printf("ITS Traking: don't use amplitude info for layer %d\n",i);
912     }
913   }
914   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++)
915     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]);
916
917
918   Dump();
919
920   return;
921 }
922
923
924 //_____________________________________________________________________________
925 Bool_t AliITSRecoParam::SetOptReco(TString r){
926   // Set option for local reconstruction. 
927   // The string must contain at least one of the following
928   // substrings: "All", "SPD", "SDD", "SSD"
929   Bool_t isFine = kFALSE;
930   if(r.Contains("All") || r.Contains("SPD") || r.Contains("SDD") 
931      || r.Contains("SSD")){
932       isFine = kTRUE;
933       fOptReco=r;
934   }
935   return isFine;
936