]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/LambdaK0/AliAnalysisTaskExtractPerformanceV0.cxx
Add a boolean flag to enable a more lightweight operation
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0 / AliAnalysisTaskExtractPerformanceV0.cxx
index 4f997ad3b96755ca54c4c4e73524090ddd66acb6..eccbc15a9e9f50ac3f1a4d2879a1a4d2a4f59a20 100644 (file)
@@ -96,10 +96,100 @@ using std::endl;
 ClassImp(AliAnalysisTaskExtractPerformanceV0)
 
 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0() 
-  : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0),
+  : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0),
    fkIsNuclear   ( kFALSE ), 
-   fkLowEnergyPP ( kFALSE ),
+   fkSwitchINT7  ( kFALSE ),
    fkUseOnTheFly ( kFALSE ),
+   fkTakeAllTracks ( kFALSE ),
+   fpArapidityShift ( 0.465 ),
+  fCentralityEstimator("V0M"),
+  fkLightWeight  ( kFALSE ),  
+//------------------------------------------------
+// Tree Variables 
+
+  fTreeVariablePrimaryStatus(0),
+  fTreeVariablePrimaryStatusMother(0),
+  fTreeVariableChi2V0(0),
+       fTreeVariableDcaV0Daughters(0),
+       fTreeVariableDcaV0ToPrimVertex(0),
+       fTreeVariableDcaPosToPrimVertex(0),
+       fTreeVariableDcaNegToPrimVertex(0),
+       fTreeVariableV0CosineOfPointingAngle(0),
+       fTreeVariableV0Radius(0),
+       fTreeVariablePt(0),
+       fTreeVariablePtMC(0),
+       fTreeVariableRapK0Short(0),
+       fTreeVariableRapLambda(0),
+       fTreeVariableRapMC(0),
+       fTreeVariableInvMassK0s(0),
+       fTreeVariableInvMassLambda(0),
+       fTreeVariableInvMassAntiLambda(0),
+       fTreeVariableAlphaV0(0),
+       fTreeVariablePtArmV0(0),
+       fTreeVariableNegTotMomentum(0),
+       fTreeVariablePosTotMomentum(0),
+       fTreeVariableNegTransvMomentum(0),
+       fTreeVariablePosTransvMomentum(0),
+       fTreeVariableNegTransvMomentumMC(0),
+       fTreeVariablePosTransvMomentumMC(0),
+   
+       fTreeVariableNSigmasPosProton(0),
+       fTreeVariableNSigmasPosPion(0),
+       fTreeVariableNSigmasNegProton(0),
+       fTreeVariableNSigmasNegPion(0),
+
+       fTreeVariablePtMother(0),
+       fTreeVariableV0CreationRadius(0),
+  fTreeVariablePID(0),
+  fTreeVariablePIDPositive(0),
+  fTreeVariablePIDNegative(0),
+  fTreeVariablePIDMother(0),
+  fTreeVariableIndexStatus(0),
+  fTreeVariableIndexStatusMother(0),
+
+  fTreeVariableRunNumber(0),
+  fTreeVariableEventNumber(0),
+
+       fTreeVariableDistOverTotMom(0),
+
+       fTreeVariablePosEta(0),
+       fTreeVariableNegEta(0),
+
+       fTreeVariableVertexZ(0),
+
+  fTreeVariableLeastNbrCrossedRows(0),
+  fTreeVariableLeastRatioCrossedRowsOverFindable(0),
+  fTreeVariableMultiplicity(0),
+  fTreeVariableMultiplicityMC(0),
+
+  fTreeVariableV0x(0),
+  fTreeVariableV0y(0),
+  fTreeVariableV0z(0),
+
+  fTreeVariableV0Px(0),
+  fTreeVariableV0Py(0),
+  fTreeVariableV0Pz(0),
+
+  fTreeVariableMCV0x(0),
+  fTreeVariableMCV0y(0),
+  fTreeVariableMCV0z(0),
+
+  fTreeVariableMCV0Px(0),
+  fTreeVariableMCV0Py(0),
+  fTreeVariableMCV0Pz(0),
+
+  fTreeVariablePVx(0),
+  fTreeVariablePVy(0),
+  fTreeVariablePVz(0),
+
+  fTreeVariableMCPVx(0),
+  fTreeVariableMCPVy(0),
+  fTreeVariableMCPVz(0),
+
+  fTreeVariableIsNonInjected(0),
+
+  fTreeVariableNegTrackStatus(0),
+  fTreeVariablePosTrackStatus(0),
 
 //------------------------------------------------
 // HISTOGRAMS
@@ -116,6 +206,25 @@ AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
    fHistMultiplicityNoTPCOnly(0),
    fHistMultiplicityNoTPCOnlyNoPileup(0),
 
+       f2dHistMultiplicityVsTrueBeforeTrigSel(0),
+       f2dHistMultiplicityVsTrueForTrigEvt(0),
+       f2dHistMultiplicityVsTrue(0),
+       f2dHistMultiplicityVsTrueNoTPCOnly(0),
+       f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
+
+  //Raw Data for Vertex Z position estimator change
+       f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
+       f2dHistMultiplicityVsVertexZForTrigEvt(0),
+       f2dHistMultiplicityVsVertexZ(0),
+       f2dHistMultiplicityVsVertexZNoTPCOnly(0),
+       f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
+
+  fHistGenVertexZBeforeTrigSel(0),     
+  fHistGenVertexZForTrigEvt(0),
+  fHistGenVertexZ(0),
+  fHistGenVertexZNoTPCOnly(0),
+  fHistGenVertexZNoTPCOnlyNoPileup(0),
+
 //------------------------------------------------
 // PARTICLE HISTOGRAMS
 // --- Filled on a Particle-by-Particle basis
