]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSRecoParam.cxx
Merge remote-tracking branch 'origin/master' into flatdev
[u/mrichter/AliRoot.git] / ITS / AliITSRecoParam.cxx
index 9866a1f48d2cd76abd193b225a48df0af4bc4deb..6ef34fc73e4c2486e8e69f88ac39e7d66c37d58c 100644 (file)
@@ -14,6 +14,7 @@
  **************************************************************************/
 
 #include "AliITSRecoParam.h"
+#include "AliESDV0Params.h"
 #include "AliLog.h"
 
 /* $Id$ */
@@ -30,8 +31,6 @@
 ClassImp(AliITSRecoParam)
 
 const Int_t AliITSRecoParam::fgkLayersNotToSkip[AliITSgeomTGeo::kNLayers]={0,0,0,0,0,0};
-const Int_t AliITSRecoParam::fgkLastLayerToTrackTo=0;
-const Int_t AliITSRecoParam::fgkMaxDetectorPerLayer=1000;
 const Double_t AliITSRecoParam::fgkriw=80.0;
 const Double_t AliITSRecoParam::fgkdiw=0.0053;
 const Double_t AliITSRecoParam::fgkX0iw=30.0;
@@ -58,15 +57,14 @@ const Double_t AliITSRecoParam::fgkX0Air=21.82;
 const Double_t AliITSRecoParam::fgkX0Be=65.19;
 const Double_t AliITSRecoParam::fgkBoundaryWidth=0.2;
 const Double_t AliITSRecoParam::fgkDeltaXNeighbDets=0.5;
-const Double_t AliITSRecoParam::fgkSPDdetzlength=6.960; // 7.072-2*0.056
-const Double_t AliITSRecoParam::fgkSPDdetxlength=1.298; // 1.410-2*0.056
+const Double_t AliITSRecoParam::fgkSPDdetzlength=6.960;
+const Double_t AliITSRecoParam::fgkSPDdetxlength=1.298;
 
 //_____________________________________________________________________________
 AliITSRecoParam::AliITSRecoParam() : AliDetectorRecoParam(),
 fTracker(0),
 fITSonly(kFALSE),
 fVertexer(0),
-fClusterFinder(0),
 fPID(0),
 fVtxr3DZCutWide(0.),
 fVtxr3DRCutWide(0.),
@@ -76,6 +74,7 @@ fVtxr3DPhiCutLoose(0.),
 fVtxr3DPhiCutTight(0.),
 fVtxr3DDCACut(0.),
 fVtxr3DPileupAlgo(1),
+fVtxr3DHighMultAlgo(1),
 fMaxSnp(1.),
 fNSigmaYLayerForRoadY(0),
 fNSigmaRoadY(0),
@@ -91,6 +90,7 @@ fMaxChi2(0),
 fMaxRoad(0),
 fMaxChi2In(0),
 fChi2PerCluster(0),
+fSearchForExtras(kTRUE),                            
 fXV(0), 
 fYV(0),
 fZV(0),
@@ -109,6 +109,7 @@ fZWindowDeadZone(0),
 fSigmaXDeadZoneHit2(0),
 fSigmaZDeadZoneHit2(0),
 fXPassDeadZoneHits(0),
+fSkipSubdetsNotInTriggerCluster(kTRUE),
 fUseTGeoInTracker(3),
 fStepSizeTGeo(5.),
 fAllowSharedClusters(kTRUE),
@@ -127,10 +128,25 @@ fMinContVtxPlaneEff(3),
 fIPlanePlaneEff(0),
 fReadPlaneEffFromOCDB(kFALSE),
 fMinPtPlaneEff(0),
-fMaxMissingClustersPlaneEff(0),
+fMaxMissingClustersPlaneEff(5),
+fMaxMissingClustersOutPlaneEff(5),
 fRequireClusterInOuterLayerPlaneEff(kFALSE),
 fRequireClusterInInnerLayerPlaneEff(kFALSE),
 fOnlyConstraintPlaneEff(kFALSE),
