]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
AliITSRecoParam & AliITStrackerMI:
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Jun 2010 12:48:29 +0000 (12:48 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Jun 2010 12:48:29 +0000 (12:48 +0000)
new cut variables introduced for PlaneEff evaluation

AliITSPlaneEffS*D:
rebinning of the control histograms

  Giuseppe Bruno

ITS/AliITSPlaneEffSDD.cxx
ITS/AliITSPlaneEffSPD.cxx
ITS/AliITSPlaneEffSSD.cxx
ITS/AliITSRecoParam.cxx
ITS/AliITSRecoParam.h
ITS/AliITStrackerMI.cxx

index 95c347ddfb3824acb814fdd87bea34c0d8b3a345..530dc9cbe96020e48d6e5c991e6a03adf93d81f8 100644 (file)
@@ -790,19 +790,19 @@ void AliITSPlaneEffSDD::InitHistos() {
   for (Int_t nhist=0;nhist<kNHisto;nhist++){
     aux=histnameResX;
     aux+=nhist;
-    fHisResX[nhist]=new TH1F("histname","histname",1500,-0.30,0.30); // +- 3000 micron; 1 bin=4 micron
+    fHisResX[nhist]=new TH1F("histname","histname",2000,-0.40,0.40); // +- 4000 micron; 1 bin=4 micron
     fHisResX[nhist]->SetName(aux.Data());
     fHisResX[nhist]->SetTitle(aux.Data());
 
     aux=histnameResZ;
     aux+=nhist;
-    fHisResZ[nhist]=new TH1F("histname","histname",500,-0.15,0.15); // +-1500 micron; 1 bin=6 micron
+    fHisResZ[nhist]=new TH1F("histname","histname",1000,-0.30,0.30); // +-3000 micron; 1 bin=6 micron
     fHisResZ[nhist]->SetName(aux.Data());
     fHisResZ[nhist]->SetTitle(aux.Data());
 
     aux=histnameResXZ;
     aux+=nhist;
-    fHisResXZ[nhist]=new TH2F("histname","histname",50,-0.2,0.2,30,-0.12,0.12); // binning:
+    fHisResXZ[nhist]=new TH2F("histname","histname",100,-0.4,0.4,60,-0.24,0.24); // binning:
                                                                                    // 80 micron in x; 
                                                                                    // 80 micron in z; 
     fHisResXZ[nhist]->SetName(aux.Data());
@@ -835,7 +835,7 @@ void AliITSPlaneEffSDD::InitHistos() {
       aux+=nhist;
       aux+="_clu_";
       aux+=clu+1; // clu=0 --> cluster size 1
-      fHisResZclu[nhist][clu]=new TH1F("histname","histname",500,-0.15,0.15); // +-1500 micron; 1 bin=6 micron
+      fHisResZclu[nhist][clu]=new TH1F("histname","histname",1000,-0.30,0.30); // +-3000 micron; 1 bin=6 micron
       fHisResZclu[nhist][clu]->SetName(aux.Data());
       fHisResZclu[nhist][clu]->SetTitle(aux.Data());
     }
@@ -866,7 +866,7 @@ void AliITSPlaneEffSDD::InitHistos() {
 
     aux=histnameTrackErrX;
     aux+=nhist;
-    fHisTrackErrX[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron
+    fHisTrackErrX[nhist]=new TH1F("histname","histname",500,0.,0.50); // 0-5000 micron; 1 bin=10 micron
     fHisTrackErrX[nhist]->SetName(aux.Data());
     fHisTrackErrX[nhist]->SetTitle(aux.Data());
 
@@ -878,13 +878,13 @@ void AliITSPlaneEffSDD::InitHistos() {
 
     aux=histnameClusErrX;
     aux+=nhist;
-    fHisClusErrX[nhist]=new TH1F("histname","histname",200,0.,0.04); //  0-400 micron; 1 bin=2 micron
+    fHisClusErrX[nhist]=new TH1F("histname","histname",400,0.,0.24); //  0-2400 micron; 1 bin=6 micron
     fHisClusErrX[nhist]->SetName(aux.Data());
     fHisClusErrX[nhist]->SetTitle(aux.Data());
 
     aux=histnameClusErrZ;
     aux+=nhist;
-    fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.16); //  0-1600 micron; 1 bin=8 micron
+    fHisClusErrZ[nhist]=new TH1F("histname","histname",400,0.,0.32); //  0-3200 micron; 1 bin=8 micron
     fHisClusErrZ[nhist]->SetName(aux.Data());
     fHisClusErrZ[nhist]->SetTitle(aux.Data());
 
@@ -1312,4 +1312,3 @@ Bool_t AliITSPlaneEffSDD::ReadHistosFromFile(TString filename) {
   }
 return kTRUE;
 }
-
index 1ec8d5e42271d093e6550abfa51292dff374ac8c..dd2d36520389fae2b5c266e718ee5b393f2dd24d 100644 (file)
@@ -639,19 +639,19 @@ void AliITSPlaneEffSPD::InitHistos() {
   for (Int_t nhist=0;nhist<kNHisto;nhist++){
     aux=histnameResX;
     aux+=nhist;
-    fHisResX[nhist]=new TH1F("histname","histname",800,-0.16,0.16); // +- 1600 micron; 1 bin=4 micron
+    fHisResX[nhist]=new TH1F("histname","histname",1600,-0.32,0.32); // +- 3200 micron; 1 bin=4 micron
     fHisResX[nhist]->SetName(aux.Data());
     fHisResX[nhist]->SetTitle(aux.Data());
 
     aux=histnameResZ;
     aux+=nhist;
-    fHisResZ[nhist]=new TH1F("histname","histname",800,-0.32,0.32); // +-3200 micron; 1 bin=8 micron
+    fHisResZ[nhist]=new TH1F("histname","histname",1200,-0.48,0.48); // +-4800 micron; 1 bin=8 micron
     fHisResZ[nhist]->SetName(aux.Data());
     fHisResZ[nhist]->SetTitle(aux.Data());
 
     aux=histnameResXZ;
     aux+=nhist;
-    fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.08,0.08,40,-0.16,0.16); // binning:
+    fHisResXZ[nhist]=new TH2F("histname","histname",80,-0.16,0.16,80,-0.32,0.32); // binning:
     fHisResXZ[nhist]->SetName(aux.Data());                                        // 40 micron in x;
     fHisResXZ[nhist]->SetTitle(aux.Data());                                       // 80 micron in z;
 
@@ -668,7 +668,7 @@ void AliITSPlaneEffSPD::InitHistos() {
       aux+=nhist;
       aux+="_clu_";
       aux+=clu+1; // clu=0 --> cluster size 1
-      fHisResXclu[nhist][clu]=new TH1F("histname","histname",800,-0.16,0.16); // +- 1600 micron; 1 bin=4 micron
+      fHisResXclu[nhist][clu]=new TH1F("histname","histname",1600,-0.32,0.32); // +- 3200 micron; 1 bin=4 micron
       fHisResXclu[nhist][clu]->SetName(aux.Data());
       fHisResXclu[nhist][clu]->SetTitle(aux.Data());
 
@@ -676,7 +676,7 @@ void AliITSPlaneEffSPD::InitHistos() {
       aux+=nhist;
       aux+="_clu_";
       aux+=clu+1; // clu=0 --> cluster size 1
-      fHisResZclu[nhist][clu]=new TH1F("histname","histname",800,-0.32,0.32); // +-3200 micron; 1 bin=8 micron
+      fHisResZclu[nhist][clu]=new TH1F("histname","histname",1200,-0.48,0.48); // +-4800 micron; 1 bin=8 micron
       fHisResZclu[nhist][clu]->SetName(aux.Data());
       fHisResZclu[nhist][clu]->SetTitle(aux.Data());
     }
@@ -688,7 +688,7 @@ void AliITSPlaneEffSPD::InitHistos() {
       aux+=nhist;
       aux+="_chip_";
       aux+=chip; 
-      fHisResXchip[nhist][chip]=new TH1F("histname","histname",200,-0.08,0.08); // +- 800 micron; 1 bin=8 micron
+      fHisResXchip[nhist][chip]=new TH1F("histname","histname",800,-0.32,0.32); // +- 3200 micron; 1 bin=8 micron
       fHisResXchip[nhist][chip]->SetName(aux.Data());
       fHisResXchip[nhist][chip]->SetTitle(aux.Data());
 
@@ -696,14 +696,14 @@ void AliITSPlaneEffSPD::InitHistos() {
       aux+=nhist;
       aux+="_chip_";
       aux+=chip;
-      fHisResZchip[nhist][chip]=new TH1F("histname","histname",200,-0.32,0.32); // +-3200 micron; 1 bin=32 micron
+      fHisResZchip[nhist][chip]=new TH1F("histname","histname",300,-0.48,0.48); // +-4800 micron; 1 bin=32 micron
       fHisResZchip[nhist][chip]->SetName(aux.Data());
       fHisResZchip[nhist][chip]->SetTitle(aux.Data());
     }
 
     aux=histnameTrackErrX;
     aux+=nhist;
-    fHisTrackErrX[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron
+    fHisTrackErrX[nhist]=new TH1F("histname","histname",400,0.,0.32); // 0-3200 micron; 1 bin=8 micron
     fHisTrackErrX[nhist]->SetName(aux.Data());
     fHisTrackErrX[nhist]->SetTitle(aux.Data());
 
@@ -715,13 +715,13 @@ void AliITSPlaneEffSPD::InitHistos() {
 
     aux=histnameClusErrX;
     aux+=nhist;
-    fHisClusErrX[nhist]=new TH1F("histname","histname",200,0.,0.04); //  0-400 micron; 1 bin=2 micron
+    fHisClusErrX[nhist]=new TH1F("histname","histname",400,0.,0.08); //  0-800 micron; 1 bin=2 micron
     fHisClusErrX[nhist]->SetName(aux.Data());
     fHisClusErrX[nhist]->SetTitle(aux.Data());
 
     aux=histnameClusErrZ;
     aux+=nhist;
-    fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.16); //  0-1600 micron; 1 bin=8 micron
+    fHisClusErrZ[nhist]=new TH1F("histname","histname",400,0.,0.32); //  0-3200 micron; 1 bin=8 micron
     fHisClusErrZ[nhist]->SetName(aux.Data());
     fHisClusErrZ[nhist]->SetTitle(aux.Data());
 
@@ -1117,3 +1117,4 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) {
   }
 return kTRUE;
 }
+
index 08d58e4c56b8fa5d4965992e09bd4a7ce7b83c43..52332b22cbde82dd735904337e5aeeb262ebbe3f 100644 (file)
@@ -443,21 +443,21 @@ void AliITSPlaneEffSSD::InitHistos() {
   for (Int_t nhist=0;nhist<kNHisto;nhist++){
     aux=histnameResX;
     aux+=nhist;
-    fHisResX[nhist]=new TH1F("histname","histname",500,-0.05,0.05); // +- 500 micron; 1 bin=2 micron
+    fHisResX[nhist]=new TH1F("histname","histname",500,-0.10,0.10); // +- 1000 micron; 1 bin=4 micron
     fHisResX[nhist]->SetName(aux.Data());
     fHisResX[nhist]->SetTitle(aux.Data());
 
     aux=histnameResZ;
     aux+=nhist;
-    fHisResZ[nhist]=new TH1F("histname","histname",500,-0.50,0.50); // +-5000 micron; 1 bin=20 micron
+    fHisResZ[nhist]=new TH1F("histname","histname",750,-0.75,0.75); // +-5000 micron; 1 bin=20 micron
     fHisResZ[nhist]->SetName(aux.Data());
     fHisResZ[nhist]->SetTitle(aux.Data());
 
     aux=histnameResXZ;
     aux+=nhist;
-    fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.02,0.02,40,-0.16,0.16); // binning:
-                                                                                   // 10 micron in x;
-                                                                                   // 80 micron in z;
+    fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.04,0.04,40,-0.32,0.32); // binning:
+                                                                                   // 20 micron in x;
+                                                                                   // 160 micron in z;
     fHisResXZ[nhist]->SetName(aux.Data());
     fHisResXZ[nhist]->SetTitle(aux.Data());
 
@@ -469,25 +469,25 @@ void AliITSPlaneEffSSD::InitHistos() {
 
     aux=histnameTrackErrX;
     aux+=nhist;
-    fHisTrackErrX[nhist]=new TH1F("histname","histname",200,0.,0.08); // 0-800 micron; 1 bin=4 micron
+    fHisTrackErrX[nhist]=new TH1F("histname","histname",300,0.,0.24); // 0-2400 micron; 1 bin=8 micron
     fHisTrackErrX[nhist]->SetName(aux.Data());
     fHisTrackErrX[nhist]->SetTitle(aux.Data());
 
     aux=histnameTrackErrZ;
     aux+=nhist;
-    fHisTrackErrZ[nhist]=new TH1F("histname","histname",200,0.,0.32); // 0-3200 micron; 1 bin=16 micron
+    fHisTrackErrZ[nhist]=new TH1F("histname","histname",300,0.,0.48); // 0-4800 micron; 1 bin=16 micron
     fHisTrackErrZ[nhist]->SetName(aux.Data());
     fHisTrackErrZ[nhist]->SetTitle(aux.Data());
 
     aux=histnameClusErrX;
     aux+=nhist;
-    fHisClusErrX[nhist]=new TH1F("histname","histname",200,0.,0.08); //  0-800 micron; 1 bin=4 micron
+    fHisClusErrX[nhist]=new TH1F("histname","histname",300,0.,0.24); //  0-2400 micron; 1 bin=8 micron
     fHisClusErrX[nhist]->SetName(aux.Data());
     fHisClusErrX[nhist]->SetTitle(aux.Data());
 
     aux=histnameClusErrZ;
     aux+=nhist;
-    fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.16); //  0-1600 micron; 1 bin=8 micron
+    fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.32); //  0-1600 micron; 1 bin=16 micron
     fHisClusErrZ[nhist]->SetName(aux.Data());
     fHisClusErrZ[nhist]->SetTitle(aux.Data());
 
@@ -751,3 +751,4 @@ Bool_t AliITSPlaneEffSSD::ReadHistosFromFile(TString filename) {
   }
 return kTRUE;
 }
+
index b6f973f983dfcac5b9d60fe4f6f3ad41449b882e..bec027360232795eb2646ead4d318b22db333b78 100644 (file)
@@ -128,10 +128,13 @@ fMinContVtxPlaneEff(3),
 fIPlanePlaneEff(0),
 fReadPlaneEffFromOCDB(kFALSE),
 fMinPtPlaneEff(0),
-fMaxMissingClustersPlaneEff(0),
+fMaxMissingClustersPlaneEff(5),
+fMaxMissingClustersOutPlaneEff(5),
 fRequireClusterInOuterLayerPlaneEff(kFALSE),
 fRequireClusterInInnerLayerPlaneEff(kFALSE),
 fOnlyConstraintPlaneEff(kFALSE),
+fNSigXFromBoundaryPlaneEff(1.),
+fNSigZFromBoundaryPlaneEff(1.),
 fExtendedEtaAcceptance(kFALSE),
 fUseBadZonesFromOCDB(kTRUE),
 fUseSingleBadChannelsFromOCDB(kFALSE),
@@ -660,31 +663,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;
@@ -708,6 +751,7 @@ AliITSRecoParam *AliITSRecoParam::GetPlaneEffParam(Int_t i)
     return 0;
   }
 }
+
 //_____________________________________________________________________________
 void AliITSRecoParam::SetLayersParameters() 
 {
@@ -764,4 +808,3 @@ void AliITSRecoParam::PrintParameters() const
 
   return;
 }
-
index 81e9422e47088abe8215c0fd4a1d38ad9e0cdad7..19bca9c854f9b8d2ef3fe531628aac74d3f8922e 100644 (file)
@@ -239,12 +239,18 @@ class AliITSRecoParam : public AliDetectorRecoParam
   Double_t GetMinPtPlaneEff() const { return fMinPtPlaneEff; }
   void   SetMaxMissingClustersPlaneEff(Int_t max=0) { fMaxMissingClustersPlaneEff=max;}
   Int_t  GetMaxMissingClustersPlaneEff() const {return fMaxMissingClustersPlaneEff;}
+  void   SetMaxMissingClustersOutPlaneEff(Int_t max=0) { fMaxMissingClustersOutPlaneEff=max;}
+  Int_t  GetMaxMissingClustersOutPlaneEff() const {return fMaxMissingClustersOutPlaneEff;}
   void   SetRequireClusterInOuterLayerPlaneEff(Bool_t out=kTRUE) { fRequireClusterInOuterLayerPlaneEff=out;}
   Bool_t GetRequireClusterInOuterLayerPlaneEff() const {return fRequireClusterInOuterLayerPlaneEff;}
   void   SetRequireClusterInInnerLayerPlaneEff(Bool_t in=kTRUE) { fRequireClusterInInnerLayerPlaneEff=in;}
   Bool_t GetRequireClusterInInnerLayerPlaneEff() const {return fRequireClusterInInnerLayerPlaneEff;}
   void   SetOnlyConstraintPlaneEff(Bool_t con=kFALSE) { fOnlyConstraintPlaneEff=con; }
   Bool_t GetOnlyConstraintPlaneEff() const { return fOnlyConstraintPlaneEff; }
+  void SetNSigXFromBoundaryPlaneEff(Double_t nsigx=1.) {fNSigXFromBoundaryPlaneEff=nsigx;}
+  Double_t GetNSigXFromBoundaryPlaneEff() const {return fNSigXFromBoundaryPlaneEff;}
+  void SetNSigZFromBoundaryPlaneEff(Double_t nsigz=1.) {fNSigZFromBoundaryPlaneEff=nsigz;}
+  Double_t GetNSigZFromBoundaryPlaneEff() const {return fNSigZFromBoundaryPlaneEff;}
   //
   void   SetExtendedEtaAcceptance(Bool_t ext=kTRUE) { fExtendedEtaAcceptance=ext; return; }
   Bool_t GetExtendedEtaAcceptance() const { return fExtendedEtaAcceptance; }
@@ -527,9 +533,12 @@ class AliITSRecoParam : public AliDetectorRecoParam
                                // The analized events would be used to increase the statistics
   Double_t fMinPtPlaneEff;  // minimum p_t of the track to be used for Plane Efficiency evaluation
   Int_t  fMaxMissingClustersPlaneEff;  // max n. of (other) layers without a cluster associated to the track
+  Int_t  fMaxMissingClustersOutPlaneEff;  // max n. of outermost layers without a cluster associated to the track
   Bool_t fRequireClusterInOuterLayerPlaneEff; // if kTRUE, then only tracks with an associated cluster on the closest
   Bool_t fRequireClusterInInnerLayerPlaneEff; // outer/inner layer are used. It has no effect for outermost/innermost layer
   Bool_t fOnlyConstraintPlaneEff;  // if kTRUE, use only constrained tracks at primary vertex for Plane Eff.
+  Double_t fNSigXFromBoundaryPlaneEff;  // accept one track for PlaneEff if distance from border (in loc x or z)
+  Double_t fNSigZFromBoundaryPlaneEff;  // is greater than fNSigXFromBoundaryPlaneEff * Track_precision
 
   Bool_t fExtendedEtaAcceptance;  // enable jumping from TPC to SPD at large eta (MI)
   Bool_t fUseBadZonesFromOCDB; // enable using OCDB info on dead modules and chips (MI)
@@ -607,7 +616,8 @@ class AliITSRecoParam : public AliDetectorRecoParam
   AliITSRecoParam(const AliITSRecoParam & param);
   AliITSRecoParam & operator=(const AliITSRecoParam &param);
 
-  ClassDef(AliITSRecoParam,27) // ITS reco parameters
+  ClassDef(AliITSRecoParam,28) // ITS reco parameters
 };
 
 #endif
+
index ee920d4fd95e431a4f28a43db1ecdc437797a9ae..801db4448d20e184436f1181d333685f45dd33ee 100644 (file)
@@ -4591,19 +4591,29 @@ Bool_t AliITStrackerMI::IsOKForPlaneEff(const AliITStrackMI* track, const Int_t
   AliITStrackMI tmp(*track);
 
 // require a minimal number of cluster in other layers and eventually clusters in closest layers 
-  Int_t ncl=0; 
-  for(Int_t lay=AliITSgeomTGeo::kNLayers-1;lay>ilayer;lay--) {
+  Int_t ncl_out=0; Int_t ncl_in=0;
+  for(Int_t lay=AliITSgeomTGeo::kNLayers-1;lay>ilayer;lay--) { // count n. of cluster in outermost layers
     AliDebug(2,Form("trak=%d  lay=%d  ; index=%d ESD label= %d",tmp.GetLabel(),lay,
                     tmp.GetClIndex(lay),((AliESDtrack*)tmp.GetESDtrack())->GetLabel())) ;
-    if (tmp.GetClIndex(lay)>=0) ncl++;
+    if (tmp.GetClIndex(lay)>=0) ncl_out++;
   }
+  for(Int_t lay=ilayer-1; lay>=0;lay--) { // count n. of cluster in innermost layers
+    AliDebug(2,Form("trak=%d  lay=%d  ; index=%d ESD label= %d",tmp.GetLabel(),lay,
+                    tmp.GetClIndex(lay),((AliESDtrack*)tmp.GetESDtrack())->GetLabel())) ;
+    if (tmp.GetClIndex(lay)>=0) ncl_in++;
+  }
+  Int_t ncl=ncl_out+ncl_out;
   Bool_t nextout = kFALSE;
   if(ilayer==AliITSgeomTGeo::kNLayers-1) nextout=kTRUE; // you are already on the outermost layer
   else nextout = ((tmp.GetClIndex(ilayer+1)>=0)? kTRUE : kFALSE );
   Bool_t nextin = kFALSE;
   if(ilayer==0) nextin=kTRUE; // you are already on the innermost layer
   else nextin = ((index[ilayer-1]>=0)? kTRUE : kFALSE );
-  if(ncl<AliITSgeomTGeo::kNLayers-(ilayer+1)-AliITSReconstructor::GetRecoParam()->GetMaxMissingClustersPlaneEff()) 
+  // maximum number of missing clusters allowed in outermost layers
+  if(ncl_out<AliITSgeomTGeo::kNLayers-(ilayer+1)-AliITSReconstructor::GetRecoParam()->GetMaxMissingClustersOutPlaneEff()) 
+     return kFALSE; 
+  // maximum number of missing clusters allowed (both in innermost and in outermost layers)
+  if(ncl<AliITSgeomTGeo::kNLayers-1-AliITSReconstructor::GetRecoParam()->GetMaxMissingClustersPlaneEff()) 
      return kFALSE; 
   if(AliITSReconstructor::GetRecoParam()->GetRequireClusterInOuterLayerPlaneEff() && !nextout)  return kFALSE;
   if(AliITSReconstructor::GetRecoParam()->GetRequireClusterInInnerLayerPlaneEff() && !nextin)   return kFALSE;
@@ -4634,10 +4644,10 @@ Bool_t AliITStrackerMI::IsOKForPlaneEff(const AliITStrackMI* track, const Int_t
   // DEFINITION OF SEARCH ROAD FOR accepting a track
   //
   //For the time being they are hard-wired, later on from AliITSRecoParam
-  // Double_t nsigx=AliITSRecoParam::GetNSigXFarFromBoundary();
-  // Double_t nsigz=AliITSRecoParam::GetNSigZFarFromBoundary();
-  Double_t nsigz=4; 
-  Double_t nsigx=4; 
+  Double_t nsigx=AliITSReconstructor::GetRecoParam()->GetNSigXFromBoundaryPlaneEff();
+  Double_t nsigz=AliITSReconstructor::GetRecoParam()->GetNSigZFromBoundaryPlaneEff();
+  // Double_t nsigz=4; 
+  // Double_t nsigx=4; 
   Double_t dx=nsigx*TMath::Sqrt(tmp.GetSigmaY2());  // those are precisions in the tracking reference system
   Double_t dz=nsigz*TMath::Sqrt(tmp.GetSigmaZ2());  // Use it also for the module reference system, as it is
                                                 // done for RecPoints
@@ -4817,4 +4827,3 @@ void AliITStrackerMI::UseTrackForPlaneEff(const AliITStrackMI* track, Int_t ilay
   }
 return;
 }
-