@@ -123,9 +232,24 @@ AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
    f3dHistPrimAnalysisPtVsYVsMultLambda(0),
    f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
    f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
+   f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
+   f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
+   f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
    f3dHistPrimRawPtVsYVsMultLambda(0),
    f3dHistPrimRawPtVsYVsMultAntiLambda(0),
    f3dHistPrimRawPtVsYVsMultK0Short(0),
+   f3dHistPrimRawPtVsYCMSVsMultLambda(0),
+   f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
+   f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
+   f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
+   f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
+   f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
+   f3dHistPrimRawPtVsYVsMultMCLambda(0),
+   f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
+   f3dHistPrimRawPtVsYVsMultMCK0Short(0),
+   f3dHistPrimRawPtVsYVsVertexZLambda(0),
+   f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
+   f3dHistPrimRawPtVsYVsVertexZK0Short(0),
    f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
    f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
    f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
@@ -134,6 +258,20 @@ AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
    f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
    f3dHistGenPtVsYVsMultXiMinus(0),
    f3dHistGenPtVsYVsMultXiPlus(0),
+   f3dHistGenPtVsYVsMultOmegaMinus(0),
+   f3dHistGenPtVsYVsMultOmegaPlus(0),
+   f3dHistGenSelectedPtVsYVsMultXiMinus(0),
+   f3dHistGenSelectedPtVsYVsMultXiPlus(0),
+   f3dHistGenSelectedPtVsYVsMultOmegaMinus(0),
+   f3dHistGenSelectedPtVsYVsMultOmegaPlus(0),
+   f3dHistGenPtVsYCMSVsMultXiMinus(0),
+   f3dHistGenPtVsYCMSVsMultXiPlus(0),
+   f3dHistGenPtVsYCMSVsMultOmegaMinus(0),
+   f3dHistGenPtVsYCMSVsMultOmegaPlus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
    fHistPVx(0),
    fHistPVy(0),
    fHistPVz(0),
@@ -149,11 +287,101 @@ AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
 }
 
 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name) 
-  : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0),
+  : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0),
    fkIsNuclear   ( kFALSE ), 
-   fkLowEnergyPP ( kFALSE ),
+   fkSwitchINT7  ( kFALSE ),
    fkUseOnTheFly ( kFALSE ),
-     
+   fkTakeAllTracks ( kFALSE ),
+   fpArapidityShift ( 0.465 ),
+  fCentralityEstimator("V0M"),
+  fkLightWeight  ( kFALSE ),  
+//------------------------------------------------
+// Tree Variables 
+
+  fTreeVariablePrimaryStatus(0),
+  fTreeVariablePrimaryStatusMother(0),
+  fTreeVariableChi2V0(0),
+       fTreeVariableDcaV0Daughters(0),
+       fTreeVariableDcaV0ToPrimVertex(0),
+       fTreeVariableDcaPosToPrimVertex(0),
+       fTreeVariableDcaNegToPrimVertex(0),
+       fTreeVariableV0CosineOfPointingAngle(0),
+       fTreeVariableV0Radius(0),
+       fTreeVariablePt(0),
+       fTreeVariablePtMC(0),
+       fTreeVariableRapK0Short(0),
+       fTreeVariableRapLambda(0),
+       fTreeVariableRapMC(0),
+       fTreeVariableInvMassK0s(0),
+       fTreeVariableInvMassLambda(0),
+       fTreeVariableInvMassAntiLambda(0),
+       fTreeVariableAlphaV0(0),
+       fTreeVariablePtArmV0(0),
+       fTreeVariableNegTotMomentum(0),
+       fTreeVariablePosTotMomentum(0),
+       fTreeVariableNegTransvMomentum(0),
+       fTreeVariablePosTransvMomentum(0),
+       fTreeVariableNegTransvMomentumMC(0),
+       fTreeVariablePosTransvMomentumMC(0),
+   
+       fTreeVariableNSigmasPosProton(0),
+       fTreeVariableNSigmasPosPion(0),
+       fTreeVariableNSigmasNegProton(0),
+       fTreeVariableNSigmasNegPion(0),
+
+       fTreeVariablePtMother(0),
+       fTreeVariableV0CreationRadius(0),
+  fTreeVariablePID(0),
+  fTreeVariablePIDPositive(0),
+  fTreeVariablePIDNegative(0),
+  fTreeVariablePIDMother(0),
+  fTreeVariableIndexStatus(0),
+  fTreeVariableIndexStatusMother(0),
+
+  fTreeVariableRunNumber(0),
+  fTreeVariableEventNumber(0),
+
+       fTreeVariableDistOverTotMom(0),
+
+       fTreeVariablePosEta(0),
+       fTreeVariableNegEta(0),
+
+       fTreeVariableVertexZ(0),
+
+  fTreeVariableLeastNbrCrossedRows(0),
+  fTreeVariableLeastRatioCrossedRowsOverFindable(0),
+  fTreeVariableMultiplicity(0),
+  fTreeVariableMultiplicityMC(0),
+
+  fTreeVariableV0x(0),
+  fTreeVariableV0y(0),
+  fTreeVariableV0z(0),
+
+  fTreeVariableV0Px(0),
+  fTreeVariableV0Py(0),
+  fTreeVariableV0Pz(0),
+
+  fTreeVariableMCV0x(0),
+  fTreeVariableMCV0y(0),
+  fTreeVariableMCV0z(0),
+
+  fTreeVariableMCV0Px(0),
+  fTreeVariableMCV0Py(0),
+  fTreeVariableMCV0Pz(0),
+
+  fTreeVariablePVx(0),
+  fTreeVariablePVy(0),
+  fTreeVariablePVz(0),
+
+  fTreeVariableMCPVx(0),
+  fTreeVariableMCPVy(0),
+  fTreeVariableMCPVz(0),
+
+  fTreeVariableIsNonInjected(0),
+
+  fTreeVariableNegTrackStatus(0),
+  fTreeVariablePosTrackStatus(0),
+
 //------------------------------------------------
 // HISTOGRAMS
 // --- Filled on an Event-by-event basis