+fNSigXFromBoundaryPlaneEff(0.),
+fNSigZFromBoundaryPlaneEff(0.),
+fDistXFromBoundaryPlaneEff(0.),
+fDistZFromBoundaryPlaneEff(0.),
+fSwitchOnMaxDistNSigFrmBndPlaneEff(kFALSE),
+fSwitchOffStdSearchClusPlaneEff(kFALSE),
+fNSigXSearchClusterPlaneEff(0.),
+fNSigZSearchClusterPlaneEff(0.),
+fDistXSearchClusterPlaneEff(0.),
+fDistZSearchClusterPlaneEff(0.),
+fSwitchOnMaxDistNSigSrhClusPlaneEff(kFALSE),
+fDCACutPlaneEff(999.),
+fVertexChi2CutPlaneEff(999999999.),
+fImproveWithVertex(kFALSE),
 fExtendedEtaAcceptance(kFALSE),
 fUseBadZonesFromOCDB(kTRUE),
 fUseSingleBadChannelsFromOCDB(kFALSE),
@@ -141,7 +157,7 @@ fOuterStartLayerSA(2),
 fInnerStartLayerSA(3),
 fMinNPointsSA(3),
 fFactorSAWindowSizes(1.),
-fNLoopsSA(33),
+fNLoopsSA(32),
 fMinPhiSA(0.002),
 fMaxPhiSA(0.0145),
 fMinLambdaSA(0.003),
@@ -149,6 +165,11 @@ fMaxLambdaSA(0.008),
 fMinClusterChargeSA(0.),
 fSAOnePointTracks(kFALSE),
 fSAUseAllClusters(kFALSE),
+fMaxSPDcontrForSAToUseAllClusters(1000000),
+fSAUsedEdxInfo(kFALSE),
+fSelectBestMIP03(kFALSE),
+fFlagFakes(kFALSE),
+fUseImproveKalman(kFALSE),
 fFindV0s(kTRUE),
 fStoreLikeSignV0s(kFALSE),
 fUseUnfoldingInClusterFinderSPD(kFALSE),
@@ -165,6 +186,12 @@ fTrackleterPhiShift(0.0045),
 fTrackleterRemoveClustersFromOverlaps(kFALSE),
 fTrackleterPhiOverlapCut(0.005),
 fTrackleterZetaOverlapCut(0.05),
+fTrackleterPhiRotationAngle(0.0),
+fTrackleterNStdDev(1.5),
+fScaleDTBySin2T(kFALSE),
+fTrackleterStoreSPD2SingleCl(kFALSE),
+fTrackleterBuildCl2TrkRefs(kTRUE),
+//
 fUseCosmicRunShiftsSSD(kFALSE),
 fSPDRemoveNoisyFlag(kTRUE),
 fSPDRemoveDeadFlag(kTRUE),
@@ -183,6 +210,35 @@ fAlignFilterMinAngleWrtModulePlanes(0.52),
 fAlignFilterMinPt(0.),
 fAlignFilterMaxPt(1.e10),
 fAlignFilterFillQANtuples(kTRUE),
