]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliCentralitySelectionTask.cxx
including new Salvatore's patch
[u/mrichter/AliRoot.git] / ANALYSIS / AliCentralitySelectionTask.cxx
index 487a915811e73d2c3299445289a19b3a5713f2dc..ebf8a7641d1ba719a5d37e6fc0a8f9673184fa36 100644 (file)
@@ -37,6 +37,7 @@
 #include <iostream>
 
 #include "AliAnalysisManager.h"
+#include "AliHeader.h"
 #include "AliVEvent.h"
 #include "AliESD.h"
 #include "AliESDEvent.h"
 #include "AliESDInputHandler.h"
 #include "AliESDZDC.h"
 #include "AliESDFMD.h"
+#include "AliESDTZERO.h"
 #include "AliESDVZERO.h"
-#include "AliCentrality.h"
 #include "AliESDtrackCuts.h"
+#include "AliESDVertex.h"
+#include "AliCentrality.h"
+#include "AliOADBCentrality.h"
+#include "AliOADBContainer.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"
@@ -73,21 +79,50 @@ ClassImp(AliCentralitySelectionTask)
 //________________________________________________________________________
 AliCentralitySelectionTask::AliCentralitySelectionTask():
 AliAnalysisTaskSE(),
-  fDebug(0),
   fAnalysisInput("ESD"),
   fIsMCInput(kFALSE),
-  fFile(0),
-  fFile2(0),
   fCurrentRun(-1),
-  fRunNo(-1),
-  fLowRunN(0),
-  fHighRunN(0),
   fUseScaling(0),
   fUseCleaning(0),
+  fFillHistos(0),
+  fV0MScaleFactor(0),
+  fSPDScaleFactor(0),
+  fTPCScaleFactor(0),
+  fV0MScaleFactorMC(0),
+  fV0MSPDOutlierPar0(0),  
+  fV0MSPDOutlierPar1(0),  
+  fV0MTPCOutlierPar0(0),  
+  fV0MTPCOutlierPar1(0),  
+  fV0MSPDSigmaOutlierPar0(0),  
+  fV0MSPDSigmaOutlierPar1(0),  
+  fV0MSPDSigmaOutlierPar2(0),  
+  fV0MTPCSigmaOutlierPar0(0),  
+  fV0MTPCSigmaOutlierPar1(0),  
+  fV0MTPCSigmaOutlierPar2(0),                                                     
+  fV0MZDCOutlierPar0(0),           
+  fV0MZDCOutlierPar1(0),           
+  fV0MZDCEcalOutlierPar0(0),   
+  fV0MZDCEcalOutlierPar1(0),   
   fTrackCuts(0),
   fZVCut(10),
   fOutliersCut(5),
-  fQuality(0),
+  fQuality(999),
+  fIsSelected(0),
+  fMSL(0),
+  fMSH(0),
+  fMUL(0),
+  fMLL(0),
+  fEJE(0),
+  fEGA(0),
+  fPHS(0),
+  fCVHN(0),
+  fCVLN(0),
+  fCVHNbit(0),
+  fCVLNbit(0),
+  fCCENT(0),
+  fCSEMI(0),
+  fCCENTbit(0),
+  fCSEMIbit(0),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
@@ -108,6 +143,28 @@ AliAnalysisTaskSE(),
   fHtempZEMvsZDC(0),
   fOutputList(0),
   fHOutCentV0M     (0),
+  fHOutCentV0MCVHN(0),
+  fHOutCentV0MCVLN(0),
+  fHOutCentV0MCVHNinMB(0),
+  fHOutCentV0MCVLNinMB(0),
+  fHOutCentV0MCCENT(0),
+  fHOutCentV0MCSEMI(0),
+  fHOutCentV0MCCENTinMB(0),
+  fHOutCentV0MCSEMIinMB(0),
+  fHOutCentV0MMSL(0),
+  fHOutCentV0MMSH(0),
+  fHOutCentV0MMUL(0),
+  fHOutCentV0MMLL(0),
+  fHOutCentV0MEJE(0),
+  fHOutCentV0MEGA(0),
+  fHOutCentV0MPHS(0),
+  fHOutCentV0MMSLinMB(0),
+  fHOutCentV0MMSHinMB(0),
+  fHOutCentV0MMULinMB(0),
+  fHOutCentV0MMLLinMB(0),
+  fHOutCentV0MEJEinMB(0),
+  fHOutCentV0MEGAinMB(0),
+  fHOutCentV0MPHSinMB(0),
   fHOutCentFMD     (0),
   fHOutCentTRK     (0),
   fHOutCentTKL     (0),
@@ -119,8 +176,9 @@ AliAnalysisTaskSE(),
   fHOutCentV0MvsCentCL1(0),
   fHOutCentV0MvsCentTRK(0),
   fHOutCentTRKvsCentCL1(0),
+  fHOutCentV0MvsCentZDC(0),
   fHOutMultV0M(0),
-  fHOutMultV0R(0),
+  fHOutMultV0O(0),
   fHOutMultFMD(0),
   fHOutMultTRK(0),
   fHOutMultTKL(0),
@@ -130,51 +188,86 @@ AliAnalysisTaskSE(),
   fHOutMultZEMvsZDN(0),
   fHOutMultV0MvsZDC(0),
   fHOutMultZEMvsZDC(0),
+  fHOutMultZEMvsZDCw(0),
   fHOutMultV0MvsCL1(0),
   fHOutMultV0MvsTRK(0),
   fHOutMultTRKvsCL1(0),
-  fHOutCentV0M_qual1(0),
-  fHOutCentTRK_qual1(0),
-  fHOutCentCL1_qual1(0),
-  fHOutCentV0M_qual2(0),
-  fHOutCentTRK_qual2(0),
-  fHOutCentCL1_qual2(0),
+  fHOutMultV0MvsV0O(0),
+  fHOutMultV0OvsCL1(0),
+  fHOutMultV0OvsTRK(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)
+  fHOutVertex(0),
+  fHOutVertexT0(0)
 {   
   // Default constructor
   AliInfo("Centrality Selection enabled.");
-  fLowRunN =136851;
-  fHighRunN=139517;
-
-  for (Int_t i=0; i < 2667; i++) {
-    V0MScaleFactor[i]=0.0;
-    SPDScaleFactor[i]=0.0;
-    TPCScaleFactor[i]=0.0;
-    V0MScaleFactorMC[i]=0.0;
-  }
+
   fUseScaling=kTRUE;
   fUseCleaning=kTRUE;
+  fFillHistos=kFALSE;
+  fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO.,AliESDTZERO."
+    ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
 }   
 
 //________________________________________________________________________
 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   AliAnalysisTaskSE(name),
-  fDebug(0),
   fAnalysisInput("ESD"),
   fIsMCInput(kFALSE),
-  fFile(0),
-  fFile2(0),
   fCurrentRun(-1),
-  fRunNo(-1),
-  fLowRunN(0),
-  fHighRunN(0),
   fUseScaling(0),
   fUseCleaning(0),
+  fFillHistos(0),
+  fV0MScaleFactor(0),
+  fSPDScaleFactor(0),
+  fTPCScaleFactor(0),
+  fV0MScaleFactorMC(0),
+  fV0MSPDOutlierPar0(0),  
+  fV0MSPDOutlierPar1(0),  
+  fV0MTPCOutlierPar0(0),  
+  fV0MTPCOutlierPar1(0),  
+  fV0MSPDSigmaOutlierPar0(0),  
+  fV0MSPDSigmaOutlierPar1(0),  
+  fV0MSPDSigmaOutlierPar2(0),  
+  fV0MTPCSigmaOutlierPar0(0),  
+  fV0MTPCSigmaOutlierPar1(0),  
+  fV0MTPCSigmaOutlierPar2(0),
+  fV0MZDCOutlierPar0(0),           
+  fV0MZDCOutlierPar1(0),           
+  fV0MZDCEcalOutlierPar0(0),   
+  fV0MZDCEcalOutlierPar1(0),   
   fTrackCuts(0),
   fZVCut(10),
   fOutliersCut(5),
-  fQuality(0),
+  fQuality(999),
+  fIsSelected(0),
+  fMSL(0),
+  fMSH(0),
+  fMUL(0),
+  fMLL(0),
+  fEJE(0),
+  fEGA(0),
+  fPHS(0),
+  fCVHN(0),
+  fCVLN(0),
+  fCVHNbit(0),
+  fCVLNbit(0),
+  fCCENT(0),
+  fCSEMI(0),
+  fCCENTbit(0),
+  fCSEMIbit(0),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
@@ -195,6 +288,28 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fHtempZEMvsZDC(0),
   fOutputList(0),
   fHOutCentV0M     (0),