@@ -169,6 +397,24 @@ AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const c
    fHistMultiplicityNoTPCOnly(0),
    fHistMultiplicityNoTPCOnlyNoPileup(0),
 
+       f2dHistMultiplicityVsTrueBeforeTrigSel(0),
+       f2dHistMultiplicityVsTrueForTrigEvt(0),
+       f2dHistMultiplicityVsTrue(0),
+       f2dHistMultiplicityVsTrueNoTPCOnly(0),
+       f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
+
+  //Raw Data for Vertex Z position estimator change
+       f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
+       f2dHistMultiplicityVsVertexZForTrigEvt(0),
+       f2dHistMultiplicityVsVertexZ(0),
+       f2dHistMultiplicityVsVertexZNoTPCOnly(0),
+       f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
+
+  fHistGenVertexZBeforeTrigSel(0),     
+  fHistGenVertexZForTrigEvt(0),
+  fHistGenVertexZ(0),
+  fHistGenVertexZNoTPCOnly(0),
+  fHistGenVertexZNoTPCOnlyNoPileup(0),
 
 //------------------------------------------------
 // PARTICLE HISTOGRAMS
@@ -177,9 +423,24 @@ AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const c
    f3dHistPrimAnalysisPtVsYVsMultLambda(0),
    f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
    f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
+   f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
+   f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
+   f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
    f3dHistPrimRawPtVsYVsMultLambda(0),
    f3dHistPrimRawPtVsYVsMultAntiLambda(0),
    f3dHistPrimRawPtVsYVsMultK0Short(0),
+   f3dHistPrimRawPtVsYCMSVsMultLambda(0),
+   f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
+   f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
+   f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
+   f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
+   f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
+   f3dHistPrimRawPtVsYVsMultMCLambda(0),
+   f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
+   f3dHistPrimRawPtVsYVsMultMCK0Short(0),
+   f3dHistPrimRawPtVsYVsVertexZLambda(0),
+   f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
+   f3dHistPrimRawPtVsYVsVertexZK0Short(0),
    f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
    f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
    f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
@@ -188,6 +449,20 @@ AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const c
    f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
    f3dHistGenPtVsYVsMultXiMinus(0),
    f3dHistGenPtVsYVsMultXiPlus(0),
+   f3dHistGenPtVsYVsMultOmegaMinus(0),
+   f3dHistGenPtVsYVsMultOmegaPlus(0),
+   f3dHistGenSelectedPtVsYVsMultXiMinus(0),
+   f3dHistGenSelectedPtVsYVsMultXiPlus(0),
+   f3dHistGenSelectedPtVsYVsMultOmegaMinus(0),
+   f3dHistGenSelectedPtVsYVsMultOmegaPlus(0),
+   f3dHistGenPtVsYCMSVsMultXiMinus(0),
+   f3dHistGenPtVsYCMSVsMultXiPlus(0),
+   f3dHistGenPtVsYCMSVsMultOmegaMinus(0),
+   f3dHistGenPtVsYCMSVsMultOmegaPlus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
+   f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
    fHistPVx(0),
    fHistPVy(0),
    fHistPVz(0),
@@ -220,6 +495,11 @@ AliAnalysisTaskExtractPerformanceV0::~AliAnalysisTaskExtractPerformanceV0()
       delete fTree;
       fTree = 0x0;
    }
+    //cleanup esd track cuts object too...
+   if (fESDtrackCuts){
+    delete fESDtrackCuts;
+    fESDtrackCuts = 0x0; 
+  }
 }
 
 //________________________________________________________________________
@@ -228,15 +508,18 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
 
    OpenFile(2);        
    // Called once
+
+//------------------------------------------------
+
    fTree = new TTree("fTree","V0Candidates");
 
 //------------------------------------------------
