]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskExtractPerformanceCascade.cxx
Implementation to reduce output size in Pb-Pb central collisions
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskExtractPerformanceCascade.cxx
index 9f3ac4d8f519994d5cab908643e1e6244d2a90ac..48e4dcbc033a32ba52b6381f31619de0f946e6ee 100644 (file)
@@ -85,6 +85,7 @@ class AliAODv0;
 #include "AliESDcascade.h"
 #include "AliAODcascade.h"
 #include "AliESDUtils.h"
+#include "AliAnalysisUtils.h"
 #include "AliGenEventHeader.h"
 
 #include "AliAnalysisTaskExtractPerformanceCascade.h"
@@ -95,11 +96,19 @@ using std::endl;
 ClassImp(AliAnalysisTaskExtractPerformanceCascade)
 
 AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCascade() 
-  : AliAnalysisTaskSE(), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0),
+  : AliAnalysisTaskSE(), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
    fkIsNuclear   ( kFALSE ), 
    fkSwitchINT7  ( kFALSE ),
    fpArapidityShift ( 0.465 ),
    fCentralityEstimator("V0M"),
+   fkpAVertexSelection( kFALSE ),
+   fEtaRefMult ( 0.5 ),
+   fkRunVertexers ( kFALSE ),
+   fkCheckSwapping( kFALSE ),
+fkSelectCentrality (kFALSE),
+fCentSel_Low(0.0),
+fCentSel_High(0.0),
+fLowPtCutoff(0.0),
 //------------------------------------------------
 // Tree Variables
 //------------------------------------------------
@@ -125,6 +134,7 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarCascRadius(0),
    fTreeCascVarV0Mass(0),
    fTreeCascVarV0CosPointingAngle(0),
+   fTreeCascVarV0CosPointingAngleSpecial(0),
    fTreeCascVarV0Radius(0),
    fTreeCascVarLeastNbrClusters(0),
    fTreeCascVarMultiplicity(0),
@@ -132,11 +142,15 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarMultiplicityZNA(0),
    fTreeCascVarMultiplicityTRK(0),
    fTreeCascVarMultiplicitySPD(0),
+   fTreeCascVarMultiplicityMC(0),
    fTreeCascVarDistOverTotMom(0),
+   fTreeCascVarIsPhysicalPrimary(0),
    fTreeCascVarPID(0),
+   fTreeCascVarPIDSwapped(0),
    fTreeCascVarPIDBachelor(0),
    fTreeCascVarPIDNegative(0),
    fTreeCascVarPIDPositive(0),
+   fTreeCascVarBachTransMom(0),
    fTreeCascVarPosTransMom(0),
    fTreeCascVarNegTransMom(0),
    fTreeCascVarPosTransMomMC(0),
@@ -148,6 +162,41 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarBachNSigmaPion(0),
    fTreeCascVarBachNSigmaKaon(0),
 
+   fTreeCascVarkITSRefitBachelor(0),
+   fTreeCascVarkITSRefitNegative(0),
+   fTreeCascVarkITSRefitPositive(0),
+
+    fTreeCascVarNegClusters(0),
+    fTreeCascVarPosClusters(0),
+    fTreeCascVarBachClusters(0),
+    fTreeCascVarNegSharedClusters(0),
+    fTreeCascVarPosSharedClusters(0),
+    fTreeCascVarBachSharedClusters(0),
+
+   fTreeCascVarEvHasXiMinus(0),
+   fTreeCascVarEvHasXiPlus(0),
+   fTreeCascVarEvHasOmegaMinus(0),
+   fTreeCascVarEvHasOmegaPlus(0),
+   fTreeCascVarEvHasLambda(0),
+   fTreeCascVarEvHasAntiLambda(0),
+
+   fTreeCascVarEvHasLowPtXiMinus(0),
+   fTreeCascVarEvHasLowPtXiPlus(0),
+   fTreeCascVarEvHasLowPtOmegaMinus(0),
+   fTreeCascVarEvHasLowPtOmegaPlus(0),
+   fTreeCascVarEvHasLowPtLambda(0),
+   fTreeCascVarEvHasLowPtAntiLambda(0),
+
+   fTreeCascVarEvHasVeryLowPtXiMinus(0),
+   fTreeCascVarEvHasVeryLowPtXiPlus(0),
+   fTreeCascVarEvHasVeryLowPtOmegaMinus(0),
+   fTreeCascVarEvHasVeryLowPtOmegaPlus(0),
+   fTreeCascVarEvHasVeryLowPtLambda(0),
+   fTreeCascVarEvHasVeryLowPtAntiLambda(0),
+
+    fTreeCascVarBadCascadeJai(0),
+    fTreeCascVarDeltaDCA(0),
+
 //------------------------------------------------
 // HISTOGRAMS
 // --- Filled on an Event-by-event basis
@@ -212,6 +261,107 @@ fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
    f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
    f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
    f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
+
+//MC Mult
+
+f3dHistGenPtVsYVsMultMCXiMinus(0),
+f3dHistGenPtVsYVsMultMCXiPlus(0),
+f3dHistGenPtVsYVsMultMCOmegaMinus(0),
+f3dHistGenPtVsYVsMultMCOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultMCXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultMCXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultMCOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultMCOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultMCXiMinus(0),
+f3dHistGenPtVsYCMSVsMultMCXiPlus(0),
+f3dHistGenPtVsYCMSVsMultMCOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultMCOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus(0),
+
+//V0A
+
+f3dHistGenPtVsYVsMultV0AXiMinus(0),
+f3dHistGenPtVsYVsMultV0AXiPlus(0),
+f3dHistGenPtVsYVsMultV0AOmegaMinus(0),
+f3dHistGenPtVsYVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus(0),
+
+//ZNA
+
+f3dHistGenPtVsYVsMultZNAXiMinus(0),
+f3dHistGenPtVsYVsMultZNAXiPlus(0),
+f3dHistGenPtVsYVsMultZNAOmegaMinus(0),
+f3dHistGenPtVsYVsMultZNAOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
+f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
+f3dHistGenPtVsYCMSVsMultZNAOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultZNAOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus(0),
+
+//TRK
+
+f3dHistGenPtVsYVsMultTRKXiMinus(0),
+f3dHistGenPtVsYVsMultTRKXiPlus(0),
+f3dHistGenPtVsYVsMultTRKOmegaMinus(0),
+f3dHistGenPtVsYVsMultTRKOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
+f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
+f3dHistGenPtVsYCMSVsMultTRKOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultTRKOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus(0),
+
+//SPD
+
+f3dHistGenPtVsYVsMultSPDXiMinus(0),
+f3dHistGenPtVsYVsMultSPDXiPlus(0),
+f3dHistGenPtVsYVsMultSPDOmegaMinus(0),
+f3dHistGenPtVsYVsMultSPDOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
+f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
+f3dHistGenPtVsYCMSVsMultSPDOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultSPDOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus(0),
+
+
    fHistPVx(0),
    fHistPVy(0),
    fHistPVz(0),
@@ -223,11 +373,19 @@ fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
 }
 
 AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCascade(const char *name) 
-  : AliAnalysisTaskSE(name), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0),
+  : AliAnalysisTaskSE(name), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
    fkIsNuclear   ( kFALSE ), 
    fkSwitchINT7  ( kFALSE ),
    fpArapidityShift ( 0.465 ),
    fCentralityEstimator("V0M"),
+   fkpAVertexSelection( kFALSE ),
+   fEtaRefMult ( 0.5 ),
+   fkRunVertexers ( kFALSE ),
+   fkCheckSwapping( kFALSE ),
+fkSelectCentrality (kFALSE),
+fCentSel_Low(0.0),
+fCentSel_High(0.0),
+fLowPtCutoff(0.0),
 //------------------------------------------------
 // Tree Variables
 //------------------------------------------------
@@ -253,6 +411,7 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarCascRadius(0),
    fTreeCascVarV0Mass(0),
    fTreeCascVarV0CosPointingAngle(0),
+   fTreeCascVarV0CosPointingAngleSpecial(0),
    fTreeCascVarV0Radius(0),
    fTreeCascVarLeastNbrClusters(0),
    fTreeCascVarMultiplicity(0),
@@ -260,11 +419,15 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarMultiplicityZNA(0),
    fTreeCascVarMultiplicityTRK(0),
    fTreeCascVarMultiplicitySPD(0),