+//
+fMultCutPxDrSPDin(0.1),
+fMultCutPxDrSPDout(0.15),
+fMultCutPxDz(0.2),
+fMultCutDCArz(0.5),
+fMultCutMinElectronProbTPC(0.5),
+fMultCutMinElectronProbESD(0.1),
+fMultCutMinP(0.05),
+fMultCutMinRGamma(2.),
+fMultCutMinRK0(1.),
+fMultCutMinPointAngle(0.98),
+fMultCutMaxDCADauther(0.5),
+fMultCutMassGamma(0.03),
+fMultCutMassGammaNSigma(5.),
+fMultCutMassK0(0.03),
+fMultCutMassK0NSigma(5.),
+fMultCutChi2cGamma(2.),
+fMultCutChi2cK0(2.),
+fMultCutGammaSFromDecay(-10.),
+fMultCutK0SFromDecay(-10.),
+fMultCutMaxDCA(1.),
+//
+fCorrectLorentzAngleSPD(kTRUE),
+fTanLorentzAngleHolesSPD(0.017455), // tan(1 degree)
+fCorrectLorentzAngleSSD(kTRUE),
+fTanLorentzAngleHolesSSD(0.016),  // tan(0.94 degrees)
+fTanLorentzAngleElectronsSSD(0.068), // tan(3.98 degrees)
+//
+fOptReco("All"),
 fESDV0Params(NULL)
 {
   //
@@ -231,6 +287,8 @@ fESDV0Params(NULL)
   fESDV0Params->SetMinNormDistForb3(1.0);
   fESDV0Params->SetMinNormDistForb4(4.0);
   fESDV0Params->SetMinNormDistForb5(5.0);
+  fESDV0Params->SetMinNormDistForbProt(2.0);
+  fESDV0Params->SetMaxPidProbPionForb(0.5);
 
   fESDV0Params->SetMinRTPCdensity(40.);
   fESDV0Params->SetMaxRTPCdensity0(110.);
@@ -278,11 +336,13 @@ AliITSRecoParam *AliITSRecoParam::GetHighFluxParam()
   // make default reconstruction  parameters for hig  flux env.
   //
   AliITSRecoParam *param = new AliITSRecoParam();
-  param->SetVertexerZ();
-
+  param->SetVertexer3DDefaults();
+  param->SetSPDVertexerPileupAlgoOff();
   // use of bads from OCDB
   param->SetUseBadZonesFromOCDB(kTRUE);
   param->SetUseSingleBadChannelsFromOCDB(kFALSE);
+  // use pointing to vertex during prolongation
+  param->SetImproveWithVertex(kTRUE);
   // extended eta acceptance
   param->SetExtendedEtaAcceptance(kFALSE);
   // allow to skip layer if no cluster and no bad
@@ -345,8 +405,10 @@ AliITSRecoParam *AliITSRecoParam::GetHighFluxParam()
   param->fMaxChi2sR[4] = 30.;   
   param->fMaxChi2sR[5] = 40.;   
 
+
   param->fChi2PerCluster = 9.;
   // not used
+  param->fSearchForExtras = kFALSE;
 
   param->fXV = 0.;
   param->fYV = 0.;
@@ -369,9 +431,38 @@ AliITSRecoParam *AliITSRecoParam::GetHighFluxParam()
   param->fSigmaXDeadZoneHit2 = 0.004/12.;
   param->fSigmaZDeadZoneHit2 = 0.001/12.;
   param->fXPassDeadZoneHits = 0.018;
-
-
-  
+  //
+  // mult reco
+  param->fMultCutPxDrSPDin = 0.1;
+  param->fMultCutPxDrSPDout = 0.15;
+  param->fMultCutPxDz = 0.2;
+  param->fMultCutDCArz = 0.5;
+  param->fMultCutMinElectronProbTPC = 0.5;
+  param->fMultCutMinElectronProbESD = 0.1;
+  param->fMultCutMinP = 0.05;
+  param->fMultCutMinRGamma = 2.;
+  param->fMultCutMinRK0 = 1.;
+  param->fMultCutMinPointAngle = 0.98;
+  param->fMultCutMaxDCADauther = 0.5;
+  param->fMultCutMassGamma = 0.03;
+  param->fMultCutMassGammaNSigma = 5.;
+  param->fMultCutMassK0 = 0.03;
+  param->fMultCutMassK0NSigma = 5.;
+  param->fMultCutChi2cGamma = 2.;
+  param->fMultCutChi2cK0 = 2.;
+  param->fMultCutGammaSFromDecay = -10.;
+  param->fMultCutK0SFromDecay = -10.;
+  param->fMultCutMaxDCA = 1.;  
+  //
+  // trackleter
+  param->fTrackleterPhiWindow = 0.06;
+  param->fTrackleterBuildCl2TrkRefs = kFALSE;
+  param->fScaleDTBySin2T = kTRUE;
+  //
+  param->fSelectBestMIP03 = kFALSE;//kTRUE;
+  param->fFlagFakes       = kTRUE;
+  param->fUseImproveKalman= kFALSE;
+  //
   return param;
 }
 //_____________________________________________________________________________