+  fHOutCentV0MCVHN(0),
+  fHOutCentV0MCVLN(0),
+  fHOutCentV0MCVHNinMB(0),
+  fHOutCentV0MCVLNinMB(0),
+  fHOutCentV0MCCENT(0),
+  fHOutCentV0MCSEMI(0),
+  fHOutCentV0MCCENTinMB(0),
+  fHOutCentV0MCSEMIinMB(0),
+  fHOutCentV0MMSL(0),
+  fHOutCentV0MMSH(0),
+  fHOutCentV0MMUL(0),
+  fHOutCentV0MMLL(0),
+  fHOutCentV0MEJE(0),
+  fHOutCentV0MEGA(0),
+  fHOutCentV0MPHS(0),
+  fHOutCentV0MMSLinMB(0),
+  fHOutCentV0MMSHinMB(0),
+  fHOutCentV0MMULinMB(0),
+  fHOutCentV0MMLLinMB(0),
+  fHOutCentV0MEJEinMB(0),
+  fHOutCentV0MEGAinMB(0),
+  fHOutCentV0MPHSinMB(0),
   fHOutCentFMD     (0),
   fHOutCentTRK     (0),
   fHOutCentTKL     (0),
@@ -206,8 +321,9 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fHOutCentV0MvsCentCL1(0),
   fHOutCentV0MvsCentTRK(0),
   fHOutCentTRKvsCentCL1(0),
+  fHOutCentV0MvsCentZDC(0),
   fHOutMultV0M(0),
-  fHOutMultV0R(0),
+  fHOutMultV0O(0),
   fHOutMultFMD(0),
   fHOutMultTRK(0),
   fHOutMultTKL(0),
@@ -217,32 +333,37 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fHOutMultZEMvsZDN(0),
   fHOutMultV0MvsZDC(0),
   fHOutMultZEMvsZDC(0),
+  fHOutMultZEMvsZDCw(0),
   fHOutMultV0MvsCL1(0),
   fHOutMultV0MvsTRK(0),
   fHOutMultTRKvsCL1(0),
-  fHOutCentV0M_qual1(0),
-  fHOutCentTRK_qual1(0),
-  fHOutCentCL1_qual1(0),
-  fHOutCentV0M_qual2(0),
-  fHOutCentTRK_qual2(0),
-  fHOutCentCL1_qual2(0),
+  fHOutMultV0MvsV0O(0),
+  fHOutMultV0OvsCL1(0),
+  fHOutMultV0OvsTRK(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)
+  fHOutVertex(0),
+  fHOutVertexT0(0)
 {
-    // Default constructor
-    fLowRunN =136851;
-    fHighRunN=139517;
-
+  // Default constructor
   AliInfo("Centrality Selection enabled.");
-  DefineOutput(1, TList::Class());
-  for (Int_t i=0; i<2667; i++) {
-    V0MScaleFactor[i]=0.0;
-    SPDScaleFactor[i]=0.0;
-    TPCScaleFactor[i]=0.0;
-    V0MScaleFactorMC[i]=0.0;
-  }
+  //DefineOutput(1, TList::Class());
   fUseScaling=kTRUE;
   fUseCleaning=kTRUE;
+  fFillHistos=kFALSE;
+  fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO.,AliESDTZERO."
+    ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
 }
 
 //________________________________________________________________________
@@ -258,21 +379,50 @@ AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentr
 //________________________________________________________________________
 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
   AliAnalysisTaskSE(ana),
-  fDebug(ana.fDebug),    
-  fAnalysisInput(ana.fDebug),
+  fAnalysisInput(ana.fAnalysisInput),
   fIsMCInput(ana.fIsMCInput),
-  fFile(ana.fFile),
-  fFile2(ana.fFile2),
   fCurrentRun(ana.fCurrentRun),
-  fRunNo(ana.fRunNo),
-  fLowRunN(ana.fLowRunN),
-  fHighRunN(ana.fHighRunN),
   fUseScaling(ana.fUseScaling),
   fUseCleaning(ana.fUseCleaning),
+  fFillHistos(ana.fFillHistos),
+  fV0MScaleFactor(ana.fV0MScaleFactor),
+  fSPDScaleFactor(ana.fSPDScaleFactor),
+  fTPCScaleFactor(ana.fTPCScaleFactor),
+  fV0MScaleFactorMC(ana.fV0MScaleFactorMC),
+  fV0MSPDOutlierPar0(ana.fV0MSPDOutlierPar0),  
+  fV0MSPDOutlierPar1(ana.fV0MSPDOutlierPar1),  
+  fV0MTPCOutlierPar0(ana.fV0MTPCOutlierPar0),  
+  fV0MTPCOutlierPar1(ana.fV0MTPCOutlierPar1),  
+  fV0MSPDSigmaOutlierPar0(ana.fV0MSPDSigmaOutlierPar0),  
+  fV0MSPDSigmaOutlierPar1(ana.fV0MSPDSigmaOutlierPar1),  
+  fV0MSPDSigmaOutlierPar2(ana.fV0MSPDSigmaOutlierPar2),  
+  fV0MTPCSigmaOutlierPar0(ana.fV0MTPCSigmaOutlierPar0),  
+  fV0MTPCSigmaOutlierPar1(ana.fV0MTPCSigmaOutlierPar1),  
+  fV0MTPCSigmaOutlierPar2(ana.fV0MTPCSigmaOutlierPar2), 
+  fV0MZDCOutlierPar0(ana.fV0MZDCOutlierPar0),      
+  fV0MZDCOutlierPar1(ana.fV0MZDCOutlierPar1),      
+  fV0MZDCEcalOutlierPar0(ana.fV0MZDCEcalOutlierPar0),   
+  fV0MZDCEcalOutlierPar1(ana.fV0MZDCEcalOutlierPar1),   
   fTrackCuts(ana.fTrackCuts),
   fZVCut(ana.fZVCut),
   fOutliersCut(ana.fOutliersCut),
   fQuality(ana.fQuality),
+  fIsSelected(ana.fIsSelected),
+  fMSL(ana.fMSL),
+  fMSH(ana.fMSH),
+  fMUL(ana.fMUL),
+  fMLL(ana.fMLL),
+  fEJE(ana.fEJE),
+  fEGA(ana.fEGA),
+  fPHS(ana.fPHS),
+  fCVHN(ana.fCVHN),
+  fCVLN(ana.fCVLN),
+  fCVHNbit(ana.fCVHNbit),
+  fCVLNbit(ana.fCVLNbit),
+  fCCENT(ana.fCCENT),
+  fCSEMI(ana.fCSEMI),
+  fCCENTbit(ana.fCCENTbit),
+  fCSEMIbit(ana.fCSEMIbit),
   fCentV0M(ana.fCentV0M),
   fCentFMD(ana.fCentFMD),
   fCentTRK(ana.fCentTRK),
@@ -293,6 +443,28 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
   fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
   fOutputList(ana.fOutputList),
   fHOutCentV0M     (ana.fHOutCentV0M     ),
+  fHOutCentV0MCVHN(ana.fHOutCentV0MCVHN),
+  fHOutCentV0MCVLN(ana.fHOutCentV0MCVLN),
+  fHOutCentV0MCVHNinMB(ana.fHOutCentV0MCVHNinMB),
+  fHOutCentV0MCVLNinMB(ana.fHOutCentV0MCVLNinMB),
+  fHOutCentV0MCCENT(ana.fHOutCentV0MCCENT),
+  fHOutCentV0MCSEMI(ana.fHOutCentV0MCSEMI),
+  fHOutCentV0MCCENTinMB(ana.fHOutCentV0MCCENTinMB),
+  fHOutCentV0MCSEMIinMB(ana.fHOutCentV0MCSEMIinMB),
+  fHOutCentV0MMSL(ana.fHOutCentV0MMSL),
+  fHOutCentV0MMSH(ana.fHOutCentV0MMSH),
+  fHOutCentV0MMUL(ana.fHOutCentV0MMUL),
+  fHOutCentV0MMLL(ana.fHOutCentV0MMLL),
+  fHOutCentV0MEJE(ana.fHOutCentV0MEJE),
+  fHOutCentV0MEGA(ana.fHOutCentV0MEGA),
+  fHOutCentV0MPHS(ana.fHOutCentV0MPHS),
+  fHOutCentV0MMSLinMB(ana.fHOutCentV0MMSLinMB),
+  fHOutCentV0MMSHinMB(ana.fHOutCentV0MMSHinMB),
+  fHOutCentV0MMULinMB(ana.fHOutCentV0MMULinMB),
+  fHOutCentV0MMLLinMB(ana.fHOutCentV0MMLLinMB),
+  fHOutCentV0MEJEinMB(ana.fHOutCentV0MEJEinMB),
+  fHOutCentV0MEGAinMB(ana.fHOutCentV0MEGAinMB),
+  fHOutCentV0MPHSinMB(ana.fHOutCentV0MPHSinMB),
   fHOutCentFMD     (ana.fHOutCentFMD     ),
   fHOutCentTRK     (ana.fHOutCentTRK     ),
   fHOutCentTKL     (ana.fHOutCentTKL     ),
@@ -304,8 +476,9 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
   fHOutCentV0MvsCentCL1(ana.fHOutCentV0MvsCentCL1),
   fHOutCentV0MvsCentTRK(ana.fHOutCentV0MvsCentTRK),
   fHOutCentTRKvsCentCL1(ana.fHOutCentTRKvsCentCL1),