-// fTree Branch definitions
+// fTree Branch definitions - V0 Tree
 //------------------------------------------------
 
 //-----------BASIC-INFO---------------------------
 /* 1*/   fTree->Branch("fTreeVariablePrimaryStatus",&fTreeVariablePrimaryStatus,"fTreeVariablePrimaryStatus/I");       
-/* 1*/   fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");     
+/* 2*/   fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");     
 /* 2*/   fTree->Branch("fTreeVariableChi2V0",&fTreeVariableChi2V0,"Chi2V0/F");
 /* 3*/   fTree->Branch("fTreeVariableDcaV0Daughters",&fTreeVariableDcaV0Daughters,"fTreeVariableDcaV0Daughters/F");
 /* 4*/   fTree->Branch("fTreeVariableDcaPosToPrimVertex",&fTreeVariableDcaPosToPrimVertex,"fTreeVariableDcaPosToPrimVertex/F");
@@ -266,6 +549,7 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
 /*27*/   fTree->Branch("fTreeVariableV0CosineOfPointingAngle",&fTreeVariableV0CosineOfPointingAngle,"fTreeVariableV0CosineOfPointingAngle/F");
 //-----------MULTIPLICITY-INFO--------------------
 /*28*/   fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
+/*28*/   fTree->Branch("fTreeVariableMultiplicityMC",&fTreeVariableMultiplicityMC,"fTreeVariableMultiplicityMC/I");
 //------------------------------------------------
 /*29*/   fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
 /*30*/   fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
@@ -276,9 +560,55 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
 /*34*/   fTree->Branch("fTreeVariableNegEta",&fTreeVariableNegEta,"fTreeVariableNegEta/F");
 /*35*/   fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
 /*36*/   fTree->Branch("fTreeVariableV0CreationRadius",&fTreeVariableV0CreationRadius,"fTreeVariableV0CreationRadius/F");
+  
+    if ( fkLightWeight == kFALSE ){ // these are debugging branches!
 /*37*/   fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
 /*38*/   fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
+    }
+
+/*39*/          fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
+/*40*/   fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
 
+    if ( fkLightWeight == kFALSE ){ // these are debugging branches!
+/*34*/   fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
+    }
+      
+    if ( fkLightWeight == kFALSE ){ // these are debugging branches!
+//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info 
+        fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
+        fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
+        fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
+
+        fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
+        fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
+        fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
+
+//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info, perfect info from MC
+        fTree->Branch("fTreeVariableMCV0x",&fTreeVariableMCV0x,"fTreeVariableMCV0x/F");
+        fTree->Branch("fTreeVariableMCV0y",&fTreeVariableMCV0y,"fTreeVariableMCV0y/F");
+        fTree->Branch("fTreeVariableMCV0z",&fTreeVariableMCV0z,"fTreeVariableMCV0z/F");
+
+        fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
+        fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
+        fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
+
+//-----------FOR CTAU DEBUGGING: Primary vertex info 
+        fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
+        fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
+        fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
+
+        fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
+        fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
+        fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
+    }
+
+        fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
+  
+  if ( fkLightWeight == kFALSE ){ // these are debugging branches!
+        fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
+        fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
+  }
+  
 //------------------------------------------------
 // Particle Identification Setup
 //------------------------------------------------
@@ -287,6 +617,12 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
    AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
    fPIDResponse = inputHandler->GetPIDResponse();
 
+  // Multiplicity 
+
+    if(! fESDtrackCuts ){
+          fESDtrackCuts = new AliESDtrackCuts();
+    }
+
 //------------------------------------------------
 // V0 Multiplicity Histograms
 //------------------------------------------------
@@ -366,6 +702,113 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
       fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
    }
 
