]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliCentralitySelectionTask.cxx
Fix for #84624: Problem in TPC cluster map
[u/mrichter/AliRoot.git] / ANALYSIS / AliCentralitySelectionTask.cxx
index fca4376adc5794037ad1491c441ba5cbf8196cfe..81942e468ca4fc298aaca908e791483cebee9561 100644 (file)
@@ -37,6 +37,7 @@
 #include <iostream>
 
 #include "AliAnalysisManager.h"
+#include "AliHeader.h"
 #include "AliVEvent.h"
 #include "AliESD.h"
 #include "AliESDEvent.h"
 #include "AliESDZDC.h"
 #include "AliESDFMD.h"
 #include "AliESDVZERO.h"
-#include "AliCentrality.h"
 #include "AliESDtrackCuts.h"
+#include "AliESDVertex.h"
+#include "AliCentrality.h"
 #include "AliMultiplicity.h"
 #include "AliAODHandler.h"
+#include "AliAODHeader.h"
 #include "AliAODEvent.h"
-#include "AliESDVertex.h"
 #include "AliAODVertex.h"
+#include "AliAODVZERO.h"
+#include "AliAODTracklets.h"
 #include "AliAODMCHeader.h"
-#include "AliMCEvent.h"
 #include "AliMCEventHandler.h"
+#include "AliMCEvent.h"
+#include "AliAODMCParticle.h"
 #include "AliMCParticle.h"
 #include "AliStack.h"
-#include "AliHeader.h"
-#include "AliAODMCParticle.h"
 #include "AliAnalysisTaskSE.h"
 #include "AliGenEventHeader.h"
 #include "AliGenHijingEventHeader.h"
@@ -87,7 +90,7 @@ AliAnalysisTaskSE(),
   fTrackCuts(0),
   fZVCut(10),
   fOutliersCut(5),
-  fQuality(0),
+  fQuality(999),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
@@ -119,6 +122,7 @@ AliAnalysisTaskSE(),
   fHOutCentV0MvsCentCL1(0),
   fHOutCentV0MvsCentTRK(0),
   fHOutCentTRKvsCentCL1(0),
+  fHOutCentV0MvsCentZDC(0),
   fHOutMultV0M(0),
   fHOutMultV0R(0),
   fHOutMultFMD(0),
@@ -130,15 +134,22 @@ AliAnalysisTaskSE(),
   fHOutMultZEMvsZDN(0),
   fHOutMultV0MvsZDC(0),
   fHOutMultZEMvsZDC(0),
+  fHOutMultZEMvsZDCw(0),
   fHOutMultV0MvsCL1(0),
   fHOutMultV0MvsTRK(0),
   fHOutMultTRKvsCL1(0),
   fHOutCentV0Mqual1(0),
   fHOutCentTRKqual1(0),
   fHOutCentCL1qual1(0),
+  fHOutMultV0MvsCL1qual1(0),
+  fHOutMultV0MvsTRKqual1(0),
+  fHOutMultTRKvsCL1qual1(0),
   fHOutCentV0Mqual2(0),
   fHOutCentTRKqual2(0),
   fHOutCentCL1qual2(0),