+  fHOutCentV0MvsCentZDC(ana.fHOutCentV0MvsCentZDC),
   fHOutMultV0M(ana.fHOutMultV0M),
-  fHOutMultV0R(ana.fHOutMultV0R),
+  fHOutMultV0O(ana.fHOutMultV0O),
   fHOutMultFMD(ana.fHOutMultFMD),
   fHOutMultTRK(ana.fHOutMultTRK),
   fHOutMultTKL(ana.fHOutMultTKL),
@@ -315,28 +488,33 @@ 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),
-  fHOutCentV0M_qual1(ana.fHOutCentV0M_qual1),
-  fHOutCentTRK_qual1(ana.fHOutCentTRK_qual1),
-  fHOutCentCL1_qual1(ana.fHOutCentCL1_qual1),
-  fHOutCentV0M_qual2(ana.fHOutCentV0M_qual2),
-  fHOutCentTRK_qual2(ana.fHOutCentTRK_qual2),
-  fHOutCentCL1_qual2(ana.fHOutCentCL1_qual2),
+  fHOutMultV0MvsV0O(ana.fHOutMultV0MvsV0O),
+  fHOutMultV0OvsCL1(ana.fHOutMultV0OvsCL1),
+  fHOutMultV0OvsTRK(ana.fHOutMultV0OvsTRK),
+  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)
+  fHOutVertex(ana.fHOutVertex),
+  fHOutVertexT0(ana.fHOutVertexT0)
 {
   // Copy Constructor  
-    for (Int_t i=0; i<2667; i++) {
-       V0MScaleFactor[i]=0.0;
-       SPDScaleFactor[i]=0.0;
-       TPCScaleFactor[i]=0.0;
-       V0MScaleFactorMC[i]=0.0;
-    }
 
 }
+
 //________________________________________________________________________
 AliCentralitySelectionTask::~AliCentralitySelectionTask()
 {
@@ -352,89 +530,157 @@ void AliCentralitySelectionTask::UserCreateOutputObjects()
   if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
   AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
 
-  fOutputList = new TList();
-  fOutputList->SetOwner();
-  fHOutCentV0M     = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",501,0,101);
-  fHOutCentFMD     = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",501,0,101);
-  fHOutCentTRK     = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",501,0,101);
-  fHOutCentTKL     = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",501,0,101);
-  fHOutCentCL0     = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",501,0,101);
-  fHOutCentCL1     = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",501,0,101);
-  fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",501,0,101);
-  fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",501,0,101);
-  fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",501,0,101);
-  fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0 vs Cent SPD",501,0,101,501,0,101);
-  fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0 vs Cent TPC",501,0,101,501,0,101);
-  fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC vs Cent SPD",501,0,101,501,0,101);
-
-  fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000);
-  fHOutMultV0R = new TH1F("fHOutMultV0R","fHOutMultV0R; Multiplicity V0",25000,0,25000);
-  fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
-  fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
-  fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
-  fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
-  fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
-  fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,25000,500,0,180000);
-  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);
-  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);
-
-  fHOutCentV0M_qual1 = new TH1F("fHOutCentV0M_qual1","fHOutCentV0M_qual1; Centrality V0",501,0,100);
-  fHOutCentTRK_qual1 = new TH1F("fHOutCentTRK_qual1","fHOutCentTRK_qual1; Centrality TPC",501,0,100);
-  fHOutCentCL1_qual1 = new TH1F("fHOutCentCL1_qual1","fHOutCentCL1_qual1; Centrality SPD outer",501,0,100);
-
-  fHOutCentV0M_qual2 = new TH1F("fHOutCentV0M_qual2","fHOutCentV0M_qual2; Centrality V0",101,-0.1,100.1);
-  fHOutCentTRK_qual2 = new TH1F("fHOutCentTRK_qual2","fHOutCentTRK_qual2; Centrality TPC",101,-0.1,100.1);
-  fHOutCentCL1_qual2 = new TH1F("fHOutCentCL1_qual2","fHOutCentCL1_qual2; Centrality SPD outer",101,-0.1,100.1);
-
-  fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 10,-0.5,9.5);
-  fHOutVertex  = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
-
-  fOutputList->Add(  fHOutCentV0M     );
-  fOutputList->Add(  fHOutCentFMD     );
-  fOutputList->Add(  fHOutCentTRK     );
-  fOutputList->Add(  fHOutCentTKL     );
-  fOutputList->Add(  fHOutCentCL0     );
-  fOutputList->Add(  fHOutCentCL1     );
-  fOutputList->Add(  fHOutCentV0MvsFMD);
-  fOutputList->Add(  fHOutCentTKLvsV0M);
-  fOutputList->Add(  fHOutCentZEMvsZDC);
-  fOutputList->Add(  fHOutCentV0MvsCentCL1);
-  fOutputList->Add(  fHOutCentV0MvsCentTRK);
-  fOutputList->Add(  fHOutCentTRKvsCentCL1);
-  fOutputList->Add(  fHOutMultV0M); 
-  fOutputList->Add(  fHOutMultV0R); 
-  fOutputList->Add(  fHOutMultFMD); 
-  fOutputList->Add(  fHOutMultTRK); 
-  fOutputList->Add(  fHOutMultTKL); 
-  fOutputList->Add(  fHOutMultCL0); 
-  fOutputList->Add(  fHOutMultCL1); 
-  fOutputList->Add(  fHOutMultV0MvsZDN);
-  fOutputList->Add(  fHOutMultZEMvsZDN);
-  fOutputList->Add(  fHOutMultV0MvsZDC);
-  fOutputList->Add(  fHOutMultZEMvsZDC);
-  fOutputList->Add(  fHOutMultV0MvsCL1);
-  fOutputList->Add(  fHOutMultV0MvsTRK);
-  fOutputList->Add(  fHOutMultTRKvsCL1);
-  fOutputList->Add(  fHOutCentV0M_qual1 );
-  fOutputList->Add(  fHOutCentTRK_qual1 );
-  fOutputList->Add(  fHOutCentCL1_qual1 );                   
-  fOutputList->Add(  fHOutCentV0M_qual2 );
-  fOutputList->Add(  fHOutCentTRK_qual2 );
-  fOutputList->Add(  fHOutCentCL1_qual2 );
-  fOutputList->Add(  fHOutQuality );
-  fOutputList->Add(  fHOutVertex );
-
-
+  if (fFillHistos) {    
+    fOutputList = new TList();
+    fOutputList->SetOwner();
+    fHOutCentV0M     = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",505,0,101);
+    fHOutCentV0MCVHN= new TH1F("fHOutCentV0M_CVHN","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
+    fHOutCentV0MCVLN= new TH1F("fHOutCentV0M_CVLN","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
+    fHOutCentV0MCVHNinMB= new TH1F("fHOutCentV0M_CVHNinMB","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
+    fHOutCentV0MCVLNinMB= new TH1F("fHOutCentV0M_CVLNinMB","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
+    fHOutCentV0MCCENT= new TH1F("fHOutCentV0M_CCENT","fHOutCentV0M_CCENT; Centrality V0",505,0,101);
+    fHOutCentV0MCSEMI= new TH1F("fHOutCentV0M_CSEMI","fHOutCentV0M_CSEMI; Centrality V0",505,0,101);
+    fHOutCentV0MCCENTinMB= new TH1F("fHOutCentV0M_CCENTinMB","fHOutCentV0M_CCENT; Centrality V0",505,0,101);
+    fHOutCentV0MCSEMIinMB= new TH1F("fHOutCentV0M_CSEMIinMB","fHOutCentV0M_CSEMI; Centrality V0",505,0,101);
+    fHOutCentV0MMSL= new TH1F("fHOutCentV0M_MSL","fHOutCentV0M_MSL; Centrality V0",505,0,101);
+    fHOutCentV0MMSH= new TH1F("fHOutCentV0M_MSH","fHOutCentV0M_MSH; Centrality V0",505,0,101);
+    fHOutCentV0MMUL= new TH1F("fHOutCentV0M_MUL","fHOutCentV0M_MUL; Centrality V0",505,0,101);
+    fHOutCentV0MMLL= new TH1F("fHOutCentV0M_MLL","fHOutCentV0M_MLL; Centrality V0",505,0,101);
+    fHOutCentV0MEJE= new TH1F("fHOutCentV0M_EJE","fHOutCentV0M_EJE; Centrality V0",505,0,101);
+    fHOutCentV0MEGA= new TH1F("fHOutCentV0M_EGA","fHOutCentV0M_EGA; Centrality V0",505,0,101);
+    fHOutCentV0MPHS= new TH1F("fHOutCentV0M_PHS","fHOutCentV0M_PHS; Centrality V0",505,0,101);
+    fHOutCentV0MMSLinMB= new TH1F("fHOutCentV0M_MSLinMB","fHOutCentV0M_MSLinMB; Centrality V0",505,0,101);
+    fHOutCentV0MMSHinMB= new TH1F("fHOutCentV0M_MSHinMB","fHOutCentV0M_MSHinMB; Centrality V0",505,0,101);
+    fHOutCentV0MMULinMB= new TH1F("fHOutCentV0M_MULinMB","fHOutCentV0M_MULinMB; Centrality V0",505,0,101);
+    fHOutCentV0MMLLinMB= new TH1F("fHOutCentV0M_MLLinMB","fHOutCentV0M_MLLinMB; Centrality V0",505,0,101);
+    fHOutCentV0MEJEinMB= new TH1F("fHOutCentV0M_EJEinMB","fHOutCentV0M_EJEinMB; Centrality V0",505,0,101);
+    fHOutCentV0MEGAinMB= new TH1F("fHOutCentV0M_EGAinMB","fHOutCentV0M_EGAinMB; Centrality V0",505,0,101);
+    fHOutCentV0MPHSinMB= new TH1F("fHOutCentV0M_PHSinMB","fHOutCentV0M_PHSinMB; Centrality V0",505,0,101);
+    fHOutCentFMD     = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",505,0,101);
+    fHOutCentTRK     = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",505,0,101);
+    fHOutCentTKL     = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",505,0,101);
+    fHOutCentCL0     = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",505,0,101);
+    fHOutCentCL1     = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",505,0,101);
+    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; 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,30000);
+    fHOutMultV0O = new TH1F("fHOutMultV0O","fHOutMultV0O; Multiplicity V0",40000,0,40000);
+    fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
+    fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
+    fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
+    fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
+    fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
+    fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,30000,500,0,180000);
+    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,30000,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,30000,700,0,7000);
+    fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
+    fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
+    fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,40000);
+    fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",500,0,40000,700,0,7000);
+    fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",500,0,40000,400,0,4000);
+    fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,30000);
+    fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,30000,700,0,7000);
+    fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
+    
+    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", 100,-0.5,99.5);
+    fHOutVertex  = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
+    fHOutVertexT0  = new TH1F("fHOutVertexT0", "fHOutVertexT0", 100,-20,20);
+  
+    fOutputList->Add(  fHOutCentV0M     );
+    fOutputList->Add(  fHOutCentV0MCVHN);
+    fOutputList->Add(  fHOutCentV0MCVLN);
+    fOutputList->Add(  fHOutCentV0MCVHNinMB);
+    fOutputList->Add(  fHOutCentV0MCVLNinMB);
+    fOutputList->Add(  fHOutCentV0MCCENT);
+    fOutputList->Add(  fHOutCentV0MCSEMI);
+    fOutputList->Add(  fHOutCentV0MCCENTinMB);
+    fOutputList->Add(  fHOutCentV0MCSEMIinMB);
+    fOutputList->Add(  fHOutCentV0MMSL    );
+    fOutputList->Add(  fHOutCentV0MMSH    );
+    fOutputList->Add(  fHOutCentV0MMUL    );
+    fOutputList->Add(  fHOutCentV0MMLL    );
+    fOutputList->Add(  fHOutCentV0MEJE    );
+    fOutputList->Add(  fHOutCentV0MEGA    );
+    fOutputList->Add(  fHOutCentV0MPHS   );
+    fOutputList->Add(  fHOutCentV0MMSLinMB);
+    fOutputList->Add(  fHOutCentV0MMSHinMB);
+    fOutputList->Add(  fHOutCentV0MMULinMB);
+    fOutputList->Add(  fHOutCentV0MMLLinMB);
+    fOutputList->Add(  fHOutCentV0MEJEinMB);
+    fOutputList->Add(  fHOutCentV0MEGAinMB);
+    fOutputList->Add(  fHOutCentV0MPHSinMB);
+    fOutputList->Add(  fHOutCentFMD     );
+    fOutputList->Add(  fHOutCentTRK     );
+    fOutputList->Add(  fHOutCentTKL     );
+    fOutputList->Add(  fHOutCentCL0     );
+    fOutputList->Add(  fHOutCentCL1     );
+    fOutputList->Add(  fHOutCentV0MvsFMD);
+    fOutputList->Add(  fHOutCentTKLvsV0M);
+    fOutputList->Add(  fHOutCentZEMvsZDC);
+    fOutputList->Add(  fHOutCentV0MvsCentCL1);
+    fOutputList->Add(  fHOutCentV0MvsCentTRK);
+    fOutputList->Add(  fHOutCentTRKvsCentCL1);
+    fOutputList->Add(  fHOutCentV0MvsCentZDC);
+    fOutputList->Add(  fHOutMultV0M); 
+    fOutputList->Add(  fHOutMultV0O); 
+    fOutputList->Add(  fHOutMultFMD); 
+    fOutputList->Add(  fHOutMultTRK); 
+    fOutputList->Add(  fHOutMultTKL); 
+    fOutputList->Add(  fHOutMultCL0); 
+    fOutputList->Add(  fHOutMultCL1); 
+    fOutputList->Add(  fHOutMultV0MvsZDN);
+    fOutputList->Add(  fHOutMultZEMvsZDN);
+    fOutputList->Add(  fHOutMultV0MvsZDC);
+    fOutputList->Add(  fHOutMultZEMvsZDC);
+    fOutputList->Add(  fHOutMultZEMvsZDCw);
+    fOutputList->Add(  fHOutMultV0MvsCL1);
+    fOutputList->Add(  fHOutMultV0MvsTRK);
+    fOutputList->Add(  fHOutMultTRKvsCL1);
+    fOutputList->Add(  fHOutMultV0MvsV0O);
+    fOutputList->Add(  fHOutMultV0OvsCL1);
+    fOutputList->Add(  fHOutMultV0OvsTRK);
+    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 );
+    fOutputList->Add(  fHOutVertexT0 );
+  
+    PostData(1, fOutputList); 
+  }
+  
   fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