@@ -475,7 +566,6 @@ AliITSRecoParam *AliITSRecoParam::GetLowFluxParam()
   param->SetNLoopsSA(20);
   param->fMaxPhiSA = 0.07;
   param->fMaxLambdaSA = 0.04;
-
  
   param->GetESDV0Params()->SetMinRTgl0(0.5);
   param->GetESDV0Params()->SetMaxDist(1.5);
@@ -484,11 +574,37 @@ AliITSRecoParam *AliITSRecoParam::GetLowFluxParam()
   param->GetESDV0Params()->SetMinPABestConst(0.99);
   param->GetESDV0Params()->SetMinNormDistForbTgl0(1.);
   param->GetESDV0Params()->SetMinNormDistForb1(2.);
+  param->GetESDV0Params()->SetMinNormDistForbProt(1.);
+  param->GetESDV0Params()->SetMaxPidProbPionForb(0.7);
   param->GetESDV0Params()->SetLikelihood01Cut(0.3);
   param->GetESDV0Params()->SetLikelihood1Cut(0.35);
   param->GetESDV0Params()->SetCombinedCut(0.4);
 
-
+  // trackleter
+  param->fTrackleterBuildCl2TrkRefs = kTRUE;
+
+  // mult reco
+  param->fMultCutPxDrSPDin = 0.1;
+  param->fMultCutPxDrSPDout = 0.15;
+  param->fMultCutPxDz = 0.2;
+  param->fMultCutDCArz = 0.5;
+  param->fMultCutMinElectronProbTPC = 0.5;
+  param->fMultCutMinElectronProbESD = 0.1;
+  param->fMultCutMinP = 0.05;
+  param->fMultCutMinRGamma = 2.;
+  param->fMultCutMinRK0 = 1.;
+  param->fMultCutMinPointAngle = 0.98;
+  param->fMultCutMaxDCADauther = 0.5;
+  param->fMultCutMassGamma = 0.03;
+  param->fMultCutMassGammaNSigma = 5.;
+  param->fMultCutMassK0 = 0.03;
+  param->fMultCutMassK0NSigma = 5.;
+  param->fMultCutChi2cGamma = 2.;
+  param->fMultCutChi2cK0 = 2.;
+  param->fMultCutGammaSFromDecay = -10.;
+  param->fMultCutK0SFromDecay = -10.;
+  param->fMultCutMaxDCA = 1.;  
+  //
 
   return param;
 }
@@ -523,9 +639,10 @@ AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam()
 
   // to maximize efficiency
   param->SetAllowProlongationWithEmptyRoad();
+  param->SetMinNPointsSA(2);
 
   // larger seach windows for SA (in case of large misalignments)
-  param->SetNLoopsSA(33);
+  param->SetNLoopsSA(32);
   param->SetFactorSAWindowSizes(20);
 
   // additional error due to misal (B off)
@@ -637,6 +754,9 @@ AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam()
   param->fSigmaZDeadZoneHit2 = 0.001/12.;
   param->fXPassDeadZoneHits = 0.018;
 
+  // trackleter
+  param->fTrackleterBuildCl2TrkRefs = kFALSE;
+
   return param;
 }
 //_____________________________________________________________________________