+   fTreeCascVarMultiplicityMC(0),
    fTreeCascVarDistOverTotMom(0),
+   fTreeCascVarIsPhysicalPrimary(0),
    fTreeCascVarPID(0),
+   fTreeCascVarPIDSwapped(0),
    fTreeCascVarPIDBachelor(0),
    fTreeCascVarPIDNegative(0),
    fTreeCascVarPIDPositive(0),
+   fTreeCascVarBachTransMom(0),
    fTreeCascVarPosTransMom(0),
    fTreeCascVarNegTransMom(0),
    fTreeCascVarPosTransMomMC(0),
@@ -276,6 +439,41 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarBachNSigmaPion(0),
    fTreeCascVarBachNSigmaKaon(0),
 
+   fTreeCascVarkITSRefitBachelor(0),
+   fTreeCascVarkITSRefitNegative(0),
+   fTreeCascVarkITSRefitPositive(0),
+   
+    fTreeCascVarNegClusters(0),
+    fTreeCascVarPosClusters(0),
+    fTreeCascVarBachClusters(0),
+    fTreeCascVarNegSharedClusters(0),
+    fTreeCascVarPosSharedClusters(0),
+    fTreeCascVarBachSharedClusters(0),
+
+   fTreeCascVarEvHasXiMinus(0),
+   fTreeCascVarEvHasXiPlus(0),
+   fTreeCascVarEvHasOmegaMinus(0),
+   fTreeCascVarEvHasOmegaPlus(0),
+   fTreeCascVarEvHasLambda(0),
+   fTreeCascVarEvHasAntiLambda(0),
+
+   fTreeCascVarEvHasLowPtXiMinus(0),
+   fTreeCascVarEvHasLowPtXiPlus(0),
+   fTreeCascVarEvHasLowPtOmegaMinus(0),
+   fTreeCascVarEvHasLowPtOmegaPlus(0),
+   fTreeCascVarEvHasLowPtLambda(0),
+   fTreeCascVarEvHasLowPtAntiLambda(0),
+
+   fTreeCascVarEvHasVeryLowPtXiMinus(0),
+   fTreeCascVarEvHasVeryLowPtXiPlus(0),
+   fTreeCascVarEvHasVeryLowPtOmegaMinus(0),
+   fTreeCascVarEvHasVeryLowPtOmegaPlus(0),
+   fTreeCascVarEvHasVeryLowPtLambda(0),
+   fTreeCascVarEvHasVeryLowPtAntiLambda(0),
+   
+    fTreeCascVarBadCascadeJai(0),
+    fTreeCascVarDeltaDCA(0),
+
 //------------------------------------------------
 // HISTOGRAMS
 // --- Filled on an Event-by-event basis
@@ -339,6 +537,107 @@ fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
    f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
    f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
    f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
+
+//MC Mult
+
+f3dHistGenPtVsYVsMultMCXiMinus(0),
+f3dHistGenPtVsYVsMultMCXiPlus(0),
+f3dHistGenPtVsYVsMultMCOmegaMinus(0),
+f3dHistGenPtVsYVsMultMCOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultMCXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultMCXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultMCOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultMCOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultMCXiMinus(0),
+f3dHistGenPtVsYCMSVsMultMCXiPlus(0),
+f3dHistGenPtVsYCMSVsMultMCOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultMCOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus(0),
+
+//V0A
+
+f3dHistGenPtVsYVsMultV0AXiMinus(0),
+f3dHistGenPtVsYVsMultV0AXiPlus(0),
+f3dHistGenPtVsYVsMultV0AOmegaMinus(0),
+f3dHistGenPtVsYVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus(0),
+
+//ZNA
+
+f3dHistGenPtVsYVsMultZNAXiMinus(0),
+f3dHistGenPtVsYVsMultZNAXiPlus(0),
+f3dHistGenPtVsYVsMultZNAOmegaMinus(0),
+f3dHistGenPtVsYVsMultZNAOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
+f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
+f3dHistGenPtVsYCMSVsMultZNAOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultZNAOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus(0),
+
+//TRK
+
+f3dHistGenPtVsYVsMultTRKXiMinus(0),
+f3dHistGenPtVsYVsMultTRKXiPlus(0),
+f3dHistGenPtVsYVsMultTRKOmegaMinus(0),
+f3dHistGenPtVsYVsMultTRKOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
+f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
+f3dHistGenPtVsYCMSVsMultTRKOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultTRKOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus(0),
+
+//SPD
+
+f3dHistGenPtVsYVsMultSPDXiMinus(0),
+f3dHistGenPtVsYVsMultSPDXiPlus(0),
+f3dHistGenPtVsYVsMultSPDOmegaMinus(0),
+f3dHistGenPtVsYVsMultSPDOmegaPlus(0),
+f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
+f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
+f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus(0),
+f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus(0),
+f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
+f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
+f3dHistGenPtVsYCMSVsMultSPDOmegaMinus(0),
+f3dHistGenPtVsYCMSVsMultSPDOmegaPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus(0),
+f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus(0),
+
+
    fHistPVx(0),
    fHistPVy(0),
    fHistPVz(0),
@@ -352,23 +651,23 @@ fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
         
         // New Loose : 1st step for the 7 TeV pp analysis
         
-        fV0Sels[0] =  33.  ;  // max allowed chi2
-        fV0Sels[1] =   0.02;  // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
-        fV0Sels[2] =   0.02;  // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
-        fV0Sels[3] =   2.0 ;  // max allowed DCA between the daughter tracks       (LHC09a4 : 0.5)
-        fV0Sels[4] =   0.95;  // min allowed cosine of V0's pointing angle         (LHC09a4 : 0.99)
-        fV0Sels[5] =   1.0 ;  // min radius of the fiducial volume                 (LHC09a4 : 0.2)
-        fV0Sels[6] = 100.  ;  // max radius of the fiducial volume                 (LHC09a4 : 100.0)
+        fV0VertexerSels[0] =  33.  ;  // max allowed chi2
+        fV0VertexerSels[1] =   0.02;  // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
+        fV0VertexerSels[2] =   0.02;  // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
+        fV0VertexerSels[3] =   2.0 ;  // max allowed DCA between the daughter tracks       (LHC09a4 : 0.5)
+        fV0VertexerSels[4] =   0.95;  // min allowed cosine of V0's pointing angle         (LHC09a4 : 0.99)
+        fV0VertexerSels[5] =   1.0 ;  // min radius of the fiducial volume                 (LHC09a4 : 0.2)
+        fV0VertexerSels[6] = 200.  ;  // max radius of the fiducial volume                 (LHC09a4 : 100.0)
+        
+        fCascadeVertexerSels[0] =  33.   ;  // max allowed chi2 (same as PDC07)
+        fCascadeVertexerSels[1] =   0.05 ;  // min allowed V0 impact parameter                    (PDC07 : 0.05   / LHC09a4 : 0.025 )
+        fCascadeVertexerSels[2] =   0.010;  // "window" around the Lambda mass                    (PDC07 : 0.008  / LHC09a4 : 0.010 )
+        fCascadeVertexerSels[3] =   0.03 ;  // min allowed bachelor's impact parameter            (PDC07 : 0.035  / LHC09a4 : 0.025 )
+        fCascadeVertexerSels[4] =   2.0  ;  // max allowed DCA between the V0 and the bachelor    (PDC07 : 0.1    / LHC09a4 : 0.2   )
+        fCascadeVertexerSels[5] =   0.95 ;  // min allowed cosine of the cascade pointing angle   (PDC07 : 0.9985 / LHC09a4 : 0.998 )
+        fCascadeVertexerSels[6] =   0.4  ;  // min radius of the fiducial volume                  (PDC07 : 0.9    / LHC09a4 : 0.2   )
+        fCascadeVertexerSels[7] = 100.   ;  // max radius of the fiducial volume                  (PDC07 : 100    / LHC09a4 : 100   )
         