+  fHOutMultV0MvsCL1qual2(0),
+  fHOutMultV0MvsTRKqual2(0),
+  fHOutMultTRKvsCL1qual2(0),
   fHOutQuality(0),
   fHOutVertex(0)
 {   
@@ -176,7 +187,7 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fTrackCuts(0),
   fZVCut(10),
   fOutliersCut(5),
-  fQuality(0),
+  fQuality(999),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
@@ -208,6 +219,7 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fHOutCentV0MvsCentCL1(0),
   fHOutCentV0MvsCentTRK(0),
   fHOutCentTRKvsCentCL1(0),
+  fHOutCentV0MvsCentZDC(0),
   fHOutMultV0M(0),
   fHOutMultV0R(0),
   fHOutMultFMD(0),
@@ -219,15 +231,22 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fHOutMultZEMvsZDN(0),
   fHOutMultV0MvsZDC(0),
   fHOutMultZEMvsZDC(0),
+  fHOutMultZEMvsZDCw(0),
   fHOutMultV0MvsCL1(0),
   fHOutMultV0MvsTRK(0),
   fHOutMultTRKvsCL1(0),
   fHOutCentV0Mqual1(0),
   fHOutCentTRKqual1(0),
   fHOutCentCL1qual1(0),
+  fHOutMultV0MvsCL1qual1(0),
+  fHOutMultV0MvsTRKqual1(0),
+  fHOutMultTRKvsCL1qual1(0),
   fHOutCentV0Mqual2(0),
   fHOutCentTRKqual2(0),
   fHOutCentCL1qual2(0),
+  fHOutMultV0MvsCL1qual2(0),
+  fHOutMultV0MvsTRKqual2(0),
+  fHOutMultTRKvsCL1qual2(0),
   fHOutQuality(0),
   fHOutVertex(0)
 {
@@ -308,6 +327,7 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
   fHOutCentV0MvsCentCL1(ana.fHOutCentV0MvsCentCL1),
   fHOutCentV0MvsCentTRK(ana.fHOutCentV0MvsCentTRK),
   fHOutCentTRKvsCentCL1(ana.fHOutCentTRKvsCentCL1),
+  fHOutCentV0MvsCentZDC(ana.fHOutCentV0MvsCentZDC),
   fHOutMultV0M(ana.fHOutMultV0M),
   fHOutMultV0R(ana.fHOutMultV0R),
   fHOutMultFMD(ana.fHOutMultFMD),
@@ -319,15 +339,22 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
   fHOutMultZEMvsZDN(ana.fHOutMultZEMvsZDN),
   fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
   fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
+  fHOutMultZEMvsZDCw(ana.fHOutMultZEMvsZDCw),
   fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
   fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK),
   fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1),
   fHOutCentV0Mqual1(ana.fHOutCentV0Mqual1),
   fHOutCentTRKqual1(ana.fHOutCentTRKqual1),
   fHOutCentCL1qual1(ana.fHOutCentCL1qual1),
+  fHOutMultV0MvsCL1qual1(ana.fHOutMultV0MvsCL1qual1),
+  fHOutMultV0MvsTRKqual1(ana.fHOutMultV0MvsTRKqual1),
+  fHOutMultTRKvsCL1qual1(ana.fHOutMultTRKvsCL1qual1),
   fHOutCentV0Mqual2(ana.fHOutCentV0Mqual2),
   fHOutCentTRKqual2(ana.fHOutCentTRKqual2),
   fHOutCentCL1qual2(ana.fHOutCentCL1qual2),
+  fHOutMultV0MvsCL1qual2(ana.fHOutMultV0MvsCL1qual2),
+  fHOutMultV0MvsTRKqual2(ana.fHOutMultV0MvsTRKqual2),
+  fHOutMultTRKvsCL1qual2(ana.fHOutMultTRKvsCL1qual2),
   fHOutQuality(ana.fHOutQuality),
   fHOutVertex(ana.fHOutVertex)
 {
@@ -367,9 +394,10 @@ void AliCentralitySelectionTask::UserCreateOutputObjects()
   fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",505,0,101);
   fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",505,0,101);
   fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",505,0,101);
-  fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0 vs Cent SPD",505,0,101,505,0,101);
-  fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0 vs Cent TPC",505,0,101,505,0,101);
-  fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC vs Cent SPD",505,0,101,505,0,101);
+  fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0; Cent SPD",505,0,101,505,0,101);
+  fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0; Cent TPC",505,0,101,505,0,101);
+  fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC; Cent SPD",505,0,101,505,0,101);
+  fHOutCentV0MvsCentZDC= new TH2F("fHOutCentV0MvsCentZDC","fHOutCentV0MvsCentZDC; Cent V0; Cent ZDC",505,0,101,505,0,101);
 
   fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000);
   fHOutMultV0R = new TH1F("fHOutMultV0R","fHOutMultV0R; Multiplicity V0",30000,0,30000);
@@ -382,6 +410,7 @@ void AliCentralitySelectionTask::UserCreateOutputObjects()
   fHOutMultZEMvsZDN = new TH2F("fHOutMultZEMvsZDN","fHOutMultZEMvsZDN; Energy ZEM; Energy ZDC-N",500,0,2500,500,0,180000);
   fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,200000);
   fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,200000);
+  fHOutMultZEMvsZDCw = new TH2F("fHOutMultZEMvsZDCw","fHOutMultZEMvsZDCw; Energy ZEM; Energy ZDC (weigthed with V0 percentile)",500,0,2500,500,0,200000);
   fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
   fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
   fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