@@ -654,31 +774,71 @@ AliITSRecoParam *AliITSRecoParam::GetPlaneEffParam(Int_t i)
   }
   if(i>=0) {  // Method using tracks (remove given plane from tracking)
     AliITSRecoParam *param;
-    param = GetHighFluxParam();
+    param = GetLowFluxParam();
+    param->SetClusterErrorsParam(2);
+    // find independently ITS SA tracks 
+    param->SetSAUseAllClusters();
+    param->SetOuterStartLayerSA(2);
+    param->SetAllowProlongationWithEmptyRoad(kTRUE);
+    // larger seach windows for SA (in case of large misalignments)
+    param->SetFactorSAWindowSizes(2);
+
+    // Misalignment syst errors decided at ITS meeting 25.03.2010
+    // additional error due to misal (B off)
+    param->SetClusterMisalErrorY(0.0010,0.0010,0.0300,0.0300,0.0020,0.0020); // [cm]
+    param->SetClusterMisalErrorZ(0.0100,0.0100,0.0100,0.0100,0.0500,0.0500); // [cm]
+    // additional error due to misal (B on)
+    param->SetClusterMisalErrorYBOn(0.0010,0.0030,0.0500,0.0500,0.0020,0.0020); // [cm]
+    param->SetClusterMisalErrorZBOn(0.0100,0.0100,0.0100,0.0100,0.0500,0.0500); // [cm]
+    //----
+
+    // SDD configuration 
+    param->SetUseSDDCorrectionMaps(kTRUE); // changed 30.04.2010
+    param->SetUseSDDClusterSizeSelection(kTRUE);
+    param->SetMinClusterChargeSDD(30.);
+    param->SetUseUnfoldingInClusterFinderSDD(kFALSE);
+    //
     param->SetComputePlaneEff();
     param->SetLayerToSkip(i);
     param->SetIPlanePlaneEff(i);
+    param->fNSigXFromBoundaryPlaneEff= 1.;
+    param->fNSigZFromBoundaryPlaneEff= 1.;
     // optimized setting for SPD0 (i==0)
-    if (i==0 || i==1) {
+    if (i==0) {
       param->fMinPtPlaneEff = 0.200; // high pt particles
-      param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
+      param->fMaxMissingClustersPlaneEff = 2; // at most 2 layers out of 5 without cluster
+      param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layers out of 5 external ones without cluster
       param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SPD1 must be
       //param->fOnlyConstraintPlaneEff = kTRUE;
     }
-    if (i==2 || i==3) {
+    if (i==1 ) {
+      param->fMinPtPlaneEff = 0.200; // high pt particles
+      param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+      param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layer out of 4 external ones without cluster
+      //param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SSD1 must be
+    }
+    if (i==2) {
       param->fMinPtPlaneEff = 0.200; // high pt particles
-      param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
-      param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
+      param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+      param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layer out of 3 external ones without cluster
+      //param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
       //param->fOnlyConstraintPlaneEff = kTRUE;
     }
+    if (i==3) {
+      param->fMinPtPlaneEff = 0.200; // high pt particles
+      param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+      param->fMaxMissingClustersOutPlaneEff = 1; // at most 1 layer out of 2 external ones without cluster
+    }
     if (i==4) {
       param->fMinPtPlaneEff = 0.200; // high pt particles
-      param->fMaxMissingClustersPlaneEff = 0; // at most 1 layer out of 5 without cluster
-      param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
+      param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+      param->fMaxMissingClustersOutPlaneEff = 1; // at most 1 layer out of 1 external ones without cluster
+      // param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
       //param->fOnlyConstraintPlaneEff = kTRUE;
     }
     if (i==5) {
       param->fMinPtPlaneEff = 0.200; // high pt particles
+      param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
     }
     //
     return param;
@@ -702,6 +862,7 @@ AliITSRecoParam *AliITSRecoParam::GetPlaneEffParam(Int_t i)
     return 0;
   }
 }
+
 //_____________________________________________________________________________
 void AliITSRecoParam::SetLayersParameters() 
 {
@@ -759,3 +920,17 @@ void AliITSRecoParam::PrintParameters() const
   return;
 }
 
+
+//_____________________________________________________________________________
+Bool_t AliITSRecoParam::SetOptReco(TString r){
+  // Set option for local reconstruction. 
+  // The string must contain at least one of the following
+  // substrings: "All", "SPD", "SDD", "SSD"
+  Bool_t isFine = kFALSE;
+  if(r.Contains("All") || r.Contains("SPD") || r.Contains("SDD") 
+     || r.Contains("SSD")){
+      isFine = kTRUE;
+      fOptReco=r;
+  }
+  return isFine;
+}