-        fCascSels[0] =  33.   ;  // max allowed chi2 (same as PDC07)
-        fCascSels[1] =   0.05 ;  // min allowed V0 impact parameter                    (PDC07 : 0.05   / LHC09a4 : 0.025 )
-        fCascSels[2] =   0.010;  // "window" around the Lambda mass                    (PDC07 : 0.008  / LHC09a4 : 0.010 )
-        fCascSels[3] =   0.03 ;  // min allowed bachelor's impact parameter            (PDC07 : 0.035  / LHC09a4 : 0.025 )
-        fCascSels[4] =   2.0  ;  // max allowed DCA between the V0 and the bachelor    (PDC07 : 0.1    / LHC09a4 : 0.2   )
-        fCascSels[5] =   0.95 ;  // min allowed cosine of the cascade pointing angle   (PDC07 : 0.9985 / LHC09a4 : 0.998 )
-        fCascSels[6] =   0.4  ;  // min radius of the fiducial volume                  (PDC07 : 0.9    / LHC09a4 : 0.2   )
-        fCascSels[7] = 100.   ;  // max radius of the fiducial volume                  (PDC07 : 100    / LHC09a4 : 100   )
-
    // Output slot #0 writes into a TList container (Cascade)
    DefineOutput(1, TList::Class());
    DefineOutput(2, TTree::Class());
@@ -394,6 +693,10 @@ AliAnalysisTaskExtractPerformanceCascade::~AliAnalysisTaskExtractPerformanceCasc
     delete fESDtrackCuts;
     fESDtrackCuts = 0x0; 
   }
+  if (fUtils){
+    delete fUtils;
+    fUtils = 0x0;
+  }
 
 }
 
@@ -438,21 +741,33 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
 /*19*/         fTreeCascade->Branch("fTreeCascVarCascRadius",&fTreeCascVarCascRadius,"fTreeCascVarCascRadius/F");
 /*20*/         fTreeCascade->Branch("fTreeCascVarV0Mass",&fTreeCascVarV0Mass,"fTreeCascVarV0Mass/F");
 /*21*/         fTreeCascade->Branch("fTreeCascVarV0CosPointingAngle",&fTreeCascVarV0CosPointingAngle,"fTreeCascVarV0CosPointingAngle/F");
+/*21*/         fTreeCascade->Branch("fTreeCascVarV0CosPointingAngleSpecial",&fTreeCascVarV0CosPointingAngleSpecial,"fTreeCascVarV0CosPointingAngleSpecial/F");
 /*22*/         fTreeCascade->Branch("fTreeCascVarV0Radius",&fTreeCascVarV0Radius,"fTreeCascVarV0Radius/F");
 /*23*/         fTreeCascade->Branch("fTreeCascVarLeastNbrClusters",&fTreeCascVarLeastNbrClusters,"fTreeCascVarLeastNbrClusters/I");
+
+/*23*/         fTreeCascade->Branch("fTreeCascVarNegClusters",&fTreeCascVarNegClusters,"fTreeCascVarNegClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarPosClusters",&fTreeCascVarPosClusters,"fTreeCascVarPosClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarBachClusters",&fTreeCascVarBachClusters,"fTreeCascVarBachClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarNegSharedClusters",&fTreeCascVarNegSharedClusters,"fTreeCascVarNegSharedClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarPosSharedClusters",&fTreeCascVarPosSharedClusters,"fTreeCascVarPosSharedClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarBachSharedClusters",&fTreeCascVarBachSharedClusters,"fTreeCascVarBachSharedClusters/I");
 //-----------MULTIPLICITY-INFO--------------------
 /*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicity",&fTreeCascVarMultiplicity,"fTreeCascVarMultiplicity/I");
 /*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicityV0A",&fTreeCascVarMultiplicityV0A,"fTreeCascVarMultiplicityV0A/I");
 /*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicityZNA",&fTreeCascVarMultiplicityZNA,"fTreeCascVarMultiplicityZNA/I");
 /*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicityTRK",&fTreeCascVarMultiplicityTRK,"fTreeCascVarMultiplicityTRK/I");
 /*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicitySPD",&fTreeCascVarMultiplicitySPD,"fTreeCascVarMultiplicitySPD/I");
+/*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicityMC",&fTreeCascVarMultiplicityMC,"fTreeCascVarMultiplicityMC/I");
 //-----------DECAY-LENGTH-INFO--------------------
 /*25*/         fTreeCascade->Branch("fTreeCascVarDistOverTotMom",&fTreeCascVarDistOverTotMom,"fTreeCascVarDistOverTotMom/F");
 //-----------MC-PID-------------------------------
+/*25bis*/ fTreeCascade->Branch("fTreeCascVarIsPhysicalPrimary",&fTreeCascVarIsPhysicalPrimary,"fTreeCascVarIsPhysicalPrimary/I");
 /*26*/         fTreeCascade->Branch("fTreeCascVarPID",&fTreeCascVarPID,"fTreeCascVarPID/I");
+/*26*/         fTreeCascade->Branch("fTreeCascVarPIDSwapped",&fTreeCascVarPIDSwapped,"fTreeCascVarPIDSwapped/I");
 /*27*/         fTreeCascade->Branch("fTreeCascVarPIDBachelor",&fTreeCascVarPIDBachelor,"fTreeCascVarPIDBachelor/I");
 /*28*/    fTreeCascade->Branch("fTreeCascVarPIDNegative",&fTreeCascVarPIDNegative,"fTreeCascVarPIDNegative/I");
 /*29*/    fTreeCascade->Branch("fTreeCascVarPIDPositive",&fTreeCascVarPIDPositive,"fTreeCascVarPIDPositive/I");
+/*30*/         fTreeCascade->Branch("fTreeCascVarBachTransMom",&fTreeCascVarBachTransMom,"fTreeCascVarBachTransMom/F");
 /*30*/         fTreeCascade->Branch("fTreeCascVarPosTransMom",&fTreeCascVarPosTransMom,"fTreeCascVarPosTransMom/F");
 /*31*/         fTreeCascade->Branch("fTreeCascVarNegTransMom",&fTreeCascVarNegTransMom,"fTreeCascVarNegTransMom/F");
 /*32*/         fTreeCascade->Branch("fTreeCascVarPosTransMomMC",&fTreeCascVarPosTransMomMC,"fTreeCascVarPosTransMomMC/F");
@@ -465,6 +780,41 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
 /*38*/         fTreeCascade->Branch("fTreeCascVarBachNSigmaPion",&fTreeCascVarBachNSigmaPion,"fTreeCascVarBachNSigmaPion/F");
 /*39*/         fTreeCascade->Branch("fTreeCascVarBachNSigmaKaon",&fTreeCascVarBachNSigmaKaon,"fTreeCascVarBachNSigmaKaon/F");
 