+  //Raw Data for J/Psi paper Technique
+       //TH2F    *f2dHistMultiplicityVsTrueBeforeTrigSel;              //! multiplicity distribution    
+       //TH2F    *f2dHistMultiplicityVsTrueForTrigEvt;                         //! multiplicity distribution
+       //TH2F    *f2dHistMultiplicityVsTrue;                                                   //! multiplicity distribution
+       //TH2F    *f2dHistMultiplicityVsTrueNoTPCOnly;                          //! multiplicity distribution
+       //TH2F    *f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup;                  //! multiplicity distribution
+
+   if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
+      f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel", 
+         "Tracks per event", 200, 0, 200, 200, 0, 200);                
+      fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
+   }
+   if(! f2dHistMultiplicityVsTrueForTrigEvt) {
+      f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt", 
+         "Tracks per event", 200, 0, 200, 200, 0, 200);                
+      fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
+   }
+   if(! f2dHistMultiplicityVsTrue) {
+      f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue", 
+         "Tracks per event", 200, 0, 200, 200, 0, 200);                
+      fListHistV0->Add(f2dHistMultiplicityVsTrue);
+   }
+   if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
+      f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly", 
+         "Tracks per event", 200, 0, 200, 200, 0, 200);                
+      fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
+   }
+   if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
+      f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup", 
+         "Tracks per event", 200, 0, 200, 200, 0, 200);                
+      fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
+   }
+
+
+  //Raw Data for Vertex Z position estimator change
+       //TH2F    *f2dHistMultiplicityVsVertexZBeforeTrigSel;           //! multiplicity distribution    
+       //TH2F    *f2dHistMultiplicityVsVertexZForTrigEvt;                      //! multiplicity distribution
+       //TH2F    *f2dHistMultiplicityVsVertexZ;                                                //! multiplicity distribution
+       //TH2F    *f2dHistMultiplicityVsVertexZNoTPCOnly;                               //! multiplicity distribution
+       //TH2F    *f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup;                       //! multiplicity distribution
+
+   if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
+      f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel", 
+         "Tracks per event", 200, 0, 200,400, -20, 20);                
+      fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
+   }
+   if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
+      f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt", 
+         "Tracks per event", 200, 0, 200, 400, -20, 20);               
+      fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
+   }
+   if(! f2dHistMultiplicityVsVertexZ) {
+      f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ", 
+         "Tracks per event", 200, 0, 200, 400, -20, 20);               
+      fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
+   }
+   if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
+      f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly", 
+         "Tracks per event", 200, 0, 200, 400, -20, 20);               
+      fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
+   }
+   if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
+      f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup", 
+         "Tracks per event", 200, 0, 200, 400, -20, 20);               
+      fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
+   }
+
+//Generated PVz test
+
+//   TH1F      *fHistGenVertexZBeforeTrigSel;     //! multiplicity distribution      
+//   TH1F      *fHistGenVertexZForTrigEvt;        //! multiplicity distribution
+//   TH1F      *fHistGenVertexZ;                  //! multiplicity distribution
+//   TH1F      *fHistGenVertexZNoTPCOnly;         //! multiplicity distribution
+//   TH1F      *fHistGenVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
+
+   if(! fHistGenVertexZBeforeTrigSel) {
+         fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel", 
+            "PV z position;Nbr of Evts;z", 
+            400, -20, 20);       
+      fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
+   }
+   if(! fHistGenVertexZForTrigEvt) {
+         fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt", 
+            "PV z position;Nbr of Evts;z", 
+            400, -20, 20);       
+      fListHistV0->Add(fHistGenVertexZForTrigEvt);
+   }
+   if(! fHistGenVertexZ) {
+         fHistGenVertexZ = new TH1F("fHistGenVertexZ", 
+            "PV z position;Nbr of Evts;z", 
+            400, -20, 20);       
+      fListHistV0->Add(fHistGenVertexZ);
+   }
+   if(! fHistGenVertexZNoTPCOnly) {
+         fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly", 
+            "PV z position;Nbr of Evts;z", 
+            400, -20, 20);       
+      fListHistV0->Add(fHistGenVertexZNoTPCOnly);
+   }
+   if(! fHistGenVertexZNoTPCOnlyNoPileup) {
+         fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup", 
+            "PV z position;Nbr of Evts;z", 
+            400, -20, 20);       
+      fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
+   }
+
+
 //------------------------------------------------
 // Generated Particle Histograms
 //------------------------------------------------
@@ -393,6 +836,64 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultK0Short);
    }
 
+   if(! f3dHistPrimRawPtVsYCMSVsMultLambda) {
+      f3dHistPrimRawPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultLambda);
+   }
+   if(! f3dHistPrimRawPtVsYCMSVsMultAntiLambda) {
+      f3dHistPrimRawPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultAntiLambda);
+   }
+   if(! f3dHistPrimRawPtVsYCMSVsMultK0Short) {
+      f3dHistPrimRawPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultK0Short);
+   }
+
+//---> Non-injected particles
+
+   if(! f3dHistPrimRawPtVsYVsMultNonInjLambda) {
+      f3dHistPrimRawPtVsYVsMultNonInjLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjLambda);
+   }
+   if(! f3dHistPrimRawPtVsYVsMultNonInjAntiLambda) {
+      f3dHistPrimRawPtVsYVsMultNonInjAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjAntiLambda);
+   }
+   if(! f3dHistPrimRawPtVsYVsMultNonInjK0Short) {
+      f3dHistPrimRawPtVsYVsMultNonInjK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjK0Short);
+   }
+
+//--- 3D Histo (Pt, Y, MultiplicityMC)  
+
+   if(! f3dHistPrimRawPtVsYVsMultMCLambda) {
+      f3dHistPrimRawPtVsYVsMultMCLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCLambda);
+   }
+   if(! f3dHistPrimRawPtVsYVsMultMCAntiLambda) {
+      f3dHistPrimRawPtVsYVsMultMCAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCAntiLambda);
+   }
+   if(! f3dHistPrimRawPtVsYVsMultMCK0Short) {
+      f3dHistPrimRawPtVsYVsMultMCK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCK0Short);
+   }
+
+//--- 3D Histo (Pt, Y, VertexZ)  
+
+   if(! f3dHistPrimRawPtVsYVsVertexZLambda) {
+      f3dHistPrimRawPtVsYVsVertexZLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZLambda);
+   }
+   if(! f3dHistPrimRawPtVsYVsVertexZAntiLambda) {
+      f3dHistPrimRawPtVsYVsVertexZAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZAntiLambda);
+   }
+   if(! f3dHistPrimRawPtVsYVsVertexZK0Short) {
+      f3dHistPrimRawPtVsYVsVertexZK0Short = new TH3F( "f3dHistPrimRawPtVsYVsVertexZK0Short", "Pt_{K0S} Vs Y_{K0S} Vs VertexZiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
+      fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZK0Short);
+   }
+
 //--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
 
    if(! f3dHistPrimCloseToPVPtVsYVsMultLambda) {
@@ -424,7 +925,8 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
       fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthK0Short);
    }
 