-
-  PostData(1, fOutputList); 
-
-  MyInitScaleFactor();
-  if (fIsMCInput) MyInitScaleFactorMC();
 }
 
 //________________________________________________________________________
@@ -442,7 +688,7 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
 { 
   // Execute analysis for current event:
   if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
-  
+
   Float_t  zncEnergy = 0.;          //  ZNC Energy
   Float_t  zpcEnergy = 0.;          //  ZPC Energy
   Float_t  znaEnergy = 0.;          //  ZNA Energy
@@ -459,44 +705,114 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
 
   Float_t  multV0A  = 0;            //  multiplicity from V0 reco side A
   Float_t  multV0C  = 0;            //  multiplicity from V0 reco side C
+  Short_t  multV0AOnline  = 0;      //  multiplicity from V0 reco side A
+  Short_t  multV0COnline  = 0;      //  multiplicity from V0 reco side C
+  Float_t  v0Corr = 0;               // corrected V0 multiplicity (used for MC)
+
   Float_t  multFMDA = 0;            //  multiplicity from FMD on detector A
   Float_t  multFMDC = 0;            //  multiplicity from FMD on detector C
 
-  Short_t v0Corr = 0;               // corrected V0 multiplicity
-  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
+
+  Float_t zvtxT0 =0;                // z-vertex T0
+
+
   AliCentrality *esdCent = 0;
 
   if(fAnalysisInput.CompareTo("ESD")==0){
-
+  
     AliVEvent* event = InputEvent();
     AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
     if (!esd) {
-       AliError("No ESD Event");
-       return;
+      AliError("No ESD Event");
+      return;
     }
+  
+    LoadBranches();
     
-    if (fRunNo<=0) {
-      if (SetupRun(esd)<0)
-         AliFatal("Centrality File not available for this run");
+    if (SetupRun(esd)<0) {
+      AliError("Centrality File not available for this run");
+      return;
     }
-
+    
     esdCent = esd->GetCentrality();
 
     // ***** V0 info    
     AliESDVZERO* esdV0 = esd->GetVZEROData();
+    if (!esdV0)
+      {
+       AliError("AliESDVZERO not available");
+       return;
+      }
     multV0A=esdV0->GetMTotV0A();
     multV0C=esdV0->GetMTotV0C();
+    v0Corr = multV0A+multV0C;
+
+    multV0AOnline=esdV0->GetTriggerChargeA(); 
+    multV0COnline=esdV0->GetTriggerChargeC(); 
+
+    // ***** T0 info    
+    const AliESDTZERO* esdT0 = esd->GetESDTZERO();
+    if (!esdT0)
+      {
+       AliError("AliESDTZERO not available");
+       return;
+      }
+    Int_t trig=esdT0->GetT0Trig();
+    Bool_t kT0BB = kFALSE;    
+    if(trig&1) kT0BB=kTRUE;
+    zvtxT0=esdT0->GetT0zVertex();
+
 
-    Float_t v0CorrR;
-    v0Corr = (Short_t)AliESDUtils::GetCorrV0(esd,v0CorrR);
-    v0CorrResc = (Short_t)v0CorrR;
+    // ***** Trigger info    
+    fIsSelected = ((esdV0->GetV0ADecision()==1) && (esdV0->GetV0CDecision()==1));
+    TString trigStr(esd->GetFiredTriggerClasses());
+    
+    fCVHN=kFALSE; fCVLN=kFALSE; fCCENT=kFALSE; fCSEMI=kFALSE; 
+    fMSL=kFALSE;  fMSH=kFALSE;  fMUL=kFALSE;   fMLL=kFALSE;
+    fEJE=kFALSE;  fEGA=kFALSE;  fPHS=kFALSE;
+
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CVHN")) && (fIsSelected)) 
+      fCVHN=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CVLN")) && (fIsSelected))
+      fCVLN=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CCENT")) && (fIsSelected)) 
+      fCCENT=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CSEMI")) && (fIsSelected))
+      fCSEMI=kTRUE;
+    
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MSL")) && (fIsSelected))
+      fMSL=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MSH")) && (fIsSelected))
+      fMSH=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MUL")) && (fIsSelected))
+      fMUL=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MLL")) && (fIsSelected))
+      fMLL=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1EJE")) && (fIsSelected))
+      fEJE=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1EGA")) && (fIsSelected))
+      fEGA=kTRUE;
+    if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1PHS")) && (fIsSelected))
+      fPHS=kTRUE;
+
+    fCVHNbit=kFALSE;    fCVLNbit=kFALSE;       fCCENTbit=kFALSE;    fCSEMIbit=kFALSE; 
+    if (esdV0->GetTriggerBits() & (1<<8)) 
+      fCVHNbit=kTRUE;
+    if (esdV0->GetTriggerBits() & (1<<6)) 
+      fCVLNbit=kTRUE;
+    
+    if (kT0BB && fCVHNbit)
+      fCCENTbit=kTRUE;
+    if (kT0BB && fCVLNbit)
+      fCSEMIbit=kTRUE;
 
+    
     // ***** Vertex Info
     const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
     zvtx        = vtxESD->GetZ(); 
+    zvtxNcont   = vtxESD->GetNContributors();
 
     // ***** CB info (tracklets, clusters, chips)
     //nTracks    = event->GetNumberOfTracks();     
@@ -521,35 +837,35 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     Float_t totalMultA = 0;
     Float_t totalMultC = 0;
     const Float_t fFMDLowCut = 0.4;
-    
+  
     for(UShort_t det=1;det<=3;det++) {
       Int_t nRings = (det==1 ? 1 : 2);
       for (UShort_t ir = 0; ir < nRings; ir++) {         
-       Char_t   ring = (ir == 0 ? 'I' : 'O');
-       UShort_t nsec = (ir == 0 ? 20  : 40);
-       UShort_t nstr = (ir == 0 ? 512 : 256);
-       for(UShort_t sec =0; sec < nsec;  sec++)  {
-         for(UShort_t strip = 0; strip < nstr; strip++) {
+       Char_t   ring = (ir == 0 ? 'I' : 'O');
+       UShort_t nsec = (ir == 0 ? 20  : 40);
+       UShort_t nstr = (ir == 0 ? 512 : 256);
+       for(UShort_t sec =0; sec < nsec;  sec++)  {
+         for(UShort_t strip = 0; strip < nstr; strip++) {
            
-           Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
-           if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
+           Float_t fmdMult = fmd->Multiplicity(det,ring,sec,strip);
+           if(fmdMult == 0 || fmdMult == AliESDFMD::kInvalidMult) continue;
            
-           Float_t nParticles=0;
+           Float_t nParticles=0;
            
-           if(FMDmult > fFMDLowCut) {
-             nParticles = 1.;
-           }
+           if(fmdMult > fFMDLowCut) {
+             nParticles = 1.;
+           }
            
-           if (det<3) totalMultA = totalMultA + nParticles;
-           else totalMultC = totalMultC + nParticles;
+           if (det<3) totalMultA = totalMultA + nParticles;
+           else totalMultC = totalMultC + nParticles;
            
-         }
-       }
+         }
+       }
       }
     }
     multFMDA = totalMultA;
     multFMDC = totalMultC;
-    
+  
     // ***** ZDC info
     AliESDZDC *esdZDC = esd->GetESDZDC();
     zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
@@ -566,8 +882,9 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     }
     zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
     zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
-  
+    
   }   
+
   else if(fAnalysisInput.CompareTo("AOD")==0){
     //AliAODEvent *aod =  dynamic_cast<AliAODEvent*> (InputEvent());
     // to be implemented
@@ -575,22 +892,16 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     return;
   } 
 
-
-  // ***** Scaling
   // ***** Scaling for MC
   if (fIsMCInput) {
     fUseScaling=kFALSE;
-    Float_t temp_scalefactorV0M = MyGetScaleFactorMC(fCurrentRun);
-    v0Corr  = Short_t((multV0A+multV0C)  * temp_scalefactorV0M);
+    v0Corr  = Short_t((multV0A+multV0C)  * fV0MScaleFactorMC);
   }
-  // ***** Scaling for Data
+  // ***** Scaling for Data 
   if (fUseScaling) {
-    Float_t temp_scalefactorV0M = MyGetScaleFactor(fCurrentRun,0);
-    Float_t temp_scalefactorSPD = MyGetScaleFactor(fCurrentRun,1);
-    Float_t temp_scalefactorTPC = MyGetScaleFactor(fCurrentRun,2);
-    v0Corr  = Short_t(v0Corr / temp_scalefactorV0M);
-    spdCorr = spdCorr / temp_scalefactorSPD;
-    nTracks = Int_t(nTracks / temp_scalefactorTPC);
+    v0Corr  = Short_t(v0Corr /   fV0MScaleFactor);
+    spdCorr = spdCorr / fSPDScaleFactor;
+    nTracks = Int_t(nTracks /   fTPCScaleFactor);
   }
 
   // ***** Centrality Selection
@@ -600,156 +911,140 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
   if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
   if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
   if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
-  
+
   if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
   if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
   if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
 
+
   // ***** Cleaning
   if (fUseCleaning) {
-      fQuality=0;
-      fZVCut=10;
-      fOutliersCut=6;
-      
-      // ***** vertex
-      if (TMath::Abs(zvtx)>fZVCut) fQuality += 1;   
+    fQuality=0;
+    
+    // ***** vertex
+    if (TMath::Abs(zvtx)>fZVCut || zvtxNcont<1) fQuality += 1;   
 
-      // ***** outliers
+    // ***** outliers, skip in case of MC input
+    if (!fIsMCInput) {
       // **** V0 vs SPD
       if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality  += 2;
       // ***** V0 vs TPC
       if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality  += 4;
       // ***** V0 vs ZDC
-       if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
-          (zdcEnergyCal==kFALSE) && !(fIsMCInput)) fQuality  += 8;
-       if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
-          ((zdcEnergyCal==kTRUE) || (fIsMCInput))) fQuality  += 8;
+      if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
+         (zdcEnergyCal==kFALSE) ) fQuality  += 8;
+      if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
+         (zdcEnergyCal==kTRUE) ) fQuality  += 8;
+    }
   } else {
-      fQuality = 0;
+    fQuality = 0;
   }
 