+/*29*/         fTreeCascade->Branch("fTreeCascVarkITSRefitBachelor",&fTreeCascVarkITSRefitBachelor,"fTreeCascVarkITSRefitBachelor/O");
+/*29*/         fTreeCascade->Branch("fTreeCascVarkITSRefitNegative",&fTreeCascVarkITSRefitNegative,"fTreeCascVarkITSRefitNegative/O");
+/*29*/         fTreeCascade->Branch("fTreeCascVarkITSRefitPositive",&fTreeCascVarkITSRefitPositive,"fTreeCascVarkITSRefitPositive/O");
+
+      fTreeCascade->Branch("fTreeCascVarNegClusters",&fTreeCascVarNegClusters,"fTreeCascVarNegClusters/I");
+      fTreeCascade->Branch("fTreeCascVarPosClusters",&fTreeCascVarPosClusters,"fTreeCascVarPosClusters/I");
+      fTreeCascade->Branch("fTreeCascVarBachClusters",&fTreeCascVarBachClusters,"fTreeCascVarBachClusters/I");
+      fTreeCascade->Branch("fTreeCascVarNegSharedClusters",&fTreeCascVarNegSharedClusters,"fTreeCascVarNegSharedClusters/I");
+      fTreeCascade->Branch("fTreeCascVarPosSharedClusters",&fTreeCascVarPosSharedClusters,"fTreeCascVarPosSharedClusters/I");
+      fTreeCascade->Branch("fTreeCascVarBachSharedClusters",&fTreeCascVarBachSharedClusters,"fTreeCascVarBachSharedClusters/I");
+
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasXiMinus",   &fTreeCascVarEvHasXiMinus,   "fTreeCascVarEvHasXiMinus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasXiPlus",    &fTreeCascVarEvHasXiPlus,    "fTreeCascVarEvHasXiPlus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasOmegaMinus",&fTreeCascVarEvHasOmegaMinus,"fTreeCascVarEvHasOmegaMinus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasOmegaPlus", &fTreeCascVarEvHasOmegaPlus, "fTreeCascVarEvHasOmegaPlus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasLambda",    &fTreeCascVarEvHasLambda,    "fTreeCascVarEvHasLambda/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasAntiLambda",&fTreeCascVarEvHasAntiLambda,"fTreeCascVarEvHasAntiLambda/O");
+
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasLowPtXiMinus",   &fTreeCascVarEvHasLowPtXiMinus,   "fTreeCascVarEvHasLowPtXiMinus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasLowPtXiPlus",    &fTreeCascVarEvHasLowPtXiPlus,    "fTreeCascVarEvHasLowPtXiPlus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasLowPtOmegaMinus",&fTreeCascVarEvHasLowPtOmegaMinus,"fTreeCascVarEvHasLowPtOmegaMinus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasLowPtOmegaPlus", &fTreeCascVarEvHasLowPtOmegaPlus, "fTreeCascVarEvHasLowPtOmegaPlus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasLowPtLambda",    &fTreeCascVarEvHasLowPtLambda,    "fTreeCascVarEvHasLowPtLambda/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasLowPtAntiLambda",&fTreeCascVarEvHasLowPtAntiLambda,"fTreeCascVarEvHasLowPtAntiLambda/O");
+
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtXiMinus",   &fTreeCascVarEvHasVeryLowPtXiMinus,   "fTreeCascVarEvHasVeryLowPtXiMinus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtXiPlus",    &fTreeCascVarEvHasVeryLowPtXiPlus,    "fTreeCascVarEvHasVeryLowPtXiPlus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtOmegaMinus",&fTreeCascVarEvHasVeryLowPtOmegaMinus,"fTreeCascVarEvHasVeryLowPtOmegaMinus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtOmegaPlus", &fTreeCascVarEvHasVeryLowPtOmegaPlus, "fTreeCascVarEvHasVeryLowPtOmegaPlus/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtLambda",    &fTreeCascVarEvHasVeryLowPtLambda,    "fTreeCascVarEvHasVeryLowPtLambda/O");
+/*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtAntiLambda",&fTreeCascVarEvHasVeryLowPtAntiLambda,"fTreeCascVarEvHasVeryLowPtAntiLambda/O");
+
+      fTreeCascade->Branch("fTreeCascVarBadCascadeJai",&fTreeCascVarBadCascadeJai,"fTreeCascVarBadCascadeJai/O");
+      fTreeCascade->Branch("fTreeCascVarDeltaDCA",&fTreeCascVarDeltaDCA,"fTreeCascVarDeltaDCA/F");
+
 //------------------------------------------------
 // Particle Identification Setup
 //------------------------------------------------
@@ -475,9 +825,12 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
 
 // Multiplicity 
 
-    if(! fESDtrackCuts ){
-          fESDtrackCuts = new AliESDtrackCuts();
-    }
+  if(! fESDtrackCuts ){
+    fESDtrackCuts = new AliESDtrackCuts();
+  }
+  if(! fUtils ){
+    fUtils = new AliAnalysisUtils();
+  }
 
 //------------------------------------------------
 // V0 Multiplicity Histograms
@@ -789,7 +1142,495 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
       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);
       fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus);
    }
+  
+  //======================================================================================
+  //--------------------------------------------------------------------------------------
+  // True Generated (For Multiplicity Unfolding)
+  //--------------------------------------------------------------------------------------
+  //======================================================================================
+  
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
+  
+  if(! f3dHistGenPtVsYVsMultMCXiMinus) {
+    f3dHistGenPtVsYVsMultMCXiMinus = new TH3F( "f3dHistGenPtVsYVsMultMCXiMinus", "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);
+    fListHist->Add(f3dHistGenPtVsYVsMultMCXiMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultMCXiPlus) {
+    f3dHistGenPtVsYVsMultMCXiPlus = new TH3F( "f3dHistGenPtVsYVsMultMCXiPlus", "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);
+    fListHist->Add(f3dHistGenPtVsYVsMultMCXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYVsMultMCOmegaMinus) {
+    f3dHistGenPtVsYVsMultMCOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultMCOmegaMinus", "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);
+    fListHist->Add(f3dHistGenPtVsYVsMultMCOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultMCOmegaPlus) {
+    f3dHistGenPtVsYVsMultMCOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultMCOmegaPlus", "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);
+    fListHist->Add(f3dHistGenPtVsYVsMultMCOmegaPlus);
+  }
+  
+  //All generated cascades, YCMS
+  
+  if(! f3dHistGenPtVsYCMSVsMultMCXiMinus) {
+    f3dHistGenPtVsYCMSVsMultMCXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCXiMinus", "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);
+    fListHist->Add(f3dHistGenPtVsYCMSVsMultMCXiMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultMCXiPlus) {
+    f3dHistGenPtVsYCMSVsMultMCXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCXiPlus", "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);
+    fListHist->Add(f3dHistGenPtVsYCMSVsMultMCXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYCMSVsMultMCOmegaMinus) {
+    f3dHistGenPtVsYCMSVsMultMCOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCOmegaMinus", "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);
+    fListHist->Add(f3dHistGenPtVsYCMSVsMultMCOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultMCOmegaPlus) {
+    f3dHistGenPtVsYCMSVsMultMCOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCOmegaPlus", "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);
+    fListHist->Add(f3dHistGenPtVsYCMSVsMultMCOmegaPlus);
+  }
+  
+
+  //--------------------------------------------------------------------------------------
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+  
+  if(! f3dHistGenSelectedPtVsYVsMultMCXiMinus) {
+    f3dHistGenSelectedPtVsYVsMultMCXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCXiMinus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultMCXiPlus) {
+    f3dHistGenSelectedPtVsYVsMultMCXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCXiPlus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYVsMultMCOmegaMinus) {
+    f3dHistGenSelectedPtVsYVsMultMCOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCOmegaMinus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultMCOmegaPlus) {
+    f3dHistGenSelectedPtVsYVsMultMCOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCOmegaPlus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCOmegaPlus);
+  }
+  
+  //ANALYSIS level Cascades, YCMS
+  
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus", "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);
+    fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus);
+  }
+
+  //======================================================================================
+  //--------------------------------------------------------------------------------------
+  // V0A
+  //--------------------------------------------------------------------------------------
+  //======================================================================================
+  
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
+  
+  if(! f3dHistGenPtVsYVsMultV0AXiMinus) {
+    f3dHistGenPtVsYVsMultV0AXiMinus = new TH3F( "f3dHistGenPtVsYVsMultV0AXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AXiMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultV0AXiPlus) {
+    f3dHistGenPtVsYVsMultV0AXiPlus = new TH3F( "f3dHistGenPtVsYVsMultV0AXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYVsMultV0AOmegaMinus) {
+    f3dHistGenPtVsYVsMultV0AOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultV0AOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultV0AOmegaPlus) {
+    f3dHistGenPtVsYVsMultV0AOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultV0AOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AOmegaPlus);
+  }
+  
+  //All generated cascades, YCMS
+  
+  if(! f3dHistGenPtVsYCMSVsMultV0AXiMinus) {
+    f3dHistGenPtVsYCMSVsMultV0AXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AXiMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultV0AXiPlus) {
+    f3dHistGenPtVsYCMSVsMultV0AXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYCMSVsMultV0AOmegaMinus) {
+    f3dHistGenPtVsYCMSVsMultV0AOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultV0AOmegaPlus) {
+    f3dHistGenPtVsYCMSVsMultV0AOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AOmegaPlus);
+  }
+  
+  
+  //--------------------------------------------------------------------------------------
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+  
+  if(! f3dHistGenSelectedPtVsYVsMultV0AXiMinus) {
+    f3dHistGenSelectedPtVsYVsMultV0AXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultV0AXiPlus) {
+    f3dHistGenSelectedPtVsYVsMultV0AXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus) {
+    f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus) {
+    f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus);
+  }
+  
+  //ANALYSIS level Cascades, YCMS
+  
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus);
+  }
+  
+    //Cross-check primary selection criteria
+    //Should not impact much but inspired by rumors of DPMJet issues with primary selection (?)
+    
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus", "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);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus);
+    }
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus", "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);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus);
+    }
+    //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+    
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus", "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);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus);
+    }
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus", "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);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus);
+    }
+  
+  //======================================================================================
+  //--------------------------------------------------------------------------------------
+  // ZNA
+  //--------------------------------------------------------------------------------------
+  //======================================================================================
+  
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
+  
+  if(! f3dHistGenPtVsYVsMultZNAXiMinus) {
+    f3dHistGenPtVsYVsMultZNAXiMinus = new TH3F( "f3dHistGenPtVsYVsMultZNAXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAXiMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultZNAXiPlus) {
+    f3dHistGenPtVsYVsMultZNAXiPlus = new TH3F( "f3dHistGenPtVsYVsMultZNAXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYVsMultZNAOmegaMinus) {
+    f3dHistGenPtVsYVsMultZNAOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultZNAOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultZNAOmegaPlus) {
+    f3dHistGenPtVsYVsMultZNAOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultZNAOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAOmegaPlus);
+  }
+  
+  //All generated cascades, YCMS
+  
+  if(! f3dHistGenPtVsYCMSVsMultZNAXiMinus) {
+    f3dHistGenPtVsYCMSVsMultZNAXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAXiMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultZNAXiPlus) {
+    f3dHistGenPtVsYCMSVsMultZNAXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYCMSVsMultZNAOmegaMinus) {
+    f3dHistGenPtVsYCMSVsMultZNAOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultZNAOmegaPlus) {
+    f3dHistGenPtVsYCMSVsMultZNAOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAOmegaPlus);
+  }
+  
+  
+  //--------------------------------------------------------------------------------------
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+  
+  if(! f3dHistGenSelectedPtVsYVsMultZNAXiMinus) {
+    f3dHistGenSelectedPtVsYVsMultZNAXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultZNAXiPlus) {
+    f3dHistGenSelectedPtVsYVsMultZNAXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus) {
+    f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus) {
+    f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus);
+  }
+  
+  //ANALYSIS level Cascades, YCMS
+  
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus);
+  }
 
+  
+  //======================================================================================
+  //--------------------------------------------------------------------------------------
+  // TRK
+  //--------------------------------------------------------------------------------------
+  //======================================================================================
+  
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
+  
+  if(! f3dHistGenPtVsYVsMultTRKXiMinus) {
+    f3dHistGenPtVsYVsMultTRKXiMinus = new TH3F( "f3dHistGenPtVsYVsMultTRKXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKXiMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultTRKXiPlus) {
+    f3dHistGenPtVsYVsMultTRKXiPlus = new TH3F( "f3dHistGenPtVsYVsMultTRKXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYVsMultTRKOmegaMinus) {
+    f3dHistGenPtVsYVsMultTRKOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultTRKOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultTRKOmegaPlus) {
+    f3dHistGenPtVsYVsMultTRKOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultTRKOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKOmegaPlus);
+  }
+  
+  //All generated cascades, YCMS
+  
+  if(! f3dHistGenPtVsYCMSVsMultTRKXiMinus) {
+    f3dHistGenPtVsYCMSVsMultTRKXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKXiMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultTRKXiPlus) {
+    f3dHistGenPtVsYCMSVsMultTRKXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYCMSVsMultTRKOmegaMinus) {
+    f3dHistGenPtVsYCMSVsMultTRKOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultTRKOmegaPlus) {
+    f3dHistGenPtVsYCMSVsMultTRKOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKOmegaPlus);
+  }
+  
+  
+  //--------------------------------------------------------------------------------------
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+  
+  if(! f3dHistGenSelectedPtVsYVsMultTRKXiMinus) {
+    f3dHistGenSelectedPtVsYVsMultTRKXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultTRKXiPlus) {
+    f3dHistGenSelectedPtVsYVsMultTRKXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus) {
+    f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus) {
+    f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus);
+  }
+  
+  //ANALYSIS level Cascades, YCMS
+  
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus);
+  }
+  
+  //======================================================================================
+  //--------------------------------------------------------------------------------------
+  // SPD
+  //--------------------------------------------------------------------------------------
+  //======================================================================================
+  
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
+  
+  if(! f3dHistGenPtVsYVsMultSPDXiMinus) {
+    f3dHistGenPtVsYVsMultSPDXiMinus = new TH3F( "f3dHistGenPtVsYVsMultSPDXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDXiMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultSPDXiPlus) {
+    f3dHistGenPtVsYVsMultSPDXiPlus = new TH3F( "f3dHistGenPtVsYVsMultSPDXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYVsMultSPDOmegaMinus) {
+    f3dHistGenPtVsYVsMultSPDOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultSPDOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYVsMultSPDOmegaPlus) {
+    f3dHistGenPtVsYVsMultSPDOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultSPDOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDOmegaPlus);
+  }
+  
+  //All generated cascades, YCMS
+  
+  if(! f3dHistGenPtVsYCMSVsMultSPDXiMinus) {
+    f3dHistGenPtVsYCMSVsMultSPDXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDXiMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultSPDXiPlus) {
+    f3dHistGenPtVsYCMSVsMultSPDXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenPtVsYCMSVsMultSPDOmegaMinus) {
+    f3dHistGenPtVsYCMSVsMultSPDOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDOmegaMinus);
+  }
+  if(! f3dHistGenPtVsYCMSVsMultSPDOmegaPlus) {
+    f3dHistGenPtVsYCMSVsMultSPDOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDOmegaPlus);
+  }
+  
+  
+  //--------------------------------------------------------------------------------------
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+  
+  if(! f3dHistGenSelectedPtVsYVsMultSPDXiMinus) {
+    f3dHistGenSelectedPtVsYVsMultSPDXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultSPDXiPlus) {
+    f3dHistGenSelectedPtVsYVsMultSPDXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus) {
+    f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus) {
+    f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus);
+  }
+  
+  //ANALYSIS level Cascades, YCMS
+  
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus);
+  }
+  //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+  
+  if(! f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus) {
+    f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus);
+  }
+  if(! f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus) {
+    f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus", "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);
+    if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus);
+  }
+  
 //----------------------------------
 // Primary Vertex Position Histos
 //----------------------------------
@@ -905,8 +1746,32 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
    Int_t lMultiplicitySPD = -100;
 
    //testing purposes
-   if(fkIsNuclear == kFALSE) lMultiplicity =  fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
+   if(fkIsNuclear == kFALSE) lMultiplicity =  fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,  fEtaRefMult );
 
+  //--------- 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 ------------------------------------------------------------
+
+  
    //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
    //---> Warning: Experimental
    if(fkIsNuclear == kTRUE){ 
@@ -916,20 +1781,30 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
       lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "V0A" ) ) );
       lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "ZNA" ) ) );
       lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "TRK" ) ) );
-      lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "SPD" ) ) );
+      lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "CL1" ) ) );
       if (centrality->GetQuality()>1) {
         PostData(1, fListHist);
         PostData(2, fTreeCascade);
         return;
       }
    }
+    
+    if( fkSelectCentrality ){
+        if( lMultiplicity < fCentSel_Low || lMultiplicity >= fCentSel_High ){
+            //Event is outside desired centrality centrality in V0M!
+            PostData(1, fListHist);
+            PostData(2, fTreeCascade);
+            return;
+        }
+    }
+    
   
    //Set variable for filling tree afterwards!
    //---> pp case......: GetReferenceMultiplicity
    //---> Pb-Pb case...: Centrality by V0M
 
    fTreeCascVarMultiplicity = lMultiplicity;
-   fTreeCascVarMultiplicity = lMultiplicity;
+   fTreeCascVarMultiplicityMC = lNumberOfCharged;
    fTreeCascVarMultiplicityV0A = lMultiplicityV0A;
    fTreeCascVarMultiplicityZNA = lMultiplicityZNA;
    fTreeCascVarMultiplicityTRK = lMultiplicityTRK;
@@ -968,6 +1843,29 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
 // Pre-Physics Selection
 //------------------------------------------------
 
+
+  fTreeCascVarEvHasXiMinus    = kFALSE; 
+  fTreeCascVarEvHasXiPlus     = kFALSE; 
+  fTreeCascVarEvHasOmegaMinus = kFALSE; 
+  fTreeCascVarEvHasOmegaPlus  = kFALSE; 
+  fTreeCascVarEvHasLambda     = kFALSE; 
+  fTreeCascVarEvHasAntiLambda = kFALSE; 
+
+  fTreeCascVarEvHasLowPtXiMinus    = kFALSE; 
+  fTreeCascVarEvHasLowPtXiPlus     = kFALSE; 
+  fTreeCascVarEvHasLowPtOmegaMinus = kFALSE; 
+  fTreeCascVarEvHasLowPtOmegaPlus  = kFALSE; 
+  fTreeCascVarEvHasLowPtLambda     = kFALSE; 
+  fTreeCascVarEvHasLowPtAntiLambda = kFALSE; 
+
+  fTreeCascVarEvHasVeryLowPtXiMinus    = kFALSE; 
+  fTreeCascVarEvHasVeryLowPtXiPlus     = kFALSE; 
+  fTreeCascVarEvHasVeryLowPtOmegaMinus = kFALSE; 
+  fTreeCascVarEvHasVeryLowPtOmegaPlus  = kFALSE; 
+  fTreeCascVarEvHasVeryLowPtLambda     = kFALSE; 
+  fTreeCascVarEvHasVeryLowPtAntiLambda = kFALSE; 
+
+
 //----- Loop on primary Xi, Omega --------------------------------------------------------------
    for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) 
    {// This is the begining of the loop on primaries
@@ -978,6 +1876,29 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
          Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
          continue;
       }
+
+      //Event Type Acquisition
+      if(lCurrentParticlePrimary->GetPdgCode() == 3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasXiMinus     = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasXiPlus      = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() == 3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasOmegaMinus  = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasOmegaPlus   = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() == 3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasLambda      = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasAntiLambda  = kTRUE; }
+
+      if(lCurrentParticlePrimary->GetPdgCode() == 3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtXiMinus     = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtXiPlus      = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() == 3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtOmegaMinus  = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtOmegaPlus   = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() == 3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtLambda      = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtAntiLambda  = kTRUE; }
+
+      if(lCurrentParticlePrimary->GetPdgCode() == 3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtXiMinus     = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtXiPlus      = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() == 3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtOmegaMinus  = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtOmegaPlus   = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() == 3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtLambda      = kTRUE; }
+      if(lCurrentParticlePrimary->GetPdgCode() ==-3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtAntiLambda  = kTRUE; }
+
       if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) { 
          Double_t lRapXiMCPrimary = -100;
          if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) { 
@@ -989,27 +1910,87 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
          //=================================================================================
          // Xi Histograms
          if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
-            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
-            f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
-            f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+           lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+           f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+           f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+           //MultMC
+           f3dHistGenPtVsYVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+           f3dHistGenPtVsYCMSVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
          if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){ 
-            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
-            f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
-            f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+           lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+           f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+           f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+           //MultMC
+           f3dHistGenPtVsYVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+           f3dHistGenPtVsYCMSVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
          // Omega Histograms
          if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){ 
-            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
-            f3dHistGenPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
-            f3dHistGenPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+           lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+           f3dHistGenPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+           f3dHistGenPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+            //MultMC
+           f3dHistGenPtVsYVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+           f3dHistGenPtVsYCMSVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenPtVsYVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenPtVsYCMSVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenPtVsYVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenPtVsYCMSVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenPtVsYVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenPtVsYCMSVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenPtVsYVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenPtVsYCMSVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
-         if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){ 
+         if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
             f3dHistGenPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
             f3dHistGenPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+            //MultMC
+            f3dHistGenPtVsYVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+            f3dHistGenPtVsYCMSVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenPtVsYVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenPtVsYCMSVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenPtVsYVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenPtVsYCMSVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenPtVsYVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenPtVsYCMSVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenPtVsYVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenPtVsYCMSVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
-      } 
+      }
    }
 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
 
@@ -1039,19 +2020,20 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
 //------------------------------------------------
 // Rerun cascade vertexer! 
 //------------------------------------------------
-/*
-  lESDevent->ResetCascades();
-  lESDevent->ResetV0s();
-
-  AliV0vertexer lV0vtxer;
-  AliCascadeVertexer lCascVtxer;
-                
-  lV0vtxer.SetDefaultCuts(fV0Sels);
-  lCascVtxer.SetDefaultCuts(fCascSels);
-
-  lV0vtxer.Tracks2V0vertices(lESDevent);
-  lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
-*/
+
+  if( fkRunVertexers ){ 
+    lESDevent->ResetCascades();
+    lESDevent->ResetV0s();
+
+    AliV0vertexer lV0vtxer;
+    AliCascadeVertexer lCascVtxer;
+                  
+    lV0vtxer.SetDefaultCuts(fV0VertexerSels);
+    lCascVtxer.SetDefaultCuts(fCascadeVertexerSels);
+
+    lV0vtxer.Tracks2V0vertices(lESDevent);
+    lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
+  }
 //------------------------------------------------
 // After Trigger Selection
 //------------------------------------------------