-//--- 3D Histo (Pt, Y, Multiplicity) for generated charged Xi (feeddown)
+//--------------------------------------------------------------------------------------
+//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
 
    if(! f3dHistGenPtVsYVsMultXiMinus) {
       f3dHistGenPtVsYVsMultXiMinus = new TH3F( "f3dHistGenPtVsYVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
@@ -434,6 +936,86 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
       f3dHistGenPtVsYVsMultXiPlus = new TH3F( "f3dHistGenPtVsYVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
       fListHistV0->Add(f3dHistGenPtVsYVsMultXiPlus);
    }
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+   if(! f3dHistGenPtVsYVsMultOmegaMinus) {
+      f3dHistGenPtVsYVsMultOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenPtVsYVsMultOmegaMinus);
+   }
+   if(! f3dHistGenPtVsYVsMultOmegaPlus) {
+      f3dHistGenPtVsYVsMultOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenPtVsYVsMultOmegaPlus);
+   }
+
+//CASCADEs, Y CMS 
+
+   if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
+      f3dHistGenPtVsYCMSVsMultXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiMinus);
+   }
+   if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
+      f3dHistGenPtVsYCMSVsMultXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiPlus);
+   }
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+   if(! f3dHistGenPtVsYCMSVsMultOmegaMinus) {
+      f3dHistGenPtVsYCMSVsMultOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenPtVsYCMSVsMultOmegaMinus);
+   }
+   if(! f3dHistGenPtVsYCMSVsMultOmegaPlus) {
+      f3dHistGenPtVsYCMSVsMultOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenPtVsYCMSVsMultOmegaPlus);
+   }
+
+
+
+//--------------------------------------------------------------------------------------
+//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+
+   if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
+      f3dHistGenSelectedPtVsYVsMultXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
+   }
+   if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
+      f3dHistGenSelectedPtVsYVsMultXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
+   }
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+   if(! f3dHistGenSelectedPtVsYVsMultOmegaMinus) {
+      f3dHistGenSelectedPtVsYVsMultOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultOmegaMinus);
+   }
+   if(! f3dHistGenSelectedPtVsYVsMultOmegaPlus) {
+      f3dHistGenSelectedPtVsYVsMultOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultOmegaPlus);
+   }
+
+//CASCADES, analysis level, y CMS
+
+//--------------------------------------------------------------------------------------
+//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+
+   if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
+      f3dHistGenSelectedPtVsYCMSVsMultXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
+   }
+   if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
+      f3dHistGenSelectedPtVsYCMSVsMultXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
+   }
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+   if(! f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus) {
+      f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus);
+   }
+   if(! f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus) {
+      f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus);
+   }
+
 
 //----------------------------------
 // Histos at analysis level 
@@ -452,6 +1034,19 @@ void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
       fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultK0Short);
    }
 
+   if(! f3dHistPrimAnalysisPtVsYCMSVsMultLambda) {
+      f3dHistPrimAnalysisPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultLambda);
+   }
+   if(! f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda) {
+      f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda);
+   }
+   if(! f3dHistPrimAnalysisPtVsYCMSVsMultK0Short) {
+      f3dHistPrimAnalysisPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+      fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultK0Short);
+   }
+
 //----------------------------------
 // Primary Vertex Position Histos
 //----------------------------------
@@ -555,6 +1150,12 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       return;
    }
         
+   fTreeVariableRunNumber = lESDevent->GetRunNumber();
+   fTreeVariableEventNumber =  
+    ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
+      ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
+        ((ULong64_t)lESDevent->GetBunchCrossNumber() )  );
+
    lMCevent = MCEvent();
    if (!lMCevent) {
       Printf("ERROR: Could not retrieve MC event \n");
@@ -581,14 +1182,14 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
    Int_t lMultiplicity = -100; 
 
    //testing purposes
-   if(fkIsNuclear == kFALSE) lMultiplicity = AliESDtrackCuts::GetReferenceMultiplicity( lESDevent );
+   if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
 
    //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
    //---> Warning: Experimental
    if(fkIsNuclear == kTRUE){ 
       AliCentrality* centrality;
       centrality = lESDevent->GetCentrality();
-      lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0M" ) ) );
+      lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile(   fCentralityEstimator.Data() ) ) );
       if (centrality->GetQuality()>1) {
         PostData(1, fListHistV0);
         PostData(2, fTree);
@@ -643,7 +1244,7 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
          Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
          continue;
       }
-      if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 ) { 
+      if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) { 
          Double_t lRapXiMCPrimary = -100;
          if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) { 
            if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
@@ -652,19 +1253,57 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
          }
 
          //=================================================================================
-         // Xi Histograms for Feeddown - Primary Charged Xis
+         // Xi Histograms
          if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
             f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
          }
          if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){ 
             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
             f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+         }
+         // Omega Histograms
+         if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){ 
+            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+            f3dHistGenPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+         }
+         if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){ 
+            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+            f3dHistGenPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
          }
       } 
    }
 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
 