-        
+      
   if (esdCent) {
-      esdCent->SetQuality(fQuality);
-      esdCent->SetCentralityV0M(fCentV0M);
-      esdCent->SetCentralityFMD(fCentFMD);
-      esdCent->SetCentralityTRK(fCentTRK);
-      esdCent->SetCentralityTKL(fCentTKL);
-      esdCent->SetCentralityCL0(fCentCL0);
-      esdCent->SetCentralityCL1(fCentCL1);
-      esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
-      esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
-      esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
+    esdCent->SetQuality(fQuality);
+    esdCent->SetCentralityV0M(fCentV0M);
+    esdCent->SetCentralityFMD(fCentFMD);
+    esdCent->SetCentralityTRK(fCentTRK);
+    esdCent->SetCentralityTKL(fCentTKL);
+    esdCent->SetCentralityCL0(fCentCL0);
+    esdCent->SetCentralityCL1(fCentCL1);
+    esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
+    esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
+    esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
   }
 
-  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);
-    fHOutCentFMD->Fill(fCentFMD);
-    fHOutCentTRK->Fill(fCentTRK);
-    fHOutCentTKL->Fill(fCentTKL);
-    fHOutCentCL0->Fill(fCentCL0);
-    fHOutCentCL1->Fill(fCentCL1);
-    fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
-    fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
-    fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
-    fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
-    fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
-    fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
-    fHOutMultV0M->Fill(v0Corr);
-    fHOutMultV0R->Fill(multV0A+multV0C);
-    fHOutMultFMD->Fill((multFMDA+multFMDC));
-    fHOutMultTRK->Fill(nTracks);
-    fHOutMultTKL->Fill(nTracklets);
-    fHOutMultCL0->Fill(nClusters[0]);
-    fHOutMultCL1->Fill(spdCorr);
-    fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
-  } else if (fQuality ==1) {
-    fHOutCentV0M_qual1->Fill(fCentV0M);
-    fHOutCentTRK_qual1->Fill(fCentTRK);
-    fHOutCentCL1_qual1->Fill(fCentCL1);
-  } else {
-    fHOutCentV0M_qual2->Fill(fCentV0M);
-    fHOutCentTRK_qual2->Fill(fCentTRK);
-    fHOutCentCL1_qual2->Fill(fCentCL1);
+  // filling QA histograms
+  if (fFillHistos) {    
+    if (fCVHN)   fHOutCentV0MCVHN->Fill(fCentV0M);
+    if (fCVLN)   fHOutCentV0MCVLN->Fill(fCentV0M);
+    if (fCCENT)  fHOutCentV0MCCENT->Fill(fCentV0M);
+    if (fCSEMI)  fHOutCentV0MCSEMI->Fill(fCentV0M);
+    if (fMSL) fHOutCentV0MMSL->Fill(fCentV0M);
+    if (fMSH) fHOutCentV0MMSH->Fill(fCentV0M);
+    if (fMUL) fHOutCentV0MMUL->Fill(fCentV0M);
+    if (fMLL) fHOutCentV0MMLL->Fill(fCentV0M);
+    if (fEJE) fHOutCentV0MEJE->Fill(fCentV0M);
+    if (fEGA) fHOutCentV0MEGA->Fill(fCentV0M);
+    if (fPHS) fHOutCentV0MPHS->Fill(fCentV0M);
+
+    if (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB) { // fill the QA histograms only for MB events!
+      fHOutQuality->Fill(fQuality);
+      fHOutVertex->Fill(zvtx);
+      fHOutVertexT0->Fill(zvtxT0);
+      
+      if (fQuality==0) {  
+       fHOutCentV0M->Fill(fCentV0M);
+       
+       if (fCVHNbit)  fHOutCentV0MCVHNinMB->Fill(fCentV0M);
+       if (fCVLNbit)  fHOutCentV0MCVLNinMB->Fill(fCentV0M);
+       if (fCCENTbit) fHOutCentV0MCCENTinMB->Fill(fCentV0M);
+       if (fCSEMIbit) fHOutCentV0MCSEMIinMB->Fill(fCentV0M);
+       if (fMSL) fHOutCentV0MMSLinMB->Fill(fCentV0M);
+       if (fMSH) fHOutCentV0MMSHinMB->Fill(fCentV0M);
+       if (fMUL) fHOutCentV0MMULinMB->Fill(fCentV0M);
+       if (fMLL) fHOutCentV0MMLLinMB->Fill(fCentV0M);
+       if (fEJE) fHOutCentV0MEJEinMB->Fill(fCentV0M);
+       if (fEGA) fHOutCentV0MEGAinMB->Fill(fCentV0M);
+       if (fPHS) fHOutCentV0MPHSinMB->Fill(fCentV0M);
+       
+       
+       fHOutCentFMD->Fill(fCentFMD);
+       fHOutCentTRK->Fill(fCentTRK);
+       fHOutCentTKL->Fill(fCentTKL);
+       fHOutCentCL0->Fill(fCentCL0);
+       fHOutCentCL1->Fill(fCentCL1);
+       fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
+       fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
+       fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
+       fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
+       fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
+       fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
+       fHOutCentV0MvsCentZDC->Fill(fCentV0M,fCentZEMvsZDC);
+       fHOutMultV0M->Fill(multV0A+multV0C);
+       fHOutMultV0O->Fill(multV0AOnline+multV0COnline);
+       fHOutMultFMD->Fill(multFMDA+multFMDC);
+       fHOutMultTRK->Fill(nTracks);
+       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);
+       fHOutMultV0MvsV0O->Fill(v0Corr,(multV0AOnline+multV0COnline));
+       fHOutMultV0OvsCL1->Fill((multV0AOnline+multV0COnline),spdCorr);
+       fHOutMultV0OvsTRK->Fill((multV0AOnline+multV0COnline),nTracks);
+      } 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); 
   }