@@ -1090,20 +2072,57 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
    fHistPVy->Fill( lPrimaryVtxPosition[1] );
    fHistPVz->Fill( lPrimaryVtxPosition[2] );
 
-//------------------------------------------------
-// Primary Vertex Z position: SKIP
-//------------------------------------------------
-
-   if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 ) { 
-      AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !"); 
-        PostData(1, fListHist);
-        PostData(2, fTreeCascade);
-      return; 
-   }
-
-   lMagneticField = lESDevent->GetMagneticField( );
-   fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
-   fHistMultiplicity->Fill(lMultiplicity);
+  //------------------------------------------------
+  // Primary Vertex Requirements Section:
+  //  ---> pp and PbPb: Only requires |z|<10cm
+  //  ---> pPb: all requirements checked at this stage
+  //------------------------------------------------
+  
+  //Roberto's PV selection criteria, implemented 17th April 2013
+  
+  /* vertex selection */
+  Bool_t fHasVertex = kFALSE;
+  
+  const AliESDVertex *vertex = lESDevent->GetPrimaryVertexTracks();
+  if (vertex->GetNContributors() < 1) {
+    vertex = lESDevent->GetPrimaryVertexSPD();
+    if (vertex->GetNContributors() < 1) fHasVertex = kFALSE;
+    else fHasVertex = kTRUE;
+    TString vtxTyp = vertex->GetTitle();
+    Double_t cov[6]={0};
+    vertex->GetCovarianceMatrix(cov);
+    Double_t zRes = TMath::Sqrt(cov[5]);
+    if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE;
+  }
+  else fHasVertex = kTRUE;
+  
+  //Is First event in chunk rejection: Still present!
+  if(fkpAVertexSelection==kTRUE && fHasVertex == kFALSE) {
+    AliWarning("Pb / | PV does not satisfy selection criteria!");
+    PostData(1, fListHist);
+    PostData(2, fTreeCascade);
+    return;
+  }
+  
+  //Is First event in chunk rejection: Still present!
+  if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
+    AliWarning("Pb / | This is the first event in the chunk!");
+    PostData(1, fListHist);
+    PostData(2, fTreeCascade);
+    return;
+  }
+  
+  //17 April Fix: Always do primary vertex Z selection, after pA vertex selection from Roberto
+  if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
+    AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
+    PostData(1, fListHist);
+    PostData(2, fTreeCascade);
+    return;
+  }
+  
+  lMagneticField = lESDevent->GetMagneticField( );
+  fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
+  fHistMultiplicity->Fill(lMultiplicity);
   fHistMultiplicityV0A->Fill(lMultiplicityV0A);
   fHistMultiplicityZNA->Fill(lMultiplicityZNA);
   fHistMultiplicityTRK->Fill(lMultiplicityTRK);