@@ -389,12 +418,18 @@ void AliCentralitySelectionTask::UserCreateOutputObjects()
   fHOutCentV0Mqual1 = new TH1F("fHOutCentV0M_qual1","fHOutCentV0M_qual1; Centrality V0",505,0,101);
   fHOutCentTRKqual1 = new TH1F("fHOutCentTRK_qual1","fHOutCentTRK_qual1; Centrality TPC",505,0,101);
   fHOutCentCL1qual1 = new TH1F("fHOutCentCL1_qual1","fHOutCentCL1_qual1; Centrality SPD outer",505,0,101);
+  fHOutMultV0MvsCL1qual1 = new TH2F("fHOutMultV0MvsCL1_qual1","fHOutMultV0MvsCL1_qual1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
+  fHOutMultV0MvsTRKqual1 = new TH2F("fHOutMultV0MvsTRK_qual1","fHOutMultV0MvsTRK_qual1; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
+  fHOutMultTRKvsCL1qual1 = new TH2F("fHOutMultTRKvsCL1_qual1","fHOutMultTRKvsCL1_qual1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
 
   fHOutCentV0Mqual2 = new TH1F("fHOutCentV0M_qual2","fHOutCentV0M_qual2; Centrality V0",505,0,101);
   fHOutCentTRKqual2 = new TH1F("fHOutCentTRK_qual2","fHOutCentTRK_qual2; Centrality TPC",505,0,101);
   fHOutCentCL1qual2 = new TH1F("fHOutCentCL1_qual2","fHOutCentCL1_qual2; Centrality SPD outer",505,0,101);
+  fHOutMultV0MvsCL1qual2 = new TH2F("fHOutMultV0MvsCL1_qual2","fHOutMultV0MvsCL1_qual2; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
+  fHOutMultV0MvsTRKqual2 = new TH2F("fHOutMultV0MvsTRK_qual2","fHOutMultV0MvsTRK_qual2; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
+  fHOutMultTRKvsCL1qual2 = new TH2F("fHOutMultTRKvsCL1_qual2","fHOutMultTRKvsCL1_qual2; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
 
-  fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 10,-0.5,9.5);
+  fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 100,-0.5,99.5);
   fHOutVertex  = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
 
   fOutputList->Add(  fHOutCentV0M     );
@@ -409,6 +444,7 @@ void AliCentralitySelectionTask::UserCreateOutputObjects()
   fOutputList->Add(  fHOutCentV0MvsCentCL1);
   fOutputList->Add(  fHOutCentV0MvsCentTRK);
   fOutputList->Add(  fHOutCentTRKvsCentCL1);
+  fOutputList->Add(  fHOutCentV0MvsCentZDC);
   fOutputList->Add(  fHOutMultV0M); 
   fOutputList->Add(  fHOutMultV0R); 
   fOutputList->Add(  fHOutMultFMD); 
@@ -420,15 +456,22 @@ void AliCentralitySelectionTask::UserCreateOutputObjects()
   fOutputList->Add(  fHOutMultZEMvsZDN);
   fOutputList->Add(  fHOutMultV0MvsZDC);
   fOutputList->Add(  fHOutMultZEMvsZDC);
+  fOutputList->Add(  fHOutMultZEMvsZDCw);
   fOutputList->Add(  fHOutMultV0MvsCL1);
   fOutputList->Add(  fHOutMultV0MvsTRK);
   fOutputList->Add(  fHOutMultTRKvsCL1);
   fOutputList->Add(  fHOutCentV0Mqual1 );
   fOutputList->Add(  fHOutCentTRKqual1 );
   fOutputList->Add(  fHOutCentCL1qual1 );                   
+  fOutputList->Add(  fHOutMultV0MvsCL1qual1);
+  fOutputList->Add(  fHOutMultV0MvsTRKqual1);
+  fOutputList->Add(  fHOutMultTRKvsCL1qual1);
   fOutputList->Add(  fHOutCentV0Mqual2 );
   fOutputList->Add(  fHOutCentTRKqual2 );
   fOutputList->Add(  fHOutCentCL1qual2 );
+  fOutputList->Add(  fHOutMultV0MvsCL1qual2);
+  fOutputList->Add(  fHOutMultV0MvsTRKqual2);
+  fOutputList->Add(  fHOutMultTRKvsCL1qual2);
   fOutputList->Add(  fHOutQuality );
   fOutputList->Add(  fHOutVertex );
 
@@ -472,6 +515,8 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
   Short_t v0CorrResc = 0;           // corrected and rescaled V0 multiplicity
 
   Float_t zvtx =0;                  // z-vertex SPD
+  Int_t zvtxNcont =0;               // contributors to z-vertex SPD
+
  
   AliCentrality *esdCent = 0;
 
@@ -487,9 +532,10 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     LoadBranches();
     
     if (fRunNo<=0) {
-      if (SetupRun(esd)<0)
-         AliError("Centrality File not available for this run");
-         return;
+       if (SetupRun(esd)<0) {
+           AliError("Centrality File not available for this run");
+           return;
+       }
     }
 
     esdCent = esd->GetCentrality();
@@ -506,6 +552,7 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     // ***** Vertex Info
     const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
     zvtx        = vtxESD->GetZ(); 
+    zvtxNcont   = vtxESD->GetNContributors();
 
     // ***** CB info (tracklets, clusters, chips)
     //nTracks    = event->GetNumberOfTracks();     
@@ -577,6 +624,7 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
   
   }   
+
   else if(fAnalysisInput.CompareTo("AOD")==0){
     //AliAODEvent *aod =  dynamic_cast<AliAODEvent*> (InputEvent());
     // to be implemented
@@ -584,12 +632,10 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     return;
   } 
 
-
   // ***** Scaling
   // ***** Scaling for pass2 
   if (fPass==2) {
     fUseScaling=kFALSE;
-    fUseCleaning=kFALSE;
   }
   // ***** Scaling for MC
   if (fIsMCInput) {
@@ -627,7 +673,7 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
       fOutliersCut=6;
       
       // ***** vertex
-      if (TMath::Abs(zvtx)>fZVCut) fQuality += 1;   
+      if (TMath::Abs(zvtx)>fZVCut || zvtxNcont<1) fQuality += 1;   
 
       // ***** outliers
       // **** V0 vs SPD
@@ -659,13 +705,6 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
 
   fHOutQuality->Fill(fQuality);
   fHOutVertex->Fill(zvtx);
-
-  fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
-  fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
-  fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
-  fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
-  fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
-  fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
   
   if (fQuality==0) {  
     fHOutCentV0M->Fill(fCentV0M);
@@ -680,6 +719,7 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
     fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
     fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
+    fHOutCentV0MvsCentZDC->Fill(fCentV0M,fCentZEMvsZDC);
     fHOutMultV0M->Fill(v0Corr);
     fHOutMultV0R->Fill(multV0A+multV0C);
     fHOutMultFMD->Fill((multFMDA+multFMDC));
@@ -687,15 +727,28 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     fHOutMultTKL->Fill(nTracklets);
     fHOutMultCL0->Fill(nClusters[0]);
     fHOutMultCL1->Fill(spdCorr);
+    fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
+    fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
+    fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
+    fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
+    fHOutMultZEMvsZDCw->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy),fCentV0M);
+    fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
+    fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
     fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
-  } else if (fQuality ==1) {
+  } else if (fQuality%2 == 0) {
     fHOutCentV0Mqual1->Fill(fCentV0M);
     fHOutCentTRKqual1->Fill(fCentTRK);
     fHOutCentCL1qual1->Fill(fCentCL1);
+    fHOutMultV0MvsCL1qual1->Fill(v0Corr,spdCorr);
+    fHOutMultV0MvsTRKqual1->Fill(v0Corr,nTracks);
+    fHOutMultTRKvsCL1qual1->Fill(nTracks,spdCorr);
   } else {
     fHOutCentV0Mqual2->Fill(fCentV0M);
     fHOutCentTRKqual2->Fill(fCentTRK);
     fHOutCentCL1qual2->Fill(fCentCL1);
+    fHOutMultV0MvsCL1qual2->Fill(v0Corr,spdCorr);
+    fHOutMultV0MvsTRKqual2->Fill(v0Corr,nTracks);
+    fHOutMultTRKvsCL1qual2->Fill(nTracks,spdCorr);
   }
 
   PostData(1, fOutputList); 
@@ -786,7 +839,12 @@ Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
       else fRunNo = 137366;
       break;
     case 2:
-      fRunNo = 139172;
+      if      ( fCurrentRun >= 136851  && fCurrentRun <= 137165 ) fRunNo = 137161;
+      else if ( fCurrentRun >= 137230  && fCurrentRun <= 137531 ) fRunNo = 137366;
+      else if ( fCurrentRun >= 137539  && fCurrentRun <= 137848 ) fRunNo = 137722;
+      else if ( fCurrentRun >= 138125  && fCurrentRun <= 138154 ) fRunNo = 138150;
+      else if ( fCurrentRun >= 138190  && fCurrentRun <= 138275 ) fRunNo = 138200;
+      else fRunNo = 139172;
       break;       
     default:
       AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
@@ -809,21 +867,8 @@ Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
 Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent) const
 {
 // Clean outliers
-  Float_t val= -0.143789 + 0.288874 * v0;
-  Float_t spdSigma[101]={231.483, 189.446, 183.359, 179.923, 174.229, 170.309, 165.021, 
-                        160.84, 159.33, 154.453, 151.644, 148.337, 145.215, 142.353, 
-                        139.351, 136, 133.838, 129.885, 127.36, 125.032, 122.21, 120.3, 
-                        117.766, 114.77, 113.1, 110.268, 107.463, 105.293, 102.845, 
-                        100.835, 98.9632, 97.3287, 93.6887, 92.1066, 89.3224, 87.8382, 
-                        86.04, 83.6431, 81.9655, 80.0491, 77.8208, 76.4716, 74.2165, 
-                        72.2752, 70.4875, 68.9414, 66.8622, 65.022, 63.5134, 61.8228, 
-                        59.7166, 58.5008, 56.2789, 54.9615, 53.386, 51.2165, 49.4842, 
-                        48.259, 47.1129, 45.3115, 43.8486, 41.9207, 40.5754, 39.3872, 
-                        38.1897, 36.5401, 35.1283, 33.9702, 32.6429, 31.3612, 29.5876, 
-                        28.9319, 27.564, 26.0443, 25.2836, 23.9753, 22.8936, 21.5665, 
-                        20.7048, 19.8016, 18.7095, 18.1144, 17.2095, 16.602, 16.3233, 
-                        15.7185, 15.3006, 14.7432, 14.4174, 14.0805, 13.7638, 13.7638, 
-                        13.7638, 13.7638, 13.7638, 13.7638, 13.7638, 13.7638, 13.7638, 18.0803, 18.0803};
+  Float_t val= -0.579579 +  0.273949 * v0;
+  Float_t spdSigma[101]={216.473, 194.377, 190.432, 185.019, 179.787, 175.99, 170.695, 167.276, 162.229, 159.016, 155.592, 151.909, 148.967, 146.367, 142.752, 139.718, 136.838, 134.133, 131.374, 128.616, 126.195, 123.49, 120.76, 118.368, 115.671, 113.354, 110.986, 108.761, 105.816, 103.373, 101.525, 99.3941, 96.8891, 95.1021, 92.728, 90.6434, 88.6393, 86.4624, 84.19, 82.3937, 80.4803, 78.5633, 76.5256, 74.7059, 73.0146, 70.9321, 69.1671, 67.2923, 65.5859, 63.9027, 61.7826, 60.1855, 58.6887, 56.8523, 55.1695, 53.422, 51.9776, 50.3506, 48.5304, 47.1517, 45.4786, 43.9914, 42.4579, 41.0889, 39.6201, 38.3046, 36.8624, 35.3697, 33.9223, 32.4637, 30.859, 29.9707, 28.764, 27.5677, 26.3437, 24.8656, 23.5253, 22.9878, 21.5172, 20.4645, 19.7614, 19.0363, 18.0875, 17.3675, 16.7313, 16.4101, 15.8235, 15.4795, 14.897, 14.578, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 22.5965, 22.5965};
 
   if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma[cent] ) 
     return kTRUE;
@@ -835,21 +880,8 @@ Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_
 Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent) const
 {
 // Clean outliers
-  Float_t val = -0.540691 + 0.128358 * v0;
-  Float_t tpcSigma[101]={106.439, 89.2834, 86.7568, 85.3641, 83.379, 81.6093, 79.3189, 
-                        78.0616, 77.2167, 75.0021, 73.9957, 72.0926, 71.0442, 69.8395, 
-                        68.1169, 66.6676, 66.0038, 64.2284, 63.3845, 61.7439, 60.642, 
-                        59.5383, 58.3696, 57.0227, 56.0619, 54.7108, 53.8382, 52.3398, 
-                        51.5297, 49.9488, 49.1126, 48.208, 46.8566, 45.7724, 44.7829, 
-                        43.8726, 42.7499, 41.9307, 40.6874, 39.9619, 38.5534, 38.0884, 
-                        36.6141, 35.7482, 34.8804, 34.1769, 33.1278, 32.3435, 31.4783, 
-                        30.2587, 29.4741, 28.8575, 27.9298, 26.9752, 26.1675, 25.1234, 
-                        24.4702, 23.6843, 22.9764, 21.8579, 21.2924, 20.3241, 19.8296, 
-                        19.2465, 18.4474, 17.7216, 16.8956, 16.342, 15.626, 15.0329, 
-                        14.3911, 13.9301, 13.254, 12.6745, 12.2436, 11.7776, 11.1795, 
-                        10.673, 10.27, 9.95646, 9.50939, 9.26162, 8.95315, 8.73439, 
-                        8.67375, 8.43029, 8.34818, 8.33484, 8.40709, 8.3974, 8.32814, 
-                        8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 12.351, 12.351};
+  Float_t val = -1.03873 +  0.125691 * v0;
+  Float_t tpcSigma[101]={105.1, 95.7594, 94.5777, 91.7369, 89.655, 87.9469, 85.2747, 83.8137, 81.5663, 79.9871, 78.3491, 76.664, 75.1352, 73.9838, 72.0122, 70.7627, 69.1832, 67.8707, 66.3974, 65.0222, 64.1065, 62.7248, 61.498, 60.11, 58.7405, 57.681, 56.2979, 55.3153, 53.983, 52.6813, 51.5321, 50.5531, 49.3309, 48.2269, 47.1665, 46.1924, 45.1143, 44.0394, 42.8571, 41.8471, 40.9594, 39.8298, 38.8128, 37.8845, 36.8788, 35.9896, 34.9477, 34.1293, 33.1267, 32.161, 31.1132, 30.3521, 29.5237, 28.5992, 27.6283, 26.8885, 26.0719, 25.1334, 24.2125, 23.5376, 22.5383, 21.8396, 21.0384, 20.2942, 19.4746, 18.5545, 18.26, 17.2997, 16.7109, 15.9324, 15.2755, 14.764, 14.2358, 13.6728, 13.2606, 12.846, 12.2636, 11.722, 11.1491, 10.5952, 10.235, 9.87852, 9.48122, 9.17571, 8.90995, 8.81675, 8.62595, 8.59371, 8.52936, 8.58058, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 14.2584, 14.2584};
 
   if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma[cent] ) 
     return kTRUE;