-
-  PostData(1, fOutputList); 
 }
-
-//________________________________________________________________________
-void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename) 
-{
-  //  Read centrality histograms
-  TDirectory *owd = gDirectory;
-  // Check if the file is present
-  TString path = gSystem->ExpandPathName(fCentfilename.Data());
-  if (gSystem->AccessPathName(path)) {
-     AliError(Form("File %s does not exist", path.Data()));
-     return;
-  }
-  fFile  = TFile::Open(fCentfilename);
-  owd->cd();
-  fHtempV0M  = (TH1F*) (fFile->Get("hmultV0_percentile"));
-  fHtempFMD  = (TH1F*) (fFile->Get("hmultFMD_percentile"));
-  fHtempTRK  = (TH1F*) (fFile->Get("hNtracks_percentile"));
-  fHtempTKL  = (TH1F*) (fFile->Get("hNtracklets_percentile"));
-  fHtempCL0  = (TH1F*) (fFile->Get("hNclusters0_percentile"));
-  fHtempCL1  = (TH1F*) (fFile->Get("hNclusters1_percentile"));
-
-  if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
-  if (!fHtempFMD) AliWarning(Form("Calibration for FMD does not exist in %s", path.Data()));
-  if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
-  if (!fHtempTKL) AliWarning(Form("Calibration for TKL does not exist in %s", path.Data()));
-  if (!fHtempCL0) AliWarning(Form("Calibration for CL0 does not exist in %s", path.Data()));
-  if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
-  
-  owd->cd();
-}  
-
-//________________________________________________________________________
-void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2) 
-{
-  //  Read centrality histograms
-  TDirectory *owd = gDirectory;
-  TString path = gSystem->ExpandPathName(fCentfilename2.Data());
-  if (gSystem->AccessPathName(path)) {
-     AliError(Form("File %s does not exist", path.Data()));
-     return;
-  }   
-  fFile2  = TFile::Open(fCentfilename2);
-  owd->cd();
-  fHtempV0MvsFMD =  (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
-  fHtempTKLvsV0M  = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
-  fHtempZEMvsZDC  = (TH2F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
-
-  if (!fHtempV0MvsFMD) AliWarning(Form("Calibration for V0MvsFMD does not exist in %s", path.Data()));
-  if (!fHtempTKLvsV0M) AliWarning(Form("Calibration for TKLvsV0M does not exist in %s", path.Data()));
-  if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
-  
-  owd->cd();
-}
-
 //________________________________________________________________________
 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
 {
   // Terminate analysis
-  if (fFile && fFile->IsOpen())
-    fFile->Close();  
-  if (fFile2 && fFile2->IsOpen())
-    fFile2->Close();  
 }
 //________________________________________________________________________
-Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
+Int_t AliCentralitySelectionTask::SetupRun(const AliESDEvent* const esd)
 {
   // Setup files for run
 
@@ -761,48 +1056,78 @@ Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
     return 0;
   else
     fCurrentRun = esd->GetRunNumber();
-  
-  AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
 
-  // CHANGE HERE FOR RUN RANGES
-  if ( fCurrentRun <= 137165 ) fRunNo = 137161;
-  else fRunNo = 137366;
-  // CHANGE HERE FOR RUN RANGES
-  
-  TString fileName(Form("%s/COMMON/CENTRALITY/data/AliCentralityBy1D_%d.root", AliAnalysisManager::GetOADBPath(), fRunNo));
-  TString fileName2(Form("%s/COMMON/CENTRALITY/data/AliCentralityByFunction_%d.root", AliAnalysisManager::GetOADBPath(), fRunNo));
+  TString fileName =(Form("%s/COMMON/CENTRALITY/data/centrality.root", AliAnalysisManager::GetOADBPath()));
+  AliInfo(Form("Setup Centrality Selection for run %d with file %s\n",fCurrentRun,fileName.Data()));
+
+  AliOADBContainer *con = new AliOADBContainer("OADB");
+  con->InitFromFile(fileName,"Centrality");
+
+  AliOADBCentrality*  centOADB = 0;
+  centOADB = (AliOADBCentrality*)(con->GetObject(fCurrentRun));
+  if (!centOADB) {
+    AliWarning(Form("Centrality OADB does not exist for run %d, using Default \n",fCurrentRun ));
+    centOADB  = (AliOADBCentrality*)(con->GetDefaultObject("oadbDefault"));
+  }
+
+  // modes
+  fUseScaling   = centOADB->UseScaling();
+  fUseCleaning  = centOADB->UseCleaning();
+
+  // cuts
+  fZVCut        = centOADB->ZVCut();
+  fOutliersCut  = centOADB->OutliersCut(); 
+
+  // centrality histos
+  fHtempV0M       = centOADB->V0hist(); 
+  fHtempTRK       = centOADB->TPChist();
+  fHtempCL1       = centOADB->SPDhist();
+  fHtempZEMvsZDC  = centOADB->ZEMvsZDChist();
   
-  AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data()));
-  ReadCentralityHistos(fileName.Data());
-  ReadCentralityHistos2(fileName2.Data());
-  if (!fFile && !fFile2) {
-     AliFatal(Form("Run %d not known to centrality selection!", fCurrentRun));       
-     return -1;
-  }   
+  TString path = gSystem->ExpandPathName(fileName.Data());
+  if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
+  if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
+  if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
+  if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
+
+  // scale factors
+  fV0MScaleFactor    = centOADB->V0MScaleFactor();
+  fSPDScaleFactor    = centOADB->SPDScaleFactor();
+  fTPCScaleFactor    = centOADB->TPCScaleFactor();
+  fV0MScaleFactorMC  = centOADB->V0MScaleFactorMC();
+
+  // outliers parameters
+  fV0MSPDOutlierPar0 = centOADB->V0MSPDOutlierPar0();      
+  fV0MSPDOutlierPar1 = centOADB->V0MSPDOutlierPar1();     
+  fV0MTPCOutlierPar0 = centOADB->V0MTPCOutlierPar0();      
+  fV0MTPCOutlierPar1 = centOADB->V0MTPCOutlierPar1();     
+                                                  
+  fV0MSPDSigmaOutlierPar0 = centOADB->V0MSPDSigmaOutlierPar0(); 
+  fV0MSPDSigmaOutlierPar1 = centOADB->V0MSPDSigmaOutlierPar1(); 
+  fV0MSPDSigmaOutlierPar2 = centOADB->V0MSPDSigmaOutlierPar2();
+  fV0MTPCSigmaOutlierPar0 = centOADB->V0MTPCSigmaOutlierPar0(); 
+  fV0MTPCSigmaOutlierPar1 = centOADB->V0MTPCSigmaOutlierPar1(); 
+  fV0MTPCSigmaOutlierPar2 = centOADB->V0MTPCSigmaOutlierPar2(); 
+                           
+  fV0MZDCOutlierPar0 =      centOADB->V0MZDCOutlierPar0();      
+  fV0MZDCOutlierPar1 =      centOADB->V0MZDCOutlierPar1();      
+  fV0MZDCEcalOutlierPar0 =  centOADB->V0MZDCEcalOutlierPar0();  
+  fV0MZDCEcalOutlierPar1 =  centOADB->V0MZDCEcalOutlierPar1();  
+
+
+
   return 0;
 }
 