@@ -1115,7 +2134,7 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
        
    const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
    const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
-   if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() ){
+   if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection==kFALSE ){
       AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
         PostData(1, fListHist);
         PostData(2, fTreeCascade);
@@ -1181,27 +2200,133 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
             f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
             f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+            //MultMC
+            f3dHistGenSelectedPtVsYVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+            f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenSelectedPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenSelectedPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenSelectedPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenSelectedPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
-         if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){ 
+         if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
             f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
             f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+            //MultMC
+            f3dHistGenSelectedPtVsYVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+            f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenSelectedPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenSelectedPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenSelectedPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenSelectedPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
          // Omega Histograms
          if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){ 
             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
             f3dHistGenSelectedPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
             f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+            //MultMC
+            f3dHistGenSelectedPtVsYVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+            f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
-         if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){ 
+         if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
             f3dHistGenSelectedPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
             f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+            //MultMC
+            f3dHistGenSelectedPtVsYVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
+            f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
+           //V0A
+           f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
+           f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+           //ZNA
+           f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
+           f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
+           //TRK
+           f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
+           f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
+           //SPD
+           f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
+           f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
          }
-      } 
+      }
    }
 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
 
+    
+    //----- Loop on primary Xi, Omega --------------------------------------------------------------
+    for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); 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) );
+                }
+            }
+            //IsPhysicalPrimary: Cross-check with old index test
+            // (cascades -> negligible difference ?... )
+            if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
+            
+            //=================================================================================
+            // Xi Histograms
+            if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+            if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+            // Omega Histograms
+            if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+            if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+        }
+    }
+    //----- End Loop on primary Xi, Omega ----------------------------------------------------------
+
+    
 //------------------------------------------------
 // MAIN CASCADE LOOP STARTS HERE
 //------------------------------------------------