+//--------- GENERATED NUMBER OF CHARGED PARTICLES
+// ---> Set Variables to Zero again
+// ---> Variable Definition
+
+  Long_t lNumberOfCharged = 0; 
+
+//----- Loop on Stack ----------------------------------------------------------------
+   for (Int_t iCurrentLabelStack = 0;  iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++) 
+   {// This is the begining of the loop on tracks
+      TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
+      if(!particleOne) continue;
+      if(!particleOne->GetPDG()) continue;
+      Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
+      if(TMath::Abs(lThisCharge)<0.001) continue;
+      if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
+      
+      Double_t gpt = particleOne -> Pt();
+      Double_t geta = particleOne -> Eta(); 
+
+      if( TMath::Abs(geta) < 0.5) lNumberOfCharged++; 
+   }//End of loop on tracks
+//----- End Loop on Stack ------------------------------------------------------------
+
+   //Double_t lpArapidityShift = 0.465;
+   Bool_t lStackNatural = kTRUE;
 //----- Loop on Lambda, K0Short ----------------------------------------------------------------
    for (Int_t iCurrentLabelStack = 0;  iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++) 
    {// This is the begining of the loop on tracks
@@ -710,17 +1349,35 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
          //Use Physical Primaries only for filling PrimRaw Histograms!
          if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
 
+          lStackNatural = lMCevent->IsFromBGEvent(iCurrentLabelStack); //Is it? 
+          if (!lStackNatural){
+            if (!(lCurrentParticleForLambdaCheck->GetFirstMother()<0)) 
+              {lStackNatural = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
+          }
+
          if( lPdgcodeCurrentPart == 3122 ){
             f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+            f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
+            if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
+            f3dHistPrimRawPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
+            f3dHistPrimRawPtVsYVsVertexZLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
             if( TMath::Abs( lCurrentParticleForLambdaCheck->Eta() )<1.2 && lPtCurrentPart>2 ){
                lHasHighPtLambda = kTRUE; //Keep track of events with Lambda within |eta|<1.2 and pt>2
             }
          }
          if( lPdgcodeCurrentPart == -3122 ){
             f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+            f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
+            if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
+            f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
+            f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
          }
          if( lPdgcodeCurrentPart == 310 ){
             f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+            f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
+            if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
+            f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
+            f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
          }
          //Decay Length Acquisition=====================================================
          Double_t decaylength = -1; 
@@ -748,8 +1405,12 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
    }//End of loop on tracks
 //----- End Loop on Lambda, K0Short ------------------------------------------------------------
 
-// ---> Set Variables to Zero again
-// ---> Variable Definition
+
+   f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
+
+    fTreeVariableMultiplicityMC = lNumberOfCharged;
+
+   fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
 
    lPdgcodeCurrentPart = 0;
    lRapCurrentPart  = 0;
@@ -763,12 +1424,9 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
    Bool_t isSelected = 0;
    isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
 
-   //pp at 2.76TeV: special case, ignore FastOnly
-   if ( (fkLowEnergyPP == kTRUE) && (maskIsSelected& AliVEvent::kFastOnly) ){
-      PostData(1, fListHistV0);
-      PostData(2, fTree);
-      return;
-   } 
+   //pA triggering: CINT7
+   if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+
    //Standard Min-Bias Selection
    if ( ! isSelected ) { 
       PostData(1, fListHistV0);
@@ -776,6 +1434,8 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       return;
    }
 
+   f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
+   fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
 //------------------------------------------------
 // After Trigger Selection
 //------------------------------------------------
@@ -810,6 +1470,8 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
    fHistPVy->Fill( lPrimaryVtxPosition[1] );
    fHistPVz->Fill( lPrimaryVtxPosition[2] );
 
+   f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
+
 //------------------------------------------------
 // Primary Vertex Z position: SKIP
 //------------------------------------------------
@@ -821,10 +1483,13 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       return; 
    }
 
+   f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
+
    lMagneticField = lESDevent->GetMagneticField( );
    fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
    fHistMultiplicity->Fill(lMultiplicity);
-
+   f2dHistMultiplicityVsTrue->Fill ( lMultiplicity , lNumberOfCharged );
+   fHistGenVertexZ->Fill( (mcPrimaryVtx.At(2)) );
 //------------------------------------------------
 // SKIP: Events with well-established PVtx
 //------------------------------------------------
@@ -837,9 +1502,12 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       PostData(2, fTree);
       return;
    }
+
+   f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
    fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
    fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
-
+   f2dHistMultiplicityVsTrueNoTPCOnly->Fill ( lMultiplicity , lNumberOfCharged );
+   fHistGenVertexZNoTPCOnly->Fill( (mcPrimaryVtx.At(2)) );
 //------------------------------------------------
 // Pileup Rejection Studies
 //------------------------------------------------
@@ -851,9 +1519,11 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       PostData(2, fTree);
       return;
    }
+   f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
    fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
-
+   f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup->Fill ( lMultiplicity , lNumberOfCharged );
+   fHistGenVertexZNoTPCOnlyNoPileup->Fill( (mcPrimaryVtx.At(2)) );
    //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
    if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() )    ){ 
       fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
@@ -866,6 +1536,16 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       }
    }
 