+
+
 //________________________________________________________________________
 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[100]={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};
-
-  if ( TMath::Abs(spd-val) > fOutliersCut*SPDsigma[cent] ) 
+  // Clean outliers
+  Float_t val = fV0MSPDOutlierPar0 +  fV0MSPDOutlierPar1 * v0;
+  Float_t spdSigma = fV0MSPDSigmaOutlierPar0 + fV0MSPDSigmaOutlierPar1*cent + fV0MSPDSigmaOutlierPar2*cent*cent;
+  if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma ) 
     return kTRUE;
   else 
     return kFALSE;
@@ -811,24 +1136,10 @@ 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[100]={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};
-
-  if ( TMath::Abs(tracks-val) > fOutliersCut*TPCsigma[cent] ) 
+  // Clean outliers
+  Float_t val = fV0MTPCOutlierPar0 +  fV0MTPCOutlierPar1 * v0;
+  Float_t tpcSigma = fV0MTPCSigmaOutlierPar0 + fV0MTPCSigmaOutlierPar1*cent + fV0MTPCSigmaOutlierPar2*cent*cent;
+  if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma ) 
     return kTRUE;
   else 
     return kFALSE;
@@ -837,328 +1148,23 @@ Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int
 //________________________________________________________________________
 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)) 
+  // Clean outliers
+  Float_t val = fV0MZDCOutlierPar0 + fV0MZDCOutlierPar1 * v0;
+  if (zdc >  val) 
     return kTRUE;
   else 
-    return kFALSE;
+  return kFALSE;
 }
 
 //________________________________________________________________________
-Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t /*zdc*/, Float_t /*v0*/) const
+Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t zdc, Float_t v0) const
 {
-// Clean outliers
+  // Clean outliers
+  Float_t val = fV0MZDCEcalOutlierPar0 + fV0MZDCEcalOutlierPar1 * v0;
+  if (zdc >  val) 
+    return kTRUE;
+  else 
     return kFALSE;
 }
 
