]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckCascadepp276.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskCheckCascadepp276.cxx
index 171153e65430caa4c741ac209f72c943a7d71006..f65912302586ccb2531ac937a144471fcccc8fb0 100644 (file)
-/**************************************************************************\r
- *  Authors : Antonin Maire, Boris Hippolyte                              *\r
- * Contributors are mentioned in the code where appropriate.              *\r
- *                                                                        *\r
- * Permission to use, copy, modify and distribute this software and its   *\r
- * documentation strictly for non-commercial purposes is hereby granted   *\r
- * without fee, provided that the above copyright notice appears in all   *\r
- * copies and that both the copyright notice and this permission notice   *\r
- * appear in the supporting documentation. The authors make no claims     *\r
- * about the suitability of this software for any purpose. It is          *\r
- * provided "as is" without express or implied warranty.                  *\r
- **************************************************************************/\r
-\r
-//-----------------------------------------------------------------\r
-//            AliAnalysisTaskCheckCascadepp276 class\r
-//\r
-//            Origin AliAnalysisTaskCheckCascade which has four roles :\r
-//              1. QAing the Cascades from ESD and AOD\r
-//                 Origin:  AliAnalysisTaskESDCheckV0 by Boris Hippolyte Nov2007, hippolyt@in2p3.fr\r
-//              2. Prepare the plots which stand as raw material for yield extraction (wi/wo PID)\r
-//              3. Supply an AliCFContainer meant to define the optimised topological selections\r
-//              4. Rough azimuthal correlation study (Eta, Phi)\r
-//              Adapted to Cascade : A.Maire Mar2008, antonin.maire@ires.in2p3.fr\r
-//              Modified :           A.Maire Mar2010 \r
-//\r
-//              Adapted to PbPb analysis: M. Nicassio, maria.nicassio@ba.infn.it\r
-//               Feb-August2011\r
-//                - Physics selection moved to the run.C macro\r
-//                - Centrality selection added (+ setters) and histos\r
-//                - flag and setters added (CF container usage, vertex range)\r
-//                - histo added and histo/container binning changed \r
-//                - protection in the destructor for CAF usage          \r
-//                - AliWarning disabled\r
-//                - number of tracklets from AOD also          \r
-//                - automatic settings for PID\r
-//               September2011\r
-//                - proper time histos/container added (V0 and Cascades)\r
-//                - cosine PA V0 wrt Xi vertex in the container  \r
-//               November2011\r
-//                - re-run V0's and cascade's vertexers (SetCuts instead SetDefaultCuts!!)\r
-//                - problems of libraries on Grid --> code copied in the task (from AliRoot v5-10-AN\r
-//                  where new pt dependent V0's cosPA cut implemented by Iouri) \r
-//                - AOD analysis part completed \r
-//\r
-//\r
-//              Adapted to pp 2.76 analysis: D. Colella, domenico.colella@ba.infn.it\r
-//               Gen-now 2012\r
-//                - Physics selection re-moved here (mainly for normalization in the efficiency calcuation)\r
-//                - Centrality selection deleted\r
-//                - \r
-//\r
-//-----------------------------------------------------------------\r
-\r
-class TTree;\r
-class TParticle;\r
-class TVector3;\r
-\r
-class AliESDVertex;\r
-class AliAODVertex;\r
-class AliESDv0;\r
-class AliAODv0;\r
-\r
-#include <Riostream.h>\r
-#include "TList.h"\r
-#include "TH1.h"\r
-#include "TH2.h"\r
-#include "TH3.h"\r
-#include "THnSparse.h"\r
-#include "TVector3.h"\r
-#include "TCanvas.h"\r
-#include "TMath.h"\r
-#include "TLegend.h"\r
-\r
-#include "AliLog.h"\r
-#include "AliESDEvent.h"\r
-#include "AliAODEvent.h"\r
-#include "AliV0vertexer.h"\r
-#include "AliCascadeVertexer.h"\r
-#include "AliESDtrackCuts.h"\r
-#include "AliPIDResponse.h"\r
-\r
-#include "AliESDVZERO.h"\r
-\r
-#include "AliInputEventHandler.h"\r
-#include "AliAnalysisManager.h"\r
-#include "AliMCEventHandler.h"\r
-#include "AliESDInputHandler.h" \r
-#include "AliAODInputHandler.h"\r
-#include "AliCFContainer.h"\r
-#include "AliMultiplicity.h"\r
-\r
-#include "AliESDcascade.h"\r
-#include "AliAODcascade.h"\r
-#include "AliAODTrack.h"\r
-\r
-#include "AliAnalysisTaskCheckCascadepp276.h"\r
-\r
-\r
-using std::cout;\r
-using std::endl;\r
-\r
-ClassImp(AliAnalysisTaskCheckCascadepp276)\r
-\r
-\r
-\r
-//________________________________________________________________________\r
-AliAnalysisTaskCheckCascadepp276::AliAnalysisTaskCheckCascadepp276() \r
-  : AliAnalysisTaskSE(), \r
-    fAnalysisType               ("ESD"),\r
-    fESDtrackCuts               (0),\r
-    fPIDResponse                (0),\r
-    fkRerunV0CascVertexers      (0),\r
-    fkSDDSelectionOn            (kTRUE),\r
-    fkQualityCutZprimVtxPos     (kTRUE),\r
-    fkQualityCutNoTPConlyPrimVtx(kTRUE),\r
-    fkQualityCutTPCrefit        (kTRUE),\r
-    fkQualityCutnTPCcls         (kTRUE),\r
-    fkQualityCutPileup          (kTRUE),\r
-    fwithSDD                    (kTRUE),\r
-    fMinnTPCcls                 (0),\r
-    fkExtraSelections           (0),\r
-    fVtxRange                   (0),\r
-    fVtxRangeMin                (0),\r
-    fMinPtCutOnDaughterTracks   (0),\r
-    fEtaCutOnDaughterTracks     (0),\r
-\r
-    // - Plots initialisation\r
-    fListHistCascade(0),\r
-      // Cascades multiplicity plots\r
-      fHistCascadeMultiplicityBeforeAnySel(0),\r
-      fHistCascadeMultiplicityAfterSDDSel(0),\r
-      fHistCascadeMultiplicityAfterPhysicsSel(0),\r
-      fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),\r
-      fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),\r
-      fHistCascadeMultiplicityAfterVertexCutSel(0),\r
-      // Tracks multiplicity plots\r
-      fHistTrackMultiplicityBeforeAnySel(0),\r
-      fHistTrackMultiplicityAfterSDDSel(0),\r
-      fHistTrackMultiplicityAfterPhysicsSel(0),\r
-      fHistTrackMultiplicityForSelEvtNoTPCOnly(0),\r
-      fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),\r
-      fHistTrackMultiplicityAfterVertexCutSel(0),\r
-      // Vertex position plots (BestVertex)\r
-      fHistPVx(0), fHistPVy(0), fHistPVz(0),\r
-      fHistPVxAnalysis(0), fHistPVyAnalysis(0), fHistPVzAnalysis(0),    \r
-      // TPC cluster distributions for daughters\r
-      fHistPosV0TPCClusters(0), \r
-      fHistNegV0TPCClusters(0), \r
-      fHistBachTPCClusters(0),\r
-      // Cut's variables distributions\r
-      fHistEffMassXi(0), \r
-      fHistDcaXiDaughters(0), \r
-      fHistDcaBachToPrimVertex(0), \r
-      fHistXiCosineOfPointingAngle(0), \r
-      fHistXiRadius(0),\r
-      fHistMassLambdaAsCascDghter(0),\r
-      fHistDcaV0DaughtersXi(0),\r
-      fHistDcaV0ToPrimVertexXi(0), \r
-      fHistV0CosineOfPointingAngleXi(0),\r
-      fHistV0RadiusXi(0),\r
-      fHistDcaPosToPrimVertexXi(0), \r
-      fHistDcaNegToPrimVertexXi(0), \r
-      // Invariant mass distributions\r
-      fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),\r
-      // Transverse and total momentum distributions\r
-      fHistXiTransvMom(0), fHistXiTotMom(0), fHistBachTransvMomXi(0), fHistBachTotMomXi(0),\r
-      // Others QA plots\r
-      fHistChargeXi(0),\r
-      fHistV0toXiCosineOfPointingAngle(0),\r
-      fHistRapXi(0), fHistRapOmega(0), \r
-      fHistEtaXi(0), fHistEtaBachXi(0), fHistEtaPosXi(0), fHistEtaNegXi(0),\r
-      fHistThetaXi(0), \r
-      fHistPhiXi(0),\r
-      f2dHistArmenteros(0),                    \r
-      f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),\r
-      f2dHistEffMassLambdaVsEffMassXiPlus(0),  f2dHistEffMassXiVsEffMassOmegaPlus(0),\r
-      f2dHistXiRadiusVsEffMassXiMinus(0),      f2dHistXiRadiusVsEffMassXiPlus(0),\r
-      f2dHistXiRadiusVsEffMassOmegaMinus(0),   f2dHistXiRadiusVsEffMassOmegaPlus(0),\r
-      f2dHistTPCdEdxOfCascDghters(0),\r
-      f2dHistDcaXiDaughtersvsInvMass(0), \r
-      f2dHistDcaBachToPrimVertexvsInvMass(0), \r
-      f2dHistXiCosineOfPointingAnglevsInvMass(0),\r
-      f2dHistMassLambdaAsCascDghtervsInvMass(0),\r
-      f2dHistDcaV0DaughtersXivsInvMass(0),\r
-      f2dHistDcaV0ToPrimVertexXivsInvMass(0),\r
-      // Containers for cuts study \r
-      fCFContCascadePIDXiMinus(0),\r
-      fCFContCascadePIDXiPlus(0),\r
-      fCFContCascadePIDOmegaMinus(0),\r
-      fCFContCascadePIDOmegaPlus(0),\r
-      fCFContCascadeCuts(0)\r
-    \r
-    {\r
-     // Dummy Constructor\r
-        for(Int_t iV0selIdx   = 0; iV0selIdx   < 7; iV0selIdx++   ) { fV0Sels          [iV0selIdx   ] = -1.; }\r
-        for(Int_t iCascSelIdx = 0; iCascSelIdx < 8; iCascSelIdx++ ) { fCascSels        [iCascSelIdx ] = -1.; }\r
-    }\r
-\r
-\r
-//________________________________________________________________________\r
-AliAnalysisTaskCheckCascadepp276::AliAnalysisTaskCheckCascadepp276(const char *name) \r
-  : AliAnalysisTaskSE(name), \r
-    fAnalysisType               ("ESD"), \r
-    fESDtrackCuts               (0), \r
-    fPIDResponse                (0),\r
-    fkRerunV0CascVertexers      (0),\r
-    fkSDDSelectionOn            (kTRUE),\r
-    fkQualityCutZprimVtxPos     (kTRUE),\r
-    fkQualityCutNoTPConlyPrimVtx(kTRUE),\r
-    fkQualityCutTPCrefit        (kTRUE),\r
-    fkQualityCutnTPCcls         (kTRUE),\r
-    fkQualityCutPileup          (kTRUE),\r
-    fwithSDD                    (kTRUE),\r
-    fMinnTPCcls                 (0),\r
-    fkExtraSelections           (0),\r
-    fVtxRange                   (0),\r
-    fVtxRangeMin                (0),\r
-    fMinPtCutOnDaughterTracks   (0),\r
-    fEtaCutOnDaughterTracks     (0),\r
-     \r
-    // - Plots initialisation\r
-    fListHistCascade(0),\r
-\r
-      // Cascades multiplicity plots\r
-      fHistCascadeMultiplicityBeforeAnySel(0),\r
-      fHistCascadeMultiplicityAfterSDDSel(0),\r
-      fHistCascadeMultiplicityAfterPhysicsSel(0),\r
-      fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),\r
-      fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),\r
-      fHistCascadeMultiplicityAfterVertexCutSel(0),\r
-      // Tracks multiplicity plots\r
-      fHistTrackMultiplicityBeforeAnySel(0),\r
-      fHistTrackMultiplicityAfterSDDSel(0),\r
-      fHistTrackMultiplicityAfterPhysicsSel(0),\r
-      fHistTrackMultiplicityForSelEvtNoTPCOnly(0),\r
-      fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),\r
-      fHistTrackMultiplicityAfterVertexCutSel(0),\r
-      // Vertex position plots (BestVertex)\r
-      fHistPVx(0), fHistPVy(0), fHistPVz(0),\r
-      fHistPVxAnalysis(0), fHistPVyAnalysis(0), fHistPVzAnalysis(0),\r
-      // TPC cluster distributions for daughters\r
-      fHistPosV0TPCClusters(0), fHistNegV0TPCClusters(0), fHistBachTPCClusters(0),\r
-      // Cut's variables distributions\r
-      fHistEffMassXi(0),\r
-      fHistDcaXiDaughters(0),\r
-      fHistDcaBachToPrimVertex(0),\r
-      fHistXiCosineOfPointingAngle(0),\r
-      fHistXiRadius(0),\r
-      fHistMassLambdaAsCascDghter(0),\r
-      fHistDcaV0DaughtersXi(0),\r
-      fHistDcaV0ToPrimVertexXi(0),\r
-      fHistV0CosineOfPointingAngleXi(0),\r
-      fHistV0RadiusXi(0),\r
-      fHistDcaPosToPrimVertexXi(0),\r
-      fHistDcaNegToPrimVertexXi(0),\r
-      // Invariant mass distributions\r
-      fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),\r
-      // Transverse and total momentum distributions\r
-      fHistXiTransvMom(0), fHistXiTotMom(0), fHistBachTransvMomXi(0), fHistBachTotMomXi(0),\r
-      // Others QA plots\r
-      fHistChargeXi(0),\r
-      fHistV0toXiCosineOfPointingAngle(0),\r
-      fHistRapXi(0), fHistRapOmega(0),\r
-      fHistEtaXi(0), fHistEtaBachXi(0), fHistEtaPosXi(0), fHistEtaNegXi(0),\r
-      fHistThetaXi(0),\r
-      fHistPhiXi(0),\r
-      f2dHistArmenteros(0),\r
-      f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),\r
-      f2dHistEffMassLambdaVsEffMassXiPlus(0),  f2dHistEffMassXiVsEffMassOmegaPlus(0),\r
-      f2dHistXiRadiusVsEffMassXiMinus(0),      f2dHistXiRadiusVsEffMassXiPlus(0),\r
-      f2dHistXiRadiusVsEffMassOmegaMinus(0),   f2dHistXiRadiusVsEffMassOmegaPlus(0),\r
-      f2dHistTPCdEdxOfCascDghters(0),\r
-      f2dHistDcaXiDaughtersvsInvMass(0),\r
-      f2dHistDcaBachToPrimVertexvsInvMass(0),\r
-      f2dHistXiCosineOfPointingAnglevsInvMass(0),\r
-      f2dHistMassLambdaAsCascDghtervsInvMass(0),\r
-      f2dHistDcaV0DaughtersXivsInvMass(0),\r
-      f2dHistDcaV0ToPrimVertexXivsInvMass(0),\r
-      // Containers for cuts study \r
-      fCFContCascadePIDXiMinus(0),\r
-      fCFContCascadePIDXiPlus(0),\r
-      fCFContCascadePIDOmegaMinus(0),\r
-      fCFContCascadePIDOmegaPlus(0),\r
-      fCFContCascadeCuts(0)\r
-    \r
-    //_____Costructor____\r
-    {\r
-     // Define input and output slots here\r
-     // Input slot #0 works with a TChain\r
-     // DefineInput(0, TChain::Class());\r
-     // Output slot #1 writes into a TList container (cascade)\r
-        // default p-p values\r
-        fV0Sels[0] =  33.  ;     // max allowed chi2\r
-        fV0Sels[1] =   0.01;     // min allowed impact parameter for the 1st daughter \r
-        fV0Sels[2] =   0.01;     // min allowed impact parameter for the 2nd daughter \r
-        fV0Sels[3] =   1.5;      // max allowed DCA between the daughter tracks       \r
-        fV0Sels[4] =   0.9;      // min allowed cosine of V0's pointing angle  - This is pT dependent         \r
-        fV0Sels[5] =   0.2;      // min radius of the fiducial volume                 \r
-        fV0Sels[6] = 200.;       // max radius of the fiducial volume                 \r
-\r
-        fCascSels[0] =  33.;     // max allowed chi2 (same as PDC07)\r
-        fCascSels[1] =   0.01;   // min allowed V0 impact parameter                    \r
-        fCascSels[2] =   0.008;  // "window" around the Lambda mass                    \r
-        fCascSels[3] =   0.01;   // min allowed bachelor's impact parameter          \r
-        fCascSels[4] =   2.0;    // max allowed DCA between the V0 and the bachelor    \r
-        fCascSels[5] =   0.95;   // min allowed cosine of the cascade pointing angle   \r
-        fCascSels[6] =   0.2;    // min radius of the fiducial volume                  \r
-        fCascSels[7] = 100.;     // max radius of the fiducial volume                  \r
-\r
-     // Output slot #0 writes into a TList container (Cascade)\r
-     DefineOutput(1, TList::Class());\r
-     DefineOutput(2, AliCFContainer::Class());\r
-     DefineOutput(3, AliCFContainer::Class());\r
-     DefineOutput(4, AliCFContainer::Class());\r
-     DefineOutput(5, AliCFContainer::Class());\r
-     DefineOutput(6, AliCFContainer::Class());\r
-     AliLog::SetClassDebugLevel("AliAnalysisTaskCheckCascadepp276",1);\r
-    } \r
-\r
-\r
-    //_____Destructor_____\r
-    AliAnalysisTaskCheckCascadepp276::~AliAnalysisTaskCheckCascadepp276() {\r
-      // For all TH1, 2, 3 HnSparse and CFContainer are in the fListCascade TList.\r
-      // They will be deleted when fListCascade is deleted by the TSelector dtor\r
-      // Because of TList::SetOwner() ...   \r
-       if (fListHistCascade && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())           { delete fListHistCascade; fListHistCascade = 0x0; }\r
-       if (fCFContCascadePIDXiMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())   { delete fCFContCascadePIDXiMinus; fCFContCascadePIDXiMinus = 0x0; }\r
-       if (fCFContCascadePIDXiPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())    { delete fCFContCascadePIDXiPlus; fCFContCascadePIDXiPlus = 0x0; }\r
-       if (fCFContCascadePIDOmegaMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){ delete fCFContCascadePIDOmegaMinus; fCFContCascadePIDOmegaMinus = 0x0; }\r
-       if (fCFContCascadePIDOmegaPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fCFContCascadePIDOmegaPlus; fCFContCascadePIDOmegaPlus = 0x0; }  \r
-       if (fCFContCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())         { delete fCFContCascadeCuts; fCFContCascadeCuts = 0x0; }\r
-       if (fESDtrackCuts)                                                                          { delete fESDtrackCuts; fESDtrackCuts = 0x0; }\r
-    }\r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {\r
-  // Create histograms\r
-  // Called once\r
-\r
-\r
- fListHistCascade = new TList();\r
- fListHistCascade->SetOwner();  // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner\r
-\r
- //-----------------------------------------------\r
- // Particle Identification Setup (new PID object)\r
- //-----------------------------------------------\r
- AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();\r
- AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());\r
- fPIDResponse = inputHandler->GetPIDResponse();\r
-\r
- // Only used to get the number of primary reconstructed tracks\r
- if (fAnalysisType == "ESD" && (! fESDtrackCuts )){\r
-   fESDtrackCuts = new AliESDtrackCuts();\r
- }\r
-\r
- //---------------------------------------------------\r
- // Initialize cuts to re-run V0 and cascade vertexers\r
- //---------------------------------------------------\r
- // Not validated; to be checked\r
- fV0Sels[0] =  33.  ;     // max allowed chi2\r
- fV0Sels[1] =   0.01;     // min allowed impact parameter for the 1st daughter \r
- fV0Sels[2] =   0.01;     // min allowed impact parameter for the 2nd daughter \r
- fV0Sels[3] =   1.5;      // max allowed DCA between the daughter tracks       \r
- fV0Sels[4] =   0.9;     // min allowed cosine of V0's pointing angle         \r
- fV0Sels[5] =   0.2;      // min radius of the fiducial volume                 \r
- fV0Sels[6] = 200.;       // max radius of the fiducial volume                 \r
-\r
- fCascSels[0] =  33.;     // max allowed chi2 (same as PDC07)\r
- fCascSels[1] =   0.01;   // min allowed V0 impact parameter                    \r
- fCascSels[2] =   0.008;  // "window" around the Lambda mass                    \r
- fCascSels[3] =   0.01;   // min allowed bachelor's impact parameter          \r
- fCascSels[4] =   2.0;    // max allowed DCA between the V0 and the bachelor    \r
- fCascSels[5] =   0.95;   // min allowed cosine of the cascade pointing angle   \r
- fCascSels[6] =   0.2;    // min radius of the fiducial volume                  \r
- fCascSels[7] = 100.;     // max radius of the fiducial volume \r
-\r
- //----------------------\r
- // Initialize the histos\r
- //----------------------\r
\r
- // - Cascades multiplicity plots \r
- if(! fHistCascadeMultiplicityBeforeAnySel) {\r
-        fHistCascadeMultiplicityBeforeAnySel = new TH1F("fHistCascadeMultiplicityBeforeAnySel",\r
-                        "Cascades per event (before any selections);Nbr of Cascades/Evt;Events",                \r
-                        20, 0, 20);\r
-        fListHistCascade->Add(fHistCascadeMultiplicityBeforeAnySel);\r
- }\r
- if(! fHistCascadeMultiplicityAfterSDDSel) {\r
-        fHistCascadeMultiplicityAfterSDDSel = new TH1F("fHistCascadeMultiplicityAfterSDDSel", \r
-                       "Cascades per event (after the SDD selection);Nbr of Cascades/Evt;Events", \r
-                       20, 0, 20);             \r
-       fListHistCascade->Add(fHistCascadeMultiplicityAfterSDDSel);\r
- }\r
- if(! fHistCascadeMultiplicityAfterPhysicsSel) {\r
-        fHistCascadeMultiplicityAfterPhysicsSel = new TH1F("fHistCascadeMultiplicityAfterPhysicsSel",\r
-                        "Cascades per event (after physics selection);Nbr of Cascades/Evt;Events",\r
-                        20, 0, 20);\r
-        fListHistCascade->Add(fHistCascadeMultiplicityAfterPhysicsSel);\r
- }\r
- if(! fHistCascadeMultiplicityForSelEvtNoTPCOnly) {\r
-        fHistCascadeMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistCascadeMultiplicityForSelEvtNoTPCOnly",\r
-                        "Cascades per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events",\r
-                        20, 0, 20);\r
-        fListHistCascade->Add(fHistCascadeMultiplicityForSelEvtNoTPCOnly);\r
- }\r
- if(! fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup) {\r
-        fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup",\r
-                        "Cascades per event (for selected events with well-establisched PV and no pile-up);Nbr of Cascades/Evt;Events",\r
-                        20, 0, 20);\r
-        fListHistCascade->Add(fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup);\r
- }\r
- if(! fHistCascadeMultiplicityAfterVertexCutSel) {\r
-        fHistCascadeMultiplicityAfterVertexCutSel = new TH1F("fHistCascadeMultiplicityAfterVertexCutSel",\r
-                                                             "Cascades per event (after vertex cut selection);Nbr of Cascades/Evt;Events",\r
-                                                             20, 0, 20);\r
-        fListHistCascade->Add(fHistCascadeMultiplicityAfterVertexCutSel);\r
- }\r
- // - Tracks multiplicity plots \r
- if(! fHistTrackMultiplicityBeforeAnySel) {\r
-       fHistTrackMultiplicityBeforeAnySel = new TH1F("fHistTrackMultiplicityBeforeAnySel", \r
-                       "Tracks per event (before any selections);Nbr of Cascades/Evt;Events", \r
-                       100, 0, 100);           \r
-       fListHistCascade->Add(fHistTrackMultiplicityBeforeAnySel);\r
- } \r
- if(! fHistTrackMultiplicityAfterSDDSel) {\r
-        fHistTrackMultiplicityAfterSDDSel = new TH1F("fHistTrackMultiplicityAfterSDDSel",                  \r
-                        "Tracks per event (after the SDD selection);Nbr of Cascades/Evt;Events",\r
-                        100, 0, 100);\r
-        fListHistCascade->Add(fHistTrackMultiplicityAfterSDDSel);\r
- }\r
- if(! fHistTrackMultiplicityAfterPhysicsSel) {\r
-        fHistTrackMultiplicityAfterPhysicsSel = new TH1F("fHistTrackMultiplicityAfterPhysicsSel",\r
-                        "Tracks per event (after physics selection);Nbr of Cascades/Evt;Events",\r
-                        100, 0, 100);\r
-        fListHistCascade->Add(fHistTrackMultiplicityAfterPhysicsSel);\r
- }\r
- if(! fHistTrackMultiplicityForSelEvtNoTPCOnly) {\r
-        fHistTrackMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistTrackMultiplicityForSelEvtNoTPCOnly",\r
-                        "Tracks per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events",\r
-                        100, 0, 100);\r
-        fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnly);\r
- }\r
- if(! fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup) {\r
-        fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup",\r
-                        "Tracks per event (for selected events with well-establisched PV and no pile-up);Nbr of Cascades/Evt;Events",\r
-                        100, 0, 100);\r
-        fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);\r
- }\r
- if(! fHistTrackMultiplicityAfterVertexCutSel) {\r
-        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",\r
-                                                           "Tracks per event (after vertex cut selection);Nbr of Cascades/Evt;Events",\r
-                                                           100, 0, 100);\r
-        fListHistCascade->Add(fHistTrackMultiplicityAfterVertexCutSel);\r
- }\r
- // - Vertex position plots\r
- if(! fHistPVx ){\r
-       fHistPVx = new TH1F("fHistPVx", "Best PV position in x; x (cm); Events", 2000, -0.5, 0.5);\r
-       fListHistCascade->Add(fHistPVx);\r
- }\r
- if(! fHistPVy ){\r
-        fHistPVy = new TH1F("fHistPVy", "Best PV position in y; y (cm); Events", 2000, -0.5, 0.5);\r
-        fListHistCascade->Add(fHistPVy);\r
- }\r
- if(! fHistPVz ){\r
-        fHistPVz = new TH1F("fHistPVz", "Best PV position in z; z (cm); Events", 400, -20, 20);\r
-        fListHistCascade->Add(fHistPVz);\r
- } \r
- if(! fHistPVxAnalysis ){\r
-        fHistPVxAnalysis = new TH1F("fHistPVxAnalysis", "Best PV position in x (after events selections); x (cm); Events", 2000, -0.5, 0.5);\r
-        fListHistCascade->Add(fHistPVxAnalysis);\r
- }\r
- if(! fHistPVyAnalysis ){\r
-        fHistPVyAnalysis = new TH1F("fHistPVyAnalysis", "Best PV position in y (after events selections); y (cm); Events", 2000, -0.5, 0.5);\r
-        fListHistCascade->Add(fHistPVyAnalysis);\r
- }\r
- if(! fHistPVzAnalysis ){\r
-        fHistPVzAnalysis = new TH1F("fHistPVzAnalysis", "Best PV position in z (after events selections); z (cm); Events", 400, -20, 20);\r
-        fListHistCascade->Add(fHistPVzAnalysis);\r
- }\r
- // - TPC clusetr sdistributions for daughters (histos for events containing at least ONE CASCADE)\r
- if(! fHistPosV0TPCClusters ){\r
-        fHistPosV0TPCClusters = new TH1F("fHistPosV0TPCClusters", "TPC clusters for Pos. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Pos.); Track counts", 165, 0.0, 165.0);\r
-        fListHistCascade->Add(fHistPosV0TPCClusters);\r
- }\r
- if(! fHistNegV0TPCClusters ){\r
-        fHistNegV0TPCClusters = new TH1F("fHistNegV0TPCClusters", "TPC clusters for Neg. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Neg.); Track counts", 165, 0.0, 165.0);\r
-        fListHistCascade->Add(fHistNegV0TPCClusters);\r
- }\r
- if(! fHistBachTPCClusters ){\r
-        fHistBachTPCClusters = new TH1F("fHistBachTPCClusters", "TPC clusters for Bachelor track; Nbr of TPC clusters (Bach); Track counts", 165, 0.0, 165.0);\r
-        fListHistCascade->Add(fHistBachTPCClusters);\r
- }\r
- // - Cut's variables distributions (typical histos for cascades): as example only for the Xi (both particle and anti-particle)\r
- if(! fHistEffMassXi) {\r
-     fHistEffMassXi = new TH1F("fHistEffMassXi", "Xi candidates; Invariant Mass (GeV/c^{2}); Counts", 400, 1.2, 2.0);\r
-     fListHistCascade->Add(fHistEffMassXi);\r
- }  \r
- if(! fHistDcaXiDaughters ){\r
-     fHistDcaXiDaughters = new TH1F("fHistDcaXiDaughters", "DCA between Xi daughters; DCA (cm); Counts", 210, 0., 2.1);\r
-     fListHistCascade->Add(fHistDcaXiDaughters);\r
- }\r
- if(! fHistDcaBachToPrimVertex) {\r
-     fHistDcaBachToPrimVertex = new TH1F("fHistDcaBachToPrimVertex", "Impact parameter of Bach. to Prim. Vertex; DCA (cm); Counts", 250, 0., 0.25);\r
-     fListHistCascade->Add(fHistDcaBachToPrimVertex);\r
- }\r
- if(! fHistXiCosineOfPointingAngle) {\r
-     fHistXiCosineOfPointingAngle = new TH1F("fHistXiCosineOfPointingAngle", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl); Counts", 601, 0.94, 1.0001);\r
-     fListHistCascade->Add(fHistXiCosineOfPointingAngle);\r
- }\r
- if(! fHistXiRadius ){\r
-     fHistXiRadius = new TH1F("fHistXiRadius", "Cascade decay transv. radius; r (cm); Counts" , 2050, 0., 205.0);\r
-     fListHistCascade->Add(fHistXiRadius);\r
- }\r
- if(! fHistMassLambdaAsCascDghter) {\r
-     fHistMassLambdaAsCascDghter = new TH1F("fHistMassLambdaAsCascDghter", "#Lambda associated to cascade candidates; Eff. Mass (GeV/c^{2}); Counts", 300, 1.0, 1.3);\r
-     fListHistCascade->Add(fHistMassLambdaAsCascDghter);\r
- }\r
- if(! fHistDcaV0DaughtersXi) {\r
-     fHistDcaV0DaughtersXi = new TH1F("fHistDcaV0DaughtersXi", "DCA between V0 daughters, in cascade; DCA (cm); Counts", 320, 0., 1.6);\r
-     fListHistCascade->Add(fHistDcaV0DaughtersXi);\r
- }\r
- if(! fHistDcaV0ToPrimVertexXi) {\r
-     fHistDcaV0ToPrimVertexXi = new TH1F("fHistDcaV0ToPrimVertexXi", "Impact parameter of V0  to Prim. Vertex, in cascade; DCA (cm); Counts", 200, 0., 1.);\r
-     fListHistCascade->Add(fHistDcaV0ToPrimVertexXi);\r
- }\r
- if(! fHistV0CosineOfPointingAngleXi) {\r
-     fHistV0CosineOfPointingAngleXi = new TH1F("fHistV0CosineOfPointingAngleXi", "Cosine of V0 Pointing Angle, in cascade; Cos(V0 Point. Angl); Counts", 201, 0.8, 1.001);\r
-     fListHistCascade->Add(fHistV0CosineOfPointingAngleXi);\r
- }\r
- if(! fHistV0RadiusXi) {\r
-     fHistV0RadiusXi = new TH1F("fHistV0RadiusXi", "V0 decay radius, in cascade; radius (cm); Counts", 2050, 0., 205.0);\r
-     fListHistCascade->Add(fHistV0RadiusXi);\r
- }\r
- if(! fHistDcaPosToPrimVertexXi) {\r
-     fHistDcaPosToPrimVertexXi = new TH1F("fHistDcaPosToPrimVertexXi", "Impact parameter of V0 pos daughter to Prim. Vertex; DCA (cm); Counts", 300, 0, 3);\r
-     fListHistCascade->Add(fHistDcaPosToPrimVertexXi);\r
- }\r
- if(! fHistDcaNegToPrimVertexXi) {\r
-     fHistDcaNegToPrimVertexXi = new TH1F("fHistDcaNegToPrimVertexXi", "Impact parameter of V0 neg daughter to Prim. Vertex; DCA (cm); Counts", 300, 0, 3);\r
-     fListHistCascade->Add(fHistDcaNegToPrimVertexXi);\r
- }\r
- // - Effective mass histos for cascades.\r
-    //By cascade hyp  \r
- if(! fHistMassXiMinus) {\r
-     fHistMassXiMinus = new TH1F("fHistMassXiMinus", "#Xi^{-} candidates; M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400, 1.2, 2.0);\r
-     fListHistCascade->Add(fHistMassXiMinus);\r
- } \r
- if(! fHistMassXiPlus) {\r
-     fHistMassXiPlus = new TH1F("fHistMassXiPlus", "#Xi^{+} candidates; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts", 400, 1.2, 2.0);\r
-     fListHistCascade->Add(fHistMassXiPlus);\r
- }\r
- if(! fHistMassOmegaMinus) {\r
-     fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus", "#Omega^{-} candidates; M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500, 1.5, 2.5);\r
-     fListHistCascade->Add(fHistMassOmegaMinus);\r
- }\r
- if(! fHistMassOmegaPlus) {\r
-     fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus", "#Omega^{+} candidates;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);\r
-     fListHistCascade->Add(fHistMassOmegaPlus);\r
- }\r
- // - Transverse and total momentum distributions\r
- if(! fHistXiTransvMom ){\r
-     fHistXiTransvMom = new TH1F("fHistXiTransvMom", "#Xi transverse momentum (cand. around the mass peak); p_{t}(#Xi) (GeV/c); Counts", 100, 0.0, 10.0);\r
-     fListHistCascade->Add(fHistXiTransvMom);\r
- }\r
- if(! fHistXiTotMom ){\r
-     fHistXiTotMom = new TH1F("fHistXiTotMom", "#Xi momentum norm (cand. around the mass peak); p_{tot}(#Xi) (GeV/c); Counts", 150, 0.0, 15.0);\r
-     fListHistCascade->Add(fHistXiTotMom);\r
- }\r
- if(! fHistBachTransvMomXi ){\r
-     fHistBachTransvMomXi = new TH1F("fHistBachTransvMomXi", "#Xi Bach. transverse momentum (cand. around the mass peak); p_{t}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);\r
-     fListHistCascade->Add(fHistBachTransvMomXi);\r
- }\r
- if(! fHistBachTotMomXi ){\r
-     fHistBachTotMomXi = new TH1F("fHistBachTotMomXi", "#Xi Bach. momentum norm (cand. around the mass peak); p_{tot}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);\r
-     fListHistCascade->Add(fHistBachTotMomXi);\r
- }\r
- // - Others QA plots\r
-    //TH1\r
- if(! fHistChargeXi ){\r
-     fHistChargeXi = new TH1F("fHistChargeXi", "Charge of Xi candidates; Sign; Counts", 5, -2.0, 3.0);\r
-     fListHistCascade->Add(fHistChargeXi);\r
- }\r
- if(! fHistV0toXiCosineOfPointingAngle) {\r
-     fHistV0toXiCosineOfPointingAngle = new TH1F("fHistV0toXiCosineOfPointingAngle", "Cos. of V0 Ptng Angl / Xi vtx ; Cos(V0 Point. Angl / Xi vtx); Counts", 1101, 0.89, 1.0001);\r
-     fListHistCascade->Add(fHistV0toXiCosineOfPointingAngle);\r
- }\r
- if(! fHistRapXi ){\r
-     fHistRapXi = new TH1F("fHistRapXi", "Rapidity of #Xi candidates (around the mass peak); y; Counts", 20, -1.0, 1.0);\r
-     fListHistCascade->Add(fHistRapXi);\r
- }\r
- if(! fHistRapOmega ){\r
-     fHistRapOmega = new TH1F("fHistRapOmega", "Rapidity of #Omega candidates (around the mass peak); y; Counts", 20, -1.0, 1.0);\r
-     fListHistCascade->Add(fHistRapOmega);\r
- }\r
- if(! fHistEtaXi ){\r
-     fHistEtaXi = new TH1F("fHistEtaXi", "Pseudo-rap. of #Xi candidates (around the mass peak); #eta; Counts", 20, -1.0, 1.0);\r
-     fListHistCascade->Add(fHistEtaXi);\r
- }\r
- if(! fHistEtaBachXi){\r
-     fHistEtaBachXi = new TH1F("fHistEtaBachXi", "Pseudo-rap. of #Xi bachelor; #eta; Counts", 40, -2.0, 2.0);\r
-     fListHistCascade->Add(fHistEtaBachXi);\r
- }\r
- if(! fHistEtaPosXi){\r
-     fHistEtaPosXi = new TH1F("fHistEtaPosXi", "Pseudo-rap. of #Xi positive meson daughter; #eta; Counts", 40, -2.0, 2.0);\r
-     fListHistCascade->Add(fHistEtaPosXi);\r
- }\r
- if(! fHistEtaNegXi){\r
-     fHistEtaNegXi = new TH1F("fHistEtaNegXi", "Pseudo-rap. of #Xi negative meson daughter; #eta; Counts", 40, -2.0, 2.0);\r
-     fListHistCascade->Add(fHistEtaNegXi);\r
- }\r
- if(! fHistThetaXi ){\r
-     fHistThetaXi = new TH1F("fHistThetaXi", "#theta of #Xi candidates (around the mass peak); #theta (deg); Counts", 180, 0., 180.0);\r
-     fListHistCascade->Add(fHistThetaXi);\r
- }\r
- if(! fHistPhiXi ){\r
-     fHistPhiXi = new TH1F("fHistPhiXi", "#phi of #Xi candidates (around the mass peak); #phi (deg); Counts", 360, 0., 360.);\r
-     fListHistCascade->Add(fHistPhiXi);\r
- }\r
- if(! f2dHistArmenteros) {\r
-     f2dHistArmenteros = new TH2F("f2dHistArmenteros", "#alpha_{Arm}(casc. cand.) Vs Pt_{Arm}(casc. cand.); #alpha_{Arm}; Pt_{Arm} (GeV/c)", 140, -1.2, 1.2, 300, 0., 0.3);\r
-     fListHistCascade->Add(f2dHistArmenteros);\r
- }\r
-    //TH2\r
- if(! f2dHistEffMassLambdaVsEffMassXiMinus) {\r
-     f2dHistEffMassLambdaVsEffMassXiMinus = new TH2F("f2dHistEffMassLambdaVsEffMassXiMinus", "M_{#Lambda} Vs M_{#Xi^{-} candidates}; Inv. M_{#Lambda^{0}} (GeV/c^{2}); M( #Lambda , #pi^{-} ) (GeV/c^{2})", 300, 1.1, 1.13, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiMinus);\r
- }\r
- if(! f2dHistEffMassXiVsEffMassOmegaMinus) {\r
-     f2dHistEffMassXiVsEffMassOmegaMinus = new TH2F("f2dHistEffMassXiVsEffMassOmegaMinus", "M_{#Xi^{-} candidates} Vs M_{#Omega^{-} candidates}; M( #Lambda , #pi^{-} ) (GeV/c^{2}); M( #Lambda , K^{-} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);\r
-     fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaMinus);\r
- }\r
- if(! f2dHistEffMassLambdaVsEffMassXiPlus) {\r
-     f2dHistEffMassLambdaVsEffMassXiPlus = new TH2F("f2dHistEffMassLambdaVsEffMassXiPlus", "M_{#Lambda} Vs M_{#Xi^{+} candidates}; Inv. M_{#Lambda^{0}} (GeV/c^{2}); M( #Lambda , #pi^{+} ) (GeV/c^{2})", 300, 1.1, 1.13, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiPlus);\r
- }\r
- if(! f2dHistEffMassXiVsEffMassOmegaPlus) {\r
-     f2dHistEffMassXiVsEffMassOmegaPlus = new TH2F("f2dHistEffMassXiVsEffMassOmegaPlus", "M_{#Xi^{+} candidates} Vs M_{#Omega^{+} candidates}; M( #Lambda , #pi^{+} ) (GeV/c^{2}); M( #Lambda , K^{+} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);\r
-     fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaPlus);\r
- }\r
- if(! f2dHistXiRadiusVsEffMassXiMinus) {\r
-     f2dHistXiRadiusVsEffMassXiMinus = new TH2F("f2dHistXiRadiusVsEffMassXiMinus", "Transv. R_{Xi Decay} Vs M_{#Xi^{-} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{-} ) (GeV/c^{2})", 450, 0., 45.0, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiMinus);\r
- }\r
- if(! f2dHistXiRadiusVsEffMassXiPlus) {\r
-     f2dHistXiRadiusVsEffMassXiPlus = new TH2F("f2dHistXiRadiusVsEffMassXiPlus", "Transv. R_{Xi Decay} Vs M_{#Xi^{+} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{+} ) (GeV/c^{2})", 450, 0., 45.0, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiPlus);\r
- }\r
- if(! f2dHistXiRadiusVsEffMassOmegaMinus) {\r
-     f2dHistXiRadiusVsEffMassOmegaMinus = new TH2F("f2dHistXiRadiusVsEffMassOmegaMinus", "Transv. R_{Xi Decay} Vs M_{#Omega^{-} candidates}; r_{cascade} (cm); M( #Lambda , K^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);\r
-     fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaMinus);\r
- }\r
- if(! f2dHistXiRadiusVsEffMassOmegaPlus) {\r
-     f2dHistXiRadiusVsEffMassOmegaPlus = new TH2F("f2dHistXiRadiusVsEffMassOmegaPlus", "Transv. R_{Xi Decay} Vs M_{#Omega^{+} candidates}; r_{cascade} (cm); M( #Lambda , K^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);\r
-     fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaPlus);\r
- }\r
- if(! f2dHistTPCdEdxOfCascDghters){\r
-     f2dHistTPCdEdxOfCascDghters = new TH2F("f2dHistTPCdEdxOfCascDghters", "TPC dE/dx of the cascade daughters; charge x || #vec{p}_{TPC inner wall}(Casc. daughter) || (GeV/c); TPC signal (ADC)", 2000, -10.0, 10.0, 450, 0., 900.);\r
-     fListHistCascade->Add(f2dHistTPCdEdxOfCascDghters);\r
- }\r
- if(! f2dHistDcaXiDaughtersvsInvMass){\r
-     f2dHistDcaXiDaughtersvsInvMass = new TH2F("f2dHistDcaXiDaughtersvsInvMass", "DCA between Xi Daughters; DCA (cm); Number of Cascades", 100, 0., 0.5, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistDcaXiDaughtersvsInvMass);\r
- }\r
- if(! f2dHistDcaBachToPrimVertexvsInvMass) {\r
-     f2dHistDcaBachToPrimVertexvsInvMass = new TH2F("f2dHistDcaBachToPrimVertexvsInvMass", "DCA of Bach. to Prim. Vertex; DCA (cm); Number of Cascades", 250, 0., 0.25, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistDcaBachToPrimVertexvsInvMass);\r
- }\r
- if(! f2dHistXiCosineOfPointingAnglevsInvMass){\r
-     f2dHistXiCosineOfPointingAnglevsInvMass = new TH2F("f2dHistXiCosineOfPointingAnglevsInvMass", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl); Number of Xis", 200, 0.99, 1.0, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistXiCosineOfPointingAnglevsInvMass);\r
- }\r
- if(! f2dHistMassLambdaAsCascDghtervsInvMass){ \r
-     f2dHistMassLambdaAsCascDghtervsInvMass = new TH2F("f2dHistMassLambdaAsCascDghtervsInvMass","#Lambda associated to Casc. candidates; Eff. Mass (GeV/c^{2}); Counts", 300, 1.00, 1.3, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistMassLambdaAsCascDghtervsInvMass);\r
- }\r
- if(! f2dHistDcaV0DaughtersXivsInvMass){\r
-     f2dHistDcaV0DaughtersXivsInvMass = new TH2F("f2dHistDcaV0DaughtersXivsInvMass", "DCA between V0 daughters, in cascade; DCA (cm); Number of V0s", 120, 0., 0.6, 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistDcaV0DaughtersXivsInvMass);\r
- }\r
- if(! f2dHistDcaV0ToPrimVertexXivsInvMass){\r
-     f2dHistDcaV0ToPrimVertexXivsInvMass = new TH2F("f2dHistDcaV0ToPrimVertexXivsInvMass", "DCA of V0 to Prim. Vertex, in cascade; DCA (cm); Number of Cascades", 200, 0., 1., 400, 1.2, 2.0);\r
-     fListHistCascade->Add(f2dHistDcaV0ToPrimVertexXivsInvMass);\r
- }\r
- // - CFContainer PID study Xi minus\r
- if(!fCFContCascadePIDXiMinus)  {\r
-   const Int_t  lNbSteps      =  7 ;\r
-   const Int_t  lNbVariables  =  3 ;\r
-     //Array for the number of bins in each dimension :\r
-   Int_t lNbBinsPerVar[3] = {0};\r
-   lNbBinsPerVar[0] = 100;\r
-   lNbBinsPerVar[1] = 800;\r
-   lNbBinsPerVar[2] = 22;\r
-   if (fkSDDSelectionOn) {\r
-        if (fwithSDD) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-        else if (!fwithSDD) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar ); \r
-   } else if (!fkSDDSelectionOn) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-     //Setting the bin limits \r
-   fCFContCascadePIDXiMinus->SetBinLimits(0,   0.0  ,  10.0 ); // Pt(Cascade)\r
-   fCFContCascadePIDXiMinus->SetBinLimits(1,   1.2  ,   2.0 ); // Xi Effective mass\r
-   fCFContCascadePIDXiMinus->SetBinLimits(2,  -1.1  ,   1.1 ); // Rapidity\r
-     //Setting the step title : one per PID case\r
-   fCFContCascadePIDXiMinus->SetStepTitle(0, "No PID");\r
-   fCFContCascadePIDXiMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-   fCFContCascadePIDXiMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-   fCFContCascadePIDXiMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-   fCFContCascadePIDXiMinus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-   fCFContCascadePIDXiMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-   fCFContCascadePIDXiMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");  \r
-     //Setting the variable title, per axis\r
-   fCFContCascadePIDXiMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-   fCFContCascadePIDXiMinus->SetVarTitle(1, "M( #Lambda , #pi^{-} ) (GeV/c^{2})");\r
-   fCFContCascadePIDXiMinus->SetVarTitle(2, "Y_{#Xi}");\r
-   fListHistCascade->Add(fCFContCascadePIDXiMinus);\r
- }\r
- // - CFContainer PID study Xi plus\r
- if (!fCFContCascadePIDXiPlus) {\r
-   const Int_t  lNbSteps      =  7 ;\r
-   const Int_t  lNbVariables  =  3 ;\r
-     //Array for the number of bins in each dimension :\r
-   Int_t lNbBinsPerVar[3] = {0};\r
-   lNbBinsPerVar[0] = 100;\r
-   lNbBinsPerVar[1] = 800;\r
-   lNbBinsPerVar[2] = 22;\r
-   if (fkSDDSelectionOn) {\r
-        if (fwithSDD) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-        else if (!fwithSDD) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-   } else if (!fkSDDSelectionOn) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-     //Setting the bin limits \r
-   fCFContCascadePIDXiPlus->SetBinLimits(0,   0.0  ,  10.0 );  // Pt(Cascade)\r
-   fCFContCascadePIDXiPlus->SetBinLimits(1,   1.2  ,   2.0 );  // Xi Effective mass\r
-   fCFContCascadePIDXiPlus->SetBinLimits(2,  -1.1  ,   1.1 );  // Rapidity\r
-     //Setting the step title : one per PID case\r
-   fCFContCascadePIDXiPlus->SetStepTitle(0, "No PID");\r
-   fCFContCascadePIDXiPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-   fCFContCascadePIDXiPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-   fCFContCascadePIDXiPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-   fCFContCascadePIDXiPlus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-   fCFContCascadePIDXiPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-   fCFContCascadePIDXiPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");\r
-     //Setting the variable title, per axis\r
-   fCFContCascadePIDXiPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-   fCFContCascadePIDXiPlus->SetVarTitle(1, "M( #Lambda , #pi^{+} ) (GeV/c^{2})");\r
-   fCFContCascadePIDXiPlus->SetVarTitle(2, "Y_{#Xi}");\r
-   fListHistCascade->Add(fCFContCascadePIDXiPlus);\r
- }\r
- // - CFContainer PID study Omega minus\r
- if(!fCFContCascadePIDOmegaMinus)  {\r
-   const Int_t  lNbSteps      =  7 ;\r
-   const Int_t  lNbVariables  =  3 ;\r
-     //Array for the number of bins in each dimension :\r
-   Int_t lNbBinsPerVar[3] = {0};\r
-   lNbBinsPerVar[0] = 100;\r
-   lNbBinsPerVar[1] = 1000;\r
-   lNbBinsPerVar[2] = 22;\r
-   if (fkSDDSelectionOn) {\r
-        if (fwithSDD) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-        else if (!fwithSDD) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-   } else if (!fkSDDSelectionOn) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-     //Setting the bin limits \r
-   fCFContCascadePIDOmegaMinus->SetBinLimits(0,   0.0  ,  10.0 );      // Pt(Cascade)\r
-   fCFContCascadePIDOmegaMinus->SetBinLimits(1,   1.5  ,   2.5 );      // Omega Effective mass\r
-   fCFContCascadePIDOmegaMinus->SetBinLimits(2,  -1.1  ,   1.1 );      // Rapidity\r
-     //Setting the step title : one per PID case\r
-   fCFContCascadePIDOmegaMinus->SetStepTitle(0, "No PID");\r
-   fCFContCascadePIDOmegaMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-   fCFContCascadePIDOmegaMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-   fCFContCascadePIDOmegaMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-   fCFContCascadePIDOmegaMinus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-   fCFContCascadePIDOmegaMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-   fCFContCascadePIDOmegaMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");\r
-     //Setting the variable title, per axis\r
-   fCFContCascadePIDOmegaMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-   fCFContCascadePIDOmegaMinus->SetVarTitle(1, "M( #Lambda , K^{-} ) (GeV/c^{2})");\r
-   fCFContCascadePIDOmegaMinus->SetVarTitle(2, "Y_{#Omega}");\r
-   fListHistCascade->Add(fCFContCascadePIDOmegaMinus);\r
- }\r
- // - CFContainer PID study Omega plus\r
- if(!fCFContCascadePIDOmegaPlus)  {\r
-   const Int_t  lNbSteps      =  7 ;\r
-   const Int_t  lNbVariables  =  3 ;\r
-     //Array for the number of bins in each dimension :\r
-   Int_t lNbBinsPerVar[3] = {0};\r
-   lNbBinsPerVar[0] = 100;\r
-   lNbBinsPerVar[1] = 1000;\r
-   lNbBinsPerVar[2] = 22; \r
-   if (fkSDDSelectionOn) {\r
-        if (fwithSDD) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-        else if (!fwithSDD) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-   } else if (!fkSDDSelectionOn) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-     //Setting the bin limits \r
-   fCFContCascadePIDOmegaPlus->SetBinLimits(0,   0.0  ,  10.0 );       // Pt(Cascade)\r
-   fCFContCascadePIDOmegaPlus->SetBinLimits(1,   1.5  ,   2.5 );       // Omega Effective mass\r
-   fCFContCascadePIDOmegaPlus->SetBinLimits(2,  -1.1  ,   1.1 );       // Rapidity \r
-     //Setting the step title : one per PID case\r
-   fCFContCascadePIDOmegaPlus->SetStepTitle(0, "No PID");\r
-   fCFContCascadePIDOmegaPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-   fCFContCascadePIDOmegaPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-   fCFContCascadePIDOmegaPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-   fCFContCascadePIDOmegaPlus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-   fCFContCascadePIDOmegaPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-   fCFContCascadePIDOmegaPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");\r
-     //Setting the variable title, per axis\r
-   fCFContCascadePIDOmegaPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-   fCFContCascadePIDOmegaPlus->SetVarTitle(1, "M( #Lambda , K^{+} ) (GeV/c^{2})");\r
-   fCFContCascadePIDOmegaPlus->SetVarTitle(2, "Y_{#Omega}");  \r
-   fListHistCascade->Add(fCFContCascadePIDOmegaPlus);\r
- }\r
- // - CFContainer: towards the optimisation of topological selections\r
- if(! fCFContCascadeCuts) {\r
-       // Container meant to store all the relevant distributions corresponding to the cut variables.\r
-        // NB: overflow/underflow of variables on which we want to cut later should be 0!!! \r
-   const Int_t  lNbSteps      =  4 ;\r
-   const Int_t  lNbVariables  =  19 ;\r
-     //Array for the number of bins in each dimension :\r
-   Int_t lNbBinsPerVar[lNbVariables] = {0};\r
-   lNbBinsPerVar[0]  = 25;     //DcaCascDaughters             :  [0.0,2.4,3.0]       -> Rec.Cut = 2.0;\r
-   lNbBinsPerVar[1]  = 25;     //DcaBachToPrimVertex          :  [0.0,0.24,100.0]    -> Rec.Cut = 0.01; \r
-   lNbBinsPerVar[2]  = 60;     //CascCosineOfPointingAngle    :  [0.94,1.0]          -> Rec.Cut = 0.95;\r
-   lNbBinsPerVar[3]  = 40;     //CascRadius                   :  [0.0,3.9,1000.0]    -> Rec.Cut = 0.2;\r
-   lNbBinsPerVar[4]  = 30;     //InvMassLambdaAsCascDghter    :  [1.1,1.3]           -> Rec.Cut = 0.008;\r
-   lNbBinsPerVar[5]  = 20;     //DcaV0Daughters               :  [0.0,2.0]           -> Rec.Cut = 1.5;\r
-   lNbBinsPerVar[6]  = 201;    //V0CosineOfPointingAngleToXi  :  [0.89,1.0]          -> No Rec.Cut;\r
-   lNbBinsPerVar[7]  = 40;     //V0Radius                     :  [0.0,3.9,1000.0]    -> Rec.Cut = 0.2;\r
-   lNbBinsPerVar[8]  = 40;     //DcaV0ToPrimVertex            :  [0.0,0.39,110.0]    -> Rec.Cut = 0.01;  \r
-   lNbBinsPerVar[9]  = 25;     //DcaPosToPrimVertex           :  [0.0,0.24,100.0]    -> Rec.Cut = 0.01;\r
-   lNbBinsPerVar[10] = 25;     //DcaNegToPrimVertex           :  [0.0,0.24,100.0]    -> Rec.Cut = 0.01;\r
-   lNbBinsPerVar[11] = 150;    //InvMassXi                    :   2-MeV/c2 bins\r
-   lNbBinsPerVar[12] = 120;    //InvMassOmega                 :   2-MeV/c2 bins\r
-   lNbBinsPerVar[13] = 100;    //XiTransvMom                  :  [0.0,10.0]\r
-   lNbBinsPerVar[14] = 110;    //Y(Xi)                        :   0.02 in rapidity units\r
-   lNbBinsPerVar[15] = 110;    //Y(Omega)                     :   0.02 in rapidity units\r
-   lNbBinsPerVar[16] = 112;    //Proper lenght of cascade       \r
-   lNbBinsPerVar[17] = 112;    //Proper lenght of V0\r
-   lNbBinsPerVar[18] = 112;    //Distance V0-Xi in transverse plane\r
-   if (fkSDDSelectionOn) {\r
-        if (fwithSDD) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);\r
-        else if (!fwithSDD) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);\r
-   } else if (!fkSDDSelectionOn) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);\r
-     //Setting the bin limits \r
-     //0 -  DcaXiDaughters\r
-   Double_t *lBinLim0  = new Double_t[ lNbBinsPerVar[0] + 1 ];\r
-        for(Int_t i=0; i< lNbBinsPerVar[0]; i++) lBinLim0[i] = (Double_t)0.0 + (2.4 - 0.0)/(lNbBinsPerVar[0] - 1) * (Double_t)i;\r
-        lBinLim0[ lNbBinsPerVar[0] ] = 3.0;\r
-   fCFContCascadeCuts -> SetBinLimits(0, lBinLim0);  \r
-   delete [] lBinLim0;\r
-     //1 - DcaToPrimVertexXi\r
-   Double_t *lBinLim1  = new Double_t[ lNbBinsPerVar[1] + 1 ];\r
-        for(Int_t i=0; i<lNbBinsPerVar[1]; i++) lBinLim1[i] = (Double_t)0.0 + (0.24  - 0.0)/(lNbBinsPerVar[1] - 1) * (Double_t)i;\r
-        lBinLim1[ lNbBinsPerVar[1] ] = 100.0;\r
-   fCFContCascadeCuts -> SetBinLimits(1, lBinLim1);  \r
-   delete [] lBinLim1;    \r
-     //2 - CascCosineOfPointingAngle \r
-   fCFContCascadeCuts->SetBinLimits(2, 0.94, 1.);\r
-     //3 - CascRadius\r
-   Double_t *lBinLim3  = new Double_t[ lNbBinsPerVar[3]+1 ];\r
-        for(Int_t i=0; i< lNbBinsPerVar[3]; i++)   lBinLim3[i]  = (Double_t)0.0   + (3.9  - 0.0 )/(lNbBinsPerVar[3] - 1)  * (Double_t)i ;\r
-        lBinLim3[ lNbBinsPerVar[3] ] = 1000.0;\r
-   fCFContCascadeCuts -> SetBinLimits(3,  lBinLim3 );        \r
-   delete [] lBinLim3;\r
-     //4 - InvMassLambdaAsCascDghter\r
-   fCFContCascadeCuts->SetBinLimits(4, 1.1, 1.13);\r
-     //5 - DcaV0Daughters\r
-   fCFContCascadeCuts -> SetBinLimits(5, 0., 2.);\r
-     //6 - V0CosineOfPointingAngle\r
-   fCFContCascadeCuts -> SetBinLimits(6, 0.8, 1.001);\r
-     //7 - V0Radius\r
-   Double_t *lBinLim7 = new Double_t[ lNbBinsPerVar[7] + 1];\r
-        for(Int_t i=0; i< lNbBinsPerVar[7];i++) lBinLim7[i] = (Double_t)0.0 + (3.9 - 0.0)/(lNbBinsPerVar[7] - 1) * (Double_t)i;\r
-        lBinLim7[ lNbBinsPerVar[7] ] = 1000.0;\r
-   fCFContCascadeCuts -> SetBinLimits(7, lBinLim7); \r
-   delete [] lBinLim7;\r
-     //8 - DcaV0ToPrimVertex\r
-   Double_t *lBinLim8  = new Double_t[ lNbBinsPerVar[8]+1 ];\r
-        for(Int_t i=0; i< lNbBinsPerVar[8];i++)   lBinLim8[i]  = (Double_t)0.0   + (0.39  - 0.0 )/(lNbBinsPerVar[8]-1)  * (Double_t)i ;\r
-        lBinLim8[ lNbBinsPerVar[8]  ] = 100.0;\r
-   fCFContCascadeCuts -> SetBinLimits(8,  lBinLim8 );    \r
-   delete [] lBinLim8;\r
-     //9 - DcaPosToPrimVertex\r
-   Double_t *lBinLim9  = new Double_t[ lNbBinsPerVar[9]+1 ];\r
-        for(Int_t i=0; i< lNbBinsPerVar[9];i++)   lBinLim9[i]  = (Double_t)0.0   + (0.24  - 0.0 )/(lNbBinsPerVar[9]-1)  * (Double_t)i ;\r
-        lBinLim9[ lNbBinsPerVar[9]  ] = 100.0;\r
-   fCFContCascadeCuts -> SetBinLimits(9,  lBinLim9 );        \r
-   delete [] lBinLim9;\r
-     //10 - DcaNegToPrimVertex\r
-   Double_t *lBinLim10  = new Double_t[ lNbBinsPerVar[10]+1 ];\r
-        for(Int_t i=0; i< lNbBinsPerVar[10];i++)   lBinLim10[i]  = (Double_t)0.0   + (0.24  - 0.0 )/(lNbBinsPerVar[10]-1)  * (Double_t)i ;\r
-        lBinLim10[ lNbBinsPerVar[10]  ] = 100.0;\r
-   fCFContCascadeCuts -> SetBinLimits(10,  lBinLim10 );            // DcaPosToPrimVertexXi : 0.0 to 0.25 \r
-   delete [] lBinLim10;\r
-     //11 - InvMassXi\r
-   fCFContCascadeCuts->SetBinLimits(11, 1.25, 1.40);\r
-     //12 - InvMassOmega\r
-   fCFContCascadeCuts->SetBinLimits(12, 1.62, 1.74);\r
-     //13 - XiTransvMom\r
-   fCFContCascadeCuts->SetBinLimits(13, 0.0, 10.0); \r
-     //14 - Y(Xi)\r
-   fCFContCascadeCuts->SetBinLimits(14, -1.1, 1.1);\r
-     //15 - Y(Omega)\r
-   fCFContCascadeCuts->SetBinLimits(15, -1.1, 1.1);\r
-     //16 - Proper time of cascade\r
-   Double_t *lBinLim16  = new Double_t[ lNbBinsPerVar[16]+1 ];\r
-   for(Int_t i=0; i< lNbBinsPerVar[16];i++) lBinLim16[i] = (Double_t) -1. + (110. + 1.0 ) / (lNbBinsPerVar[16] - 1) * (Double_t) i;\r
-   lBinLim16[ lNbBinsPerVar[16] ] = 2000.0;\r
-   fCFContCascadeCuts->SetBinLimits(16, lBinLim16);\r
-     //17 - Proper time of V0\r
-   fCFContCascadeCuts->SetBinLimits(17, lBinLim16);\r
-     //18 - Distance V0-Xi in transverse plane\r
-   fCFContCascadeCuts->SetBinLimits(18, lBinLim16);\r
-     // Setting the number of steps : one for each cascade species (Xi-, Xi+ and Omega-, Omega+)\r
-   fCFContCascadeCuts->SetStepTitle(0, "#Xi^{-} candidates");\r
-   fCFContCascadeCuts->SetStepTitle(1, "#bar{#Xi}^{+} candidates");\r
-   fCFContCascadeCuts->SetStepTitle(2, "#Omega^{-} candidates");\r
-   fCFContCascadeCuts->SetStepTitle(3, "#bar{#Omega}^{+} candidates");\r
-     // Setting the variable title, per axis\r
-   fCFContCascadeCuts->SetVarTitle(0,  "Dca(cascade daughters) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(1,  "ImpactParamToPV(bachelor) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(2,  "cos(cascade PA)");\r
-   fCFContCascadeCuts->SetVarTitle(3,  "R_{2d}(cascade decay) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(4,  "M_{#Lambda}(as casc dghter) (GeV/c^{2})");\r
-   fCFContCascadeCuts->SetVarTitle(5,  "Dca(V0 daughters) in Xi (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(6,  "cos(V0 PA) to cascade vtx");\r
-   fCFContCascadeCuts->SetVarTitle(7,  "R_{2d}(V0 decay) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(8,  "ImpactParamToPV(V0) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(9,  "ImpactParamToPV(Pos) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(10, "ImpactParamToPV(Neg) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(11, "Inv. Mass(Xi) (GeV/c^{2})");\r
-   fCFContCascadeCuts->SetVarTitle(12, "Inv. Mass(Omega) (GeV/c^{2})");\r
-   fCFContCascadeCuts->SetVarTitle(13, "pt(cascade) (GeV/c)");\r
-   fCFContCascadeCuts->SetVarTitle(14, "Y(Xi)");\r
-   fCFContCascadeCuts->SetVarTitle(15, "Y(Omega)");\r
-   fCFContCascadeCuts->SetVarTitle(16, "mL/p (cascade) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(17, "mL/p (V0) (cm)");\r
-   fCFContCascadeCuts->SetVarTitle(18, "Distance V0-Cascade in transverse plane (cm)");\r
-   fListHistCascade->Add(fCFContCascadeCuts);\r
- }\r
-\r
- PostData(1, fListHistCascade);\r
- PostData(2, fCFContCascadePIDXiMinus);\r
- PostData(3, fCFContCascadePIDXiPlus);\r
- PostData(4, fCFContCascadePIDOmegaMinus);\r
- PostData(5, fCFContCascadePIDOmegaPlus);\r
- PostData(6, fCFContCascadeCuts);\r
-} // end UserCreateOutputObjects\r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {\r
-\r
-  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-  // Main loop (called for each event)\r
-  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-  \r
-  //----------------\r
-  //Define variables \r
-  AliESDEvent *lESDevent = 0x0;\r
-  AliAODEvent *lAODevent = 0x0;\r
-\r
-  //---------------------\r
-  //Check the PIDresponse\r
-  if(!fPIDResponse) {\r
-       AliError("Cannot get pid response");\r
-       return;\r
-  }\r
-\r
-  ///////////////////\r
-  // EVENT SELECTIONS\r
-  ///////////////////\r
-  // In order:\r
-  // 1) SDD selection\r
-  // 2) Physics selection\r
-  // 3) Select only looking at events with well-established PV\r
-  // 4) Pileup selection\r
-  // 5) |Z| < 10 cm\r
-\r
-  //----------------------\r
-  // Before any selections\r
-  //----------------------\r
-  //- Define the variables\r
-  Int_t ncascadesBeforeAnySel = 0;\r
-  Int_t nTrackMultiplicityBeforeAnySel = 0;\r
-  if (fAnalysisType == "ESD") {\r
-      // - Load the InputEvent and check\r
-      lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );\r
-      if (!lESDevent) {\r
-         AliWarning("ERROR: lESDevent not available \n");\r
-         return;\r
-      }\r
-      // - Take the number of cascades and tracks before any events selection\r
-      ncascadesBeforeAnySel = lESDevent->GetNumberOfCascades();\r
-      nTrackMultiplicityBeforeAnySel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);\r
-  } else if (fAnalysisType == "AOD") {\r
-      // - Load the InputEvent and check\r
-      lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );\r
-      if (!lAODevent) {\r
-          AliWarning("ERROR: lAODevent not available \n");\r
-          return;\r
-      }\r
-      // - Take the number of cascades and tracks before any events selection\r
-      ncascadesBeforeAnySel  = lAODevent->GetNumberOfCascades();\r
-      nTrackMultiplicityBeforeAnySel = -100;  //FIXME: I can't find the equivalent method for the AOD  \r
-  } else {\r
-      Printf("Analysis type (ESD or AOD) not specified \n");\r
-      return;\r
-  }\r
-  // - Fill the plots\r
-  fHistCascadeMultiplicityBeforeAnySel->Fill(ncascadesBeforeAnySel);\r
-  fHistTrackMultiplicityBeforeAnySel->Fill(nTrackMultiplicityBeforeAnySel);\r
\r
-  //--------------\r
-  // SDD selection\r
-  //--------------\r
-  // - Define the variables\r
-  Int_t ncascadesAfterSDDSel = 0;\r
-  Int_t nTrackMultiplicityAfterSDDSel = 0;\r
-  // - Selection for ESD and AOD\r
-  if (fAnalysisType == "ESD") {\r
-     if (fkSDDSelectionOn) {\r
-        TString trcl = lESDevent->GetFiredTriggerClasses();\r
-        //cout<<"Fired Trigger Classes: "<<trcl<<endl;\r
-        if (fwithSDD){\r
-          if(!(trcl.Contains("ALLNOTRD"))) {\r
-               cout<<"We are selecting events with SDD turn ON. This event has the SDD turn OFF. =>  RETURN!! (Exclude it)..."<<endl;\r
-               PostData(1, fListHistCascade);\r
-               PostData(2, fCFContCascadePIDXiMinus);\r
-               PostData(3, fCFContCascadePIDXiPlus);\r
-               PostData(4, fCFContCascadePIDOmegaMinus);\r
-               PostData(5, fCFContCascadePIDOmegaPlus);\r
-               PostData(6, fCFContCascadeCuts);\r
-               return;\r
-          }\r
-        } else if (!fwithSDD){\r
-          if((trcl.Contains("ALLNOTRD"))) {\r
-               cout<<"We are selecting events with SDD turn OFF. This event has the SDD turn ON. =>  RETURN!! (Exclude it)..."<<endl;\r
-               PostData(1, fListHistCascade);\r
-               PostData(2, fCFContCascadePIDXiMinus);\r
-               PostData(3, fCFContCascadePIDXiPlus);\r
-               PostData(4, fCFContCascadePIDOmegaMinus);\r
-               PostData(5, fCFContCascadePIDOmegaPlus);\r
-               PostData(6, fCFContCascadeCuts);\r
-               return;\r
-          }\r
-        }\r
-     }\r
-     // - Take the number of cascades and tracks after the SDD selection\r
-     ncascadesAfterSDDSel = lESDevent->GetNumberOfCascades();\r
-     nTrackMultiplicityAfterSDDSel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);\r
-  } else if (fAnalysisType == "AOD") {\r
-     if (fkSDDSelectionOn) {\r
-        TString trcl = lAODevent->GetFiredTriggerClasses();\r
-        if (fwithSDD){\r
-           if(!(trcl.Contains("ALLNOTRD"))) {\r
-                PostData(1, fListHistCascade);\r
-                PostData(2, fCFContCascadePIDXiMinus);\r
-                PostData(3, fCFContCascadePIDXiPlus);\r
-                PostData(4, fCFContCascadePIDOmegaMinus);\r
-                PostData(5, fCFContCascadePIDOmegaPlus);\r
-                PostData(6, fCFContCascadeCuts);\r
-                cout<<"We are selecting events with SDD turn ON. This event has the SDD turn OFF. =>  RETURN!! (Exclude it)..."<<endl;\r
-                return;\r
-           }\r
-        } else if (!fwithSDD) {\r
-           if((trcl.Contains("ALLNOTRD"))) {\r
-                PostData(1, fListHistCascade);\r
-                PostData(2, fCFContCascadePIDXiMinus);\r
-                PostData(3, fCFContCascadePIDXiPlus);\r
-                PostData(4, fCFContCascadePIDOmegaMinus);\r
-                PostData(5, fCFContCascadePIDOmegaPlus);\r
-                PostData(6, fCFContCascadeCuts);\r
-                cout<<"We are selecting events with SDD turn OFF. This event has the SDD turn ON. =>  RETURN!! (Exclude it)..."<<endl;\r
-                return;\r
-           }\r
-        }\r
-     }\r
-     // - Take the number of cascades and tracks after the SDD selection\r
-     ncascadesAfterSDDSel = lAODevent->GetNumberOfCascades();\r
-     nTrackMultiplicityAfterSDDSel = -100; //FIXME: I can't find the equivalent method for the AOD\r
-  }\r
-  // - Fill the plots\r
-  fHistCascadeMultiplicityAfterSDDSel->Fill(ncascadesAfterSDDSel);\r
-  fHistTrackMultiplicityAfterSDDSel->Fill(nTrackMultiplicityAfterSDDSel);\r
-\r
-  //----------------------------------------------\r
-  // Physics selection (+ re-vertexer for the ESD)\r
-  //----------------------------------------------\r
-  // - Define the variables\r
-  Int_t ncascadesAfterPhysicsSel = 0;\r
-  Int_t nTrackMultiplicityAfterPhysicsSel = 0;\r
-  // - Selection for ESD and AOD\r
-  if (fAnalysisType == "ESD") {\r
-      UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();\r
-      Bool_t isSelected = 0;\r
-      isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;\r
-      if(! isSelected){\r
-          PostData(1, fListHistCascade);\r
-          PostData(2, fCFContCascadePIDXiMinus);\r
-          PostData(3, fCFContCascadePIDXiPlus);\r
-          PostData(4, fCFContCascadePIDOmegaMinus);\r
-          PostData(5, fCFContCascadePIDOmegaPlus);\r
-          PostData(6, fCFContCascadeCuts);\r
-          cout<<"We are selecting the events that past tha Physics Selection. This event does not pass the Physics Selection. =>  RETURN!! (Exclude it)..."<<endl;\r
-          return;\r
-      }\r
-      // - Take the number of cascades and tracks after physics selection\r
-      ncascadesAfterPhysicsSel = lESDevent->GetNumberOfCascades();    \r
-      nTrackMultiplicityAfterPhysicsSel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);  \r
-      // - Cascade vertexer (ESD)\r
-      // Relaunch V0 and Cascade vertexers\r
-      if (fkRerunV0CascVertexers) { \r
-            lESDevent->ResetCascades();\r
-            lESDevent->ResetV0s();\r
-            AliV0vertexer *lV0vtxer = new AliV0vertexer();\r
-            AliCascadeVertexer *lCascVtxer = new AliCascadeVertexer();\r
-            //lV0vtxer->GetCuts(fV0Sels);\r
-            //lCascVtxer->GetCuts(fCascSels);\r
-            lV0vtxer->SetCuts(fV0Sels);      // NB don't use SetDefaultCuts!! because it acts on static variables \r
-            lCascVtxer->SetCuts(fCascSels);\r
-            lV0vtxer->Tracks2V0vertices(lESDevent);\r
-            lCascVtxer->V0sTracks2CascadeVertices(lESDevent);\r
-            //delete lV0vtxer;\r
-            //delete lCascVtxer;\r
-      }         \r
-  } else if (fAnalysisType == "AOD") {\r
-      UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();\r
-      Bool_t isSelected = 0;\r
-      isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;\r
-      if(! isSelected){\r
-          PostData(1, fListHistCascade);\r
-          PostData(2, fCFContCascadePIDXiMinus);\r
-          PostData(3, fCFContCascadePIDXiPlus);\r
-          PostData(4, fCFContCascadePIDOmegaMinus);\r
-          PostData(5, fCFContCascadePIDOmegaPlus);\r
-          PostData(6, fCFContCascadeCuts);\r
-          cout<<"We are selecting the events that past tha Physics Selection. This event does not pass the Physics Selection. =>  RETURN!! (Exclude it)..."<<endl;\r
-          return;\r
-      }    \r
-      // - Take the number of cascades and tracks after the physics selection\r
-      ncascadesAfterPhysicsSel = lAODevent->GetNumberOfCascades();\r
-      nTrackMultiplicityAfterPhysicsSel = -100;  //FIXME: I can't find the equivalent method for the AOD    \r
-  } \r
-  // - Fill the plots\r
-  fHistCascadeMultiplicityAfterPhysicsSel->Fill(ncascadesAfterPhysicsSel);\r
-  fHistTrackMultiplicityAfterPhysicsSel->Fill(nTrackMultiplicityAfterPhysicsSel);\r
-\r
-  //------------------------------\r
-  // Well-established PV selection\r
-  //------------------------------\r
-  // - Define variables\r
-  Int_t ncascadesForSelEvtNoTPCOnly = 0;\r
-  Int_t nTrackMultiplicityForSelEvtNoTPCOnly = 0;\r
-  // - Selection for ESD and AOD\r
-  if (fAnalysisType == "ESD") {\r
-      // - Vertex coordinates: get the PVs stored in the ESD found with tracks and SPD\r
-      const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();\r
-      const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();\r
-      // - Select only looking at events with well-established PV\r
-      if (fkQualityCutNoTPConlyPrimVtx) {\r
-          if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){\r
-              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");\r
-              PostData(1, fListHistCascade);\r
-              PostData(2, fCFContCascadePIDXiMinus);\r
-              PostData(3, fCFContCascadePIDXiPlus);\r
-              PostData(4, fCFContCascadePIDOmegaMinus);\r
-              PostData(5, fCFContCascadePIDOmegaPlus);\r
-              PostData(6, fCFContCascadeCuts);\r
-              return;\r
-          }\r
-      }\r
-      // - Take the number of cascades and tracks after TPConly selection\r
-      ncascadesForSelEvtNoTPCOnly = lESDevent->GetNumberOfCascades();\r
-      nTrackMultiplicityForSelEvtNoTPCOnly = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);\r
-  } else if (fAnalysisType == "AOD") {\r
-      // - Vertex coordinates: get the PVs stored in the AOD found with tracks and SPD\r
-      const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();\r
-      const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();\r
-      // - Select only looking at events with well-established PV\r
-      if (fkQualityCutNoTPConlyPrimVtx) {\r
-          if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {\r
-              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");\r
-              PostData(1, fListHistCascade);\r
-              PostData(2, fCFContCascadePIDXiMinus);\r
-              PostData(3, fCFContCascadePIDXiPlus);\r
-              PostData(4, fCFContCascadePIDOmegaMinus);\r
-              PostData(5, fCFContCascadePIDOmegaPlus);\r
-              PostData(6, fCFContCascadeCuts);\r
-              return;\r
-          }\r
-      }\r
-      // - Take the number of cascades and tracks after TPConly selection\r
-      ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();\r
-      nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME: I can't find the equivalent method for the AOD\r
-  }\r
-  // - Fill the plots\r
-  fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);\r
-  fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);\r
-    \r
-  //----------------\r
-  // Pilup selection\r
-  //----------------\r
-  // - Define variables\r
-  Int_t ncascadesForSelEvtNoTPCOnlyNoPileup = 0;\r
-  Int_t nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = 0;\r
-  // - Selection for ESD and AOD\r
-  if (fAnalysisType == "ESD") {\r
-      if (fkQualityCutPileup) {\r
-          if(lESDevent->IsPileupFromSPD()){\r
-              AliWarning("Pb / Pile-up event ... return!");\r
-              PostData(1, fListHistCascade);\r
-              PostData(2, fCFContCascadePIDXiMinus);\r
-              PostData(3, fCFContCascadePIDXiPlus);\r
-              PostData(4, fCFContCascadePIDOmegaMinus);\r
-              PostData(5, fCFContCascadePIDOmegaPlus);\r
-              PostData(6, fCFContCascadeCuts);\r
-              return;\r
-          }\r
-      }\r
-      // - Take the number of cascades and tracks after Pileup selection\r
-      ncascadesForSelEvtNoTPCOnlyNoPileup = lESDevent->GetNumberOfCascades();\r
-      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);\r
-  } else if (fAnalysisType == "AOD") {\r
-      if (fkQualityCutPileup) {\r
-          if(lAODevent->IsPileupFromSPD()){\r
-              AliWarning("Pb / Pile-up event ... return!");\r
-              PostData(1, fListHistCascade);\r
-              PostData(2, fCFContCascadePIDXiMinus);\r
-              PostData(3, fCFContCascadePIDXiPlus);\r
-              PostData(4, fCFContCascadePIDOmegaMinus);\r
-              PostData(5, fCFContCascadePIDOmegaPlus);\r
-              PostData(6, fCFContCascadeCuts);\r
-              return;\r
-          }\r
-      }\r
-      // - Take the number of cascades and tracks after Pileup selection\r
-      ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();\r
-      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;   //FIXME: I can't find the equivalent method for the AOD\r
-  }\r
-  fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);\r
-  fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);\r
-    \r
-  //----------------------------------------------------\r
-  // Vertex Z position selection (+ magnetic field info)\r
-  //----------------------------------------------------\r
-  // - Define variables\r
-  Double_t lBestPrimaryVtxPos[3]  = {-100.0, -100.0, -100.0};\r
-  Double_t lMagneticField         = -10.;\r
-  Double_t tPrimaryVtxPosition[3] = {-100.0, -100.0, -100.0};\r
-  Int_t ncascadesAfterVertexSel          = 0;\r
-  Int_t nTrackMultiplicityAfterVertexSel = 0; \r
-  // - Selection for ESD and AOD\r
-  if (fAnalysisType == "ESD") {\r
-      // - Vertex coordinates: get the best primary vertex available for the event \r
-      const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex(); \r
-      if (!lPrimaryBestESDVtx){\r
-          AliWarning("No prim. vertex in ESD... return!");\r
-          PostData(1, fListHistCascade);\r
-          PostData(2, fCFContCascadePIDXiMinus);\r
-          PostData(3, fCFContCascadePIDXiPlus);\r
-          PostData(4, fCFContCascadePIDOmegaMinus);\r
-          PostData(5, fCFContCascadePIDOmegaPlus);\r
-          PostData(6, fCFContCascadeCuts);\r
-          return;\r
-      }\r
-      lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );\r
-      // - Fill the vertex plots before any event selection on vertex position\r
-      const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();\r
-      tPrimaryVtxPosition[0] = primaryVtx->GetX();\r
-      tPrimaryVtxPosition[1] = primaryVtx->GetY();\r
-      tPrimaryVtxPosition[2] = primaryVtx->GetZ();\r
-         fHistPVx->Fill( tPrimaryVtxPosition[0] );\r
-         fHistPVy->Fill( tPrimaryVtxPosition[1] );\r
-         fHistPVz->Fill( tPrimaryVtxPosition[2] );       \r
-      // - Get magnetic filed info\r
-      lMagneticField = lESDevent->GetMagneticField();\r
-      //if(TMath::Abs(lMagneticField ) < 10e-6) continue;\r
-      // - Selection on the primary vertex Z position \r
-      if (fkQualityCutZprimVtxPos) {\r
-          if (TMath::Abs(lBestPrimaryVtxPos[2]) > fVtxRange || TMath::Abs(lBestPrimaryVtxPos[2]) < fVtxRangeMin) {\r
-               AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");\r
-               PostData(1, fListHistCascade);\r
-               PostData(2, fCFContCascadePIDXiMinus);\r
-               PostData(3, fCFContCascadePIDXiPlus);\r
-               PostData(4, fCFContCascadePIDOmegaMinus);\r
-               PostData(5, fCFContCascadePIDOmegaPlus);\r
-               PostData(6, fCFContCascadeCuts);\r
-               return;\r
-          }\r
-      }\r
-      // - Take the number of cascades and tracks after vertex Z position selection\r
-      ncascadesAfterVertexSel = lESDevent->GetNumberOfCascades();\r
-      nTrackMultiplicityAfterVertexSel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5); \r
-  } else if (fAnalysisType == "AOD") {\r
-      // - Vertex coordinates: get the best primary vertex available for the event\r
-      const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex();\r
-      if (!lPrimaryBestAODVtx){\r
-          AliWarning("No prim. vertex in AOD... return!");\r
-          PostData(1, fListHistCascade);\r
-          PostData(2, fCFContCascadePIDXiMinus);\r
-          PostData(3, fCFContCascadePIDXiPlus);\r
-          PostData(4, fCFContCascadePIDOmegaMinus);\r
-          PostData(5, fCFContCascadePIDOmegaPlus);\r
-          PostData(6, fCFContCascadeCuts);\r
-          return;\r
-      }\r
-      lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );\r
-      // - Fill the vertex plots before any event selection on vertex position\r
-      const AliVVertex *primaryVtx = lAODevent->GetPrimaryVertex();\r
-      tPrimaryVtxPosition[0] = primaryVtx->GetX();\r
-      tPrimaryVtxPosition[1] = primaryVtx->GetY();\r
-      tPrimaryVtxPosition[2] = primaryVtx->GetZ();\r
-         fHistPVx->Fill( tPrimaryVtxPosition[0] );\r
-         fHistPVy->Fill( tPrimaryVtxPosition[1] );\r
-         fHistPVz->Fill( tPrimaryVtxPosition[2] );\r
-      // - Get magnetic filed info\r
-      lMagneticField = lAODevent->GetMagneticField();\r
-      //if(TMath::Abs(lMagneticField ) < 10e-6) continue;\r
-      // - Selection on the primary vertex Z position \r
-      if (fkQualityCutZprimVtxPos) {\r
-          if (TMath::Abs(lBestPrimaryVtxPos[2]) > fVtxRange || TMath::Abs(lBestPrimaryVtxPos[2]) < fVtxRangeMin) {\r
-              AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");\r
-              PostData(1, fListHistCascade);\r
-              PostData(2, fCFContCascadePIDXiMinus);\r
-              PostData(3, fCFContCascadePIDXiPlus);\r
-              PostData(4, fCFContCascadePIDOmegaMinus);\r
-              PostData(5, fCFContCascadePIDOmegaPlus);\r
-              PostData(6, fCFContCascadeCuts);\r
-              return;\r
-          }\r
-      }\r
-      // - Take the number of cascades and tracks after vertex Z position selection\r
-      ncascadesAfterVertexSel = lAODevent->GetNumberOfCascades();\r
-      nTrackMultiplicityAfterVertexSel = -100; //FIXME: I can't find the equivalent method for the AOD\r
-  } \r
-  // - Fill the plots\r
-  fHistCascadeMultiplicityAfterVertexCutSel->Fill(ncascadesAfterVertexSel);\r
-  fHistTrackMultiplicityAfterVertexCutSel->Fill(nTrackMultiplicityAfterVertexSel);\r
-\r
-  // - Vertex position plots: after any event selections\r
-  tPrimaryVtxPosition[0] = -100.0;\r
-  tPrimaryVtxPosition[1] = -100.0;\r
-  tPrimaryVtxPosition[2] = -100.0;\r
-  if (fAnalysisType == "ESD") {\r
-       const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();\r
-       tPrimaryVtxPosition[0] = primaryVtx->GetX();\r
-       tPrimaryVtxPosition[1] = primaryVtx->GetY();\r
-       tPrimaryVtxPosition[2] = primaryVtx->GetZ();\r
-  } else if (fAnalysisType == "AOD") {\r
-       const AliVVertex *primaryVtx = lAODevent->GetPrimaryVertex();\r
-       tPrimaryVtxPosition[0] = primaryVtx->GetX();\r
-       tPrimaryVtxPosition[1] = primaryVtx->GetY();\r
-       tPrimaryVtxPosition[2] = primaryVtx->GetZ();\r
-  }\r
-  fHistPVxAnalysis->Fill( tPrimaryVtxPosition[0] );\r
-  fHistPVyAnalysis->Fill( tPrimaryVtxPosition[1] );\r
-  fHistPVzAnalysis->Fill( tPrimaryVtxPosition[2] );\r
-  \r
-\r
-\r
-  //////////////////////////////\r
-  // CASCADE RECONSTRUCTION PART\r
-  //////////////////////////////\r
-  \r
-  //%%%%%%%%%%%%%\r
-  // Cascade loop\r
-  Int_t ncascades = 0;\r
-  if      (fAnalysisType == "ESD") ncascades = lESDevent->GetNumberOfCascades();\r
-  else if (fAnalysisType == "AOD") ncascades = lAODevent->GetNumberOfCascades();\r
-\r
-  for (Int_t iXi = 0; iXi < ncascades; iXi++) {// This is the begining of the Cascade loop (ESD or AOD)\r
-          \r
-      // -----------------------------------------------------------------------\r
-      // - Initialisation of the local variables that will be needed for ESD/AOD\r
-\r
-      // - 0th part of initialisation : around primary vertex ...\r
-      //Double_t lBestPrimaryVtxRadius3D     = -500.0;\r
-      // - 1st part of initialisation : variables needed to store AliESDCascade data members\r
-      Double_t lEffMassXi                  = 0.;\r
-      Double_t lDcaXiDaughters             = -1.;\r
-      Double_t lXiCosineOfPointingAngle    = -1.;\r
-      Double_t lPosXi[3]                   = { -1000.0, -1000.0, -1000.0 };\r
-      Double_t lXiRadius                   = -1000. ;\r
-      // - 2nd part of initialisation : Nbr of clusters within TPC for the 3 daughter cascade tracks\r
-      UShort_t lPosTPCClusters             = -1; // For ESD only ...\r
-      UShort_t lNegTPCClusters             = -1; // For ESD only ...\r
-      UShort_t lBachTPCClusters            = -1; // For ESD only ...\r
-      Double_t lInnerWallMomCascDghters[3] = {-100., -100., -100.};\r
-      Double_t lTPCSignalCascDghters   [3] = {-100., -100., -100.};\r
-      // - 3rd part of initialisation : about V0 part in cascades\r
-      Double_t lInvMassLambdaAsCascDghter  = 0.;\r
-      Double_t lDcaV0DaughtersXi           = -1.;\r
-      Double_t lDcaBachToPrimVertexXi      = -1.;\r
-      Double_t lDcaV0ToPrimVertexXi        = -1.;\r
-      Double_t lDcaPosToPrimVertexXi       = -1.;\r
-      Double_t lDcaNegToPrimVertexXi       = -1.;\r
-      Double_t lV0CosineOfPointingAngleXi  = -1. ;\r
-      Double_t lPosV0Xi[3]                 = { -1000. , -1000., -1000. }; // Position of VO coming from cascade\r
-      Double_t lV0RadiusXi                 = -1000.0;\r
-      Double_t lV0quality                  = 0.;\r
-      // - 4th part of initialisation : Effective masses\r
-      Double_t lInvMassXiMinus             = 0.;\r
-      Double_t lInvMassXiPlus              = 0.;\r
-      Double_t lInvMassOmegaMinus          = 0.;\r
-      Double_t lInvMassOmegaPlus           = 0.;\r
-      // - 5th part of initialisation : PID treatment\r
-      Bool_t   lIsPosInXiProton            = kFALSE;\r
-      Bool_t   lIsPosInXiPion              = kFALSE;\r
-      Bool_t   lIsPosInOmegaProton         = kFALSE;\r
-      Bool_t   lIsPosInOmegaPion           = kFALSE;\r
-      Bool_t   lIsNegInXiProton            = kFALSE;\r
-      Bool_t   lIsNegInXiPion              = kFALSE;\r
-      Bool_t   lIsNegInOmegaProton         = kFALSE;\r
-      Bool_t   lIsNegInOmegaPion           = kFALSE;\r
-      Bool_t   lIsBachelorKaon             = kFALSE;\r
-      Bool_t   lIsBachelorPion             = kFALSE; \r
-      Bool_t   lIsBachelorKaonForTPC       = kFALSE; \r
-      Bool_t   lIsBachelorPionForTPC       = kFALSE; \r
-      Bool_t   lIsNegPionForTPC            = kFALSE; \r
-      Bool_t   lIsPosPionForTPC            = kFALSE; \r
-      Bool_t   lIsNegProtonForTPC          = kFALSE; \r
-      Bool_t   lIsPosProtonForTPC          = kFALSE; \r
-      // - 6th part of initialisation : extra info for QA\r
-      Double_t lXiMomX         = 0.;\r
-      Double_t lXiMomY         = 0.;\r
-      Double_t lXiMomZ         = 0.;\r
-      Double_t lXiTransvMom    = 0.;\r
-      Double_t lXiTotMom       = 0.;\r
-      Double_t lV0PMomX        = 0.;\r
-      Double_t lV0PMomY        = 0.;\r
-      Double_t lV0PMomZ        = 0.;\r
-      Double_t lV0NMomX        = 0.;\r
-      Double_t lV0NMomY        = 0.;\r
-      Double_t lV0NMomZ        = 0.;\r
-      Double_t lV0TotMom       = 0.;\r
-      Double_t lBachMomX       = 0.;\r
-      Double_t lBachMomY       = 0.;\r
-      Double_t lBachMomZ       = 0.;\r
-      Double_t lBachTransvMom  = 0.;\r
-      Double_t lBachTotMom     = 0.;\r
-      Double_t lpTrackTransvMom  = 0.;\r
-      Double_t lnTrackTransvMom  = 0.;\r
-      Short_t  lChargeXi       = -2;\r
-      Double_t lV0toXiCosineOfPointingAngle = 0.;\r
-      Double_t lRapXi   = -20.0, lRapOmega = -20.0, lEta = -20.0, lTheta = 360., lPhi = 720.;\r
-      Double_t lAlphaXi = -200., lPtArmXi  = -200.0;\r
-      Double_t etaPos = 0., etaNeg = 0., etaBach = 0.;\r
-  \r
-      if (fAnalysisType == "ESD") { \r
-  \r
-          // -------------------------------------\r
-          // - Load the cascades from the handler\r
-          AliESDcascade *xi = lESDevent->GetCascade(iXi);\r
-          if (!xi) continue;\r
-\r
-          //----------------------------------------------------------------------------        \r
-          // - Assigning the necessary variables for specific AliESDcascade data members       \r
-          lV0quality = 0.;\r
-          xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis: cascade = Xi-decay\r
-          lEffMassXi              = xi->GetEffMassXi();\r
-          lDcaXiDaughters         = xi->GetDcaXiDaughters();\r
-          lXiCosineOfPointingAngle = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );\r
-                                                                      //Take care : the best available vertex should be used (like in AliCascadeVertexer)\r
-          xi->GetXYZcascade( lPosXi[0],  lPosXi[1], lPosXi[2] ); \r
-          lXiRadius               = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );\r
-               \r
-          //-------------------------------------------------------------------------------------------------------------------------------\r
-         // - Around the tracks: Bach + V0 (ESD). Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)\r
-          UInt_t lIdxPosXi     = (UInt_t) TMath::Abs( xi->GetPindex() );\r
-          UInt_t lIdxNegXi     = (UInt_t) TMath::Abs( xi->GetNindex() );\r
-          UInt_t lBachIdx      = (UInt_t) TMath::Abs( xi->GetBindex() );\r
-                                      //Care track label can be negative in MC production (linked with the track quality)\r
-                                      //However = normally, not the case for track index ...\r
-          // - Rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)\r
-          if (lBachIdx == lIdxNegXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue; }\r
-          if (lBachIdx == lIdxPosXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue; }\r
-          // - Get the track for the daughters\r
-          AliESDtrack *pTrackXi           = lESDevent->GetTrack( lIdxPosXi );\r
-          AliESDtrack *nTrackXi           = lESDevent->GetTrack( lIdxNegXi );\r
-          AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );\r
-          if (!pTrackXi || !nTrackXi || !bachTrackXi ) {\r
-               AliWarning("ERROR: Could not retrieve one of the 3 ESD daughter tracks of the cascade ...");\r
-               continue;\r
-          }\r
-          // - Get the TPCnumber of cluster for the daughters\r
-          lPosTPCClusters   = pTrackXi->GetTPCNcls();\r
-          lNegTPCClusters   = nTrackXi->GetTPCNcls();\r
-          lBachTPCClusters  = bachTrackXi->GetTPCNcls();\r
-\r
-          //-------------------------------------\r
-          // - Rejection of a poor quality tracks\r
-          if (fkQualityCutTPCrefit) {\r
-                // - Poor quality related to TPCrefit\r
-                ULong_t pStatus    = pTrackXi->GetStatus();\r
-                ULong_t nStatus    = nTrackXi->GetStatus();\r
-                ULong_t bachStatus = bachTrackXi->GetStatus();\r
-                if ((pStatus&AliESDtrack::kTPCrefit)    == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }\r
-                if ((nStatus&AliESDtrack::kTPCrefit)    == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }\r
-                if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach.   track has no TPCrefit ... continue!"); continue; }\r
-          }\r
-          if (fkQualityCutnTPCcls) {\r
-                // - Poor quality related to TPC clusters\r
-                if (lPosTPCClusters  < fMinnTPCcls) { AliWarning("Pb / V0 Pos. track has less than 80 TPC clusters ... continue!"); continue; }\r
-                if (lNegTPCClusters  < fMinnTPCcls) { AliWarning("Pb / V0 Neg. track has less than 80 TPC clusters ... continue!"); continue; }\r
-                if (lBachTPCClusters < fMinnTPCcls) { AliWarning("Pb / Bach.   track has less than 80 TPC clusters ... continue!"); continue; }\r
-          }\r
-\r
-          //-----------------------------------\r
-          const AliExternalTrackParam *pExtTrack    = pTrackXi->GetInnerParam();\r
-          const AliExternalTrackParam *nExtTrack    = nTrackXi->GetInnerParam();\r
-          const AliExternalTrackParam *bachExtTrack = bachTrackXi->GetInnerParam();\r
-          if (pExtTrack) {\r
-                lInnerWallMomCascDghters[0] = pExtTrack->GetP() * pExtTrack->Charge();\r
-                lTPCSignalCascDghters   [0] = pTrackXi->GetTPCsignal();\r
-          }\r
-          if (nExtTrack) {\r
-                lInnerWallMomCascDghters[1] = nExtTrack->GetP() * nExtTrack->Charge();\r
-                lTPCSignalCascDghters   [1] = nTrackXi->GetTPCsignal();\r
-           }\r
-           if (bachExtTrack) {\r
-                lInnerWallMomCascDghters[2] = bachExtTrack->GetP() * bachExtTrack->Charge();\r
-                lTPCSignalCascDghters   [2] = bachTrackXi->GetTPCsignal();\r
-           }\r
-           etaPos  = pTrackXi->Eta();\r
-           etaNeg  = nTrackXi->Eta();\r
-           etaBach = bachTrackXi->Eta();\r
-           lInvMassLambdaAsCascDghter = xi->GetEffMass(); //This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+\r
-           lDcaV0DaughtersXi         = xi->GetDcaV0Daughters(); \r
-           lV0CosineOfPointingAngleXi = xi->GetV0CosineOfPointingAngle(lBestPrimaryVtxPos[0],\r
-                                                                       lBestPrimaryVtxPos[1],\r
-                                                                       lBestPrimaryVtxPos[2] );\r
-           lDcaV0ToPrimVertexXi = xi->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );\r
-           lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lMagneticField ) ); //Note: AliExternalTrackParam::GetD returns an algebraic value ...\r
-           xi->GetXYZ( lPosV0Xi[0],  lPosV0Xi[1], lPosV0Xi[2] ); \r
-           lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );     \r
-           lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi        ->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lMagneticField ) ); \r
-           lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi        ->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lMagneticField ) ); \r
-\r
-           //-----------------------------------------\r
-          // - Extra-selection for cascade candidates\r
-           if (fkExtraSelections) { //in AliCascadeVertexer\r
-               if (lDcaXiDaughters > 0.3) continue;  \r
-               if (lXiCosineOfPointingAngle < 0.999 ) continue; \r
-               if (lDcaV0ToPrimVertexXi < 0.05) continue; \r
-               if (lDcaBachToPrimVertexXi < 0.03) continue; \r
-               //if (TMath::Abs(lInvMassLambdaAsCascDghter-1.11568) > 0.006 ) continue;   \r
-               if (lDcaV0DaughtersXi > 1.) continue;  \r
-               if (lV0CosineOfPointingAngleXi < 0.998) continue; \r
-               if (lDcaPosToPrimVertexXi < 0.1) continue; \r
-               if (lDcaNegToPrimVertexXi < 0.1) continue; \r
-              if (lXiRadius < .9) continue; \r
-               //if (lXiRadius > 100) continue; \r
-              if (lV0RadiusXi < 0.9) continue;   \r
-               //if (lV0RadiusXi > 100) continue; \r
-           }\r
-\r
-           //----------------------------------------------------------------------------------------------------      \r
-           // - Around effective masses. Change mass hypotheses to cover all the possibilities:  Xi-/+, Omega -/+\r
-           if ( bachTrackXi->Charge() < 0 )    {\r
-                //Calculate the effective mass of the Xi- candidate: Xi- hyp. (pdg code 3312)\r
-                lV0quality = 0.;\r
-                xi->ChangeMassHypothesis(lV0quality , 3312);   \r
-                lInvMassXiMinus = xi->GetEffMassXi();\r
-                //Calculate the effective mass of the Xi- candidate: Omega- hyp. (pdg code 3334)\r
-                lV0quality = 0.;\r
-                xi->ChangeMassHypothesis(lV0quality , 3334);   \r
-                lInvMassOmegaMinus = xi->GetEffMassXi();\r
-                //Back to "default" hyp. (Xi-)\r
-                lV0quality = 0.;\r
-                xi->ChangeMassHypothesis(lV0quality , 3312); \r
-           } // end if negative bachelor\r
-           if ( bachTrackXi->Charge() >  0 ) {\r
-                //Calculate the effective mass of the Xi- candidate: Xi+ hyp. (pdg code -3312)\r
-                lV0quality = 0.;\r
-                xi->ChangeMassHypothesis(lV0quality , -3312);  \r
-                lInvMassXiPlus = xi->GetEffMassXi();\r
-                //Calculate the effective mass of the Xi- candidate: Omega+ hyp. (pdg code -3334)\r
-                lV0quality = 0.;\r
-                xi->ChangeMassHypothesis(lV0quality , -3334);  \r
-                lInvMassOmegaPlus = xi->GetEffMassXi();\r
-                //Back to "default" hyp. (Xi-)\r
-                lV0quality = 0.;\r
-                xi->ChangeMassHypothesis(lV0quality , -3312);  \r
-           } // end if positive bachelor\r
-\r
-           //--------------------------------\r
-           // - PID on the daughter tracks\r
-          // - Combined PID ->  removed, add when will be used\r
-\r
-          // - TPC PID : 3-sigma bands on Bethe-Bloch curve\r
-           //Bachelor\r
-           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;\r
-           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;\r
-           //Negative V0 daughter\r
-           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kPion   )) < 4) lIsNegPionForTPC   = kTRUE;\r
-           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;\r
-           //Positive V0 daughter\r
-           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kPion   )) < 4) lIsPosPionForTPC   = kTRUE;\r
-           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;\r
-           /*\r
-           const AliExternalTrackParam *pInnerWallTrackXi    = pTrackXi    ->GetInnerParam();\r
-           const AliExternalTrackParam *nInnerWallTrackXi    = nTrackXi    ->GetInnerParam();\r
-           const AliExternalTrackParam *bachInnerWallTrackXi = bachTrackXi ->GetInnerParam();\r
-           if (pInnerWallTrackXi && nInnerWallTrackXi && bachInnerWallTrackXi ) { \r
-                Double_t pMomInnerWall    = pInnerWallTrackXi   ->GetP();\r
-                Double_t nMomInnerWall    = nInnerWallTrackXi   ->GetP();\r
-                Double_t bachMomInnerWall = bachInnerWallTrackXi->GetP();\r
-                //Bachelor\r
-                if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 3)                              lIsBachelorPionForTPC = kTRUE;\r
-                if (bachMomInnerWall < 0.350  && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 5) lIsBachelorKaonForTPC = kTRUE;\r
-                if (bachMomInnerWall > 0.350  && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 3) lIsBachelorKaonForTPC = kTRUE;                \r
-                //Negative V0 daughter\r
-                if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion   )) < 3  )                           lIsNegPionForTPC   = kTRUE;\r
-                if (nMomInnerWall < 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 5 )   lIsNegProtonForTPC = kTRUE;\r
-                if (nMomInnerWall > 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 3 )   lIsNegProtonForTPC = kTRUE;       \r
-                //Positive V0 daughter\r
-                if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion   )) < 3 )                            lIsPosPionForTPC   = kTRUE;\r
-                if (pMomInnerWall < 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 5)     lIsPosProtonForTPC = kTRUE;\r
-                if (pMomInnerWall > 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 3)     lIsPosProtonForTPC = kTRUE;\r
-           }*/\r
-               \r
-           //---------------------------------\r
-           // - Extra info for QA (ESD)\r
-           // Miscellaneous pieces of info that may help regarding data quality assessment.\r
-           // Cascade transverse and total momentum\r
-           xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );\r
-           lXiTransvMom        = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );\r
-           lXiTotMom   = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );\r
-           // V0 total momentum\r
-           xi->GetNPxPyPz(lV0NMomX,lV0NMomY,lV0NMomZ);\r
-           xi->GetPPxPyPz(lV0PMomX,lV0PMomY,lV0PMomZ);\r
-           lV0TotMom = TMath::Sqrt(TMath::Power(lV0NMomX+lV0PMomX,2) + TMath::Power(lV0NMomY+lV0PMomY,2) + TMath::Power(lV0NMomZ+lV0PMomZ,2));\r
-           // Bachelor total momentum\r
-           xi->GetBPxPyPz(  lBachMomX,  lBachMomY,  lBachMomZ );\r
-           lBachTransvMom  = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );\r
-           lBachTotMom     = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );\r
-           lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );\r
-           lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );\r
-           lChargeXi       = xi->Charge();\r
-           lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );\r
-           lRapXi    = xi->RapXi();\r
-           lRapOmega = xi->RapOmega();\r
-           lEta      = xi->Eta();\r
-           lTheta    = xi->Theta()*180.0/TMath::Pi();\r
-           lPhi      = xi->Phi()*180.0/TMath::Pi();\r
-           lAlphaXi  = xi->AlphaXi();\r
-           lPtArmXi  = xi->PtArmXi();\r
-          // Extra-cut = Anti-splitting cut for lambda daughters\r
-           Bool_t kAntiSplittingLambda = kFALSE;       \r
-           if (kAntiSplittingLambda) { // not used\r
-               Double_t lNMomX = 0., lNMomY = 0., lNMomZ = 0.;\r
-               Double_t lPMomX = 0., lPMomY = 0., lPMomZ = 0.;\r
-               xi->GetPPxPyPz(lPMomX, lPMomY, lPMomZ); \r
-               xi->GetNPxPyPz(lNMomX, lNMomY, lNMomZ); \r
-               if ( xi->Charge() < 0) {// Xi- or Omega-\r
-                   if (TMath::Abs(lBachTransvMom - TMath::Sqrt( lNMomX*lNMomX + lNMomY*lNMomY )  ) < 0.075) continue;\r
-              } else {                //Xi+ or Omega+\r
-                  if(TMath::Abs(lBachTransvMom - TMath::Sqrt( lPMomX*lPMomX + lPMomY*lPMomY ) ) < 0.075) continue;\r
-              }\r
-           }\r
-\r
-    } // end of ESD treatment\r
\r
-    else if (fAnalysisType == "AOD") {\r
-\r
-           // -------------------------------------\r
-           // - Load the cascades from the handler\r
-           const AliAODcascade *xi = lAODevent->GetCascade(iXi);\r
-           if (!xi) continue;\r
-               \r
-           //----------------------------------------------------------------------------        \r
-           // - Assigning the necessary variables for specific AliESDcascade data members              \r
-           lEffMassXi             = xi->MassXi(); // default working hypothesis : cascade = Xi- decay\r
-           lDcaXiDaughters        = xi->DcaXiDaughters();\r
-           lXiCosineOfPointingAngle = xi->CosPointingAngleXi( lBestPrimaryVtxPos[0], \r
-                                                             lBestPrimaryVtxPos[1], \r
-                                                             lBestPrimaryVtxPos[2] );\r
-           lPosXi[0] = xi->DecayVertexXiX();\r
-           lPosXi[1] = xi->DecayVertexXiY();\r
-           lPosXi[2] = xi->DecayVertexXiZ();\r
-           lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );\r
-\r
-           //-------------------------------------------------------------------------------------------------------------------------------\r
-           // - Around the tracks: Bach + V0 (ESD). Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)\r
-           AliAODTrack *pTrackXi    = dynamic_cast<AliAODTrack*>( xi->GetDaughter(0) );\r
-           AliAODTrack *nTrackXi    = dynamic_cast<AliAODTrack*>( xi->GetDaughter(1) );\r
-           AliAODTrack *bachTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDecayVertexXi()->GetDaughter(0) );\r
-           if (!pTrackXi || !nTrackXi || !bachTrackXi ) {\r
-                AliWarning("ERROR: Could not retrieve one of the 3 AOD daughter tracks of the cascade ...");\r
-                continue;\r
-           }\r
-           UInt_t lIdxPosXi  = (UInt_t) TMath::Abs( pTrackXi->GetID() );  \r
-           UInt_t lIdxNegXi  = (UInt_t) TMath::Abs( nTrackXi->GetID() );\r
-           UInt_t lBachIdx   = (UInt_t) TMath::Abs( bachTrackXi->GetID() );\r
-                                                // Care track label can be negative in MC production (linked with the track quality)\r
-                                                // However = normally, not the case for track index ...\r
-           // - Rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)\r
-           if (lBachIdx == lIdxNegXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue; }\r
-           if (lBachIdx == lIdxPosXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue; }\r
-           // - Get the TPCnumber of cluster for the daughters\r
-           lPosTPCClusters   = pTrackXi->GetTPCNcls(); // FIXME: Is this ok? or something like in LambdaK0PbPb task AOD?\r
-           lNegTPCClusters   = nTrackXi->GetTPCNcls();\r
-           lBachTPCClusters  = bachTrackXi->GetTPCNcls();\r
-\r
-           //-------------------------------------\r
-           // - Rejection of a poor quality tracks\r
-           if (fkQualityCutTPCrefit) {\r
-                // - Poor quality related to TPCrefit\r
-                if (!(pTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }\r
-                if (!(nTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }\r
-                if (!(bachTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / Bach.   track has no TPCrefit ... continue!"); continue; }\r
-           }\r
-           if (fkQualityCutnTPCcls) {\r
-                // - Poor quality related to TPC clusters\r
-                if (lPosTPCClusters  < fMinnTPCcls) { //AliWarning("Pb / V0 Pos. track has less than 80 TPC clusters ... continue!");\r
-                    continue; }\r
-                if (lNegTPCClusters  < fMinnTPCcls) { //AliWarning("Pb / V0 Neg. track has less than 80 TPC clusters ... continue!");\r
-                    continue; }\r
-                if (lBachTPCClusters < fMinnTPCcls) { //AliWarning("Pb / Bach.   track has less than 80 TPC clusters ... continue!");\r
-                    continue; }\r
-           }\r
-\r
-           //---------------------------------------\r
-           // - Around the tracks: Bach + V0 (AOD). Necessary variables for AODcascade data members coming from the AODv0 part (inheritance)\r
-           etaPos  = pTrackXi->Eta();\r
-           etaNeg  = nTrackXi->Eta();\r
-           etaBach = bachTrackXi->Eta();\r
-           lChargeXi = xi->ChargeXi();\r
-           if ( lChargeXi < 0) lInvMassLambdaAsCascDghter = xi->MassLambda();\r
-           else               lInvMassLambdaAsCascDghter = xi->MassAntiLambda();\r
-           lDcaV0DaughtersXi     = xi->DcaV0Daughters(); \r
-           lDcaV0ToPrimVertexXi   = xi->DcaV0ToPrimVertex();\r
-           lDcaBachToPrimVertexXi = xi->DcaBachToPrimVertex(); \r
-           lPosV0Xi[0] = xi->DecayVertexV0X();\r
-           lPosV0Xi[1] = xi->DecayVertexV0Y();\r
-           lPosV0Xi[2] = xi->DecayVertexV0Z(); \r
-           lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );\r
-           lV0CosineOfPointingAngleXi = xi->CosPointingAngle( lBestPrimaryVtxPos ); \r
-           lDcaPosToPrimVertexXi      = xi->DcaPosToPrimVertex(); \r
-           lDcaNegToPrimVertexXi      = xi->DcaNegToPrimVertex(); \r
-\r
-           //----------------------------------------------------------------------------------------------------       \r
-           // - Around effective masses. Change mass hypotheses to cover all the possibilities:  Xi-/+, Omega -/+\r
-           if ( lChargeXi < 0 )        lInvMassXiMinus    = xi->MassXi();\r
-           if ( lChargeXi > 0 )        lInvMassXiPlus     = xi->MassXi();\r
-           if ( lChargeXi < 0 )        lInvMassOmegaMinus = xi->MassOmega();\r
-           if ( lChargeXi > 0 )        lInvMassOmegaPlus  = xi->MassOmega();\r
-\r
-           //--------------------------------\r
-           // - PID on the daughter tracks\r
-           // - Combined PID ->  removed, add when will be used\r
-\r
-           // - TPC PID : 3-sigma bands on Bethe-Bloch curve\r
-           //Bachelor\r
-           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;\r
-           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;\r
-           //Negative V0 daughter\r
-           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kPion   )) < 4) lIsNegPionForTPC   = kTRUE;\r
-           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;\r
-           //Positive V0 daughter\r
-           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kPion   )) < 4) lIsPosPionForTPC   = kTRUE;\r
-           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;\r
-\r
-           //---------------------------------\r
-           // - Extra info for QA (AOD)\r
-           // Miscellaneous pieces of info that may help regarding data quality assessment.\r
-           // Cascade transverse and total momentum    \r
-           lXiMomX = xi->MomXiX();\r
-           lXiMomY = xi->MomXiY();\r
-           lXiMomZ = xi->MomXiZ();\r
-           lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );\r
-           lXiTotMom   = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );\r
-           Double_t lV0MomX = xi->MomV0X();\r
-           Double_t lV0MomY = xi->MomV0Y();\r
-           Double_t lV0MomZ = xi->MomV0Z();\r
-           lV0TotMom = TMath::Sqrt(TMath::Power(lV0MomX,2)+TMath::Power(lV0MomY,2)+TMath::Power(lV0MomZ,2));\r
-           lBachMomX = xi->MomBachX();\r
-           lBachMomY = xi->MomBachY();\r
-           lBachMomZ = xi->MomBachZ();         \r
-           lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );\r
-           lBachTotMom    = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );\r
-           lV0NMomX = xi->MomNegX();\r
-           lV0NMomY = xi->MomNegY();\r
-           lV0PMomX = xi->MomPosX();\r
-           lV0PMomY = xi->MomPosY();\r
-           lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );\r
-           lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );\r
-           lV0toXiCosineOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );\r
-           lRapXi    = xi->RapXi();\r
-           lRapOmega = xi->RapOmega();\r
-           lEta      = xi->Eta();                      // Will not work ! need a method Pz(), Py() Px() \r
-           lTheta    = xi->Theta() *180.0/TMath::Pi();  // in AODcascade.\r
-           lPhi      = xi->Phi()   *180.0/TMath::Pi();  // Here, we will get eta, theta, phi for the V0 ...\r
-           lAlphaXi  = xi->AlphaXi();\r
-           lPtArmXi  = xi->PtArmXi();\r
-\r
-    } // end of AOD treatment\r
-\r
-    // Cut on pt of the three daughter tracks\r
-    if (lBachTransvMom<fMinPtCutOnDaughterTracks) continue;\r
-    if (lpTrackTransvMom<fMinPtCutOnDaughterTracks) continue;\r
-    if (lnTrackTransvMom<fMinPtCutOnDaughterTracks) continue;\r
-      \r
-    // Cut on pseudorapidity of the three daughter tracks\r
-    if (TMath::Abs(etaBach)>fEtaCutOnDaughterTracks) continue;\r
-    if (TMath::Abs(etaPos)>fEtaCutOnDaughterTracks) continue;\r
-    if (TMath::Abs(etaNeg)>fEtaCutOnDaughterTracks) continue;\r
-      \r
-      \r
-    //----------------------------------\r
-    // Calculate proper lenght for cascade\r
-    Double_t cascadeMass = 0.;\r
-    if ( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||\r
-         ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC )  ) cascadeMass = 1.321;\r
-    if ( ( (lChargeXi<0) && lIsBachelorKaonForTPC   && lIsPosProtonForTPC    && lIsNegPionForTPC ) ||\r
-         ( (lChargeXi>0) && lIsBachelorKaonForTPC   && lIsNegProtonForTPC    && lIsPosPionForTPC )  ) cascadeMass = 1.672;\r
-    Double_t lctau =  TMath::Sqrt(TMath::Power((lPosXi[0]-lBestPrimaryVtxPos[0]),2)+TMath::Power((lPosXi[1]-lBestPrimaryVtxPos[1]),2)+TMath::Power(( lPosXi[2]-lBestPrimaryVtxPos[2]),2));\r
-    if (lXiTotMom!=0) lctau = lctau*cascadeMass/lXiTotMom;\r
-    else lctau = -1.;\r
-\r
-    //-------------------------------------------------\r
-    // Calculate proper lenght for Lambda (reconstructed)\r
-    Float_t lambdaMass = 1.115683; // PDG mass\r
-    Float_t distV0Xi =  TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2)+TMath::Power((lPosV0Xi[2]-lPosXi[2]),2));\r
-    Float_t lctauV0 = -1.;\r
-    if (lV0TotMom!=0) lctauV0 = distV0Xi*lambdaMass/lV0TotMom;\r
-    Float_t distTV0Xi =  TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2));\r
-\r
-    //--------------\r
-    /*// For AliEVE      \r
-         if(lChargeXi < 0&& lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) {\r
-             if (lXiTransvMom>2.&&lXiTransvMom<4.&&(lInvMassXiMinus<1.322&&lInvMassXiMinus>1.320)&&(lXiRadius<8.&&lXiRadius>3.)) {\r
-                         // FIXME : Just to know which file is currently open : locate the file containing Xi\r
-                  cout << "Name of the file containing Xi candidate(s) :" \r
-                       << CurrentFileName() \r
-                       << " / entry: "     << Entry()\r
-                       << " / in file: "   << lESDevent->GetEventNumberInFile()   // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();\r
-                       << " AliESDcascade number " << iXi \r
-                       << " : mass(Xi-) = " << lInvMassXiMinus\r
-                       << " / charge = "   << lChargeXi\r
-                       << " / pt(Casc) = " << lXiTransvMom\r
-                       << " / Decay 2d R(Xi) = " << lXiRadius \r
-                       << endl;\r
-             }\r
-         }\r
-         if(lChargeXi < 0&& lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) {\r
-             if (lXiTransvMom>2&&lXiTransvMom<4&&(lInvMassOmegaMinus<1.674&&lInvMassOmegaMinus>1.670)&&(lXiRadius<8.&&lXiRadius>3.)) {\r
-                  cout << "Name of the file containing Omega candidate(s) :"\r
-                       << CurrentFileName()\r
-                       << " / entry: "     << Entry()\r
-                       << " / in file: "   << lESDevent->GetEventNumberInFile()   // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();\r
-                       << " AliESDcascade number " << iXi \r
-                       << " : mass(Omega-) = " << lInvMassOmegaMinus\r
-                       << " / charge = "   << lChargeXi\r
-                       << " / pt(Casc) = " << lXiTransvMom\r
-                       << " / Decay 2d R(Xi) = " << lXiRadius\r
-                       << endl;\r
-\r
-             }\r
-         }*/\r
-          \r
-\r
-    // - \r
-    fHistPosV0TPCClusters->Fill( lPosTPCClusters );\r
-    fHistNegV0TPCClusters->Fill( lNegTPCClusters );\r
-    fHistBachTPCClusters->Fill( lBachTPCClusters );\r
-    f2dHistTPCdEdxOfCascDghters->Fill( lInnerWallMomCascDghters[0] , lTPCSignalCascDghters[0] );\r
-    f2dHistTPCdEdxOfCascDghters->Fill( lInnerWallMomCascDghters[1] , lTPCSignalCascDghters[1] );\r
-    f2dHistTPCdEdxOfCascDghters->Fill( lInnerWallMomCascDghters[2] , lTPCSignalCascDghters[2] );\r
-\r
-    //----------------\r
-    //Plot with PID on  \r
-    if ( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||\r
-         ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC )  ) {\r
-                                       // NOTE : \r
-                                       // with this condition, it could happen that a cascade candidate satisfies the wrong requirement,\r
-                                       // e.g. one looks at a Xi- candidate for which lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC = kFALSE\r
-                                       // Expectation: it should be excluded, but lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC = kTRUE\r
-                                       // then this bad Xi-candidate will contribute anyway (OR condition).\r
-                                       // Hence: the extra condition on the sign of the Cascade\r
-           //if (TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.010)\r
-           fHistEffMassXi->Fill( lEffMassXi );\r
-           fHistDcaXiDaughters->Fill( lDcaXiDaughters );                   // Flag CascadeVtxer: Cut Variable e \r
-           fHistDcaBachToPrimVertex->Fill( lDcaBachToPrimVertexXi   );     // Flag CascadeVtxer: Cut Variable d\r
-           fHistXiCosineOfPointingAngle->Fill( lXiCosineOfPointingAngle );  // Flag CascadeVtxer: Cut Variable f\r
-           fHistXiRadius->Fill( lXiRadius );                               // Flag CascadeVtxer: Cut Variable g+h\r
-           fHistMassLambdaAsCascDghter->Fill( lInvMassLambdaAsCascDghter ); // Flag CascadeVtxer: Cut Variable c\r
-           fHistDcaV0DaughtersXi->Fill( lDcaV0DaughtersXi );\r
-           fHistV0CosineOfPointingAngleXi->Fill( lV0CosineOfPointingAngleXi ); \r
-           fHistV0RadiusXi->Fill( lV0RadiusXi );\r
-           fHistDcaV0ToPrimVertexXi->Fill( lDcaV0ToPrimVertexXi );         // Flag CascadeVtxer: Cut Variable b\r
-           fHistDcaPosToPrimVertexXi->Fill( lDcaPosToPrimVertexXi );\r
-           fHistDcaNegToPrimVertexXi->Fill( lDcaNegToPrimVertexXi );\r
-           fHistChargeXi->Fill( lChargeXi );\r
-           fHistV0toXiCosineOfPointingAngle->Fill( lV0toXiCosineOfPointingAngle );\r
-           if ( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.012 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.012) { // One InvMass should be different from 0\r
-                fHistXiTransvMom->Fill( lXiTransvMom );\r
-                fHistXiTotMom->Fill( lXiTotMom );\r
-                fHistBachTransvMomXi->Fill( lBachTransvMom );\r
-                fHistBachTotMomXi->Fill( lBachTotMom );\r
-                fHistRapXi->Fill( lRapXi );\r
-                fHistEtaXi->Fill( lEta );\r
-                if (lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC) {\r
-                      fHistEtaBachXi->Fill( etaBach );\r
-                      fHistEtaPosXi->Fill( etaPos );\r
-                      fHistEtaNegXi->Fill( etaNeg );\r
-                }\r
-                fHistThetaXi->Fill( lTheta );\r
-                fHistPhiXi->Fill( lPhi );\r
-           }\r
-           if ( TMath::Abs( lInvMassOmegaMinus-1.672 ) < 0.012 || TMath::Abs( lInvMassOmegaPlus-1.672 ) < 0.012 ) { // One InvMass should be different from 0\r
-                fHistRapOmega->Fill( lRapOmega ); \r
-           }\r
-           f2dHistArmenteros->Fill( lAlphaXi, lPtArmXi );\r
-    } // end with PID ...\r
-\r
-    //-----------------------\r
-    // - Invariant mass plots\r
-    //Plots 1D\r
-    if ( lChargeXi < 0 ) {\r
-         fHistMassXiMinus->Fill( lInvMassXiMinus );\r
-         fHistMassOmegaMinus->Fill( lInvMassOmegaMinus );\r
-         f2dHistDcaXiDaughtersvsInvMass->Fill(lDcaXiDaughters,lInvMassXiMinus);\r
-         f2dHistDcaBachToPrimVertexvsInvMass->Fill(lDcaBachToPrimVertexXi,lInvMassXiMinus); \r
-         f2dHistXiCosineOfPointingAnglevsInvMass->Fill(lXiCosineOfPointingAngle,lInvMassXiMinus);\r
-         f2dHistMassLambdaAsCascDghtervsInvMass->Fill(lInvMassLambdaAsCascDghter,lInvMassXiMinus);\r
-         f2dHistDcaV0DaughtersXivsInvMass->Fill(lDcaV0DaughtersXi,lInvMassXiMinus);\r
-         f2dHistDcaV0ToPrimVertexXivsInvMass->Fill(lDcaV0ToPrimVertexXi,lInvMassXiMinus);\r
-    }\r
-    if ( lChargeXi > 0 ) {\r
-      fHistMassXiPlus->Fill( lInvMassXiPlus );\r
-      fHistMassOmegaPlus->Fill( lInvMassOmegaPlus );\r
-    }\r
-    //Plots 2D, 3D\r
-    if ( lChargeXi < 0 ) {\r
-      f2dHistEffMassLambdaVsEffMassXiMinus->Fill( lInvMassLambdaAsCascDghter, lInvMassXiMinus ); \r
-      f2dHistEffMassXiVsEffMassOmegaMinus ->Fill( lInvMassXiMinus, lInvMassOmegaMinus );\r
-      f2dHistXiRadiusVsEffMassXiMinus     ->Fill( lXiRadius, lInvMassXiMinus );\r
-      f2dHistXiRadiusVsEffMassOmegaMinus  ->Fill( lXiRadius, lInvMassOmegaMinus );\r
-    } else {\r
-      f2dHistEffMassLambdaVsEffMassXiPlus ->Fill( lInvMassLambdaAsCascDghter, lInvMassXiPlus );\r
-      f2dHistEffMassXiVsEffMassOmegaPlus  ->Fill( lInvMassXiPlus, lInvMassOmegaPlus );\r
-      f2dHistXiRadiusVsEffMassXiPlus      ->Fill( lXiRadius, lInvMassXiPlus);\r
-      f2dHistXiRadiusVsEffMassOmegaPlus   ->Fill( lXiRadius, lInvMassOmegaPlus );\r
-    }\r
-\r
-    //---------------------------------------------    \r
-    // - Filling the AliCFContainers related to PID\r
-    Double_t lContainerPIDVars[3] = {0.0};\r
-    // Xi Minus                \r
-    if ( lChargeXi < 0 ) {\r
-          lContainerPIDVars[0] = lXiTransvMom;\r
-          lContainerPIDVars[1] = lInvMassXiMinus;\r
-          lContainerPIDVars[2] = lRapXi;\r
-          //No PID\r
-          fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 0); // No PID\r
-         //TPC PID\r
-          if ( lIsBachelorPionForTPC )                                           fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track             \r
-          if ( lIsBachelorPionForTPC && lIsPosProtonForTPC )                     fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks\r
-          if ( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-         //Combined PID\r
-          if ( lIsBachelorPion )                                      fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor    \r
-          if ( lIsBachelorPion && lIsPosInXiProton )                  fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-          if (lIsBachelorPion && lIsPosInXiProton && lIsNegInXiPion ) fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-    }\r
-    lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.;   \r
-    // Xi Plus         \r
-    if ( lChargeXi > 0 ) {\r
-          lContainerPIDVars[0] = lXiTransvMom;\r
-          lContainerPIDVars[1] = lInvMassXiPlus;\r
-          lContainerPIDVars[2] = lRapXi;\r
-         //No PID\r
-          fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 0); // No PID\r
-          //TPC PID\r
-          if ( lIsBachelorPionForTPC )                                           fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track\r
-          if ( lIsBachelorPionForTPC && lIsNegProtonForTPC )                     fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks\r
-          if ( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-         //Combined PID\r
-          if ( lIsBachelorPion )                                      fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor\r
-          if ( lIsBachelorPion && lIsNegInXiProton )                  fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-          if (lIsBachelorPion && lIsNegInXiProton && lIsPosInXiPion ) fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-    }\r
-    lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; \r
-    // Omega Minus             \r
-    if ( lChargeXi < 0 ) {\r
-          lContainerPIDVars[0] = lXiTransvMom;\r
-          lContainerPIDVars[1] = lInvMassOmegaMinus;\r
-          lContainerPIDVars[2] = lRapOmega;\r
-         //No PID\r
-          fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 0); // No PID\r
-                 //TPC PID\r
-          if ( lIsBachelorKaonForTPC )                                           fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track\r
-          if ( lIsBachelorKaonForTPC && lIsPosProtonForTPC )                     fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks\r
-          if ( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-         //Combined PID\r
-          if ( lIsBachelorKaon )                                            fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor\r
-          if ( lIsBachelorKaon && lIsPosInOmegaProton )                    fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-          if (lIsBachelorKaon && lIsPosInOmegaProton && lIsNegInOmegaPion ) fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-    }\r
-    lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.;\r
-    // Omega Plus              \r
-    if ( lChargeXi > 0 ) {\r
-      lContainerPIDVars[0] = lXiTransvMom;\r
-      lContainerPIDVars[1] = lInvMassOmegaPlus;\r
-      lContainerPIDVars[2] = lRapOmega;\r
-       // No PID\r
-      fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 0); // No PID\r
-       // TPC PID\r
-      if ( lIsBachelorKaonForTPC  )\r
-       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track\r
-      if( lIsBachelorKaonForTPC && \r
-         lIsNegProtonForTPC     )\r
-       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks\r
-      if ( lIsBachelorKaonForTPC && \r
-          lIsNegProtonForTPC    && \r
-          lIsPosPionForTPC       )\r
-       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-       // Combined PID\r
-      if ( lIsBachelorKaon        )\r
-       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor\r
-      if ( lIsBachelorKaon       && \r
-           lIsNegInOmegaProton    )\r
-       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-      if (lIsBachelorKaon     && \r
-         lIsNegInOmegaProton && \r
-         lIsPosInOmegaPion    )\r
-       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-    }\r
-               \r
-    //--------------------------------------------------------------------\r
-    // Filling the AliCFContainer (optimisation of topological selections)\r
-    Double_t lContainerCutVars[19] = {0.0};\r
-                        \r
-    lContainerCutVars[0]  = lDcaXiDaughters;\r
-    lContainerCutVars[1]  = lDcaBachToPrimVertexXi;\r
-    lContainerCutVars[2]  = lXiCosineOfPointingAngle;\r
-    lContainerCutVars[3]  = lXiRadius;\r
-    lContainerCutVars[4]  = lInvMassLambdaAsCascDghter;\r
-    lContainerCutVars[5]  = lDcaV0DaughtersXi;\r
-    lContainerCutVars[6]  = lV0toXiCosineOfPointingAngle;\r
-    lContainerCutVars[7]  = lV0RadiusXi;\r
-    lContainerCutVars[8]  = lDcaV0ToPrimVertexXi;      \r
-    lContainerCutVars[9]  = lDcaPosToPrimVertexXi;\r
-    lContainerCutVars[10] = lDcaNegToPrimVertexXi;\r
-    lContainerCutVars[13] = lXiTransvMom;\r
-    lContainerCutVars[16] = lctau;\r
-    lContainerCutVars[17] = lctauV0;\r
-    lContainerCutVars[18] = distTV0Xi;\r
\r
-    if ( lChargeXi < 0 ) {\r
-         lContainerCutVars[11] = lInvMassXiMinus;\r
-         lContainerCutVars[12] = lInvMassOmegaMinus;\r
-         lContainerCutVars[14] = lRapXi;\r
-         lContainerCutVars[15] = -1.;\r
-         if (lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,0); // for Xi-\r
-         lContainerCutVars[11] = lInvMassXiMinus;\r
-         lContainerCutVars[12] = lInvMassOmegaMinus;\r
-         lContainerCutVars[14] = -1.;\r
-         lContainerCutVars[15] = lRapOmega;\r
-         if (lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,2); // for Omega-\r
-    } else {\r
-         lContainerCutVars[11] = lInvMassXiPlus;\r
-         lContainerCutVars[12] = lInvMassOmegaPlus; \r
-         lContainerCutVars[14] = lRapXi;\r
-         lContainerCutVars[15] = -1.; \r
-         if (lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,1); // for Xi+\r
-         lContainerCutVars[11] = lInvMassXiPlus;\r
-         lContainerCutVars[12] = lInvMassOmegaPlus;\r
-         lContainerCutVars[14] = -1.;\r
-         lContainerCutVars[15] = lRapOmega;\r
-         if (lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,3); // for Omega+ \r
-    }                 \r
-  } //end of the Cascade loop (ESD or AOD)\r
-    \r
-  // Post output data.\r
- PostData(1, fListHistCascade);\r
- PostData(2, fCFContCascadePIDXiMinus);\r
- PostData(3, fCFContCascadePIDXiPlus);\r
- PostData(4, fCFContCascadePIDOmegaMinus);\r
- PostData(5, fCFContCascadePIDOmegaPlus);\r
- PostData(6, fCFContCascadeCuts);\r
-}\r
-\r
-//________________________________________________________________________\r
-Int_t AliAnalysisTaskCheckCascadepp276::DoESDTrackWithTPCrefitMultiplicity(const AliESDEvent *lESDevent) {\r
-    // Checking the number of tracks with TPCrefit for each event\r
-    // Needed for a rough assessment of the event multiplicity\r
-        \r
-    Int_t nTrackWithTPCrefitMultiplicity = 0;\r
-    for (Int_t iTrackIdx = 0; iTrackIdx < (InputEvent())->GetNumberOfTracks(); iTrackIdx++) {\r
-      AliESDtrack *esdTrack    = 0x0;\r
-      esdTrack = lESDevent->GetTrack( iTrackIdx );\r
-      if (!esdTrack) { AliWarning("Pb / Could not retrieve one track within the track loop for TPCrefit check ..."); continue; }\r
-\r
-      ULong_t lTrackStatus    = esdTrack->GetStatus();\r
-      if ((lTrackStatus&AliESDtrack::kTPCrefit)    == 0) continue;\r
-      else nTrackWithTPCrefitMultiplicity++;\r
-        // FIXME :\r
-        // The goal here is to get a better assessment of the event multiplicity.\r
-        // (InputEvent())->GetNumberOfTracks() takes into account ITS std alone tracks + global tracks\r
-        // This may introduce a bias. Hence the number of TPC refit tracks.\r
-        // Note : the event multiplicity = analysis on its own... See Jacek's or Jan Fiete's analysis on dN/d(eta)\r
-\r
-    } // end loop over all event tracks\r
-    return  nTrackWithTPCrefitMultiplicity;\r
-}\r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskCheckCascadepp276::Terminate(Option_t *) \r
-{\r
-  // Draw result to the screen\r
-  // Called once at the end of the query\r
-\r
-/*  TList *cRetrievedList = 0x0;\r
-         cRetrievedList = (TList*)GetOutputData(1);\r
-       if(!cRetrievedList){\r
-               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: ouput data container list not available\n"); return;\r
-       }\r
-  fHistTrackMultiplicity = dynamic_cast<TH1F*> (   cRetrievedList->FindObject("fHistTrackMultiplicity") );\r
-  if (!fHistTrackMultiplicity) {\r
-               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistTrackMultiplicity not available\n"); return;\r
-       }\r
-  fHistMassXiMinus    = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiMinus") );        \r
-       if (!fHistMassXiMinus) {\r
-               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassXiMinus not available\n"); return;\r
-       }\r
-  fHistMassXiPlus     = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiPlus") );\r
-       if (!fHistMassXiPlus) {\r
-               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassXiPlus not available\n"); return;\r
-       }       \r
-  fHistMassOmegaMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaMinus") );\r
-       if (!fHistMassOmegaMinus) {\r
-               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassOmegaMinus not available\n"); return;\r
-       }\r
-  fHistMassOmegaPlus  = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaPlus") );      \r
-       if (!fHistMassOmegaPlus) {\r
-               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassOmegaPlus not available\n"); return;\r
-       }\r
-  \r
-  TCanvas *canCheckCascade = new TCanvas("AliAnalysisTaskCheckCascadep276","CheckCascade overview",10,10,1010,660);\r
-  canCheckCascade->Divide(2,2);\r
-  \r
-  canCheckCascade->cd(1);\r
-  canCheckCascade->cd(1)->SetLogy();\r
-  fHistTrackMultiplicity->SetMarkerStyle(kFullStar);  \r
-  fHistTrackMultiplicity->GetXaxis()->SetLabelFont(42);\r
-  fHistTrackMultiplicity->GetYaxis()->SetLabelFont(42);\r
-  fHistTrackMultiplicity->SetTitleFont(42, "xy");\r
-  fHistTrackMultiplicity->GetXaxis()->SetTitleOffset(1.1);\r
-  fHistTrackMultiplicity->DrawCopy("H");\r
-  \r
-  canCheckCascade->cd(2);  \r
-  fHistMassXiMinus ->SetMarkerStyle(kFullCircle);\r
-  fHistMassXiMinus ->SetMarkerSize(0.5);\r
-  fHistMassXiMinus ->GetXaxis()->SetLabelFont(42);\r
-  fHistMassXiMinus ->GetYaxis()->SetLabelFont(42);\r
-  fHistMassXiMinus ->SetTitleFont(42, "xy");\r
-  fHistMassXiMinus ->GetXaxis()->SetTitleOffset(1.1);\r
-  fHistMassXiMinus ->GetYaxis()->SetTitleOffset(1.3);\r
-  //fHistMassXiMinus->Rebin(2);\r
-  fHistMassXiMinus ->GetXaxis()->SetRangeUser(1.24, 1.42);\r
-  fHistMassXiMinus ->DrawCopy("E");\r
-  \r
-  fHistMassXiPlus ->SetMarkerStyle(kOpenCircle);\r
-  fHistMassXiPlus ->SetMarkerColor(kRed+2);\r
-  fHistMassXiPlus ->SetLineColor(kRed+2);\r
-  fHistMassXiPlus ->SetMarkerSize(0.5);\r
-  //fHistMassXiPlus ->Rebin(2);\r
-  fHistMassXiPlus ->DrawCopy("ESAME");\r
-  \r
-  \r
-  TLegend *legendXi =new TLegend(0.67,0.34,0.97,0.54);\r
-               legendXi->SetTextFont(42);\r
-               legendXi->SetTextSize(0.05);\r
-               legendXi->SetFillColor(kWhite);\r
-               legendXi->AddEntry( fHistMassXiMinus,"#Xi^{-} candidates","lp");\r
-               legendXi->AddEntry( fHistMassXiPlus,"#Xi^{+} candidates","lp");\r
-               legendXi->Draw();\r
-  \r
-  \r
-  canCheckCascade->cd(3);  \r
-  fHistMassOmegaPlus ->SetMarkerStyle(kOpenCircle);\r
-  fHistMassOmegaPlus ->SetMarkerColor(kRed+2);\r
-  fHistMassOmegaPlus ->SetLineColor(kRed+2);\r
-  fHistMassOmegaPlus ->SetMarkerSize(0.5);\r
-  fHistMassOmegaPlus ->GetXaxis()->SetLabelFont(42);\r
-  fHistMassOmegaPlus ->GetYaxis()->SetLabelFont(42);\r
-  fHistMassOmegaPlus ->SetTitleFont(42, "xy");\r
-  fHistMassOmegaPlus ->GetXaxis()->SetTitleOffset(1.1);\r
-  fHistMassOmegaPlus ->GetYaxis()->SetTitleOffset(1.25);\r
-  //fHistMassOmegaPlus ->Rebin(2);\r
-  fHistMassOmegaPlus ->GetXaxis()->SetRangeUser(1.6, 1.84);\r
-  fHistMassOmegaPlus ->DrawCopy("E");\r
-  \r
-  fHistMassOmegaMinus->SetMarkerStyle(kFullCircle);\r
-  fHistMassOmegaMinus->SetMarkerSize(0.5);\r
-  //fHistMassOmegaMinus->Rebin(2);\r
-  fHistMassOmegaMinus->DrawCopy("ESAME");\r
-\r
-  \r
-   TLegend *legendOmega = new TLegend(0.67,0.34,0.97,0.54);\r
-               legendOmega->SetTextFont(42);\r
-               legendOmega->SetTextSize(0.05);\r
-               legendOmega->SetFillColor(kWhite);\r
-               legendOmega->AddEntry( fHistMassOmegaMinus,"#Omega^{-} candidates","lp");\r
-               legendOmega->AddEntry( fHistMassOmegaPlus,"#Omega^{+} candidates","lp");\r
-               legendOmega->Draw();\r
-     */\r
-}\r
+/**************************************************************************
+ *  Authors : Antonin Maire, Boris Hippolyte                              *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+//-----------------------------------------------------------------
+//            AliAnalysisTaskCheckCascadepp276 class
+//
+//            Origin AliAnalysisTaskCheckCascade which has four roles :
+//              1. QAing the Cascades from ESD and AOD
+//                 Origin:  AliAnalysisTaskESDCheckV0 by Boris Hippolyte Nov2007, hippolyt@in2p3.fr
+//              2. Prepare the plots which stand as raw material for yield extraction (wi/wo PID)
+//              3. Supply an AliCFContainer meant to define the optimised topological selections
+//              4. Rough azimuthal correlation study (Eta, Phi)
+//              Adapted to Cascade : A.Maire Mar2008, antonin.maire@ires.in2p3.fr
+//              Modified :           A.Maire Mar2010 
+//
+//              Adapted to PbPb analysis: M. Nicassio, maria.nicassio@ba.infn.it
+//               Feb-August2011
+//                - Physics selection moved to the run.C macro
+//                - Centrality selection added (+ setters) and histos
+//                - flag and setters added (CF container usage, vertex range)
+//                - histo added and histo/container binning changed 
+//                - protection in the destructor for CAF usage          
+//                - AliWarning disabled
+//                - number of tracklets from AOD also          
+//                - automatic settings for PID
+//               September2011
+//                - proper time histos/container added (V0 and Cascades)
+//                - cosine PA V0 wrt Xi vertex in the container  
+//               November2011
+//                - re-run V0's and cascade's vertexers (SetCuts instead SetDefaultCuts!!)
+//                - problems of libraries on Grid --> code copied in the task (from AliRoot v5-10-AN
+//                  where new pt dependent V0's cosPA cut implemented by Iouri) 
+//                - AOD analysis part completed 
+//
+//
+//              Adapted to pp 2.76 TeV analysis: D. Colella, domenico.colella@ba.infn.it
+//               Gen-now 2012
+//                - Physics selection re-moved here (mainly for normalization in the efficiency calcuation)
+//                - Centrality selection deleted
+//
+//
+//             Adapted to pPb 5.02 TeV analysis: D. Colella, domenico.colella@ba.infn.it
+//               Aug-Sep 2014
+//               - Added the parameter fCollidingSystem, to distingish between pp and pPb procedures
+//
+//
+//
+//-----------------------------------------------------------------
+
+class TTree;
+class TParticle;
+class TVector3;
+
+class AliESDVertex;
+class AliAODVertex;
+class AliESDv0;
+class AliAODv0;
+
+#include <Riostream.h>
+#include "TList.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "THnSparse.h"
+#include "TVector3.h"
+#include "TCanvas.h"
+#include "TMath.h"
+#include "TLegend.h"
+
+#include "AliLog.h"
+#include "AliESDEvent.h"
+#include "AliAODEvent.h"
+#include "AliV0vertexer.h"
+#include "AliCascadeVertexer.h"
+#include "AliESDtrackCuts.h"
+#include "AliPIDResponse.h"
+
+#include "AliESDVZERO.h"
+
+#include "AliInputEventHandler.h"
+#include "AliAnalysisManager.h"
+#include "AliMCEventHandler.h"
+#include "AliESDInputHandler.h" 
+#include "AliAODInputHandler.h"
+#include "AliCFContainer.h"
+#include "AliMultiplicity.h"
+
+#include "AliESDcascade.h"
+#include "AliAODcascade.h"
+#include "AliAODTrack.h"
+#include "AliAnalysisUtils.h"
+
+#include "AliAnalysisTaskCheckCascadepp276.h"
+
+
+using std::cout;
+using std::endl;
+
+ClassImp(AliAnalysisTaskCheckCascadepp276)
+
+
+
+//________________________________________________________________________
+AliAnalysisTaskCheckCascadepp276::AliAnalysisTaskCheckCascadepp276() 
+  : AliAnalysisTaskSE(), 
+    fAnalysisType               ("ESD"),
+    fESDtrackCuts               (0),
+    fUtils                      (0),
+    fCollidingSystem            ("pp"),
+    fPIDResponse                (0),
+    fkRerunV0CascVertexers      (0),
+    fkSDDSelectionOn            (kTRUE),
+    fkQualityCutZprimVtxPos     (kTRUE),
+    fkQualityCutNoTPConlyPrimVtx(kTRUE),
+    fkQualityCutTPCrefit        (kTRUE),
+    fkQualityCutnTPCcls         (kTRUE),
+    fkQualityCutPileup          (kTRUE),
+    fwithSDD                    (kTRUE),
+    fMinnTPCcls                 (0),
+    fkExtraSelections           (0),
+    fVtxRange                   (0),
+    fVtxRangeMin                (0),
+    fMinPtCutOnDaughterTracks   (0),
+    fEtaCutOnDaughterTracks     (0),
+
+    // - Plots initialisation
+    fListHistCascade(0),
+      // Cascades multiplicity plots
+      fHistCascadeMultiplicityBeforeAnySel(0),
+      fHistCascadeMultiplicityAfterSDDSel(0),
+      fHistCascadeMultiplicityAfterPhysicsSel(0),
+      fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
+      fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistCascadeMultiplicityAfterVertexCutSel(0),
+      // Tracks multiplicity plots
+      fHistTrackMultiplicityBeforeAnySel(0),
+      fHistTrackMultiplicityAfterSDDSel(0),
+      fHistTrackMultiplicityAfterPhysicsSel(0),
+      fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
+      fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistTrackMultiplicityAfterVertexCutSel(0),
+      // Vertex position plots (BestVertex)
+      fHistPVx(0), fHistPVy(0), fHistPVz(0),
+      fHistPVxAnalysis(0), fHistPVyAnalysis(0), fHistPVzAnalysis(0),    
+      // TPC cluster distributions for daughters
+      fHistPosV0TPCClusters(0), 
+      fHistNegV0TPCClusters(0), 
+      fHistBachTPCClusters(0),
+      // Cut's variables distributions
+      fHistEffMassXi(0), 
+      fHistDcaXiDaughters(0), 
+      fHistDcaBachToPrimVertex(0), 
+      fHistXiCosineOfPointingAngle(0), 
+      fHistXiRadius(0),
+      fHistMassLambdaAsCascDghter(0),
+      fHistDcaV0DaughtersXi(0),
+      fHistDcaV0ToPrimVertexXi(0), 
+      fHistV0CosineOfPointingAngleXi(0),
+      fHistV0RadiusXi(0),
+      fHistDcaPosToPrimVertexXi(0), 
+      fHistDcaNegToPrimVertexXi(0), 
+      // Invariant mass distributions
+      fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
+      // Transverse and total momentum distributions
+      fHistXiTransvMom(0), fHistXiTotMom(0), fHistBachTransvMomXi(0), fHistBachTotMomXi(0),
+      // Others QA plots
+      fHistChargeXi(0),
+      fHistV0toXiCosineOfPointingAngle(0),
+      fHistRapXi(0), fHistRapOmega(0), 
+      fHistEtaXi(0), fHistEtaBachXi(0), fHistEtaPosXi(0), fHistEtaNegXi(0),
+      fHistThetaXi(0), 
+      fHistPhiXi(0),
+      f2dHistArmenteros(0),                    
+      f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),
+      f2dHistEffMassLambdaVsEffMassXiPlus(0),  f2dHistEffMassXiVsEffMassOmegaPlus(0),
+      f2dHistXiRadiusVsEffMassXiMinus(0),      f2dHistXiRadiusVsEffMassXiPlus(0),
+      f2dHistXiRadiusVsEffMassOmegaMinus(0),   f2dHistXiRadiusVsEffMassOmegaPlus(0),
+      f2dHistTPCdEdxOfCascDghters(0),
+      f2dHistDcaXiDaughtersvsInvMass(0), 
+      f2dHistDcaBachToPrimVertexvsInvMass(0), 
+      f2dHistXiCosineOfPointingAnglevsInvMass(0),
+      f2dHistMassLambdaAsCascDghtervsInvMass(0),
+      f2dHistDcaV0DaughtersXivsInvMass(0),
+      f2dHistDcaV0ToPrimVertexXivsInvMass(0),
+      // Containers for cuts study 
+      fCFContCascadePIDXiMinus(0),
+      fCFContCascadePIDXiPlus(0),
+      fCFContCascadePIDOmegaMinus(0),
+      fCFContCascadePIDOmegaPlus(0),
+      fCFContCascadeCuts(0)
+    
+    {
+     // Dummy Constructor
+        for(Int_t iV0selIdx   = 0; iV0selIdx   < 7; iV0selIdx++   ) { fV0Sels          [iV0selIdx   ] = -1.; }
+        for(Int_t iCascSelIdx = 0; iCascSelIdx < 8; iCascSelIdx++ ) { fCascSels        [iCascSelIdx ] = -1.; }
+    }
+
+
+//________________________________________________________________________
+AliAnalysisTaskCheckCascadepp276::AliAnalysisTaskCheckCascadepp276(const char *name) 
+  : AliAnalysisTaskSE(name), 
+    fAnalysisType               ("ESD"), 
+    fESDtrackCuts               (0), 
+    fUtils                      (0),
+    fCollidingSystem            ("pp"),
+    fPIDResponse                (0),
+    fkRerunV0CascVertexers      (0),
+    fkSDDSelectionOn            (kTRUE),
+    fkQualityCutZprimVtxPos     (kTRUE),
+    fkQualityCutNoTPConlyPrimVtx(kTRUE),
+    fkQualityCutTPCrefit        (kTRUE),
+    fkQualityCutnTPCcls         (kTRUE),
+    fkQualityCutPileup          (kTRUE),
+    fwithSDD                    (kTRUE),
+    fMinnTPCcls                 (0),
+    fkExtraSelections           (0),
+    fVtxRange                   (0),
+    fVtxRangeMin                (0),
+    fMinPtCutOnDaughterTracks   (0),
+    fEtaCutOnDaughterTracks     (0),
+     
+    // - Plots initialisation
+    fListHistCascade(0),
+
+      // Cascades multiplicity plots
+      fHistCascadeMultiplicityBeforeAnySel(0),
+      fHistCascadeMultiplicityAfterSDDSel(0),
+      fHistCascadeMultiplicityAfterPhysicsSel(0),
+      fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
+      fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistCascadeMultiplicityAfterVertexCutSel(0),
+      // Tracks multiplicity plots
+      fHistTrackMultiplicityBeforeAnySel(0),
+      fHistTrackMultiplicityAfterSDDSel(0),
+      fHistTrackMultiplicityAfterPhysicsSel(0),
+      fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
+      fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistTrackMultiplicityAfterVertexCutSel(0),
+      // Vertex position plots (BestVertex)
+      fHistPVx(0), fHistPVy(0), fHistPVz(0),
+      fHistPVxAnalysis(0), fHistPVyAnalysis(0), fHistPVzAnalysis(0),
+      // TPC cluster distributions for daughters
+      fHistPosV0TPCClusters(0), fHistNegV0TPCClusters(0), fHistBachTPCClusters(0),
+      // Cut's variables distributions
+      fHistEffMassXi(0),
+      fHistDcaXiDaughters(0),
+      fHistDcaBachToPrimVertex(0),
+      fHistXiCosineOfPointingAngle(0),
+      fHistXiRadius(0),
+      fHistMassLambdaAsCascDghter(0),
+      fHistDcaV0DaughtersXi(0),
+      fHistDcaV0ToPrimVertexXi(0),
+      fHistV0CosineOfPointingAngleXi(0),
+      fHistV0RadiusXi(0),
+      fHistDcaPosToPrimVertexXi(0),
+      fHistDcaNegToPrimVertexXi(0),
+      // Invariant mass distributions
+      fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
+      // Transverse and total momentum distributions
+      fHistXiTransvMom(0), fHistXiTotMom(0), fHistBachTransvMomXi(0), fHistBachTotMomXi(0),
+      // Others QA plots
+      fHistChargeXi(0),
+      fHistV0toXiCosineOfPointingAngle(0),
+      fHistRapXi(0), fHistRapOmega(0),
+      fHistEtaXi(0), fHistEtaBachXi(0), fHistEtaPosXi(0), fHistEtaNegXi(0),
+      fHistThetaXi(0),
+      fHistPhiXi(0),
+      f2dHistArmenteros(0),
+      f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),
+      f2dHistEffMassLambdaVsEffMassXiPlus(0),  f2dHistEffMassXiVsEffMassOmegaPlus(0),
+      f2dHistXiRadiusVsEffMassXiMinus(0),      f2dHistXiRadiusVsEffMassXiPlus(0),
+      f2dHistXiRadiusVsEffMassOmegaMinus(0),   f2dHistXiRadiusVsEffMassOmegaPlus(0),
+      f2dHistTPCdEdxOfCascDghters(0),
+      f2dHistDcaXiDaughtersvsInvMass(0),
+      f2dHistDcaBachToPrimVertexvsInvMass(0),
+      f2dHistXiCosineOfPointingAnglevsInvMass(0),
+      f2dHistMassLambdaAsCascDghtervsInvMass(0),
+      f2dHistDcaV0DaughtersXivsInvMass(0),
+      f2dHistDcaV0ToPrimVertexXivsInvMass(0),
+      // Containers for cuts study 
+      fCFContCascadePIDXiMinus(0),
+      fCFContCascadePIDXiPlus(0),
+      fCFContCascadePIDOmegaMinus(0),
+      fCFContCascadePIDOmegaPlus(0),
+      fCFContCascadeCuts(0)
+    
+    //_____Costructor____
+    {
+     // Define input and output slots here
+     // Input slot #0 works with a TChain
+     // DefineInput(0, TChain::Class());
+     // Output slot #1 writes into a TList container (cascade)
+     if (fCollidingSystem == "pp") {
+         fV0Sels[0] =  33.  ;     // max allowed chi2
+         fV0Sels[1] =   0.01;     // min allowed impact parameter for the 1st daughter 
+         fV0Sels[2] =   0.01;     // min allowed impact parameter for the 2nd daughter 
+         fV0Sels[3] =   1.5;      // max allowed DCA between the daughter tracks       
+         fV0Sels[4] =   0.9;      // min allowed cosine of V0's pointing angle - This is pT dependent        
+         fV0Sels[5] =   0.2;      // min radius of the fiducial volume                 
+         fV0Sels[6] = 200.;       // max radius of the fiducial volume                 
+         fCascSels[0] =  33.;     // max allowed chi2 (same as PDC07)
+         fCascSels[1] =   0.01;   // min allowed V0 impact parameter                    
+         fCascSels[2] =   0.008;  // "window" around the Lambda mass                    
+         fCascSels[3] =   0.01;   // min allowed bachelor's impact parameter          
+         fCascSels[4] =   2.0;    // max allowed DCA between the V0 and the bachelor    
+         fCascSels[5] =   0.95;   // min allowed cosine of the cascade pointing angle   
+         fCascSels[6] =   0.2;    // min radius of the fiducial volume                  
+         fCascSels[7] = 100.;     // max radius of the fiducial volume 
+     } else if (fCollidingSystem == "pPb") {
+         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] = 200.  ;     // max radius of the fiducial volume                 (LHC09a4 : 100.0)
+         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, AliCFContainer::Class());
+     DefineOutput(3, AliCFContainer::Class());
+     DefineOutput(4, AliCFContainer::Class());
+     DefineOutput(5, AliCFContainer::Class());
+     DefineOutput(6, AliCFContainer::Class());
+     AliLog::SetClassDebugLevel("AliAnalysisTaskCheckCascadepp276",1);
+    } 
+
+
+    //_____Destructor_____
+    AliAnalysisTaskCheckCascadepp276::~AliAnalysisTaskCheckCascadepp276() {
+      // For all TH1, 2, 3 HnSparse and CFContainer are in the fListCascade TList.
+      // They will be deleted when fListCascade is deleted by the TSelector dtor
+      // Because of TList::SetOwner() ...   
+       if (fListHistCascade && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())           { delete fListHistCascade; fListHistCascade = 0x0; }
+       if (fCFContCascadePIDXiMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())   { delete fCFContCascadePIDXiMinus; fCFContCascadePIDXiMinus = 0x0; }
+       if (fCFContCascadePIDXiPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())    { delete fCFContCascadePIDXiPlus; fCFContCascadePIDXiPlus = 0x0; }
+       if (fCFContCascadePIDOmegaMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){ delete fCFContCascadePIDOmegaMinus; fCFContCascadePIDOmegaMinus = 0x0; }
+       if (fCFContCascadePIDOmegaPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fCFContCascadePIDOmegaPlus; fCFContCascadePIDOmegaPlus = 0x0; }  
+       if (fCFContCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())         { delete fCFContCascadeCuts; fCFContCascadeCuts = 0x0; }
+       if (fESDtrackCuts)                                                                          { delete fESDtrackCuts; fESDtrackCuts = 0x0; }
+    }
+
+
+//________________________________________________________________________
+void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
+  // Create histograms
+  // Called once
+
+
+ fListHistCascade = new TList();
+ fListHistCascade->SetOwner();  // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
+
+ //-----------------------------------------------
+ // Particle Identification Setup (new PID object)
+ //-----------------------------------------------
+ AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+ fPIDResponse = inputHandler->GetPIDResponse();
+ // Only used to get the number of primary reconstructed tracks
+ if (fAnalysisType == "ESD" && (! fESDtrackCuts )){
+   fESDtrackCuts = new AliESDtrackCuts();
+ }
+
+ //---------------------------------------------------
+ // Initialize cuts to re-run V0 and cascade vertexers
+ //---------------------------------------------------
+ // Not validated; to be checked
+ if (fCollidingSystem == "pp") {
+      fV0Sels[0] =  33.  ;     // max allowed chi2
+      fV0Sels[1] =   0.01;     // min allowed impact parameter for the 1st daughter 
+      fV0Sels[2] =   0.01;     // min allowed impact parameter for the 2nd daughter 
+      fV0Sels[3] =   1.5;      // max allowed DCA between the daughter tracks       
+      fV0Sels[4] =   0.9;      // min allowed cosine of V0's pointing angle         
+      fV0Sels[5] =   0.2;      // min radius of the fiducial volume                 
+      fV0Sels[6] = 200.;       // max radius of the fiducial volume                 
+      fCascSels[0] =  33.;     // max allowed chi2 (same as PDC07)
+      fCascSels[1] =   0.01;   // min allowed V0 impact parameter                    
+      fCascSels[2] =   0.008;  // "window" around the Lambda mass                    
+      fCascSels[3] =   0.01;   // min allowed bachelor's impact parameter          
+      fCascSels[4] =   2.0;    // max allowed DCA between the V0 and the bachelor    
+      fCascSels[5] =   0.95;   // min allowed cosine of the cascade pointing angle   
+      fCascSels[6] =   0.2;    // min radius of the fiducial volume                  
+      fCascSels[7] = 100.;     // max radius of the fiducial volume 
+ } else if (fCollidingSystem == "pPb") {
+      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] = 200.  ;     // max radius of the fiducial volume                 (LHC09a4 : 100.0)
+      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   )
+ }
+
+ //----------------------
+ // Initialize the histos
+ //----------------------
+ // - Cascades multiplicity plots 
+ if(! fHistCascadeMultiplicityBeforeAnySel) {
+        fHistCascadeMultiplicityBeforeAnySel = new TH1F("fHistCascadeMultiplicityBeforeAnySel",
+                        "Cascades per event (before any selections);Nbr of Cascades/Evt;Events",                
+                        20, 0, 20);
+        fListHistCascade->Add(fHistCascadeMultiplicityBeforeAnySel);
+ }
+ if(! fHistCascadeMultiplicityAfterSDDSel) {
+        fHistCascadeMultiplicityAfterSDDSel = new TH1F("fHistCascadeMultiplicityAfterSDDSel", 
+                       "Cascades per event (after the SDD selection);Nbr of Cascades/Evt;Events", 
+                       20, 0, 20);             
+       fListHistCascade->Add(fHistCascadeMultiplicityAfterSDDSel);
+ }
+ if(! fHistCascadeMultiplicityAfterPhysicsSel) {
+        fHistCascadeMultiplicityAfterPhysicsSel = new TH1F("fHistCascadeMultiplicityAfterPhysicsSel",
+                        "Cascades per event (after physics selection);Nbr of Cascades/Evt;Events",
+                        20, 0, 20);
+        fListHistCascade->Add(fHistCascadeMultiplicityAfterPhysicsSel);
+ }
+ if(! fHistCascadeMultiplicityForSelEvtNoTPCOnly) {
+        fHistCascadeMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistCascadeMultiplicityForSelEvtNoTPCOnly",
+                        "Cascades per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events",
+                        20, 0, 20);
+        fListHistCascade->Add(fHistCascadeMultiplicityForSelEvtNoTPCOnly);
+ }
+ if(! fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup) {
+        fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup",
+                        "Cascades per event (for selected events with well-establisched PV and no pile-up);Nbr of Cascades/Evt;Events",
+                        20, 0, 20);
+        fListHistCascade->Add(fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup);
+ }
+ if(! fHistCascadeMultiplicityAfterVertexCutSel) {
+        fHistCascadeMultiplicityAfterVertexCutSel = new TH1F("fHistCascadeMultiplicityAfterVertexCutSel",
+                                                             "Cascades per event (after vertex cut selection);Nbr of Cascades/Evt;Events",
+                                                             20, 0, 20);
+        fListHistCascade->Add(fHistCascadeMultiplicityAfterVertexCutSel);
+ }
+ // - Tracks multiplicity plots 
+ if(! fHistTrackMultiplicityBeforeAnySel) {
+       fHistTrackMultiplicityBeforeAnySel = new TH1F("fHistTrackMultiplicityBeforeAnySel", 
+                       "Tracks per event (before any selections);Nbr of Cascades/Evt;Events", 
+                       100, 0, 100);           
+       fListHistCascade->Add(fHistTrackMultiplicityBeforeAnySel);
+ } 
+ if(! fHistTrackMultiplicityAfterSDDSel) {
+        fHistTrackMultiplicityAfterSDDSel = new TH1F("fHistTrackMultiplicityAfterSDDSel",                  
+                        "Tracks per event (after the SDD selection);Nbr of Cascades/Evt;Events",
+                        100, 0, 100);
+        fListHistCascade->Add(fHistTrackMultiplicityAfterSDDSel);
+ }
+ if(! fHistTrackMultiplicityAfterPhysicsSel) {
+        fHistTrackMultiplicityAfterPhysicsSel = new TH1F("fHistTrackMultiplicityAfterPhysicsSel",
+                        "Tracks per event (after physics selection);Nbr of Cascades/Evt;Events",
+                        100, 0, 100);
+        fListHistCascade->Add(fHistTrackMultiplicityAfterPhysicsSel);
+ }
+ if(! fHistTrackMultiplicityForSelEvtNoTPCOnly) {
+        fHistTrackMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistTrackMultiplicityForSelEvtNoTPCOnly",
+                        "Tracks per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events",
+                        100, 0, 100);
+        fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnly);
+ }
+ if(! fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup) {
+        fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup",
+                        "Tracks per event (for selected events with well-establisched PV and no pile-up);Nbr of Cascades/Evt;Events",
+                        100, 0, 100);
+        fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
+ }
+ if(! fHistTrackMultiplicityAfterVertexCutSel) {
+        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",
+                                                           "Tracks per event (after vertex cut selection);Nbr of Cascades/Evt;Events",
+                                                           100, 0, 100);
+        fListHistCascade->Add(fHistTrackMultiplicityAfterVertexCutSel);
+ }
+ // - Vertex position plots
+ if(! fHistPVx ){
+       fHistPVx = new TH1F("fHistPVx", "Best PV position in x; x (cm); Events", 2000, -0.5, 0.5);
+       fListHistCascade->Add(fHistPVx);
+ }
+ if(! fHistPVy ){
+        fHistPVy = new TH1F("fHistPVy", "Best PV position in y; y (cm); Events", 2000, -0.5, 0.5);
+        fListHistCascade->Add(fHistPVy);
+ }
+ if(! fHistPVz ){
+        fHistPVz = new TH1F("fHistPVz", "Best PV position in z; z (cm); Events", 400, -20, 20);
+        fListHistCascade->Add(fHistPVz);
+ } 
+ if(! fHistPVxAnalysis ){
+        fHistPVxAnalysis = new TH1F("fHistPVxAnalysis", "Best PV position in x (after events selections); x (cm); Events", 2000, -0.5, 0.5);
+        fListHistCascade->Add(fHistPVxAnalysis);
+ }
+ if(! fHistPVyAnalysis ){
+        fHistPVyAnalysis = new TH1F("fHistPVyAnalysis", "Best PV position in y (after events selections); y (cm); Events", 2000, -0.5, 0.5);
+        fListHistCascade->Add(fHistPVyAnalysis);
+ }
+ if(! fHistPVzAnalysis ){
+        fHistPVzAnalysis = new TH1F("fHistPVzAnalysis", "Best PV position in z (after events selections); z (cm); Events", 400, -20, 20);
+        fListHistCascade->Add(fHistPVzAnalysis);
+ }
+ // - TPC clusetr sdistributions for daughters (histos for events containing at least ONE CASCADE)
+ if(! fHistPosV0TPCClusters ){
+        fHistPosV0TPCClusters = new TH1F("fHistPosV0TPCClusters", "TPC clusters for Pos. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Pos.); Track counts", 165, 0.0, 165.0);
+        fListHistCascade->Add(fHistPosV0TPCClusters);
+ }
+ if(! fHistNegV0TPCClusters ){
+        fHistNegV0TPCClusters = new TH1F("fHistNegV0TPCClusters", "TPC clusters for Neg. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Neg.); Track counts", 165, 0.0, 165.0);
+        fListHistCascade->Add(fHistNegV0TPCClusters);
+ }
+ if(! fHistBachTPCClusters ){
+        fHistBachTPCClusters = new TH1F("fHistBachTPCClusters", "TPC clusters for Bachelor track; Nbr of TPC clusters (Bach); Track counts", 165, 0.0, 165.0);
+        fListHistCascade->Add(fHistBachTPCClusters);
+ }
+ // - Cut's variables distributions (typical histos for cascades): as example only for the Xi (both particle and anti-particle)
+ if(! fHistEffMassXi) {
+     fHistEffMassXi = new TH1F("fHistEffMassXi", "Xi candidates; Invariant Mass (GeV/c^{2}); Counts", 400, 1.2, 2.0);
+     fListHistCascade->Add(fHistEffMassXi);
+ }  
+ if(! fHistDcaXiDaughters ){
+     fHistDcaXiDaughters = new TH1F("fHistDcaXiDaughters", "DCA between Xi daughters; DCA (cm); Counts", 210, 0., 2.1);
+     fListHistCascade->Add(fHistDcaXiDaughters);
+ }
+ if(! fHistDcaBachToPrimVertex) {
+     fHistDcaBachToPrimVertex = new TH1F("fHistDcaBachToPrimVertex", "Impact parameter of Bach. to Prim. Vertex; DCA (cm); Counts", 250, 0., 0.25);
+     fListHistCascade->Add(fHistDcaBachToPrimVertex);
+ }
+ if(! fHistXiCosineOfPointingAngle) {
+     fHistXiCosineOfPointingAngle = new TH1F("fHistXiCosineOfPointingAngle", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl); Counts", 601, 0.94, 1.0001);
+     fListHistCascade->Add(fHistXiCosineOfPointingAngle);
+ }
+ if(! fHistXiRadius ){
+     fHistXiRadius = new TH1F("fHistXiRadius", "Cascade decay transv. radius; r (cm); Counts" , 2050, 0., 205.0);
+     fListHistCascade->Add(fHistXiRadius);
+ }
+ if(! fHistMassLambdaAsCascDghter) {
+     fHistMassLambdaAsCascDghter = new TH1F("fHistMassLambdaAsCascDghter", "#Lambda associated to cascade candidates; Eff. Mass (GeV/c^{2}); Counts", 300, 1.0, 1.3);
+     fListHistCascade->Add(fHistMassLambdaAsCascDghter);
+ }
+ if(! fHistDcaV0DaughtersXi) {
+     fHistDcaV0DaughtersXi = new TH1F("fHistDcaV0DaughtersXi", "DCA between V0 daughters, in cascade; DCA (cm); Counts", 320, 0., 1.6);
+     fListHistCascade->Add(fHistDcaV0DaughtersXi);
+ }
+ if(! fHistDcaV0ToPrimVertexXi) {
+     fHistDcaV0ToPrimVertexXi = new TH1F("fHistDcaV0ToPrimVertexXi", "Impact parameter of V0  to Prim. Vertex, in cascade; DCA (cm); Counts", 200, 0., 1.);
+     fListHistCascade->Add(fHistDcaV0ToPrimVertexXi);
+ }
+ if(! fHistV0CosineOfPointingAngleXi) {
+     fHistV0CosineOfPointingAngleXi = new TH1F("fHistV0CosineOfPointingAngleXi", "Cosine of V0 Pointing Angle, in cascade; Cos(V0 Point. Angl); Counts", 201, 0.8, 1.001);
+     fListHistCascade->Add(fHistV0CosineOfPointingAngleXi);
+ }
+ if(! fHistV0RadiusXi) {
+     fHistV0RadiusXi = new TH1F("fHistV0RadiusXi", "V0 decay radius, in cascade; radius (cm); Counts", 2050, 0., 205.0);
+     fListHistCascade->Add(fHistV0RadiusXi);
+ }
+ if(! fHistDcaPosToPrimVertexXi) {
+     fHistDcaPosToPrimVertexXi = new TH1F("fHistDcaPosToPrimVertexXi", "Impact parameter of V0 pos daughter to Prim. Vertex; DCA (cm); Counts", 300, 0, 3);
+     fListHistCascade->Add(fHistDcaPosToPrimVertexXi);
+ }
+ if(! fHistDcaNegToPrimVertexXi) {
+     fHistDcaNegToPrimVertexXi = new TH1F("fHistDcaNegToPrimVertexXi", "Impact parameter of V0 neg daughter to Prim. Vertex; DCA (cm); Counts", 300, 0, 3);
+     fListHistCascade->Add(fHistDcaNegToPrimVertexXi);
+ }
+ // - Effective mass histos for cascades.
+    //By cascade hyp  
+ if(! fHistMassXiMinus) {
+     fHistMassXiMinus = new TH1F("fHistMassXiMinus", "#Xi^{-} candidates; M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400, 1.2, 2.0);
+     fListHistCascade->Add(fHistMassXiMinus);
+ } 
+ if(! fHistMassXiPlus) {
+     fHistMassXiPlus = new TH1F("fHistMassXiPlus", "#Xi^{+} candidates; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts", 400, 1.2, 2.0);
+     fListHistCascade->Add(fHistMassXiPlus);
+ }
+ if(! fHistMassOmegaMinus) {
+     fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus", "#Omega^{-} candidates; M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500, 1.5, 2.5);
+     fListHistCascade->Add(fHistMassOmegaMinus);
+ }
+ if(! fHistMassOmegaPlus) {
+     fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus", "#Omega^{+} candidates;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);
+     fListHistCascade->Add(fHistMassOmegaPlus);
+ }
+ // - Transverse and total momentum distributions
+ if(! fHistXiTransvMom ){
+     fHistXiTransvMom = new TH1F("fHistXiTransvMom", "#Xi transverse momentum (cand. around the mass peak); p_{t}(#Xi) (GeV/c); Counts", 100, 0.0, 10.0);
+     fListHistCascade->Add(fHistXiTransvMom);
+ }
+ if(! fHistXiTotMom ){
+     fHistXiTotMom = new TH1F("fHistXiTotMom", "#Xi momentum norm (cand. around the mass peak); p_{tot}(#Xi) (GeV/c); Counts", 150, 0.0, 15.0);
+     fListHistCascade->Add(fHistXiTotMom);
+ }
+ if(! fHistBachTransvMomXi ){
+     fHistBachTransvMomXi = new TH1F("fHistBachTransvMomXi", "#Xi Bach. transverse momentum (cand. around the mass peak); p_{t}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);
+     fListHistCascade->Add(fHistBachTransvMomXi);
+ }
+ if(! fHistBachTotMomXi ){
+     fHistBachTotMomXi = new TH1F("fHistBachTotMomXi", "#Xi Bach. momentum norm (cand. around the mass peak); p_{tot}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);
+     fListHistCascade->Add(fHistBachTotMomXi);
+ }
+ // - Others QA plots
+    //TH1
+ if(! fHistChargeXi ){
+     fHistChargeXi = new TH1F("fHistChargeXi", "Charge of Xi candidates; Sign; Counts", 5, -2.0, 3.0);
+     fListHistCascade->Add(fHistChargeXi);
+ }
+ if(! fHistV0toXiCosineOfPointingAngle) {
+     fHistV0toXiCosineOfPointingAngle = new TH1F("fHistV0toXiCosineOfPointingAngle", "Cos. of V0 Ptng Angl / Xi vtx ; Cos(V0 Point. Angl / Xi vtx); Counts", 1101, 0.89, 1.0001);
+     fListHistCascade->Add(fHistV0toXiCosineOfPointingAngle);
+ }
+ if(! fHistRapXi ){
+     fHistRapXi = new TH1F("fHistRapXi", "Rapidity of #Xi candidates (around the mass peak); y; Counts", 20, -1.0, 1.0);
+     fListHistCascade->Add(fHistRapXi);
+ }
+ if(! fHistRapOmega ){
+     fHistRapOmega = new TH1F("fHistRapOmega", "Rapidity of #Omega candidates (around the mass peak); y; Counts", 20, -1.0, 1.0);
+     fListHistCascade->Add(fHistRapOmega);
+ }
+ if(! fHistEtaXi ){
+     fHistEtaXi = new TH1F("fHistEtaXi", "Pseudo-rap. of #Xi candidates (around the mass peak); #eta; Counts", 20, -1.0, 1.0);
+     fListHistCascade->Add(fHistEtaXi);
+ }
+ if(! fHistEtaBachXi){
+     fHistEtaBachXi = new TH1F("fHistEtaBachXi", "Pseudo-rap. of #Xi bachelor; #eta; Counts", 40, -2.0, 2.0);
+     fListHistCascade->Add(fHistEtaBachXi);
+ }
+ if(! fHistEtaPosXi){
+     fHistEtaPosXi = new TH1F("fHistEtaPosXi", "Pseudo-rap. of #Xi positive meson daughter; #eta; Counts", 40, -2.0, 2.0);
+     fListHistCascade->Add(fHistEtaPosXi);
+ }
+ if(! fHistEtaNegXi){
+     fHistEtaNegXi = new TH1F("fHistEtaNegXi", "Pseudo-rap. of #Xi negative meson daughter; #eta; Counts", 40, -2.0, 2.0);
+     fListHistCascade->Add(fHistEtaNegXi);
+ }
+ if(! fHistThetaXi ){
+     fHistThetaXi = new TH1F("fHistThetaXi", "#theta of #Xi candidates (around the mass peak); #theta (deg); Counts", 180, 0., 180.0);
+     fListHistCascade->Add(fHistThetaXi);
+ }
+ if(! fHistPhiXi ){
+     fHistPhiXi = new TH1F("fHistPhiXi", "#phi of #Xi candidates (around the mass peak); #phi (deg); Counts", 360, 0., 360.);
+     fListHistCascade->Add(fHistPhiXi);
+ }
+ if(! f2dHistArmenteros) {
+     f2dHistArmenteros = new TH2F("f2dHistArmenteros", "#alpha_{Arm}(casc. cand.) Vs Pt_{Arm}(casc. cand.); #alpha_{Arm}; Pt_{Arm} (GeV/c)", 140, -1.2, 1.2, 300, 0., 0.3);
+     fListHistCascade->Add(f2dHistArmenteros);
+ }
+    //TH2
+ if(! f2dHistEffMassLambdaVsEffMassXiMinus) {
+     f2dHistEffMassLambdaVsEffMassXiMinus = new TH2F("f2dHistEffMassLambdaVsEffMassXiMinus", "M_{#Lambda} Vs M_{#Xi^{-} candidates}; Inv. M_{#Lambda^{0}} (GeV/c^{2}); M( #Lambda , #pi^{-} ) (GeV/c^{2})", 300, 1.1, 1.13, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiMinus);
+ }
+ if(! f2dHistEffMassXiVsEffMassOmegaMinus) {
+     f2dHistEffMassXiVsEffMassOmegaMinus = new TH2F("f2dHistEffMassXiVsEffMassOmegaMinus", "M_{#Xi^{-} candidates} Vs M_{#Omega^{-} candidates}; M( #Lambda , #pi^{-} ) (GeV/c^{2}); M( #Lambda , K^{-} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);
+     fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaMinus);
+ }
+ if(! f2dHistEffMassLambdaVsEffMassXiPlus) {
+     f2dHistEffMassLambdaVsEffMassXiPlus = new TH2F("f2dHistEffMassLambdaVsEffMassXiPlus", "M_{#Lambda} Vs M_{#Xi^{+} candidates}; Inv. M_{#Lambda^{0}} (GeV/c^{2}); M( #Lambda , #pi^{+} ) (GeV/c^{2})", 300, 1.1, 1.13, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiPlus);
+ }
+ if(! f2dHistEffMassXiVsEffMassOmegaPlus) {
+     f2dHistEffMassXiVsEffMassOmegaPlus = new TH2F("f2dHistEffMassXiVsEffMassOmegaPlus", "M_{#Xi^{+} candidates} Vs M_{#Omega^{+} candidates}; M( #Lambda , #pi^{+} ) (GeV/c^{2}); M( #Lambda , K^{+} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);
+     fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaPlus);
+ }
+ if(! f2dHistXiRadiusVsEffMassXiMinus) {
+     f2dHistXiRadiusVsEffMassXiMinus = new TH2F("f2dHistXiRadiusVsEffMassXiMinus", "Transv. R_{Xi Decay} Vs M_{#Xi^{-} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{-} ) (GeV/c^{2})", 450, 0., 45.0, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiMinus);
+ }
+ if(! f2dHistXiRadiusVsEffMassXiPlus) {
+     f2dHistXiRadiusVsEffMassXiPlus = new TH2F("f2dHistXiRadiusVsEffMassXiPlus", "Transv. R_{Xi Decay} Vs M_{#Xi^{+} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{+} ) (GeV/c^{2})", 450, 0., 45.0, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiPlus);
+ }
+ if(! f2dHistXiRadiusVsEffMassOmegaMinus) {
+     f2dHistXiRadiusVsEffMassOmegaMinus = new TH2F("f2dHistXiRadiusVsEffMassOmegaMinus", "Transv. R_{Xi Decay} Vs M_{#Omega^{-} candidates}; r_{cascade} (cm); M( #Lambda , K^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);
+     fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaMinus);
+ }
+ if(! f2dHistXiRadiusVsEffMassOmegaPlus) {
+     f2dHistXiRadiusVsEffMassOmegaPlus = new TH2F("f2dHistXiRadiusVsEffMassOmegaPlus", "Transv. R_{Xi Decay} Vs M_{#Omega^{+} candidates}; r_{cascade} (cm); M( #Lambda , K^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);
+     fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaPlus);
+ }
+ if(! f2dHistTPCdEdxOfCascDghters){
+     f2dHistTPCdEdxOfCascDghters = new TH2F("f2dHistTPCdEdxOfCascDghters", "TPC dE/dx of the cascade daughters; charge x || #vec{p}_{TPC inner wall}(Casc. daughter) || (GeV/c); TPC signal (ADC)", 2000, -10.0, 10.0, 450, 0., 900.);
+     fListHistCascade->Add(f2dHistTPCdEdxOfCascDghters);
+ }
+ if(! f2dHistDcaXiDaughtersvsInvMass){
+     f2dHistDcaXiDaughtersvsInvMass = new TH2F("f2dHistDcaXiDaughtersvsInvMass", "DCA between Xi Daughters; DCA (cm); Number of Cascades", 100, 0., 0.5, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistDcaXiDaughtersvsInvMass);
+ }
+ if(! f2dHistDcaBachToPrimVertexvsInvMass) {
+     f2dHistDcaBachToPrimVertexvsInvMass = new TH2F("f2dHistDcaBachToPrimVertexvsInvMass", "DCA of Bach. to Prim. Vertex; DCA (cm); Number of Cascades", 250, 0., 0.25, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistDcaBachToPrimVertexvsInvMass);
+ }
+ if(! f2dHistXiCosineOfPointingAnglevsInvMass){
+     f2dHistXiCosineOfPointingAnglevsInvMass = new TH2F("f2dHistXiCosineOfPointingAnglevsInvMass", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl); Number of Xis", 200, 0.99, 1.0, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistXiCosineOfPointingAnglevsInvMass);
+ }
+ if(! f2dHistMassLambdaAsCascDghtervsInvMass){ 
+     f2dHistMassLambdaAsCascDghtervsInvMass = new TH2F("f2dHistMassLambdaAsCascDghtervsInvMass","#Lambda associated to Casc. candidates; Eff. Mass (GeV/c^{2}); Counts", 300, 1.00, 1.3, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistMassLambdaAsCascDghtervsInvMass);
+ }
+ if(! f2dHistDcaV0DaughtersXivsInvMass){
+     f2dHistDcaV0DaughtersXivsInvMass = new TH2F("f2dHistDcaV0DaughtersXivsInvMass", "DCA between V0 daughters, in cascade; DCA (cm); Number of V0s", 120, 0., 0.6, 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistDcaV0DaughtersXivsInvMass);
+ }
+ if(! f2dHistDcaV0ToPrimVertexXivsInvMass){
+     f2dHistDcaV0ToPrimVertexXivsInvMass = new TH2F("f2dHistDcaV0ToPrimVertexXivsInvMass", "DCA of V0 to Prim. Vertex, in cascade; DCA (cm); Number of Cascades", 200, 0., 1., 400, 1.2, 2.0);
+     fListHistCascade->Add(f2dHistDcaV0ToPrimVertexXivsInvMass);
+ }
+ // - CFContainer PID study Xi minus
+ if(!fCFContCascadePIDXiMinus)  {
+   const Int_t  lNbSteps      =  7 ;
+   const Int_t  lNbVariables  =  3 ;
+     //Array for the number of bins in each dimension :
+   Int_t lNbBinsPerVar[3] = {0};
+   lNbBinsPerVar[0] = 100;
+   lNbBinsPerVar[1] = 800;
+   lNbBinsPerVar[2] = 22;
+   if (fCollidingSystem == "pp" && fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",
+                                                                    fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                    "Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+        else if (!fwithSDD) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",
+                                                                    fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                    "Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar ); 
+   } else if (fCollidingSystem == "pp" && !fkSDDSelectionOn) {
+        fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",
+                                                      fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                      "Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (fCollidingSystem == "pPb") {
+        fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",
+                                                      fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                      "Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   }
+     //Setting the bin limits 
+   fCFContCascadePIDXiMinus->SetBinLimits(0,   0.0  ,  10.0 ); // Pt(Cascade)
+   fCFContCascadePIDXiMinus->SetBinLimits(1,   1.2  ,   2.0 ); // Xi Effective mass
+   fCFContCascadePIDXiMinus->SetBinLimits(2,  -1.1  ,   1.1 ); // Rapidity
+     //Setting the step title : one per PID case
+   fCFContCascadePIDXiMinus->SetStepTitle(0, "No PID");
+   fCFContCascadePIDXiMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+   fCFContCascadePIDXiMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+   fCFContCascadePIDXiMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+   fCFContCascadePIDXiMinus->SetStepTitle(4, "Comb. PID / Bachelor");
+   fCFContCascadePIDXiMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+   fCFContCascadePIDXiMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");  
+     //Setting the variable title, per axis
+   fCFContCascadePIDXiMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+   fCFContCascadePIDXiMinus->SetVarTitle(1, "M( #Lambda , #pi^{-} ) (GeV/c^{2})");
+   fCFContCascadePIDXiMinus->SetVarTitle(2, "Y_{#Xi}");
+   fListHistCascade->Add(fCFContCascadePIDXiMinus);
+ }
+ // - CFContainer PID study Xi plus
+ if (!fCFContCascadePIDXiPlus) {
+   const Int_t  lNbSteps      =  7 ;
+   const Int_t  lNbVariables  =  3 ;
+     //Array for the number of bins in each dimension :
+   Int_t lNbBinsPerVar[3] = {0};
+   lNbBinsPerVar[0] = 100;
+   lNbBinsPerVar[1] = 800;
+   lNbBinsPerVar[2] = 22;
+   if (fCollidingSystem == "pp" && fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",
+                                                                   fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                   "Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar);
+        else if (!fwithSDD) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",
+                                                                         fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                         "Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar);
+   } else if (fCollidingSystem == "pp" && !fkSDDSelectionOn) { 
+        fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",
+                                                     fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                     "Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar);
+   } else if (fCollidingSystem == "pPb") {
+        fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",
+                                                     fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                     "Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar);
+   }
+     //Setting the bin limits 
+   fCFContCascadePIDXiPlus->SetBinLimits(0,   0.0  ,  10.0 );  // Pt(Cascade)
+   fCFContCascadePIDXiPlus->SetBinLimits(1,   1.2  ,   2.0 );  // Xi Effective mass
+   fCFContCascadePIDXiPlus->SetBinLimits(2,  -1.1  ,   1.1 );  // Rapidity
+     //Setting the step title : one per PID case
+   fCFContCascadePIDXiPlus->SetStepTitle(0, "No PID");
+   fCFContCascadePIDXiPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+   fCFContCascadePIDXiPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+   fCFContCascadePIDXiPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+   fCFContCascadePIDXiPlus->SetStepTitle(4, "Comb. PID / Bachelor");
+   fCFContCascadePIDXiPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+   fCFContCascadePIDXiPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
+     //Setting the variable title, per axis
+   fCFContCascadePIDXiPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+   fCFContCascadePIDXiPlus->SetVarTitle(1, "M( #Lambda , #pi^{+} ) (GeV/c^{2})");
+   fCFContCascadePIDXiPlus->SetVarTitle(2, "Y_{#Xi}");
+   fListHistCascade->Add(fCFContCascadePIDXiPlus);
+ }
+ // - CFContainer PID study Omega minus
+ if(!fCFContCascadePIDOmegaMinus)  {
+   const Int_t  lNbSteps      =  7 ;
+   const Int_t  lNbVariables  =  3 ;
+     //Array for the number of bins in each dimension :
+   Int_t lNbBinsPerVar[3] = {0};
+   lNbBinsPerVar[0] = 100;
+   lNbBinsPerVar[1] = 1000;
+   lNbBinsPerVar[2] = 22;
+   if (fCollidingSystem == "pp" && fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",
+                                                                       fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                       "Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+        else if (!fwithSDD) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",
+                                                                             fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                             "Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (!fkSDDSelectionOn) {
+        fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",
+                                                         fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                         "Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (fCollidingSystem == "pPb") {
+        fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",
+                                                         fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                         "Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   }
+     //Setting the bin limits 
+   fCFContCascadePIDOmegaMinus->SetBinLimits(0,   0.0  ,  10.0 );      // Pt(Cascade)
+   fCFContCascadePIDOmegaMinus->SetBinLimits(1,   1.5  ,   2.5 );      // Omega Effective mass
+   fCFContCascadePIDOmegaMinus->SetBinLimits(2,  -1.1  ,   1.1 );      // Rapidity
+     //Setting the step title : one per PID case
+   fCFContCascadePIDOmegaMinus->SetStepTitle(0, "No PID");
+   fCFContCascadePIDOmegaMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+   fCFContCascadePIDOmegaMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+   fCFContCascadePIDOmegaMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+   fCFContCascadePIDOmegaMinus->SetStepTitle(4, "Comb. PID / Bachelor");
+   fCFContCascadePIDOmegaMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+   fCFContCascadePIDOmegaMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
+     //Setting the variable title, per axis
+   fCFContCascadePIDOmegaMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+   fCFContCascadePIDOmegaMinus->SetVarTitle(1, "M( #Lambda , K^{-} ) (GeV/c^{2})");
+   fCFContCascadePIDOmegaMinus->SetVarTitle(2, "Y_{#Omega}");
+   fListHistCascade->Add(fCFContCascadePIDOmegaMinus);
+ }
+ // - CFContainer PID study Omega plus
+ if(!fCFContCascadePIDOmegaPlus)  {
+   const Int_t  lNbSteps      =  7 ;
+   const Int_t  lNbVariables  =  3 ;
+     //Array for the number of bins in each dimension :
+   Int_t lNbBinsPerVar[3] = {0};
+   lNbBinsPerVar[0] = 100;
+   lNbBinsPerVar[1] = 1000;
+   lNbBinsPerVar[2] = 22; 
+   if (fCollidingSystem == "pp" && fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",
+                                                                      fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                      "Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+        else if (!fwithSDD) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",
+                                                                            fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                            "Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (fCollidingSystem == "pp" && !fkSDDSelectionOn) {
+        fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",
+                                                        fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                        "Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (fCollidingSystem == "pPb") {
+        fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",
+                                                        fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                        "Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   }
+     //Setting the bin limits 
+   fCFContCascadePIDOmegaPlus->SetBinLimits(0,   0.0  ,  10.0 );       // Pt(Cascade)
+   fCFContCascadePIDOmegaPlus->SetBinLimits(1,   1.5  ,   2.5 );       // Omega Effective mass
+   fCFContCascadePIDOmegaPlus->SetBinLimits(2,  -1.1  ,   1.1 );       // Rapidity 
+     //Setting the step title : one per PID case
+   fCFContCascadePIDOmegaPlus->SetStepTitle(0, "No PID");
+   fCFContCascadePIDOmegaPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+   fCFContCascadePIDOmegaPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+   fCFContCascadePIDOmegaPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+   fCFContCascadePIDOmegaPlus->SetStepTitle(4, "Comb. PID / Bachelor");
+   fCFContCascadePIDOmegaPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+   fCFContCascadePIDOmegaPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
+     //Setting the variable title, per axis
+   fCFContCascadePIDOmegaPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+   fCFContCascadePIDOmegaPlus->SetVarTitle(1, "M( #Lambda , K^{+} ) (GeV/c^{2})");
+   fCFContCascadePIDOmegaPlus->SetVarTitle(2, "Y_{#Omega}");  
+   fListHistCascade->Add(fCFContCascadePIDOmegaPlus);
+ }
+ // - CFContainer: towards the optimisation of topological selections
+ if(! fCFContCascadeCuts) {
+       // Container meant to store all the relevant distributions corresponding to the cut variables.
+        // NB: overflow/underflow of variables on which we want to cut later should be 0!!! 
+   const Int_t  lNbSteps      =  4 ;
+   const Int_t  lNbVariables  =  19 ;
+     //Array for the number of bins in each dimension :
+   Int_t lNbBinsPerVar[lNbVariables] = {0};
+   lNbBinsPerVar[0]  = 25;     //DcaCascDaughters             :  [0.0,2.5]           -> Rec.Cut = 2.0;
+   lNbBinsPerVar[1]  = 25;     //DcaBachToPrimVertex          :  [0.0,0.24,100.0]    -> Rec.Cut = 0.01; 
+   lNbBinsPerVar[2]  = 61;     //CascCosineOfPointingAngle    :  [0.94,1.001]        -> Rec.Cut = 0.95;
+   lNbBinsPerVar[3]  = 40;     //CascRadius                   :  [0.0,3.9,1000.0]    -> Rec.Cut = 0.2;
+   lNbBinsPerVar[4]  = 30;     //InvMassLambdaAsCascDghter    :  [1.1,1.3]           -> Rec.Cut = 0.008;
+   lNbBinsPerVar[5]  = 21;     //DcaV0Daughters               :  [0.0,2.0]           -> Rec.Cut = 1.5;
+   lNbBinsPerVar[6]  = 201;    //V0CosineOfPointingAngleToXi  :  [0.89,1.0]          -> No Rec.Cut;
+   lNbBinsPerVar[7]  = 40;     //V0Radius                     :  [0.0,3.9,1000.0]    -> Rec.Cut = 0.2;
+   lNbBinsPerVar[8]  = 40;     //DcaV0ToPrimVertex            :  [0.0,0.39,110.0]    -> Rec.Cut = 0.01;  
+   lNbBinsPerVar[9]  = 25;     //DcaPosToPrimVertex           :  [0.0,0.24,100.0]    -> Rec.Cut = 0.01;
+   lNbBinsPerVar[10] = 25;     //DcaNegToPrimVertex           :  [0.0,0.24,100.0]    -> Rec.Cut = 0.01;
+   lNbBinsPerVar[11] = 150;    //InvMassXi                    :   2-MeV/c2 bins
+   lNbBinsPerVar[12] = 120;    //InvMassOmega                 :   2-MeV/c2 bins
+   lNbBinsPerVar[13] = 100;    //XiTransvMom                  :  [0.0,10.0]
+   lNbBinsPerVar[14] = 110;    //Y(Xi)                        :   0.02 in rapidity units
+   lNbBinsPerVar[15] = 110;    //Y(Omega)                     :   0.02 in rapidity units
+   lNbBinsPerVar[16] = 112;    //Proper lenght of cascade       
+   lNbBinsPerVar[17] = 112;    //Proper lenght of V0
+   lNbBinsPerVar[18] = 112;    //Distance V0-Xi in transverse plane
+   if (fCollidingSystem == "pp" && fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",
+                                                              fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                              "Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
+        else if (!fwithSDD) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",
+                                                                    fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                                    "Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
+   } else if (fCollidingSystem == "pp" && !fkSDDSelectionOn) {
+        fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",
+                                                fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                "Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
+   } else if (fCollidingSystem == "pPb") {
+        fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",
+                                                fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),
+                                                "Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
+   }
+     //Setting the bin limits 
+     //0 -  DcaXiDaughters
+   //Double_t *lBinLim0  = new Double_t[ lNbBinsPerVar[0] + 1 ];
+   //     for(Int_t i=0; i< lNbBinsPerVar[0]; i++) lBinLim0[i] = (Double_t)0.0 + (2.4 - 0.0)/(lNbBinsPerVar[0] - 1) * (Double_t)i;
+   //     lBinLim0[ lNbBinsPerVar[0] ] = 3.0;
+   //fCFContCascadeCuts -> SetBinLimits(0, lBinLim0);  
+   //delete [] lBinLim0;
+   fCFContCascadeCuts->SetBinLimits(0,0.0,2.5);
+     //1 - DcaToPrimVertexXi
+   Double_t *lBinLim1  = new Double_t[ lNbBinsPerVar[1] + 1 ];
+        for(Int_t i=0; i<lNbBinsPerVar[1]; i++) lBinLim1[i] = (Double_t)0.0 + (0.24  - 0.0)/(lNbBinsPerVar[1] - 1) * (Double_t)i;
+        lBinLim1[ lNbBinsPerVar[1] ] = 100.0;
+   fCFContCascadeCuts -> SetBinLimits(1, lBinLim1);  
+   delete [] lBinLim1;    
+     //2 - CascCosineOfPointingAngle 
+   fCFContCascadeCuts->SetBinLimits(2, 0.94, 1.001);
+     //3 - CascRadius
+   Double_t *lBinLim3  = new Double_t[ lNbBinsPerVar[3]+1 ];
+        for(Int_t i=0; i< lNbBinsPerVar[3]; i++)   lBinLim3[i]  = (Double_t)0.0   + (3.9  - 0.0 )/(lNbBinsPerVar[3] - 1)  * (Double_t)i ;
+        lBinLim3[ lNbBinsPerVar[3] ] = 1000.0;
+   fCFContCascadeCuts -> SetBinLimits(3,  lBinLim3 );        
+   delete [] lBinLim3;
+     //4 - InvMassLambdaAsCascDghter
+   fCFContCascadeCuts->SetBinLimits(4, 1.1, 1.13);
+     //5 - DcaV0Daughters
+   fCFContCascadeCuts -> SetBinLimits(5, 0., 2.1);
+     //6 - V0CosineOfPointingAngle
+   fCFContCascadeCuts -> SetBinLimits(6, 0.8, 1.001);
+     //7 - V0Radius
+   Double_t *lBinLim7 = new Double_t[ lNbBinsPerVar[7] + 1];
+        for(Int_t i=0; i< lNbBinsPerVar[7];i++) lBinLim7[i] = (Double_t)0.0 + (3.9 - 0.0)/(lNbBinsPerVar[7] - 1) * (Double_t)i;
+        lBinLim7[ lNbBinsPerVar[7] ] = 1000.0;
+   fCFContCascadeCuts -> SetBinLimits(7, lBinLim7); 
+   delete [] lBinLim7;
+     //8 - DcaV0ToPrimVertex
+   Double_t *lBinLim8  = new Double_t[ lNbBinsPerVar[8]+1 ];
+        for(Int_t i=0; i< lNbBinsPerVar[8];i++)   lBinLim8[i]  = (Double_t)0.0   + (0.39  - 0.0 )/(lNbBinsPerVar[8]-1)  * (Double_t)i ;
+        lBinLim8[ lNbBinsPerVar[8]  ] = 100.0;
+   fCFContCascadeCuts -> SetBinLimits(8,  lBinLim8 );    
+   delete [] lBinLim8;
+     //9 - DcaPosToPrimVertex
+   Double_t *lBinLim9  = new Double_t[ lNbBinsPerVar[9]+1 ];
+        for(Int_t i=0; i< lNbBinsPerVar[9];i++)   lBinLim9[i]  = (Double_t)0.0   + (0.24  - 0.0 )/(lNbBinsPerVar[9]-1)  * (Double_t)i ;
+        lBinLim9[ lNbBinsPerVar[9]  ] = 100.0;
+   fCFContCascadeCuts -> SetBinLimits(9,  lBinLim9 );        
+   delete [] lBinLim9;
+     //10 - DcaNegToPrimVertex
+   Double_t *lBinLim10  = new Double_t[ lNbBinsPerVar[10]+1 ];
+        for(Int_t i=0; i< lNbBinsPerVar[10];i++)   lBinLim10[i]  = (Double_t)0.0   + (0.24  - 0.0 )/(lNbBinsPerVar[10]-1)  * (Double_t)i ;
+        lBinLim10[ lNbBinsPerVar[10]  ] = 100.0;
+   fCFContCascadeCuts -> SetBinLimits(10,  lBinLim10 );            // DcaPosToPrimVertexXi : 0.0 to 0.25 
+   delete [] lBinLim10;
+     //11 - InvMassXi
+   fCFContCascadeCuts->SetBinLimits(11, 1.25, 1.40);
+     //12 - InvMassOmega
+   fCFContCascadeCuts->SetBinLimits(12, 1.62, 1.74);
+     //13 - XiTransvMom
+   fCFContCascadeCuts->SetBinLimits(13, 0.0, 10.0); 
+     //14 - Y(Xi)
+   fCFContCascadeCuts->SetBinLimits(14, -1.1, 1.1);
+     //15 - Y(Omega)
+   fCFContCascadeCuts->SetBinLimits(15, -1.1, 1.1);
+     //16 - Proper time of cascade
+   Double_t *lBinLim16  = new Double_t[ lNbBinsPerVar[16]+1 ];
+   for(Int_t i=0; i< lNbBinsPerVar[16];i++) lBinLim16[i] = (Double_t) -1. + (110. + 1.0 ) / (lNbBinsPerVar[16] - 1) * (Double_t) i;
+   lBinLim16[ lNbBinsPerVar[16] ] = 2000.0;
+   fCFContCascadeCuts->SetBinLimits(16, lBinLim16);
+     //17 - Proper time of V0
+   fCFContCascadeCuts->SetBinLimits(17, lBinLim16);
+     //18 - Distance V0-Xi in transverse plane
+   fCFContCascadeCuts->SetBinLimits(18, lBinLim16);
+     // Setting the number of steps : one for each cascade species (Xi-, Xi+ and Omega-, Omega+)
+   fCFContCascadeCuts->SetStepTitle(0, "#Xi^{-} candidates");
+   fCFContCascadeCuts->SetStepTitle(1, "#bar{#Xi}^{+} candidates");
+   fCFContCascadeCuts->SetStepTitle(2, "#Omega^{-} candidates");
+   fCFContCascadeCuts->SetStepTitle(3, "#bar{#Omega}^{+} candidates");
+     // Setting the variable title, per axis
+   fCFContCascadeCuts->SetVarTitle(0,  "Dca(cascade daughters) (cm)");
+   fCFContCascadeCuts->SetVarTitle(1,  "ImpactParamToPV(bachelor) (cm)");
+   fCFContCascadeCuts->SetVarTitle(2,  "cos(cascade PA)");
+   fCFContCascadeCuts->SetVarTitle(3,  "R_{2d}(cascade decay) (cm)");
+   fCFContCascadeCuts->SetVarTitle(4,  "M_{#Lambda}(as casc dghter) (GeV/c^{2})");
+   fCFContCascadeCuts->SetVarTitle(5,  "Dca(V0 daughters) in Xi (cm)");
+   if (fCollidingSystem == "pp")       fCFContCascadeCuts->SetVarTitle(6,  "cos(V0 PA) to cascade vtx");
+   else if (fCollidingSystem == "pPb") fCFContCascadeCuts->SetVarTitle(6,  "cos(V0 PA) to primary vtx");
+   fCFContCascadeCuts->SetVarTitle(7,  "R_{2d}(V0 decay) (cm)");
+   fCFContCascadeCuts->SetVarTitle(8,  "ImpactParamToPV(V0) (cm)");
+   fCFContCascadeCuts->SetVarTitle(9,  "ImpactParamToPV(Pos) (cm)");
+   fCFContCascadeCuts->SetVarTitle(10, "ImpactParamToPV(Neg) (cm)");
+   fCFContCascadeCuts->SetVarTitle(11, "Inv. Mass(Xi) (GeV/c^{2})");
+   fCFContCascadeCuts->SetVarTitle(12, "Inv. Mass(Omega) (GeV/c^{2})");
+   fCFContCascadeCuts->SetVarTitle(13, "pt(cascade) (GeV/c)");
+   fCFContCascadeCuts->SetVarTitle(14, "Y(Xi)");
+   fCFContCascadeCuts->SetVarTitle(15, "Y(Omega)");
+   fCFContCascadeCuts->SetVarTitle(16, "mL/p (cascade) (cm)");
+   fCFContCascadeCuts->SetVarTitle(17, "mL/p (V0) (cm)");
+   fCFContCascadeCuts->SetVarTitle(18, "Distance V0-Cascade in transverse plane (cm)");
+   fListHistCascade->Add(fCFContCascadeCuts);
+ }
+
+ PostData(1, fListHistCascade);
+ PostData(2, fCFContCascadePIDXiMinus);
+ PostData(3, fCFContCascadePIDXiPlus);
+ PostData(4, fCFContCascadePIDOmegaMinus);
+ PostData(5, fCFContCascadePIDOmegaPlus);
+ PostData(6, fCFContCascadeCuts);
+} // end UserCreateOutputObjects
+
+
+//________________________________________________________________________
+void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
+
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  // Main loop (called for each event)
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  
+  //----------------
+  //Define variables 
+  AliESDEvent *lESDevent = 0x0;
+  AliAODEvent *lAODevent = 0x0;
+
+  //----------------------
+  // Check the PIDresponse
+  //---------------------
+  if(!fPIDResponse) {
+       AliError("Cannot get pid response");
+       return;
+  }
+  if(! fESDtrackCuts ){
+       fESDtrackCuts = new AliESDtrackCuts();
+  }
+  if(! fUtils ){
+       fUtils = new AliAnalysisUtils();
+  }
+
+
+  ///////////////////
+  // EVENT SELECTIONS
+  ///////////////////
+  // In order:
+  // 1) SDD selection
+  // 2) Physics selection
+  // 3) Select only looking at events with well-established PV
+  // 4) Pileup selection
+  // 5) |Z| < 10 cm
+
+  //----------------------
+  // Before any selections
+  //----------------------
+  //- Define the variables
+  Int_t ncascadesBeforeAnySel = 0;
+  Int_t nTrackMultiplicityBeforeAnySel = 0;
+  if (fAnalysisType == "ESD") {
+      // - Load the InputEvent and check
+      lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
+      if (!lESDevent) {
+         AliWarning("ERROR: lESDevent not available \n");
+         return;
+      }
+      // - Take the number of cascades and tracks before any events selection
+      ncascadesBeforeAnySel = lESDevent->GetNumberOfCascades();
+      nTrackMultiplicityBeforeAnySel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+  } else if (fAnalysisType == "AOD") {
+      // - Load the InputEvent and check
+      lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );
+      if (!lAODevent) {
+          AliWarning("ERROR: lAODevent not available \n");
+          return;
+      }
+      // - Take the number of cascades and tracks before any events selection
+      ncascadesBeforeAnySel  = lAODevent->GetNumberOfCascades();
+      nTrackMultiplicityBeforeAnySel = -100;  //FIXME: I can't find the equivalent method for the AOD  
+  } else {
+      Printf("Analysis type (ESD or AOD) not specified \n");
+      return;
+  }
+  // - Fill the plots
+  fHistCascadeMultiplicityBeforeAnySel->Fill(ncascadesBeforeAnySel);
+  fHistTrackMultiplicityBeforeAnySel->Fill(nTrackMultiplicityBeforeAnySel);
+
+  //--------------
+  // SDD selection
+  //--------------
+  // - Define the variables
+  Int_t ncascadesAfterSDDSel = 0;
+  Int_t nTrackMultiplicityAfterSDDSel = 0;
+  // - Selection for ESD and AOD
+  if (fAnalysisType == "ESD") {
+     if (fkSDDSelectionOn && fCollidingSystem == "pp") {
+        TString trcl = lESDevent->GetFiredTriggerClasses();
+        //cout<<"Fired Trigger Classes: "<<trcl<<endl;
+        if (fwithSDD){
+          if(!(trcl.Contains("ALLNOTRD"))) {
+               cout<<"We are selecting events with SDD turn ON. This event has the SDD turn OFF. =>  RETURN!! (Exclude it)..."<<endl;
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDXiMinus);
+               PostData(3, fCFContCascadePIDXiPlus);
+               PostData(4, fCFContCascadePIDOmegaMinus);
+               PostData(5, fCFContCascadePIDOmegaPlus);
+               PostData(6, fCFContCascadeCuts);
+               return;
+          }
+        } else if (!fwithSDD){
+          if((trcl.Contains("ALLNOTRD"))) {
+               cout<<"We are selecting events with SDD turn OFF. This event has the SDD turn ON. =>  RETURN!! (Exclude it)..."<<endl;
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDXiMinus);
+               PostData(3, fCFContCascadePIDXiPlus);
+               PostData(4, fCFContCascadePIDOmegaMinus);
+               PostData(5, fCFContCascadePIDOmegaPlus);
+               PostData(6, fCFContCascadeCuts);
+               return;
+          }
+        }
+     }
+     // - Take the number of cascades and tracks after the SDD selection
+     ncascadesAfterSDDSel = lESDevent->GetNumberOfCascades();
+     nTrackMultiplicityAfterSDDSel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+  } else if (fAnalysisType == "AOD") {
+     if (fkSDDSelectionOn && fCollidingSystem == "pp") {
+        TString trcl = lAODevent->GetFiredTriggerClasses();
+        if (fwithSDD){
+           if(!(trcl.Contains("ALLNOTRD"))) {
+                PostData(1, fListHistCascade);
+                PostData(2, fCFContCascadePIDXiMinus);
+                PostData(3, fCFContCascadePIDXiPlus);
+                PostData(4, fCFContCascadePIDOmegaMinus);
+                PostData(5, fCFContCascadePIDOmegaPlus);
+                PostData(6, fCFContCascadeCuts);
+                cout<<"We are selecting events with SDD turn ON. This event has the SDD turn OFF. =>  RETURN!! (Exclude it)..."<<endl;
+                return;
+           }
+        } else if (!fwithSDD) {
+           if((trcl.Contains("ALLNOTRD"))) {
+                PostData(1, fListHistCascade);
+                PostData(2, fCFContCascadePIDXiMinus);
+                PostData(3, fCFContCascadePIDXiPlus);
+                PostData(4, fCFContCascadePIDOmegaMinus);
+                PostData(5, fCFContCascadePIDOmegaPlus);
+                PostData(6, fCFContCascadeCuts);
+                cout<<"We are selecting events with SDD turn OFF. This event has the SDD turn ON. =>  RETURN!! (Exclude it)..."<<endl;
+                return;
+           }
+        }
+     }
+     // - Take the number of cascades and tracks after the SDD selection
+     ncascadesAfterSDDSel = lAODevent->GetNumberOfCascades();
+     nTrackMultiplicityAfterSDDSel = -100; //FIXME: I can't find the equivalent method for the AOD
+  }
+  // - Fill the plots
+  fHistCascadeMultiplicityAfterSDDSel->Fill(ncascadesAfterSDDSel);
+  fHistTrackMultiplicityAfterSDDSel->Fill(nTrackMultiplicityAfterSDDSel);
+
+  //-------------------------------------------
+  // Multiplicity estimators for pPb collisions  //FIXME
+  //-------------------------------------------
+  //AliCentrality* centrality = 0;
+  //if      (fAnalysisType == "ESD" && (fCollidingSystem == "pPb")) centrality = lESDevent->GetCentrality();
+  //else if (fAnalysisType == "AOD" && (fCollidingSystem == "pPb")) centrality = lAODevent->GetCentrality();
+  //Float_t lcentrality = 0.;
+  //if (fCollidingSystem == "pPb") {
+  //     if (fkUseCleaning) lcentrality = centrality->GetCentralityPercentile(fCentrEstimator.Data());
+  //     else {
+  //         lcentrality = centrality->GetCentralityPercentileUnchecked(fCentrEstimator.Data());
+  //         if (centrality->GetQuality()>1) {
+  //             PostData(1, fCFContCascadeCuts);
+  //            return;
+  //         }
+  //     }
+  //     //if (lcentrality<fCentrLowLim||lcentrality>=fCentrUpLim) { 
+  //     //    PostData(1, fCFContCascadeCuts);
+  //     //    return;
+  //     //}
+  //} else if (fCollidingSystem == "pp") lcentrality = 0.;  
+
+  //------------------
+  // Physics selection 
+  //-----------------
+  // - Define the variables
+  Int_t ncascadesAfterPhysicsSel = 0;
+  Int_t nTrackMultiplicityAfterPhysicsSel = 0;
+  // - Selection for ESD and AOD
+  UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+  Bool_t isSelected = 0;
+  if      (fCollidingSystem == "pp" ) isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+  else if (fCollidingSystem == "pPb") isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+  if(! isSelected){
+      PostData(1, fListHistCascade);
+      PostData(2, fCFContCascadePIDXiMinus);
+      PostData(3, fCFContCascadePIDXiPlus);
+      PostData(4, fCFContCascadePIDOmegaMinus);
+      PostData(5, fCFContCascadePIDOmegaPlus);
+      PostData(6, fCFContCascadeCuts);
+      cout<<"We are selecting the events that past tha Physics Selection. This event does not pass the Physics Selection. =>  RETURN!! (Exclude it)..."<<endl;
+      return;
+  }
+  if (fAnalysisType == "ESD") {
+      // - Take the number of cascades and tracks after physics selection
+      ncascadesAfterPhysicsSel = lESDevent->GetNumberOfCascades();    
+      nTrackMultiplicityAfterPhysicsSel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);  
+  } else if (fAnalysisType == "AOD") {
+      // - Take the number of cascades and tracks after the physics selection
+      ncascadesAfterPhysicsSel = lAODevent->GetNumberOfCascades();
+      nTrackMultiplicityAfterPhysicsSel = -100;  //FIXME: I can't find the equivalent method for the AOD    
+  } 
+  // - Fill the plots
+  fHistCascadeMultiplicityAfterPhysicsSel->Fill(ncascadesAfterPhysicsSel);
+  fHistTrackMultiplicityAfterPhysicsSel->Fill(nTrackMultiplicityAfterPhysicsSel);
+
+  //---------------------------------------
+  // Re-run cascade vertexer (only for ESD)
+  //---------------------------------------
+  if (fAnalysisType == "ESD" && fkRerunV0CascVertexers) {
+       lESDevent->ResetCascades();
+       lESDevent->ResetV0s();
+       AliV0vertexer *lV0vtxer = new AliV0vertexer();
+       AliCascadeVertexer *lCascVtxer = new AliCascadeVertexer();
+       //lV0vtxer->GetCuts(fV0Sels);
+       //lCascVtxer->GetCuts(fCascSels);
+       lV0vtxer->SetCuts(fV0Sels);      // NB don't use SetDefaultCuts!! because it acts on static variables 
+       lCascVtxer->SetCuts(fCascSels);
+       lV0vtxer->Tracks2V0vertices(lESDevent);
+       lCascVtxer->V0sTracks2CascadeVertices(lESDevent);
+       //delete lV0vtxer;
+       //delete lCascVtxer;
+  }
+
+  //------------------------------
+  // Well-established PV selection
+  //------------------------------
+  // - Define variables
+  Int_t ncascadesForSelEvtNoTPCOnly = 0;
+  Int_t nTrackMultiplicityForSelEvtNoTPCOnly = 0;
+  // - Selection for the two colliding systems
+  if (fCollidingSystem == "pp") {
+      // - Selection for ESD and AOD
+      if (fAnalysisType == "ESD") {
+          // - Vertex coordinates: get the PVs stored in the ESD found with tracks and SPD
+          const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
+          const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
+          // - Select only looking at events with well-established PV
+          if (fkQualityCutNoTPConlyPrimVtx) {
+              if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
+                  AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+                  PostData(1, fListHistCascade);
+                  PostData(2, fCFContCascadePIDXiMinus);
+                  PostData(3, fCFContCascadePIDXiPlus);
+                  PostData(4, fCFContCascadePIDOmegaMinus);
+                  PostData(5, fCFContCascadePIDOmegaPlus);
+                  PostData(6, fCFContCascadeCuts);
+                  return;
+              }
+          }
+          // - Take the number of cascades and tracks after TPConly selection
+          ncascadesForSelEvtNoTPCOnly = lESDevent->GetNumberOfCascades();
+          nTrackMultiplicityForSelEvtNoTPCOnly = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+      } else if (fAnalysisType == "AOD") {
+          // - Vertex coordinates: get the PVs stored in the AOD found with tracks and SPD
+          const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();
+          const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();
+          // - Select only looking at events with well-established PV
+          if (fkQualityCutNoTPConlyPrimVtx) {
+              if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {
+                  AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+                  PostData(1, fListHistCascade);
+                  PostData(2, fCFContCascadePIDXiMinus);
+                  PostData(3, fCFContCascadePIDXiPlus);
+                  PostData(4, fCFContCascadePIDOmegaMinus);
+                  PostData(5, fCFContCascadePIDOmegaPlus);
+                  PostData(6, fCFContCascadeCuts);
+                  return;
+              }
+          }
+          // - Take the number of cascades and tracks after TPConly selection
+          ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();
+          nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME: I can't find the equivalent method for the AOD
+      }
+  } else if (fCollidingSystem == "pPb") {
+      if (fAnalysisType == "ESD") {
+          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;
+          if (fHasVertex == kFALSE) {
+              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+          if (fUtils->IsFirstEventInChunk(lESDevent)) { //Is First event in chunk rejection: Still present!
+              AliWarning("Pb / This is the first event in the chunk! ... return !");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+          // - Take the number of cascades and tracks after TPConly selection
+          ncascadesForSelEvtNoTPCOnly = lESDevent->GetNumberOfCascades();
+          nTrackMultiplicityForSelEvtNoTPCOnly = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+      } else if (fAnalysisType == "AOD") {
+          Bool_t fHasVertex = kFALSE;
+          const AliAODVertex *vertex = lAODevent->GetPrimaryVertex();
+          if (vertex->GetNContributors() < 1) {
+              vertex = lAODevent->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;
+          if (fHasVertex == kFALSE) {
+              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+          if (fHasVertex == kFALSE) { //Is First event in chunk rejection: Still present!  //FIXME
+              AliWarning("Pb / This is the first event in the chunk! ... return !");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }  
+          // - Take the number of cascades and tracks after TPConly selection
+          ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();
+          nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME: I can't find the equivalent method for the AOD
+      }
+  }
+  // - Fill the plots
+  fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);
+  fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);
+   
+  //----------------
+  // Pilup selection
+  //----------------
+  // - Define variables
+  Int_t ncascadesForSelEvtNoTPCOnlyNoPileup = 0;
+  Int_t nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = 0;
+  // - Selection for ESD and AOD
+  if (fAnalysisType == "ESD" && fCollidingSystem == "pp") {
+      if (fkQualityCutPileup) {
+          if(lESDevent->IsPileupFromSPD()){
+              AliWarning("Pb / Pile-up event ... return!");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+      }
+      // - Take the number of cascades and tracks after Pileup selection
+      ncascadesForSelEvtNoTPCOnlyNoPileup = lESDevent->GetNumberOfCascades();
+      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+  } else if (fAnalysisType == "AOD" && fCollidingSystem == "pp") {
+      if (fkQualityCutPileup) {
+          if(lAODevent->IsPileupFromSPD()){
+              AliWarning("Pb / Pile-up event ... return!");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+      }
+      // - Take the number of cascades and tracks after Pileup selection
+      ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();
+      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;   //FIXME: I can't find the equivalent method for the AOD
+  }
+  fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);
+  fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
+    
+  //----------------------------------------------------
+  // Vertex Z position selection (+ magnetic field info)
+  //----------------------------------------------------
+  // - Define variables
+  Double_t lBestPrimaryVtxPos[3]  = {-100.0, -100.0, -100.0};
+  Double_t lMagneticField         = -10.;
+  Double_t tPrimaryVtxPosition[3] = {-100.0, -100.0, -100.0};
+  Int_t ncascadesAfterVertexSel          = 0;
+  Int_t nTrackMultiplicityAfterVertexSel = 0; 
+  // - Selection for ESD and AOD
+  if (fAnalysisType == "ESD") {
+      // - Vertex coordinates: get the best primary vertex available for the event 
+      const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex(); 
+      if (!lPrimaryBestESDVtx){
+          AliWarning("No prim. vertex in ESD... return!");
+          PostData(1, fListHistCascade);
+          PostData(2, fCFContCascadePIDXiMinus);
+          PostData(3, fCFContCascadePIDXiPlus);
+          PostData(4, fCFContCascadePIDOmegaMinus);
+          PostData(5, fCFContCascadePIDOmegaPlus);
+          PostData(6, fCFContCascadeCuts);
+          return;
+      }
+      lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
+      // - Fill the vertex plots before any event selection on vertex position
+      const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
+      tPrimaryVtxPosition[0] = primaryVtx->GetX();
+      tPrimaryVtxPosition[1] = primaryVtx->GetY();
+      tPrimaryVtxPosition[2] = primaryVtx->GetZ();
+         fHistPVx->Fill( tPrimaryVtxPosition[0] );
+         fHistPVy->Fill( tPrimaryVtxPosition[1] );
+         fHistPVz->Fill( tPrimaryVtxPosition[2] );       
+      // - Get magnetic filed info
+      lMagneticField = lESDevent->GetMagneticField();
+      //if(TMath::Abs(lMagneticField ) < 10e-6) continue;
+      // - Selection on the primary vertex Z position 
+      if (fkQualityCutZprimVtxPos) {
+          if (TMath::Abs(lBestPrimaryVtxPos[2]) > fVtxRange || TMath::Abs(lBestPrimaryVtxPos[2]) < fVtxRangeMin) {
+               AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDXiMinus);
+               PostData(3, fCFContCascadePIDXiPlus);
+               PostData(4, fCFContCascadePIDOmegaMinus);
+               PostData(5, fCFContCascadePIDOmegaPlus);
+               PostData(6, fCFContCascadeCuts);
+               return;
+          }
+      }
+      // - Take the number of cascades and tracks after vertex Z position selection
+      ncascadesAfterVertexSel = lESDevent->GetNumberOfCascades();
+      nTrackMultiplicityAfterVertexSel = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5); 
+  } else if (fAnalysisType == "AOD") {
+      // - Vertex coordinates: get the best primary vertex available for the event
+      const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex();
+      if (!lPrimaryBestAODVtx){
+          AliWarning("No prim. vertex in AOD... return!");
+          PostData(1, fListHistCascade);
+          PostData(2, fCFContCascadePIDXiMinus);
+          PostData(3, fCFContCascadePIDXiPlus);
+          PostData(4, fCFContCascadePIDOmegaMinus);
+          PostData(5, fCFContCascadePIDOmegaPlus);
+          PostData(6, fCFContCascadeCuts);
+          return;
+      }
+      lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );
+      // - Fill the vertex plots before any event selection on vertex position
+      const AliVVertex *primaryVtx = lAODevent->GetPrimaryVertex();
+      tPrimaryVtxPosition[0] = primaryVtx->GetX();
+      tPrimaryVtxPosition[1] = primaryVtx->GetY();
+      tPrimaryVtxPosition[2] = primaryVtx->GetZ();
+         fHistPVx->Fill( tPrimaryVtxPosition[0] );
+         fHistPVy->Fill( tPrimaryVtxPosition[1] );
+         fHistPVz->Fill( tPrimaryVtxPosition[2] );
+      // - Get magnetic filed info
+      lMagneticField = lAODevent->GetMagneticField();
+      //if(TMath::Abs(lMagneticField ) < 10e-6) continue;
+      // - Selection on the primary vertex Z position 
+      if (fkQualityCutZprimVtxPos) {
+          if (TMath::Abs(lBestPrimaryVtxPos[2]) > fVtxRange || TMath::Abs(lBestPrimaryVtxPos[2]) < fVtxRangeMin) {
+              AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+      }
+      // - Take the number of cascades and tracks after vertex Z position selection
+      ncascadesAfterVertexSel = lAODevent->GetNumberOfCascades();
+      nTrackMultiplicityAfterVertexSel = -100; //FIXME: I can't find the equivalent method for the AOD
+  } 
+  // - Fill the plots
+  fHistCascadeMultiplicityAfterVertexCutSel->Fill(ncascadesAfterVertexSel);
+  fHistTrackMultiplicityAfterVertexCutSel->Fill(nTrackMultiplicityAfterVertexSel);
+
+  // - Vertex position plots: after any event selections
+  tPrimaryVtxPosition[0] = -100.0;
+  tPrimaryVtxPosition[1] = -100.0;
+  tPrimaryVtxPosition[2] = -100.0;
+  if (fAnalysisType == "ESD") {
+       const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
+       tPrimaryVtxPosition[0] = primaryVtx->GetX();
+       tPrimaryVtxPosition[1] = primaryVtx->GetY();
+       tPrimaryVtxPosition[2] = primaryVtx->GetZ();
+  } else if (fAnalysisType == "AOD") {
+       const AliVVertex *primaryVtx = lAODevent->GetPrimaryVertex();
+       tPrimaryVtxPosition[0] = primaryVtx->GetX();
+       tPrimaryVtxPosition[1] = primaryVtx->GetY();
+       tPrimaryVtxPosition[2] = primaryVtx->GetZ();
+  }
+  fHistPVxAnalysis->Fill( tPrimaryVtxPosition[0] );
+  fHistPVyAnalysis->Fill( tPrimaryVtxPosition[1] );
+  fHistPVzAnalysis->Fill( tPrimaryVtxPosition[2] );
+  
+
+
+  //////////////////////////////
+  // CASCADE RECONSTRUCTION PART
+  //////////////////////////////
+  
+  //%%%%%%%%%%%%%
+  // Cascade loop
+  Int_t ncascades = 0;
+  if      (fAnalysisType == "ESD") ncascades = lESDevent->GetNumberOfCascades();
+  else if (fAnalysisType == "AOD") ncascades = lAODevent->GetNumberOfCascades();
+
+  for (Int_t iXi = 0; iXi < ncascades; iXi++) {// This is the begining of the Cascade loop (ESD or AOD)
+          
+      // -----------------------------------------------------------------------
+      // - Initialisation of the local variables that will be needed for ESD/AOD
+
+      // - 0th part of initialisation : around primary vertex ...
+      //Double_t lBestPrimaryVtxRadius3D     = -500.0;
+      // - 1st part of initialisation : variables needed to store AliESDCascade data members
+      Double_t lEffMassXi                  = 0.;
+      Double_t lDcaXiDaughters             = -1.;
+      Double_t lXiCosineOfPointingAngle    = -1.;
+      Double_t lPosXi[3]                   = { -1000.0, -1000.0, -1000.0 };
+      Double_t lXiRadius                   = -1000. ;
+      // - 2nd part of initialisation : Nbr of clusters within TPC for the 3 daughter cascade tracks
+      UShort_t lPosTPCClusters             = -1; // For ESD only ...
+      UShort_t lNegTPCClusters             = -1; // For ESD only ...
+      UShort_t lBachTPCClusters            = -1; // For ESD only ...
+      Double_t lInnerWallMomCascDghters[3] = {-100., -100., -100.};
+      Double_t lTPCSignalCascDghters   [3] = {-100., -100., -100.};
+      // - 3rd part of initialisation : about V0 part in cascades
+      Double_t lInvMassLambdaAsCascDghter  = 0.;
+      Double_t lDcaV0DaughtersXi           = -1.;
+      Double_t lDcaBachToPrimVertexXi      = -1.;
+      Double_t lDcaV0ToPrimVertexXi        = -1.;
+      Double_t lDcaPosToPrimVertexXi       = -1.;
+      Double_t lDcaNegToPrimVertexXi       = -1.;
+      Double_t lV0CosineOfPointingAngleXi  = -1. ;
+      Double_t lPosV0Xi[3]                 = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
+      Double_t lV0RadiusXi                 = -1000.0;
+      Double_t lV0quality                  = 0.;
+      // - 4th part of initialisation : Effective masses
+      Double_t lInvMassXiMinus             = 0.;
+      Double_t lInvMassXiPlus              = 0.;
+      Double_t lInvMassOmegaMinus          = 0.;
+      Double_t lInvMassOmegaPlus           = 0.;
+      // - 5th part of initialisation : PID treatment
+      Bool_t   lIsPosInXiProton            = kFALSE;
+      Bool_t   lIsPosInXiPion              = kFALSE;
+      Bool_t   lIsPosInOmegaProton         = kFALSE;
+      Bool_t   lIsPosInOmegaPion           = kFALSE;
+      Bool_t   lIsNegInXiProton            = kFALSE;
+      Bool_t   lIsNegInXiPion              = kFALSE;
+      Bool_t   lIsNegInOmegaProton         = kFALSE;
+      Bool_t   lIsNegInOmegaPion           = kFALSE;
+      Bool_t   lIsBachelorKaon             = kFALSE;
+      Bool_t   lIsBachelorPion             = kFALSE; 
+      Bool_t   lIsBachelorKaonForTPC       = kFALSE; 
+      Bool_t   lIsBachelorPionForTPC       = kFALSE; 
+      Bool_t   lIsNegPionForTPC            = kFALSE; 
+      Bool_t   lIsPosPionForTPC            = kFALSE; 
+      Bool_t   lIsNegProtonForTPC          = kFALSE; 
+      Bool_t   lIsPosProtonForTPC          = kFALSE; 
+      // - 6th part of initialisation : extra info for QA
+      Double_t lXiMomX         = 0.;
+      Double_t lXiMomY         = 0.;
+      Double_t lXiMomZ         = 0.;
+      Double_t lXiTransvMom    = 0.;
+      Double_t lXiTotMom       = 0.;
+      Double_t lV0PMomX        = 0.;
+      Double_t lV0PMomY        = 0.;
+      Double_t lV0PMomZ        = 0.;
+      Double_t lV0NMomX        = 0.;
+      Double_t lV0NMomY        = 0.;
+      Double_t lV0NMomZ        = 0.;
+      Double_t lV0TotMom       = 0.;
+      Double_t lBachMomX       = 0.;
+      Double_t lBachMomY       = 0.;
+      Double_t lBachMomZ       = 0.;
+      Double_t lBachTransvMom  = 0.;
+      Double_t lBachTotMom     = 0.;
+      Double_t lpTrackTransvMom  = 0.;
+      Double_t lnTrackTransvMom  = 0.;
+      Short_t  lChargeXi       = -2;
+      Double_t lV0toXiCosineOfPointingAngle = 0.;
+      Double_t lRapXi   = -20.0, lRapOmega = -20.0, lEta = -20.0, lTheta = 360., lPhi = 720.;
+      Double_t lAlphaXi = -200., lPtArmXi  = -200.0;
+      Double_t etaPos = 0., etaNeg = 0., etaBach = 0.;
+  
+      if (fAnalysisType == "ESD") { 
+  
+          // -------------------------------------
+          // - Load the cascades from the handler
+          AliESDcascade *xi = lESDevent->GetCascade(iXi);
+          if (!xi) continue;
+
+          //----------------------------------------------------------------------------        
+          // - Assigning the necessary variables for specific AliESDcascade data members       
+          lV0quality = 0.;
+          xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis: cascade = Xi-decay
+          lEffMassXi              = xi->GetEffMassXi();
+          lDcaXiDaughters         = xi->GetDcaXiDaughters();
+          lXiCosineOfPointingAngle = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );
+                                                                      //Take care : the best available vertex should be used (like in AliCascadeVertexer)
+          xi->GetXYZcascade( lPosXi[0],  lPosXi[1], lPosXi[2] ); 
+          lXiRadius               = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
+               
+          //-------------------------------------------------------------------------------------------------------------------------------
+         // - Around the tracks: Bach + V0 (ESD). Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)
+          UInt_t lIdxPosXi     = (UInt_t) TMath::Abs( xi->GetPindex() );
+          UInt_t lIdxNegXi     = (UInt_t) TMath::Abs( xi->GetNindex() );
+          UInt_t lBachIdx      = (UInt_t) TMath::Abs( xi->GetBindex() );
+                                      //Care track label can be negative in MC production (linked with the track quality)
+                                      //However = normally, not the case for track index ...
+          // - Rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
+          if (lBachIdx == lIdxNegXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue; }
+          if (lBachIdx == lIdxPosXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue; }
+          // - Get the track for the daughters
+          AliESDtrack *pTrackXi           = lESDevent->GetTrack( lIdxPosXi );
+          AliESDtrack *nTrackXi           = lESDevent->GetTrack( lIdxNegXi );
+          AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );
+          if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
+               AliWarning("ERROR: Could not retrieve one of the 3 ESD daughter tracks of the cascade ...");
+               continue;
+          }
+          // - Get the TPCnumber of cluster for the daughters
+          lPosTPCClusters   = pTrackXi->GetTPCNcls();
+          lNegTPCClusters   = nTrackXi->GetTPCNcls();
+          lBachTPCClusters  = bachTrackXi->GetTPCNcls();
+
+          //-------------------------------------
+          // - Rejection of a poor quality tracks
+          if (fkQualityCutTPCrefit) {
+                // - Poor quality related to TPCrefit
+                ULong_t pStatus    = pTrackXi->GetStatus();
+                ULong_t nStatus    = nTrackXi->GetStatus();
+                ULong_t bachStatus = bachTrackXi->GetStatus();
+                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; }
+          }
+          if (fkQualityCutnTPCcls) {
+                // - Poor quality related to TPC clusters
+                if (lPosTPCClusters  < fMinnTPCcls) { AliWarning("Pb / V0 Pos. track has less than 80 TPC clusters ... continue!"); continue; }
+                if (lNegTPCClusters  < fMinnTPCcls) { AliWarning("Pb / V0 Neg. track has less than 80 TPC clusters ... continue!"); continue; }
+                if (lBachTPCClusters < fMinnTPCcls) { AliWarning("Pb / Bach.   track has less than 80 TPC clusters ... continue!"); continue; }
+          }
+
+          //-----------------------------------
+          const AliExternalTrackParam *pExtTrack    = pTrackXi->GetInnerParam();
+          const AliExternalTrackParam *nExtTrack    = nTrackXi->GetInnerParam();
+          const AliExternalTrackParam *bachExtTrack = bachTrackXi->GetInnerParam();
+          if (pExtTrack) {
+                lInnerWallMomCascDghters[0] = pExtTrack->GetP() * pExtTrack->Charge();
+                lTPCSignalCascDghters   [0] = pTrackXi->GetTPCsignal();
+          }
+          if (nExtTrack) {
+                lInnerWallMomCascDghters[1] = nExtTrack->GetP() * nExtTrack->Charge();
+                lTPCSignalCascDghters   [1] = nTrackXi->GetTPCsignal();
+           }
+           if (bachExtTrack) {
+                lInnerWallMomCascDghters[2] = bachExtTrack->GetP() * bachExtTrack->Charge();
+                lTPCSignalCascDghters   [2] = bachTrackXi->GetTPCsignal();
+           }
+           etaPos  = pTrackXi->Eta();
+           etaNeg  = nTrackXi->Eta();
+           etaBach = bachTrackXi->Eta();
+           lInvMassLambdaAsCascDghter = xi->GetEffMass(); //This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+
+           lDcaV0DaughtersXi         = xi->GetDcaV0Daughters(); 
+           lV0CosineOfPointingAngleXi = xi->GetV0CosineOfPointingAngle(lBestPrimaryVtxPos[0],
+                                                                       lBestPrimaryVtxPos[1],
+                                                                       lBestPrimaryVtxPos[2] );
+           lDcaV0ToPrimVertexXi = xi->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );
+           lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lMagneticField ) ); //Note: AliExternalTrackParam::GetD returns an algebraic value ...
+           xi->GetXYZ( lPosV0Xi[0],  lPosV0Xi[1], lPosV0Xi[2] ); 
+           lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );     
+           lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi        ->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lMagneticField ) ); 
+           lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi        ->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lMagneticField ) ); 
+
+           //-----------------------------------------
+          // - Extra-selection for cascade candidates
+           if (fkExtraSelections) { //in AliCascadeVertexer
+                if (lDcaXiDaughters > 0.3) continue;                                              // in AliCascadeVertexer
+                if (lXiCosineOfPointingAngle < 0.999 ) continue;                                  // in AliCascadeVertexer
+                if (lDcaV0ToPrimVertexXi < 0.05) continue;                                        // in AliCascadeVertexer
+                if (lDcaBachToPrimVertexXi < 0.03) continue;                                      // in AliCascadeVertexer
+                if (lDcaV0DaughtersXi > 1.) continue;                                             // in AliV0vertexer
+                if ((fCollidingSystem == "pp") && (lV0toXiCosineOfPointingAngle < 0.998)) continue; // in AliV0vertexer
+                if ((fCollidingSystem == "pPb") && (lV0CosineOfPointingAngleXi < 0.998)) continue;  // in AliV0vertexer
+                if (lDcaPosToPrimVertexXi < 0.1) continue;                                        // in AliV0vertexer
+                if (lDcaNegToPrimVertexXi < 0.1) continue;                                        // in AliV0vertexer
+                if (lXiRadius < .9) continue;                                                     // in AliCascadeVertexer
+                if (lV0RadiusXi < 0.9) continue;                                                  // in AliV0vertexer
+           }
+
+           //---------------------------------------------------------------------------------------------------       
+           // - Around effective masses. Change mass hypotheses to cover all the possibilities:  Xi-/+, Omega-/+
+           if ( bachTrackXi->Charge() < 0 )    {
+                //Calculate the effective mass of the Xi- candidate: Xi- hyp. (pdg code 3312)
+                lV0quality = 0.;
+                xi->ChangeMassHypothesis(lV0quality , 3312);   
+                lInvMassXiMinus = xi->GetEffMassXi();
+                //Calculate the effective mass of the Xi- candidate: Omega- hyp. (pdg code 3334)
+                lV0quality = 0.;
+                xi->ChangeMassHypothesis(lV0quality , 3334);   
+                lInvMassOmegaMinus = xi->GetEffMassXi();
+                //Back to "default" hyp. (Xi-)
+                lV0quality = 0.;
+                xi->ChangeMassHypothesis(lV0quality , 3312); 
+           } // end if negative bachelor
+           if ( bachTrackXi->Charge() >  0 ) {
+                //Calculate the effective mass of the Xi- candidate: Xi+ hyp. (pdg code -3312)
+                lV0quality = 0.;
+                xi->ChangeMassHypothesis(lV0quality , -3312);  
+                lInvMassXiPlus = xi->GetEffMassXi();
+                //Calculate the effective mass of the Xi- candidate: Omega+ hyp. (pdg code -3334)
+                lV0quality = 0.;
+                xi->ChangeMassHypothesis(lV0quality , -3334);  
+                lInvMassOmegaPlus = xi->GetEffMassXi();
+                //Back to "default" hyp. (Xi-)
+                lV0quality = 0.;
+                xi->ChangeMassHypothesis(lV0quality , -3312);  
+           } // end if positive bachelor
+
+           //--------------------------------
+           // - PID on the daughter tracks
+          // - Combined PID ->  removed, add when will be used
+
+          // - TPC PID : 3-sigma bands on Bethe-Bloch curve
+           //Bachelor
+           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;
+           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;
+           //Negative V0 daughter
+           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kPion   )) < 4) lIsNegPionForTPC   = kTRUE;
+           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;
+           //Positive V0 daughter
+           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kPion   )) < 4) lIsPosPionForTPC   = kTRUE;
+           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;
+           /*
+           const AliExternalTrackParam *pInnerWallTrackXi    = pTrackXi    ->GetInnerParam();
+           const AliExternalTrackParam *nInnerWallTrackXi    = nTrackXi    ->GetInnerParam();
+           const AliExternalTrackParam *bachInnerWallTrackXi = bachTrackXi ->GetInnerParam();
+           if (pInnerWallTrackXi && nInnerWallTrackXi && bachInnerWallTrackXi ) { 
+                Double_t pMomInnerWall    = pInnerWallTrackXi   ->GetP();
+                Double_t nMomInnerWall    = nInnerWallTrackXi   ->GetP();
+                Double_t bachMomInnerWall = bachInnerWallTrackXi->GetP();
+                //Bachelor
+                if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 3)                              lIsBachelorPionForTPC = kTRUE;
+                if (bachMomInnerWall < 0.350  && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 5) lIsBachelorKaonForTPC = kTRUE;
+                if (bachMomInnerWall > 0.350  && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 3) lIsBachelorKaonForTPC = kTRUE;                
+                //Negative V0 daughter
+                if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion   )) < 3  )                           lIsNegPionForTPC   = kTRUE;
+                if (nMomInnerWall < 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 5 )   lIsNegProtonForTPC = kTRUE;
+                if (nMomInnerWall > 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 3 )   lIsNegProtonForTPC = kTRUE;       
+                //Positive V0 daughter
+                if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion   )) < 3 )                            lIsPosPionForTPC   = kTRUE;
+                if (pMomInnerWall < 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 5)     lIsPosProtonForTPC = kTRUE;
+                if (pMomInnerWall > 0.6  && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 3)     lIsPosProtonForTPC = kTRUE;
+           }*/
+               
+           //---------------------------------
+           // - Extra info for QA (ESD)
+           // Miscellaneous pieces of info that may help regarding data quality assessment.
+           // Cascade transverse and total momentum
+           xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );
+           lXiTransvMom        = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
+           lXiTotMom   = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
+           // V0 total momentum
+           xi->GetNPxPyPz(lV0NMomX,lV0NMomY,lV0NMomZ);
+           xi->GetPPxPyPz(lV0PMomX,lV0PMomY,lV0PMomZ);
+           lV0TotMom = TMath::Sqrt(TMath::Power(lV0NMomX+lV0PMomX,2) + TMath::Power(lV0NMomY+lV0PMomY,2) + TMath::Power(lV0NMomZ+lV0PMomZ,2));
+           // Bachelor total momentum
+           xi->GetBPxPyPz(  lBachMomX,  lBachMomY,  lBachMomZ );
+           lBachTransvMom  = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
+           lBachTotMom     = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
+           lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );
+           lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );
+           lChargeXi       = xi->Charge();
+           lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
+           lRapXi    = xi->RapXi();
+           lRapOmega = xi->RapOmega();
+           lEta      = xi->Eta();
+           lTheta    = xi->Theta()*180.0/TMath::Pi();
+           lPhi      = xi->Phi()*180.0/TMath::Pi();
+           lAlphaXi  = xi->AlphaXi();
+           lPtArmXi  = xi->PtArmXi();
+          // Extra-cut = Anti-splitting cut for lambda daughters
+           Bool_t kAntiSplittingLambda = kFALSE;       
+           if (kAntiSplittingLambda) { // not used
+               Double_t lNMomX = 0., lNMomY = 0., lNMomZ = 0.;
+               Double_t lPMomX = 0., lPMomY = 0., lPMomZ = 0.;
+               xi->GetPPxPyPz(lPMomX, lPMomY, lPMomZ); 
+               xi->GetNPxPyPz(lNMomX, lNMomY, lNMomZ); 
+               if ( xi->Charge() < 0) {// Xi- or Omega-
+                   if (TMath::Abs(lBachTransvMom - TMath::Sqrt( lNMomX*lNMomX + lNMomY*lNMomY )  ) < 0.075) continue;
+              } else {                //Xi+ or Omega+
+                  if(TMath::Abs(lBachTransvMom - TMath::Sqrt( lPMomX*lPMomX + lPMomY*lPMomY ) ) < 0.075) continue;
+              }
+           }
+
+    } // end of ESD treatment
+    else if (fAnalysisType == "AOD") {
+
+           // -------------------------------------
+           // - Load the cascades from the handler
+           const AliAODcascade *xi = lAODevent->GetCascade(iXi);
+           if (!xi) continue;
+               
+           //----------------------------------------------------------------------------        
+           // - Assigning the necessary variables for specific AliESDcascade data members              
+           lEffMassXi             = xi->MassXi(); // default working hypothesis : cascade = Xi- decay
+           lDcaXiDaughters        = xi->DcaXiDaughters();
+           lXiCosineOfPointingAngle = xi->CosPointingAngleXi( lBestPrimaryVtxPos[0], 
+                                                             lBestPrimaryVtxPos[1], 
+                                                             lBestPrimaryVtxPos[2] );
+           lPosXi[0] = xi->DecayVertexXiX();
+           lPosXi[1] = xi->DecayVertexXiY();
+           lPosXi[2] = xi->DecayVertexXiZ();
+           lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
+
+           //-------------------------------------------------------------------------------------------------------------------------------
+           // - Around the tracks: Bach + V0 (ESD). Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)
+           AliAODTrack *pTrackXi    = dynamic_cast<AliAODTrack*>( xi->GetDaughter(0) );
+           AliAODTrack *nTrackXi    = dynamic_cast<AliAODTrack*>( xi->GetDaughter(1) );
+           AliAODTrack *bachTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDecayVertexXi()->GetDaughter(0) );
+           if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
+                AliWarning("ERROR: Could not retrieve one of the 3 AOD daughter tracks of the cascade ...");
+                continue;
+           }
+           UInt_t lIdxPosXi  = (UInt_t) TMath::Abs( pTrackXi->GetID() );  
+           UInt_t lIdxNegXi  = (UInt_t) TMath::Abs( nTrackXi->GetID() );
+           UInt_t lBachIdx   = (UInt_t) TMath::Abs( bachTrackXi->GetID() );
+                                                // Care track label can be negative in MC production (linked with the track quality)
+                                                // However = normally, not the case for track index ...
+           // - Rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
+           if (lBachIdx == lIdxNegXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue; }
+           if (lBachIdx == lIdxPosXi) { AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue; }
+           // - Get the TPCnumber of cluster for the daughters
+           lPosTPCClusters   = pTrackXi->GetTPCNcls(); // FIXME: Is this ok? or something like in LambdaK0PbPb task AOD?
+           lNegTPCClusters   = nTrackXi->GetTPCNcls();
+           lBachTPCClusters  = bachTrackXi->GetTPCNcls();
+
+           //-------------------------------------
+           // - Rejection of a poor quality tracks
+           if (fkQualityCutTPCrefit) {
+                // - Poor quality related to TPCrefit
+                if (!(pTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
+                if (!(nTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
+                if (!(bachTrackXi->IsOn(AliAODTrack::kTPCrefit))) { AliWarning("Pb / Bach.   track has no TPCrefit ... continue!"); continue; }
+           }
+           if (fkQualityCutnTPCcls) {
+                // - Poor quality related to TPC clusters
+                if (lPosTPCClusters  < fMinnTPCcls) { //AliWarning("Pb / V0 Pos. track has less than 80 TPC clusters ... continue!");
+                    continue; }
+                if (lNegTPCClusters  < fMinnTPCcls) { //AliWarning("Pb / V0 Neg. track has less than 80 TPC clusters ... continue!");
+                    continue; }
+                if (lBachTPCClusters < fMinnTPCcls) { //AliWarning("Pb / Bach.   track has less than 80 TPC clusters ... continue!");
+                    continue; }
+           }
+
+           //---------------------------------------
+           // - Around the tracks: Bach + V0 (AOD). Necessary variables for AODcascade data members coming from the AODv0 part (inheritance)
+           etaPos  = pTrackXi->Eta();
+           etaNeg  = nTrackXi->Eta();
+           etaBach = bachTrackXi->Eta();
+           lChargeXi = xi->ChargeXi();
+           if ( lChargeXi < 0) lInvMassLambdaAsCascDghter = xi->MassLambda();
+           else               lInvMassLambdaAsCascDghter = xi->MassAntiLambda();
+           lDcaV0DaughtersXi     = xi->DcaV0Daughters(); 
+           lDcaV0ToPrimVertexXi   = xi->DcaV0ToPrimVertex();
+           lDcaBachToPrimVertexXi = xi->DcaBachToPrimVertex(); 
+           lPosV0Xi[0] = xi->DecayVertexV0X();
+           lPosV0Xi[1] = xi->DecayVertexV0Y();
+           lPosV0Xi[2] = xi->DecayVertexV0Z(); 
+           lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
+           lV0CosineOfPointingAngleXi = xi->CosPointingAngle( lBestPrimaryVtxPos ); 
+           lDcaPosToPrimVertexXi      = xi->DcaPosToPrimVertex(); 
+           lDcaNegToPrimVertexXi      = xi->DcaNegToPrimVertex(); 
+
+           //----------------------------------------------------------------------------------------------------       
+           // - Around effective masses. Change mass hypotheses to cover all the possibilities:  Xi-/+, Omega -/+
+           if ( lChargeXi < 0 )        lInvMassXiMinus    = xi->MassXi();
+           if ( lChargeXi > 0 )        lInvMassXiPlus     = xi->MassXi();
+           if ( lChargeXi < 0 )        lInvMassOmegaMinus = xi->MassOmega();
+           if ( lChargeXi > 0 )        lInvMassOmegaPlus  = xi->MassOmega();
+
+           //--------------------------------
+           // - PID on the daughter tracks
+           // - Combined PID ->  removed, add when will be used
+
+           // - TPC PID : 3-sigma bands on Bethe-Bloch curve
+           //Bachelor
+           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;
+           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;
+           //Negative V0 daughter
+           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kPion   )) < 4) lIsNegPionForTPC   = kTRUE;
+           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;
+           //Positive V0 daughter
+           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kPion   )) < 4) lIsPosPionForTPC   = kTRUE;
+           if(TMath::Abs(fPIDResponse->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;
+
+           //---------------------------------
+           // - Extra info for QA (AOD)
+           // Miscellaneous pieces of info that may help regarding data quality assessment.
+           // Cascade transverse and total momentum    
+           lXiMomX = xi->MomXiX();
+           lXiMomY = xi->MomXiY();
+           lXiMomZ = xi->MomXiZ();
+           lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
+           lXiTotMom   = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
+           Double_t lV0MomX = xi->MomV0X();
+           Double_t lV0MomY = xi->MomV0Y();
+           Double_t lV0MomZ = xi->MomV0Z();
+           lV0TotMom = TMath::Sqrt(TMath::Power(lV0MomX,2)+TMath::Power(lV0MomY,2)+TMath::Power(lV0MomZ,2));
+           lBachMomX = xi->MomBachX();
+           lBachMomY = xi->MomBachY();
+           lBachMomZ = xi->MomBachZ();         
+           lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
+           lBachTotMom    = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
+           lV0NMomX = xi->MomNegX();
+           lV0NMomY = xi->MomNegY();
+           lV0PMomX = xi->MomPosX();
+           lV0PMomY = xi->MomPosY();
+           lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );
+           lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );
+           lV0toXiCosineOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );
+           lRapXi    = xi->RapXi();
+           lRapOmega = xi->RapOmega();
+           lEta      = xi->Eta();                      // Will not work ! need a method Pz(), Py() Px() 
+           lTheta    = xi->Theta() *180.0/TMath::Pi();  // in AODcascade.
+           lPhi      = xi->Phi()   *180.0/TMath::Pi();  // Here, we will get eta, theta, phi for the V0 ...
+           lAlphaXi  = xi->AlphaXi();
+           lPtArmXi  = xi->PtArmXi();
+
+    } // end of AOD treatment
+
+    // Cut on pt of the three daughter tracks
+    if (lBachTransvMom<fMinPtCutOnDaughterTracks) continue;
+    if (lpTrackTransvMom<fMinPtCutOnDaughterTracks) continue;
+    if (lnTrackTransvMom<fMinPtCutOnDaughterTracks) continue;
+      
+    // Cut on pseudorapidity of the three daughter tracks
+    if (TMath::Abs(etaBach)>fEtaCutOnDaughterTracks) continue;
+    if (TMath::Abs(etaPos)>fEtaCutOnDaughterTracks) continue;
+    if (TMath::Abs(etaNeg)>fEtaCutOnDaughterTracks) continue;
+      
+      
+    //----------------------------------
+    // Calculate proper lenght for cascade
+    Double_t cascadeMass = 0.;
+    if ( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||
+         ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC )  ) cascadeMass = 1.321;
+    if ( ( (lChargeXi<0) && lIsBachelorKaonForTPC   && lIsPosProtonForTPC    && lIsNegPionForTPC ) ||
+         ( (lChargeXi>0) && lIsBachelorKaonForTPC   && lIsNegProtonForTPC    && lIsPosPionForTPC )  ) cascadeMass = 1.672;
+    Double_t lctau =  TMath::Sqrt(TMath::Power((lPosXi[0]-lBestPrimaryVtxPos[0]),2)+TMath::Power((lPosXi[1]-lBestPrimaryVtxPos[1]),2)+TMath::Power(( lPosXi[2]-lBestPrimaryVtxPos[2]),2));
+    if (lXiTotMom!=0) lctau = lctau*cascadeMass/lXiTotMom;
+    else lctau = -1.;
+
+    //-------------------------------------------------
+    // Calculate proper lenght for Lambda (reconstructed)
+    Float_t lambdaMass = 1.115683; // PDG mass
+    Float_t distV0Xi =  TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2)+TMath::Power((lPosV0Xi[2]-lPosXi[2]),2));
+    Float_t lctauV0 = -1.;
+    if (lV0TotMom!=0) lctauV0 = distV0Xi*lambdaMass/lV0TotMom;
+    Float_t distTV0Xi =  TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2));
+
+    //--------------
+    /*// For AliEVE      
+         if(lChargeXi < 0&& lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) {
+             if (lXiTransvMom>2.&&lXiTransvMom<4.&&(lInvMassXiMinus<1.322&&lInvMassXiMinus>1.320)&&(lXiRadius<8.&&lXiRadius>3.)) {
+                         // FIXME : Just to know which file is currently open : locate the file containing Xi
+                  cout << "Name of the file containing Xi candidate(s) :" 
+                       << CurrentFileName() 
+                       << " / entry: "     << Entry()
+                       << " / in file: "   << lESDevent->GetEventNumberInFile()   // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
+                       << " AliESDcascade number " << iXi 
+                       << " : mass(Xi-) = " << lInvMassXiMinus
+                       << " / charge = "   << lChargeXi
+                       << " / pt(Casc) = " << lXiTransvMom
+                       << " / Decay 2d R(Xi) = " << lXiRadius 
+                       << endl;
+             }
+         }
+         if(lChargeXi < 0&& lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) {
+             if (lXiTransvMom>2&&lXiTransvMom<4&&(lInvMassOmegaMinus<1.674&&lInvMassOmegaMinus>1.670)&&(lXiRadius<8.&&lXiRadius>3.)) {
+                  cout << "Name of the file containing Omega candidate(s) :"
+                       << CurrentFileName()
+                       << " / entry: "     << Entry()
+                       << " / in file: "   << lESDevent->GetEventNumberInFile()   // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
+                       << " AliESDcascade number " << iXi 
+                       << " : mass(Omega-) = " << lInvMassOmegaMinus
+                       << " / charge = "   << lChargeXi
+                       << " / pt(Casc) = " << lXiTransvMom
+                       << " / Decay 2d R(Xi) = " << lXiRadius
+                       << endl;
+
+             }
+         }*/
+          
+
+    // - 
+    fHistPosV0TPCClusters->Fill( lPosTPCClusters );
+    fHistNegV0TPCClusters->Fill( lNegTPCClusters );
+    fHistBachTPCClusters->Fill( lBachTPCClusters );
+    f2dHistTPCdEdxOfCascDghters->Fill( lInnerWallMomCascDghters[0] , lTPCSignalCascDghters[0] );
+    f2dHistTPCdEdxOfCascDghters->Fill( lInnerWallMomCascDghters[1] , lTPCSignalCascDghters[1] );
+    f2dHistTPCdEdxOfCascDghters->Fill( lInnerWallMomCascDghters[2] , lTPCSignalCascDghters[2] );
+
+    //----------------
+    //Plot with PID on  
+    if ( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||
+         ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC )  ) {
+                                       // NOTE : 
+                                       // with this condition, it could happen that a cascade candidate satisfies the wrong requirement,
+                                       // e.g. one looks at a Xi- candidate for which lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC = kFALSE
+                                       // Expectation: it should be excluded, but lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC = kTRUE
+                                       // then this bad Xi-candidate will contribute anyway (OR condition).
+                                       // Hence: the extra condition on the sign of the Cascade
+           //if (TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.010)
+           fHistEffMassXi->Fill( lEffMassXi );
+           fHistDcaXiDaughters->Fill( lDcaXiDaughters );                   // Flag CascadeVtxer: Cut Variable e 
+           fHistDcaBachToPrimVertex->Fill( lDcaBachToPrimVertexXi   );     // Flag CascadeVtxer: Cut Variable d
+           fHistXiCosineOfPointingAngle->Fill( lXiCosineOfPointingAngle );  // Flag CascadeVtxer: Cut Variable f
+           fHistXiRadius->Fill( lXiRadius );                               // Flag CascadeVtxer: Cut Variable g+h
+           fHistMassLambdaAsCascDghter->Fill( lInvMassLambdaAsCascDghter ); // Flag CascadeVtxer: Cut Variable c
+           fHistDcaV0DaughtersXi->Fill( lDcaV0DaughtersXi );
+           fHistV0CosineOfPointingAngleXi->Fill( lV0CosineOfPointingAngleXi ); 
+           fHistV0RadiusXi->Fill( lV0RadiusXi );
+           fHistDcaV0ToPrimVertexXi->Fill( lDcaV0ToPrimVertexXi );         // Flag CascadeVtxer: Cut Variable b
+           fHistDcaPosToPrimVertexXi->Fill( lDcaPosToPrimVertexXi );
+           fHistDcaNegToPrimVertexXi->Fill( lDcaNegToPrimVertexXi );
+           fHistChargeXi->Fill( lChargeXi );
+           fHistV0toXiCosineOfPointingAngle->Fill( lV0toXiCosineOfPointingAngle );
+           if ( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.012 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.012) { // One InvMass should be different from 0
+                fHistXiTransvMom->Fill( lXiTransvMom );
+                fHistXiTotMom->Fill( lXiTotMom );
+                fHistBachTransvMomXi->Fill( lBachTransvMom );
+                fHistBachTotMomXi->Fill( lBachTotMom );
+                fHistRapXi->Fill( lRapXi );
+                fHistEtaXi->Fill( lEta );
+                if (lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC) {
+                      fHistEtaBachXi->Fill( etaBach );
+                      fHistEtaPosXi->Fill( etaPos );
+                      fHistEtaNegXi->Fill( etaNeg );
+                }
+                fHistThetaXi->Fill( lTheta );
+                fHistPhiXi->Fill( lPhi );
+           }
+           if ( TMath::Abs( lInvMassOmegaMinus-1.672 ) < 0.012 || TMath::Abs( lInvMassOmegaPlus-1.672 ) < 0.012 ) { // One InvMass should be different from 0
+                fHistRapOmega->Fill( lRapOmega ); 
+           }
+           f2dHistArmenteros->Fill( lAlphaXi, lPtArmXi );
+    } // end with PID ...
+
+    //-----------------------
+    // - Invariant mass plots
+    //Plots 1D
+    if ( lChargeXi < 0 ) {
+         fHistMassXiMinus->Fill( lInvMassXiMinus );
+         fHistMassOmegaMinus->Fill( lInvMassOmegaMinus );
+         f2dHistDcaXiDaughtersvsInvMass->Fill(lDcaXiDaughters,lInvMassXiMinus);
+         f2dHistDcaBachToPrimVertexvsInvMass->Fill(lDcaBachToPrimVertexXi,lInvMassXiMinus); 
+         f2dHistXiCosineOfPointingAnglevsInvMass->Fill(lXiCosineOfPointingAngle,lInvMassXiMinus);
+         f2dHistMassLambdaAsCascDghtervsInvMass->Fill(lInvMassLambdaAsCascDghter,lInvMassXiMinus);
+         f2dHistDcaV0DaughtersXivsInvMass->Fill(lDcaV0DaughtersXi,lInvMassXiMinus);
+         f2dHistDcaV0ToPrimVertexXivsInvMass->Fill(lDcaV0ToPrimVertexXi,lInvMassXiMinus);
+    }
+    if ( lChargeXi > 0 ) {
+      fHistMassXiPlus->Fill( lInvMassXiPlus );
+      fHistMassOmegaPlus->Fill( lInvMassOmegaPlus );
+    }
+    //Plots 2D, 3D
+    if ( lChargeXi < 0 ) {
+      f2dHistEffMassLambdaVsEffMassXiMinus->Fill( lInvMassLambdaAsCascDghter, lInvMassXiMinus ); 
+      f2dHistEffMassXiVsEffMassOmegaMinus ->Fill( lInvMassXiMinus, lInvMassOmegaMinus );
+      f2dHistXiRadiusVsEffMassXiMinus     ->Fill( lXiRadius, lInvMassXiMinus );
+      f2dHistXiRadiusVsEffMassOmegaMinus  ->Fill( lXiRadius, lInvMassOmegaMinus );
+    } else {
+      f2dHistEffMassLambdaVsEffMassXiPlus ->Fill( lInvMassLambdaAsCascDghter, lInvMassXiPlus );
+      f2dHistEffMassXiVsEffMassOmegaPlus  ->Fill( lInvMassXiPlus, lInvMassOmegaPlus );
+      f2dHistXiRadiusVsEffMassXiPlus      ->Fill( lXiRadius, lInvMassXiPlus);
+      f2dHistXiRadiusVsEffMassOmegaPlus   ->Fill( lXiRadius, lInvMassOmegaPlus );
+    }
+
+    //---------------------------------------------    
+    // - Filling the AliCFContainers related to PID
+    Double_t lContainerPIDVars[3] = {0.0};
+    // Xi Minus                
+    if ( lChargeXi < 0 ) {
+          lContainerPIDVars[0] = lXiTransvMom;
+          lContainerPIDVars[1] = lInvMassXiMinus;
+          lContainerPIDVars[2] = lRapXi;
+          //No PID
+          fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 0); // No PID
+         //TPC PID
+          if ( lIsBachelorPionForTPC )                                           fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track             
+          if ( lIsBachelorPionForTPC && lIsPosProtonForTPC )                     fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
+          if ( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+         //Combined PID
+          if ( lIsBachelorPion )                                      fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor    
+          if ( lIsBachelorPion && lIsPosInXiProton )                  fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+          if (lIsBachelorPion && lIsPosInXiProton && lIsNegInXiPion ) fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+    }
+    lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.;   
+    // Xi Plus         
+    if ( lChargeXi > 0 ) {
+          lContainerPIDVars[0] = lXiTransvMom;
+          lContainerPIDVars[1] = lInvMassXiPlus;
+          lContainerPIDVars[2] = lRapXi;
+         //No PID
+          fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 0); // No PID
+          //TPC PID
+          if ( lIsBachelorPionForTPC )                                           fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
+          if ( lIsBachelorPionForTPC && lIsNegProtonForTPC )                     fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
+          if ( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+         //Combined PID
+          if ( lIsBachelorPion )                                      fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
+          if ( lIsBachelorPion && lIsNegInXiProton )                  fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+          if (lIsBachelorPion && lIsNegInXiProton && lIsPosInXiPion ) fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+    }
+    lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; 
+    // Omega Minus             
+    if ( lChargeXi < 0 ) {
+          lContainerPIDVars[0] = lXiTransvMom;
+          lContainerPIDVars[1] = lInvMassOmegaMinus;
+          lContainerPIDVars[2] = lRapOmega;
+         //No PID
+          fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 0); // No PID
+                 //TPC PID
+          if ( lIsBachelorKaonForTPC )                                           fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
+          if ( lIsBachelorKaonForTPC && lIsPosProtonForTPC )                     fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
+          if ( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+         //Combined PID
+          if ( lIsBachelorKaon )                                            fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
+          if ( lIsBachelorKaon && lIsPosInOmegaProton )                    fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+          if (lIsBachelorKaon && lIsPosInOmegaProton && lIsNegInOmegaPion ) fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+    }
+    lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.;
+    // Omega Plus              
+    if ( lChargeXi > 0 ) {
+      lContainerPIDVars[0] = lXiTransvMom;
+      lContainerPIDVars[1] = lInvMassOmegaPlus;
+      lContainerPIDVars[2] = lRapOmega;
+       // No PID
+      fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 0); // No PID
+       // TPC PID
+      if ( lIsBachelorKaonForTPC  )
+       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
+      if( lIsBachelorKaonForTPC && 
+         lIsNegProtonForTPC     )
+       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
+      if ( lIsBachelorKaonForTPC && 
+          lIsNegProtonForTPC    && 
+          lIsPosPionForTPC       )
+       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+       // Combined PID
+      if ( lIsBachelorKaon        )
+       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
+      if ( lIsBachelorKaon       && 
+           lIsNegInOmegaProton    )
+       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+      if (lIsBachelorKaon     && 
+         lIsNegInOmegaProton && 
+         lIsPosInOmegaPion    )
+       fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+    }
+               
+    //--------------------------------------------------------------------
+    // Filling the AliCFContainer (optimisation of topological selections)
+    Double_t lContainerCutVars[19] = {0.0};
+                        
+    lContainerCutVars[0]  = lDcaXiDaughters;
+    lContainerCutVars[1]  = lDcaBachToPrimVertexXi;
+    lContainerCutVars[2]  = lXiCosineOfPointingAngle;
+    lContainerCutVars[3]  = lXiRadius;
+    lContainerCutVars[4]  = lInvMassLambdaAsCascDghter;
+    lContainerCutVars[5]  = lDcaV0DaughtersXi;
+    if (fCollidingSystem == "pp")       lContainerCutVars[6]  = lV0toXiCosineOfPointingAngle;
+    else if (fCollidingSystem == "pPb") lContainerCutVars[6]  = lV0CosineOfPointingAngleXi;
+    lContainerCutVars[7]  = lV0RadiusXi;
+    lContainerCutVars[8]  = lDcaV0ToPrimVertexXi;      
+    lContainerCutVars[9]  = lDcaPosToPrimVertexXi;
+    lContainerCutVars[10] = lDcaNegToPrimVertexXi;
+    lContainerCutVars[13] = lXiTransvMom;
+    lContainerCutVars[16] = lctau;
+    lContainerCutVars[17] = lctauV0;
+    lContainerCutVars[18] = distTV0Xi;
+    if ( lChargeXi < 0 ) {
+         lContainerCutVars[11] = lInvMassXiMinus;
+         lContainerCutVars[12] = lInvMassOmegaMinus;
+         lContainerCutVars[14] = lRapXi;
+         lContainerCutVars[15] = -1.;
+         if (lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,0); // for Xi-
+         lContainerCutVars[11] = lInvMassXiMinus;
+         lContainerCutVars[12] = lInvMassOmegaMinus;
+         lContainerCutVars[14] = -1.;
+         lContainerCutVars[15] = lRapOmega;
+         if (lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,2); // for Omega-
+    } else {
+         lContainerCutVars[11] = lInvMassXiPlus;
+         lContainerCutVars[12] = lInvMassOmegaPlus; 
+         lContainerCutVars[14] = lRapXi;
+         lContainerCutVars[15] = -1.; 
+         if (lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,1); // for Xi+
+         lContainerCutVars[11] = lInvMassXiPlus;
+         lContainerCutVars[12] = lInvMassOmegaPlus;
+         lContainerCutVars[14] = -1.;
+         lContainerCutVars[15] = lRapOmega;
+         if (lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC) fCFContCascadeCuts->Fill(lContainerCutVars,3); // for Omega+ 
+    }                 
+  } //end of the Cascade loop (ESD or AOD)
+    
+  // Post output data.
+ PostData(1, fListHistCascade);
+ PostData(2, fCFContCascadePIDXiMinus);
+ PostData(3, fCFContCascadePIDXiPlus);
+ PostData(4, fCFContCascadePIDOmegaMinus);
+ PostData(5, fCFContCascadePIDOmegaPlus);
+ PostData(6, fCFContCascadeCuts);
+}
+
+//________________________________________________________________________
+Int_t AliAnalysisTaskCheckCascadepp276::DoESDTrackWithTPCrefitMultiplicity(const AliESDEvent *lESDevent) {
+    // Checking the number of tracks with TPCrefit for each event
+    // Needed for a rough assessment of the event multiplicity
+        
+    Int_t nTrackWithTPCrefitMultiplicity = 0;
+    for (Int_t iTrackIdx = 0; iTrackIdx < (InputEvent())->GetNumberOfTracks(); iTrackIdx++) {
+      AliESDtrack *esdTrack    = 0x0;
+      esdTrack = lESDevent->GetTrack( iTrackIdx );
+      if (!esdTrack) { AliWarning("Pb / Could not retrieve one track within the track loop for TPCrefit check ..."); continue; }
+
+      ULong_t lTrackStatus    = esdTrack->GetStatus();
+      if ((lTrackStatus&AliESDtrack::kTPCrefit)    == 0) continue;
+      else nTrackWithTPCrefitMultiplicity++;
+        // FIXME :
+        // The goal here is to get a better assessment of the event multiplicity.
+        // (InputEvent())->GetNumberOfTracks() takes into account ITS std alone tracks + global tracks
+        // This may introduce a bias. Hence the number of TPC refit tracks.
+        // Note : the event multiplicity = analysis on its own... See Jacek's or Jan Fiete's analysis on dN/d(eta)
+
+    } // end loop over all event tracks
+    return  nTrackWithTPCrefitMultiplicity;
+}
+
+
+//________________________________________________________________________
+void AliAnalysisTaskCheckCascadepp276::Terminate(Option_t *) 
+{
+  // Draw result to the screen
+  // Called once at the end of the query
+
+/*  TList *cRetrievedList = 0x0;
+         cRetrievedList = (TList*)GetOutputData(1);
+       if(!cRetrievedList){
+               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: ouput data container list not available\n"); return;
+       }
+  fHistTrackMultiplicity = dynamic_cast<TH1F*> (   cRetrievedList->FindObject("fHistTrackMultiplicity") );
+  if (!fHistTrackMultiplicity) {
+               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistTrackMultiplicity not available\n"); return;
+       }
+  fHistMassXiMinus    = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiMinus") );        
+       if (!fHistMassXiMinus) {
+               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassXiMinus not available\n"); return;
+       }
+  fHistMassXiPlus     = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiPlus") );
+       if (!fHistMassXiPlus) {
+               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassXiPlus not available\n"); return;
+       }       
+  fHistMassOmegaMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaMinus") );
+       if (!fHistMassOmegaMinus) {
+               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassOmegaMinus not available\n"); return;
+       }
+  fHistMassOmegaPlus  = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaPlus") );      
+       if (!fHistMassOmegaPlus) {
+               AliWarning("ERROR - AliAnalysisTaskCheckCascadepp276: fHistMassOmegaPlus not available\n"); return;
+       }
+  
+  TCanvas *canCheckCascade = new TCanvas("AliAnalysisTaskCheckCascadep276","CheckCascade overview",10,10,1010,660);
+  canCheckCascade->Divide(2,2);
+  
+  canCheckCascade->cd(1);
+  canCheckCascade->cd(1)->SetLogy();
+  fHistTrackMultiplicity->SetMarkerStyle(kFullStar);  
+  fHistTrackMultiplicity->GetXaxis()->SetLabelFont(42);
+  fHistTrackMultiplicity->GetYaxis()->SetLabelFont(42);
+  fHistTrackMultiplicity->SetTitleFont(42, "xy");
+  fHistTrackMultiplicity->GetXaxis()->SetTitleOffset(1.1);
+  fHistTrackMultiplicity->DrawCopy("H");
+  
+  canCheckCascade->cd(2);  
+  fHistMassXiMinus ->SetMarkerStyle(kFullCircle);
+  fHistMassXiMinus ->SetMarkerSize(0.5);
+  fHistMassXiMinus ->GetXaxis()->SetLabelFont(42);
+  fHistMassXiMinus ->GetYaxis()->SetLabelFont(42);
+  fHistMassXiMinus ->SetTitleFont(42, "xy");
+  fHistMassXiMinus ->GetXaxis()->SetTitleOffset(1.1);
+  fHistMassXiMinus ->GetYaxis()->SetTitleOffset(1.3);
+  //fHistMassXiMinus->Rebin(2);
+  fHistMassXiMinus ->GetXaxis()->SetRangeUser(1.24, 1.42);
+  fHistMassXiMinus ->DrawCopy("E");
+  
+  fHistMassXiPlus ->SetMarkerStyle(kOpenCircle);
+  fHistMassXiPlus ->SetMarkerColor(kRed+2);
+  fHistMassXiPlus ->SetLineColor(kRed+2);
+  fHistMassXiPlus ->SetMarkerSize(0.5);
+  //fHistMassXiPlus ->Rebin(2);
+  fHistMassXiPlus ->DrawCopy("ESAME");
+  
+  
+  TLegend *legendXi =new TLegend(0.67,0.34,0.97,0.54);
+               legendXi->SetTextFont(42);
+               legendXi->SetTextSize(0.05);
+               legendXi->SetFillColor(kWhite);
+               legendXi->AddEntry( fHistMassXiMinus,"#Xi^{-} candidates","lp");
+               legendXi->AddEntry( fHistMassXiPlus,"#Xi^{+} candidates","lp");
+               legendXi->Draw();
+  
+  
+  canCheckCascade->cd(3);  
+  fHistMassOmegaPlus ->SetMarkerStyle(kOpenCircle);
+  fHistMassOmegaPlus ->SetMarkerColor(kRed+2);
+  fHistMassOmegaPlus ->SetLineColor(kRed+2);
+  fHistMassOmegaPlus ->SetMarkerSize(0.5);
+  fHistMassOmegaPlus ->GetXaxis()->SetLabelFont(42);
+  fHistMassOmegaPlus ->GetYaxis()->SetLabelFont(42);
+  fHistMassOmegaPlus ->SetTitleFont(42, "xy");
+  fHistMassOmegaPlus ->GetXaxis()->SetTitleOffset(1.1);
+  fHistMassOmegaPlus ->GetYaxis()->SetTitleOffset(1.25);
+  //fHistMassOmegaPlus ->Rebin(2);
+  fHistMassOmegaPlus ->GetXaxis()->SetRangeUser(1.6, 1.84);
+  fHistMassOmegaPlus ->DrawCopy("E");
+  
+  fHistMassOmegaMinus->SetMarkerStyle(kFullCircle);
+  fHistMassOmegaMinus->SetMarkerSize(0.5);
+  //fHistMassOmegaMinus->Rebin(2);
+  fHistMassOmegaMinus->DrawCopy("ESAME");
+
+  
+   TLegend *legendOmega = new TLegend(0.67,0.34,0.97,0.54);
+               legendOmega->SetTextFont(42);
+               legendOmega->SetTextSize(0.05);
+               legendOmega->SetFillColor(kWhite);
+               legendOmega->AddEntry( fHistMassOmegaMinus,"#Omega^{-} candidates","lp");
+               legendOmega->AddEntry( fHistMassOmegaPlus,"#Omega^{+} candidates","lp");
+               legendOmega->Draw();
+     */
+}