@@ -1241,6 +2366,7 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
          Double_t lDcaPosToPrimVertexXi  = -1.;
          Double_t lDcaNegToPrimVertexXi  = -1.;
          Double_t lV0CosineOfPointingAngleXi = -1. ;
+         Double_t lV0CosineOfPointingAngleXiSpecial = -1. ;
          Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
          Double_t lV0RadiusXi = -1000.0;
          Double_t lV0quality  = 0.;
@@ -1334,10 +2460,24 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
                  continue;
          }
 
-   fTreeCascVarPosEta = pTrackXi->Eta();
-   fTreeCascVarNegEta = nTrackXi->Eta();
-   fTreeCascVarBachEta = bachTrackXi->Eta();
-  
+      fTreeCascVarPosEta = pTrackXi->Eta();
+      fTreeCascVarNegEta = nTrackXi->Eta();
+      fTreeCascVarBachEta = bachTrackXi->Eta();
+      
+            //Save shared clusters information
+      fTreeCascVarNegSharedClusters = nTrackXi->GetTPCnclsS(0,159);
+      fTreeCascVarPosSharedClusters = pTrackXi->GetTPCnclsS(0,159);
+      fTreeCascVarBachSharedClusters = bachTrackXi->GetTPCnclsS(0,159);
+      
+      Double_t lBMom[3], lNMom[3], lPMom[3];
+      xi->GetBPxPyPz( lBMom[0], lBMom[1], lBMom[2] );
+      xi->GetPPxPyPz( lPMom[0], lPMom[1], lPMom[2] );
+      xi->GetNPxPyPz( lNMom[0], lNMom[1], lNMom[2] );
+      
+      fTreeCascVarBachTransMom = TMath::Sqrt( lBMom[0]*lBMom[0] + lBMom[1]*lBMom[1] );
+      fTreeCascVarPosTransMom  = TMath::Sqrt( lPMom[0]*lPMom[0] + lPMom[1]*lPMom[1] );
+      fTreeCascVarNegTransMom  = TMath::Sqrt( lNMom[0]*lNMom[0] + lNMom[1]*lNMom[1] );
+      
     //------------------------------------------------
     // TPC dEdx information 
     //------------------------------------------------
@@ -1358,6 +2498,14 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
          lNegTPCClusters   = nTrackXi->GetTPCNcls();
          lBachTPCClusters  = bachTrackXi->GetTPCNcls(); 
 
+      fTreeCascVarNegClusters = lNegTPCClusters;
+      fTreeCascVarPosClusters = lPosTPCClusters;
+      fTreeCascVarBachClusters = lBachTPCClusters;
+
+    fTreeCascVarkITSRefitBachelor = kTRUE; 
+    fTreeCascVarkITSRefitNegative = kTRUE; 
+    fTreeCascVarkITSRefitPositive = kTRUE; 
+
     // 1 - Poor quality related to TPCrefit
          ULong_t pStatus    = pTrackXi->GetStatus();
          ULong_t nStatus    = nTrackXi->GetStatus();
@@ -1365,6 +2513,12 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
     if ((pStatus&AliESDtrack::kTPCrefit)    == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
     if ((nStatus&AliESDtrack::kTPCrefit)    == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
     if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach.   track has no TPCrefit ... continue!"); continue; }
+
+    //Extra Debug Information: booleans for ITS refit
+    if ((pStatus&AliESDtrack::kITSrefit)    == 0) { fTreeCascVarkITSRefitPositive = kFALSE; }
+    if ((nStatus&AliESDtrack::kITSrefit)    == 0) { fTreeCascVarkITSRefitNegative = kFALSE; }
+    if ((bachStatus&AliESDtrack::kITSrefit) == 0) { fTreeCascVarkITSRefitBachelor = kFALSE; }
+
          // 2 - Poor quality related to TPC clusters: lowest cut of 70 clusters
     if(lPosTPCClusters  < 70) { AliWarning("Pb / V0 Pos. track has less than 70 TPC clusters ... continue!"); continue; }
          if(lNegTPCClusters  < 70) { AliWarning("Pb / V0 Neg. track has less than 70 TPC clusters ... continue!"); continue; }
@@ -1382,6 +2536,10 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
          lV0CosineOfPointingAngleXi    = xi->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0],
                                                                            lBestPrimaryVtxPos[1],
                                                                            lBestPrimaryVtxPos[2] );
+    //Modification to check cosPA of v0 wrt to cascade vertex
+         lV0CosineOfPointingAngleXiSpecial     = xi->GetV0CosineOfPointingAngle( lPosXi[0],
+                                                                           lPosXi[1],
+                                                                           lPosXi[2] );
 
          lDcaV0ToPrimVertexXi          = xi->GetD( lBestPrimaryVtxPos[0], 
                                                      lBestPrimaryVtxPos[1], 
@@ -1475,7 +2633,7 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
        Int_t lPID_BachMother = 0;
        Int_t lPID_NegMother = 0;
        Int_t lPID_PosMother = 0;
-
+  fTreeCascVarIsPhysicalPrimary = 0; // 0: not defined, any candidate may have this
 
          fTreeCascVarPIDPositive = 0;
          fTreeCascVarPIDNegative = 0;
@@ -1499,8 +2657,8 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
 
          TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
          TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
-         TParticle* mcBach        = lMCstack->Particle( lblBach );     
-       
+         TParticle* mcBach        = lMCstack->Particle( lblBach );
+      
     fTreeCascVarPosTransMomMC = mcPosV0Dghter->Pt();
     fTreeCascVarNegTransMomMC = mcNegV0Dghter->Pt();
 
@@ -1551,6 +2709,9 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
          if(lPID_BachMother==lPID_NegMother && lPID_BachMother==lPID_PosMother){ 
                  lPDGCodeCascade = lPID_BachMother; 
       lXiTransvMomMC = mcMotherBach->Pt();
+      if( lMCstack->IsPhysicalPrimary       (lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 1; //Is Primary!
+      if( lMCstack->IsSecondaryFromWeakDecay(lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 2; //Weak Decay!
+      if( lMCstack->IsSecondaryFromMaterial (lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 3; //From Material!
       if ( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) !=0 ){
         lRapMC = 0.5*TMath::Log( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) );
       }
@@ -1558,9 +2719,123 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
 
   }}}}}}} //Ends all conditionals above...
 