-//________________________________________________________________________  
-Float_t AliCentralitySelectionTask::MyGetScaleFactor(Int_t runnumber, Int_t flag) const
-{
-// Get scaling factor
-  if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
-    cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
-    return 0.0;
-  }
-
-  Float_t scalefactor=0.0;
-  if (flag==0)
-    scalefactor = V0MScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
-  else if (flag==1)
-    scalefactor = SPDScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
-  else if (flag==2)
-    scalefactor = TPCScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
-
-  return scalefactor;
-
-}
-
-//________________________________________________________________________  
-Float_t AliCentralitySelectionTask::MyGetScaleFactorMC(Int_t runnumber) const
-{
-// Get MC scaling factor
-  if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
-    cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
-    return 0.0;
-  }
-
-  Float_t scalefactor= V0MScaleFactorMC[runnumber - fLowRunN]; // subtracting reference offset index
-  return scalefactor;
-
-}
-
-//________________________________________________________________________  
-void AliCentralitySelectionTask::MyInitScaleFactor () 
-{
-// Initialize the scaling factors
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) V0MScaleFactor[i] = 0.0;
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) SPDScaleFactor[i] = 0.0;
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) TPCScaleFactor[i] = 0.0;
-  
-  // scale factors determined from <V0 charge> on a run-by-run basis
-   V0MScaleFactor[310] = 0.956841;
-   V0MScaleFactor[311] = 0.958274;
-   V0MScaleFactor[514] = 1.0046;
-   V0MScaleFactor[515] = 0.983535;
-   V0MScaleFactor[579] = 0.988185;
-   V0MScaleFactor[580] = 0.983351;
-   V0MScaleFactor[581] = 0.989013;
-   V0MScaleFactor[583] = 0.990056;
-   V0MScaleFactor[588] = 0.974438;
-   V0MScaleFactor[589] = 0.981572;
-   V0MScaleFactor[590] = 0.989316;
-   V0MScaleFactor[592] = 0.98345;
-   V0MScaleFactor[688] = 0.993647;
-   V0MScaleFactor[690] = 0.994758;
-   V0MScaleFactor[693] = 0.989569;
-   V0MScaleFactor[698] = 0.993119;
-   V0MScaleFactor[744] = 0.989583;
-   V0MScaleFactor[757] = 0.990377;
-   V0MScaleFactor[787] = 0.990176;
-   V0MScaleFactor[788] = 0.98723;
-   V0MScaleFactor[834] = 1.00403;
-   V0MScaleFactor[835] = 0.994376;
-   V0MScaleFactor[840] = 0.99759;
-   V0MScaleFactor[842] = 1.01031;
-   V0MScaleFactor[900] = 0.996216;
-   V0MScaleFactor[901] = 0.994205;
-   V0MScaleFactor[992] = 0.998479;
-   V0MScaleFactor[997] = 1.00078;
-   V0MScaleFactor[1299] = 1.00515;
-   V0MScaleFactor[1303] = 1.00094;
-   V0MScaleFactor[1339] = 0.986596;
-   V0MScaleFactor[1346] = 0.972226;
-   V0MScaleFactor[1349] = 0.960358;
-   V0MScaleFactor[1350] = 0.970023;
-   V0MScaleFactor[1374] = 1.00575;
-   V0MScaleFactor[1545] = 1.00471;
-   V0MScaleFactor[1587] = 1.00611;
-   V0MScaleFactor[1588] = 1.00976;
-   V0MScaleFactor[1618] = 1.00771;
-   V0MScaleFactor[1682] = 1.01622;
-   V0MScaleFactor[1727] = 1.01305;
-   V0MScaleFactor[1728] = 1.00388;
-   V0MScaleFactor[1731] = 1.00673;
-   V0MScaleFactor[1732] = 1.00916;
-   V0MScaleFactor[1770] = 1.0092;
-   V0MScaleFactor[1773] = 1.00728;
-   V0MScaleFactor[1786] = 1.01655;
-   V0MScaleFactor[1787] = 1.00672;
-   V0MScaleFactor[1801] = 0.983339;
-   V0MScaleFactor[1802] = 1.00754;
-   V0MScaleFactor[1811] = 1.00608;
-   V0MScaleFactor[1815] = 1.01227;
-   V0MScaleFactor[1879] = 0.99907;
-   V0MScaleFactor[1881] = 0.995696;
-   V0MScaleFactor[2186] = 1.00559;
-   V0MScaleFactor[2187] = 1.00631;
-   V0MScaleFactor[2254] = 1.01512;
-   V0MScaleFactor[2256] = 0.998727;
-   V0MScaleFactor[2321] = 1.00701;
-   SPDScaleFactor[310] = 1.00211;
-   SPDScaleFactor[311] = 1.00067;
-   SPDScaleFactor[514] = 1.02268;
-   SPDScaleFactor[515] = 0.994902;
-   SPDScaleFactor[579] = 1.00215;
-   SPDScaleFactor[580] = 0.993421;
-   SPDScaleFactor[581] = 1.00129;
-   SPDScaleFactor[583] = 1.00242;
-   SPDScaleFactor[588] = 0.984762;
-   SPDScaleFactor[589] = 0.994355;
-   SPDScaleFactor[590] = 1.00073;
-   SPDScaleFactor[592] = 0.995889;
-   SPDScaleFactor[688] = 0.994532;
-   SPDScaleFactor[690] = 0.998307;
-   SPDScaleFactor[693] = 0.994052;
-   SPDScaleFactor[698] = 0.993224;
-   SPDScaleFactor[744] = 0.993279;
-   SPDScaleFactor[757] = 0.992494;
-   SPDScaleFactor[787] = 0.992678;
-   SPDScaleFactor[788] = 0.996563;
-   SPDScaleFactor[834] = 1.01116;
-   SPDScaleFactor[835] = 0.993108;
-   SPDScaleFactor[840] = 0.997574;
-   SPDScaleFactor[842] = 1.01829;
-   SPDScaleFactor[900] = 0.999438;
-   SPDScaleFactor[901] = 0.995849;
-   SPDScaleFactor[992] = 0.999227;
-   SPDScaleFactor[997] = 1.00575;
-   SPDScaleFactor[1299] = 0.99877;
-   SPDScaleFactor[1303] = 0.999682;
-   SPDScaleFactor[1339] = 0.978198;
-   SPDScaleFactor[1346] = 0.964178;
-   SPDScaleFactor[1349] = 0.959439;
-   SPDScaleFactor[1350] = 0.956945;
-   SPDScaleFactor[1374] = 0.994434;
-   SPDScaleFactor[1545] = 1.0016;
-   SPDScaleFactor[1587] = 1.00153;
-   SPDScaleFactor[1588] = 1.00698;
-   SPDScaleFactor[1618] = 1.00554;
-   SPDScaleFactor[1682] = 1.0123;
-   SPDScaleFactor[1727] = 1.011;
-   SPDScaleFactor[1728] = 1.00143;
-   SPDScaleFactor[1731] = 1.00486;
-   SPDScaleFactor[1732] = 1.00646;
-   SPDScaleFactor[1770] = 1.00515;
-   SPDScaleFactor[1773] = 1.00485;
-   SPDScaleFactor[1786] = 1.01215;
-   SPDScaleFactor[1787] = 1.00419;
-   SPDScaleFactor[1801] = 0.983327;
-   SPDScaleFactor[1802] = 1.00529;
-   SPDScaleFactor[1811] = 1.00367;
-   SPDScaleFactor[1815] = 1.01045;
-   SPDScaleFactor[1879] = 0.996374;
-   SPDScaleFactor[1881] = 0.988827;
-   SPDScaleFactor[2186] = 1.00354;
-   SPDScaleFactor[2187] = 1.00397;
-   SPDScaleFactor[2254] = 1.01138;
-   SPDScaleFactor[2256] = 0.996641;
-   SPDScaleFactor[2321] = 1.00357;
-   TPCScaleFactor[310] = 1.00434;
-   TPCScaleFactor[311] = 1.0056;
-   TPCScaleFactor[514] = 1.02185;
-   TPCScaleFactor[515] = 1.0036;
-   TPCScaleFactor[579] = 1.00607;
-   TPCScaleFactor[580] = 1.00183;
-   TPCScaleFactor[581] = 1.00693;
-   TPCScaleFactor[583] = 1.00746;
-   TPCScaleFactor[588] = 0.990524;
-   TPCScaleFactor[589] = 0.998582;
-   TPCScaleFactor[590] = 1.00618;
-   TPCScaleFactor[592] = 1.00088;
-   TPCScaleFactor[688] = 1.00598;
-   TPCScaleFactor[690] = 1.00658;
-   TPCScaleFactor[693] = 1.00144;
-   TPCScaleFactor[698] = 1.00279;
-   TPCScaleFactor[744] = 1.00122;
-   TPCScaleFactor[757] = 1.002;
-   TPCScaleFactor[787] = 0.997818;
-   TPCScaleFactor[788] = 0.994583;
-   TPCScaleFactor[834] = 1.01508;
-   TPCScaleFactor[835] = 1.00218;
-   TPCScaleFactor[840] = 1.00569;
-   TPCScaleFactor[842] = 1.01789;
-   TPCScaleFactor[900] = 1.00739;
-   TPCScaleFactor[901] = 1.00462;
-   TPCScaleFactor[992] = 1.00502;
-   TPCScaleFactor[997] = 1.00943;
-   TPCScaleFactor[1299] = 1.00438;
-   TPCScaleFactor[1303] = 0.996701;
-   TPCScaleFactor[1339] = 0.978641;
-   TPCScaleFactor[1346] = 0.968906;
-   TPCScaleFactor[1349] = 0.954311;
-   TPCScaleFactor[1350] = 0.958764;
-   TPCScaleFactor[1374] = 0.997899;
-   TPCScaleFactor[1545] = 0.992;
-   TPCScaleFactor[1587] = 0.992635;
-   TPCScaleFactor[1588] = 1.00207;
-   TPCScaleFactor[1618] = 1.00126;
-   TPCScaleFactor[1682] = 1.00324;
-   TPCScaleFactor[1727] = 1.00042;
-   TPCScaleFactor[1728] = 0.978881;
-   TPCScaleFactor[1731] = 0.999818;
-   TPCScaleFactor[1732] = 1.00109;
-   TPCScaleFactor[1770] = 0.99935;
-   TPCScaleFactor[1773] = 0.998531;
-   TPCScaleFactor[1786] = 0.999125;
-   TPCScaleFactor[1787] = 0.998479;
-   TPCScaleFactor[1801] = 0.9775;
-   TPCScaleFactor[1802] = 0.999095;
-   TPCScaleFactor[1811] = 0.998197;
-   TPCScaleFactor[1815] = 1.00413;
-   TPCScaleFactor[1879] = 0.990916;
-   TPCScaleFactor[1881] = 0.987241;
-   TPCScaleFactor[2186] = 1.00048;
-   TPCScaleFactor[2187] = 1.00057;
-   TPCScaleFactor[2254] = 1.00588;
-   TPCScaleFactor[2256] = 0.991503;
-   TPCScaleFactor[2321] = 1.00057;
-
-
-  // set all missing values to the value of the run before it ....
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) {    
-    if (V0MScaleFactor[i] == 0.0) {     
-      if (i==0) {
-       V0MScaleFactor[i] = 1.00;
-      } else {
-       // search for last run number with non-zero value
-       for (int j=i-1;j>=0;j--) {
-         if (V0MScaleFactor[j] != 0.0) {
-           V0MScaleFactor[i] = V0MScaleFactor[j];
-           break;
-         }
-       }
-      }
-    }
-  } // end loop over checking all run-numbers 
-
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) {    
-    if (SPDScaleFactor[i] == 0.0) {     
-      if (i==0) {
-       SPDScaleFactor[i] = 1.00;
-      } else {
-       for (int j=i-1;j>=0;j--) {
-         if (SPDScaleFactor[j] != 0.0) {
-           SPDScaleFactor[i] = SPDScaleFactor[j];
-           break;
-         }
-       }
-      }
-    }
-  } 
-
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) {    
-    if (TPCScaleFactor[i] == 0.0) {     
-      if (i==0) {
-       TPCScaleFactor[i] = 1.00;
-      } else {
-       for (int j=i-1;j>=0;j--) {
-         if (TPCScaleFactor[j] != 0.0) {
-           TPCScaleFactor[i] = TPCScaleFactor[j];
-           break;
-         }
-       }
-      }
-    }
-  } 
-  
-
-  //    for (int i=0; i<(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << V0MScaleFactor[i] << " for Run " << i+fLowRunN << endl;
-  
-  return;
-
-}
-
-
-//________________________________________________________________________  
-void AliCentralitySelectionTask::MyInitScaleFactorMC() 
-{
-// Initialize the MC scaling factors
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) V0MScaleFactorMC[i] = 0.0;
-  // scale factors determined from <V0 charge> on a run-by-run basis
-  V0MScaleFactorMC[0] = 0.75108;
-  // set all missing values to the value of the run before it ....
-  for (int i=0; i<(fHighRunN-fLowRunN); i++) {    
-    if (V0MScaleFactorMC[i] == 0.0) {     
-      if (i==0) {
-       V0MScaleFactorMC[i] = 1.00;
-      } else {
-       // search for last run number with non-zero value
-       for (int j=i-1;j>=0;j--) {
-         if (V0MScaleFactorMC[j] != 0.0) {
-           V0MScaleFactorMC[i] = V0MScaleFactorMC[j];
-           break;
-         }
-       }
-      }
-    }
-  } // end loop over checking all run-numbers 
-
-
-  //    for (int i=0; i<(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << V0MScaleFactorMC[i] << " for Run " << i+fLowRunN << endl;
-  
-  return;
-
-}