+  fTreeVariableVertexZ = lPrimaryVtxPosition[2];
+
+  fTreeVariablePVx = lPrimaryVtxPosition[0];
+  fTreeVariablePVy = lPrimaryVtxPosition[1];
+  fTreeVariablePVz = lPrimaryVtxPosition[2];
+
+  fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
+  fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
+  fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
+
 //------------------------------------------------
 // stack loop starts here
 //------------------------------------------------
@@ -891,15 +1571,63 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
 
       if( lPdgcodeCurrentPart == 3122 ){
          f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+         f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
       }
       if( lPdgcodeCurrentPart == -3122 ){
          f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+         f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
       }
       if( lPdgcodeCurrentPart == 310 ){
          f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+         f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
       }
    }
 
+//----- Loop on primary Xi, Omega --------------------------------------------------------------
+   for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) 
+   {// This is the begining of the loop on primaries
+      
+      TParticle* lCurrentParticlePrimary = 0x0; 
+      lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
+      if(!lCurrentParticlePrimary){
+         Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
+         continue;
+      }
+      if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) { 
+         Double_t lRapXiMCPrimary = -100;
+         if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) { 
+           if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
+             lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
+           }
+         }
+
+         //=================================================================================
+         // Xi Histograms
+         if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
+            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+            f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+         }
+         if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){ 
+            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+            f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+         }
+         // Omega Histograms
+         if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){ 
+            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+            f3dHistGenSelectedPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+         }
+         if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){ 
+            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+            f3dHistGenSelectedPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+            f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+         }
+      } 
+   }
+//----- End Loop on primary Xi, Omega ----------------------------------------------------------
+
 //------------------------------------------------
 // MAIN LAMBDA LOOP STARTS HERE
 //------------------------------------------------
@@ -944,6 +1672,17 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       lPt = v0->Pt();
       lRapK0Short = v0->RapK0Short();
       lRapLambda  = v0->RapLambda();
+
+      //Set Variables for later filling
+      fTreeVariableV0x = tDecayVertexV0[0];
+      fTreeVariableV0y = tDecayVertexV0[1];
+      fTreeVariableV0z = tDecayVertexV0[2];
+
+      //Set Variables for later filling
+      fTreeVariableV0Px = tV0mom[0];
+      fTreeVariableV0Py = tV0mom[1];
+      fTreeVariableV0Pz = tV0mom[2];
+
       if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
 
       UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
@@ -979,7 +1718,11 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;      
       if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
 
-      if ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) ) continue;
+      //Get status flags
+      fTreeVariablePosTrackStatus = pTrack->GetStatus();
+      fTreeVariableNegTrackStatus = nTrack->GetStatus();
+    
+      if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
        
       //GetKinkIndex condition
       if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
@@ -999,7 +1742,7 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
          fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
 
       //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
-      if ( fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8 ) continue;
+      if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
 
       //End track Quality Cuts
       //________________________________________________________________________
@@ -1079,6 +1822,25 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
          //Set tree variables
          fTreeVariablePID   = pThisV0->GetPdgCode(); //PDG Code
          fTreeVariablePtMC  = pThisV0->Pt(); //Perfect Pt
+
+          fTreeVariableIsNonInjected = lMCevent->IsFromBGEvent(lblMotherPosV0Dghter); //Is it? 
+          if (!fTreeVariableIsNonInjected){
+            if (!(pThisV0->GetFirstMother()<0)) 
+              {fTreeVariableIsNonInjected = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
+          }
+
+         //Set Variables for later filling
+         //Be careful: Vx, Vy, Vz: Creation vertex. So decay position is the 
+         //Creation vertex of any one of the daughters!
+         fTreeVariableMCV0x = mcPosV0Dghter->Vx();
+         fTreeVariableMCV0y = mcPosV0Dghter->Vy();
+         fTreeVariableMCV0z = mcPosV0Dghter->Vz();
+
+         //Set Variables for later filling
+         fTreeVariableMCV0Px = pThisV0->Px();
+         fTreeVariableMCV0Py = pThisV0->Py();
+         fTreeVariableMCV0Pz = pThisV0->Pz();
+
          //Only Interested if it's a Lambda, AntiLambda or K0s 
          //Avoid the Junction Bug! PYTHIA has particles with Px=Py=Pz=E=0 occasionally, 
          //having particle code 88 (unrecognized by PDG), for documentation purposes.
@@ -1138,13 +1900,13 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
       fTreeVariableNSigmasNegPion   = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion );
 
 //tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]
-      fTreeVariableDistOverTotMom = TMath::Sqrt(
+      Double_t lDistanceTravelled = TMath::Sqrt(
                                                TMath::Power( tDecayVertexV0[0] - lBestPrimaryVtxPos[0] , 2) +
                                                TMath::Power( tDecayVertexV0[1] - lBestPrimaryVtxPos[1] , 2) +
                                                TMath::Power( tDecayVertexV0[2] - lBestPrimaryVtxPos[2] , 2)
                                        );
       fTreeVariableDistOverTotMom = 1e+5;
-      if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom /= (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
+      if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
 
       Double_t lMomentumPosTemp[3];
       pTrack->GetPxPyPz(lMomentumPosTemp);
@@ -1199,6 +1961,8 @@ void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
 
    }// This is the end of the V0 loop
 
+//------------------------------------------------
+
    // Post output data.
    PostData(1, fListHistV0);
    PostData(2, fTree);