-  //----------------------------------------
-  // Regular MC ASSOCIATION ENDS HERE
-  //----------------------------------------
+//----------------------------------------
+// Regular MC ASSOCIATION ENDS HERE
+//----------------------------------------
+
+//----------------------------------------
+// Swapped MC Association Starts Here 
+//----------------------------------------
+
+  fTreeCascVarPIDSwapped = 0; //Nothing
+  if ( fkCheckSwapping ) { //on/off switch if not needed or otherwise broken
+
+         Int_t lPID_BachMotherSwapped = 0;
+         Int_t lPID_NegMotherSwapped = 0;
+       Int_t lPID_PosMotherSwapped = 0;
+
+         Int_t lblPosV0DghterSwapped = (Int_t) TMath::Abs( pTrackXi->GetLabel() );  
+                 // Abs value = needed ! question of quality track association ...
+         Int_t lblNegV0DghterSwapped = (Int_t) TMath::Abs( nTrackXi->GetLabel() );
+         Int_t lblBachSwapped        = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
+
+    //This is SWAPPED association: swap like-sign particles
+    TParticle* mcPosV0DghterSwapped = 0x0;
+    TParticle* mcNegV0DghterSwapped = 0x0;
+    TParticle* mcBachSwapped        = 0x0;
+
+    //Swapping Case 1: XiMinus/OmegaMinus swapped: exchange negative V0 daughter with bachelor
+    if( lChargeXi == -1 ){ 
+      mcPosV0DghterSwapped = lMCstack->Particle( lblPosV0DghterSwapped );
+      mcNegV0DghterSwapped = lMCstack->Particle( lblBachSwapped        );
+      mcBachSwapped        = lMCstack->Particle( lblNegV0DghterSwapped );      
+    }
+    //Swapping Case 2: XiPlus/OmegaPlus swapped: exchange positive V0 daughter with bachelor
+    if( lChargeXi ==  1 ){ 
+      mcPosV0DghterSwapped = lMCstack->Particle( lblBachSwapped        );
+      mcNegV0DghterSwapped = lMCstack->Particle( lblNegV0DghterSwapped );
+      mcBachSwapped        = lMCstack->Particle( lblPosV0DghterSwapped );      
+    }
+       
+    //fTreeCascVarPosTransMomMC = mcPosV0Dghter->Pt();
+    //fTreeCascVarNegTransMomMC = mcNegV0Dghter->Pt();
+
+         //fTreeCascVarPIDPositive = mcPosV0Dghter -> GetPdgCode();
+         //fTreeCascVarPIDNegative = mcNegV0Dghter -> GetPdgCode();
+         //fTreeCascVarPIDBachelor = mcBach->GetPdgCode();
+
+         // - Step 4.2 : level of the Xi daughters
+               
+         Int_t lblMotherPosV0DghterSwapped = mcPosV0DghterSwapped->GetFirstMother() ; 
+         Int_t lblMotherNegV0DghterSwapped = mcNegV0DghterSwapped->GetFirstMother();
+       
+         //Rather uncivilized: Open brackets for each 'continue'
+         if(! (lblMotherPosV0DghterSwapped != lblMotherNegV0DghterSwapped) ) { // same mother
+         if(! (lblMotherPosV0DghterSwapped < 0) ) { // mother != primary (!= -1)
+         if(! (lblMotherNegV0DghterSwapped < 0) ) {
+                                       
+               // mothers = Lambda candidate ... a priori
+       
+         TParticle* mcMotherPosV0DghterSwapped = lMCstack->Particle( lblMotherPosV0DghterSwapped );
+         TParticle* mcMotherNegV0DghterSwapped = lMCstack->Particle( lblMotherNegV0DghterSwapped );
+                       
+         // - Step 4.3 : level of Xi candidate
+       
+         Int_t lblGdMotherPosV0DghterSwapped =   mcMotherPosV0DghterSwapped->GetFirstMother() ;
+         Int_t lblGdMotherNegV0DghterSwapped =   mcMotherNegV0DghterSwapped->GetFirstMother() ;
+                               
+               if(! (lblGdMotherPosV0DghterSwapped != lblGdMotherNegV0DghterSwapped) ) {
+               if(! (lblGdMotherPosV0DghterSwapped < 0) ) { // primary lambda ...
+               if(! (lblGdMotherNegV0DghterSwapped < 0) ) { // primary lambda ...
+
+                 // Gd mothers = Xi candidate ... a priori
+       
+         TParticle* mcGdMotherPosV0DghterSwapped = lMCstack->Particle( lblGdMotherPosV0DghterSwapped );
+         TParticle* mcGdMotherNegV0DghterSwapped = lMCstack->Particle( lblGdMotherNegV0DghterSwapped );
+                                       
+         Int_t lblMotherBachSwapped = (Int_t) TMath::Abs( mcBachSwapped->GetFirstMother()  );
+       
+  //           if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters
+                 if(!(lblMotherBachSwapped != lblGdMotherPosV0DghterSwapped)) { //same mother for bach and V0 daughters
+       
+         TParticle* mcMotherBachSwapped = lMCstack->Particle( lblMotherBachSwapped );
+       
+    lPID_BachMotherSwapped = mcMotherBachSwapped->GetPdgCode();
+         lPID_NegMotherSwapped = mcGdMotherPosV0DghterSwapped->GetPdgCode();
+         lPID_PosMotherSwapped = mcGdMotherNegV0DghterSwapped->GetPdgCode();
+   
+         if(lPID_BachMotherSwapped==lPID_NegMotherSwapped && lPID_BachMotherSwapped==lPID_PosMotherSwapped){ 
+                 fTreeCascVarPIDSwapped = lPID_BachMotherSwapped; //there!
+         }
+
+  }}}}}}} //Ends all conditionals above...
+
+  }
+//----------------------------------------
+// Swapped MC ASSOCIATION ENDS HERE
+//----------------------------------------
+
+  //------------------------------------------------
+  // Jai Salzwedel's femto-cut: better V0 exists
+  //------------------------------------------------                     
+
+  fTreeCascVarBadCascadeJai = kFALSE; 
+  fTreeCascVarDeltaDCA = -100;
+  Float_t DCAV0DaughtersDiff = -100; 
+  for (Int_t iv0=0; iv0<lESDevent->GetNumberOfV0s(); iv0++) {
+    AliESDv0 *v0 = lESDevent->GetV0(iv0);
+    UInt_t posV0TrackIdx = (UInt_t) v0->GetPindex();
+    UInt_t negV0TrackIdx = (UInt_t) v0->GetNindex();
+    if ((posV0TrackIdx == lIdxPosXi) && (negV0TrackIdx == lIdxNegXi)) continue;
+      // if both tracks are the same ones as the cascades V0 daughter tracks, then the V0 belongs to the cascade being analysed; so avoid it
+    if ((posV0TrackIdx == lIdxPosXi) || (negV0TrackIdx == lIdxNegXi)) {
+    DCAV0DaughtersDiff = lDcaV0DaughtersXi - v0->GetDcaV0Daughters();
+    if( fTreeCascVarDeltaDCA < DCAV0DaughtersDiff ) fTreeCascVarDeltaDCA = DCAV0DaughtersDiff;
+      if ( lDcaV0DaughtersXi > v0->GetDcaV0Daughters() )  {    // DCA comparison criterion
+        fTreeCascVarBadCascadeJai = kTRUE;
+      } //end DCA comparison 
+    } // end shares a daughter check 
+  } //end V0 loop 
 
   //------------------------------------------------
   // Set Variables for adding to tree
@@ -1586,6 +2861,7 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
 /*14*/         fTreeCascVarCascRadius = lXiRadius;
 /*15*/         fTreeCascVarV0Mass = lInvMassLambdaAsCascDghter;
 /*16*/         fTreeCascVarV0CosPointingAngle = lV0CosineOfPointingAngleXi;
+/*16*/         fTreeCascVarV0CosPointingAngleSpecial = lV0CosineOfPointingAngleXiSpecial;
 /*17*/         fTreeCascVarV0Radius = lV0RadiusXi;
 /*20*/         fTreeCascVarLeastNbrClusters = leastnumberofclusters;
 /*21*/         fTreeCascVarMultiplicity = lMultiplicity; //multiplicity, whatever that may be
@@ -1610,10 +2886,20 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
   //Xi    Mass window: 150MeV wide
   //Omega mass window: 150MeV wide
 
-  if( (fTreeCascVarMassAsXi<1.32+0.075&&fTreeCascVarMassAsXi>1.32-0.075) ||
-      (fTreeCascVarMassAsOmega<1.68+0.075&&fTreeCascVarMassAsOmega>1.68-0.075) ){
-      fTreeCascade->Fill();
-  }
+      if( (fTreeCascVarMassAsXi<1.32+0.075&&fTreeCascVarMassAsXi>1.32-0.075) ||
+         (fTreeCascVarMassAsOmega<1.68+0.075&&fTreeCascVarMassAsOmega>1.68-0.075) ){
+          
+          if( !fkIsNuclear ) fTreeCascade->Fill();
+          if( fkIsNuclear  ){
+              //Extra selections in case this is a nuclear collision...
+              if (TMath::Abs(fTreeCascVarNegEta) < 0.8 &&
+                  TMath::Abs(fTreeCascVarPosEta) < 0.8 &&
+                  TMath::Abs(fTreeCascVarBachEta) < 0.8 &&
+                  fTreeCascVarPt > fLowPtCutoff){ //beware ptMC and ptreco differences
+                  fTreeCascade->Fill();
+              }
+          }
+      }
 
 //------------------------------------------------
 // Fill tree over.