@@ -858,14 +890,13 @@ Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int
 }
 
 //________________________________________________________________________
-Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t /*zdc*/, Float_t /*v0*/) const
+Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0) const
 {
 // Clean outliers
-  // Float_t val1 = 6350. - 0.26 * v0;
-  // Float_t val2 = 5580.;
-  // if ((zdc >  val1) || (zdc > val2)) 
-  //   return kTRUE;
-  // else 
+  Float_t val = 235000. - 9.5 * v0;
+  if (zdc >  val) 
+    return kTRUE;
+  else 
     return kFALSE;
 }
 
@@ -1160,7 +1191,19 @@ void AliCentralitySelectionTask::MyInitScaleFactorMC()
 // Initialize the MC scaling factors
   for (int i=0; i<(fHighRunN-fLowRunN); i++) fV0MScaleFactorMC[i] = 0.0;
   // scale factors determined from <V0 charge> on a run-by-run basis
-  fV0MScaleFactorMC[0] = 0.75108;
+  switch (fPass) {
+  case 1:
+    fV0MScaleFactorMC[0] = 0.75108;
+    break;
+  case 2:
+    fV0MScaleFactorMC[0] = 0.8;
+    break;
+  default:
+    AliError(Form("Unknown reconstruction pass (%d)! Setting MC scale in V0 to 1", fPass));
+    fV0MScaleFactorMC[0] = 1.0;
+    break;
+  }
+
   // set all missing values to the value of the run before it ....
   for (int i=0; i<=(fHighRunN-fLowRunN); i++) {    
     if (fV0MScaleFactorMC[i] == 0.0) {