]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckPerformanceCascadepp276.cxx
Corrected end-of-line behavior
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskCheckPerformanceCascadepp276.cxx
index c0b36e02fa3fe1e25bfc3ac1cd2273d44b8312ee..2f4398dd66a86b1c62a301d720cef095cc96b573 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
-//           AliAnalysisTaskCheckPerformanceCascadePbPb class\r
-//            This task is for a performance study of cascade identification in PbPb.\r
-//            It works with MC info and ESD/AOD.\r
-//            Origin   : AliAnalysisTaskCheckPerformanceCascade class by A. Maire Nov2010, antonin.maire@ires.in2p3.fr\r
-//            Modified for PbPb analysis: M. Nicassio Feb2011, maria.nicassio@ba.infn.it:\r
-//                        - physics selection moved to the run.C macro\r
-//                        - added centrality selection and possibility to select events in nTracks ranges \r
-//                        - added new histograms \r
-//                        - modified binning of some histograms and containers \r
-//                        - flag to enable CF container usage \r
-//                        - check in the destructor for CAF usage\r
-//                        - flag for acceptance cut in the MC part\r
-//                        - in the MC particle selection IsPhysicalPrimary added and number of particles taken as appropriate for HIJING \r
-//                          (however for cascades one gets the same if runs on Nprimaries in the stack and does not check IsPhysicalPrimary)\r
-//                        - automatic settings for PID \r
-//                        - selection of injected cascades and HIJING cascades (kind of "bug" in method IsFromBGEvent())\r
-//                        - added proper time histograms for cascades and lambdas\r
-//                        - cos of PA V0 wrt Xi vertex and not primary vertex  \r
-//                        - distance xi-V0 added in the container\r
-//                        - AOD analysis developed (January 2012)\r
-//\r
-//\r
-//\r
-//              Adapted to pp 2.76 analysis: D. Colella, domenico.colella@ba.infn.it (Nov. 2012):\r
-//                        - added new and removed other histograms \r
-//                        - Physics selection moved here (mainly for normalization in the efficiency calcuation)\r
-//                        - Centrality selection deleted\r
-//                        - 3DHisto denominator moved before any event selection for Normalization\r
-//                        - injected and natural part of MC selection removed\r
-// \r
-//\r
-//\r
-//-----------------------------------------------------------------\r
-\r
-\r
-#include <Riostream.h>\r
-\r
-#include "TList.h"\r
-#include "TFile.h"\r
-#include "TH1F.h"\r
-#include "TH2F.h"\r
-#include "TH3F.h"\r
-#include "TVector3.h"\r
-#include "TCanvas.h"\r
-#include "TParticle.h"\r
-#include "TMath.h"\r
-\r
-#include "AliLog.h"\r
-#include "AliHeader.h"\r
-#include "AliMCEvent.h"\r
-#include "AliStack.h"\r
-#include "AliMultiplicity.h"\r
-#include "AliInputEventHandler.h"\r
-#include "AliAnalysisManager.h"\r
-\r
-#include "AliCFContainer.h"\r
-\r
-#include "AliESDVZERO.h"\r
-\r
-#include "AliGenEventHeader.h"\r
-#include "AliGenCocktailEventHeader.h"\r
-#include "AliGenHijingEventHeader.h"\r
-#include "AliESDtrackCuts.h"\r
-#include "AliPIDResponse.h"\r
-#include "AliV0vertexer.h"\r
-#include "AliCascadeVertexer.h"\r
-#include "AliESDEvent.h"\r
-#include "AliESDcascade.h"\r
-#include "AliAODEvent.h"\r
-#include "AliAODMCParticle.h" \r
-#include "AliAnalysisTaskCheckPerformanceCascadepp276.h"\r
-\r
-using std::cout;\r
-using std::endl;\r
-\r
-ClassImp(AliAnalysisTaskCheckPerformanceCascadepp276)\r
-\r
-\r
-\r
-//________________________________________________________________________________________\r
-AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCascadepp276() \r
-: AliAnalysisTaskSE(), // <- take care to AliAnalysisTask( empty )\r
-    fAnalysisType                  ("ESD"), \r
-    fESDtrackCuts                  (0), \r
-    fPIDResponse                   (0),\r
-    fkRerunV0CascVertexers         (0),\r
-    fkSDDselectionOn               (kTRUE),\r
-    fkQualityCutZprimVtxPos        (kTRUE),\r
-    fkRejectEventPileUp            (kTRUE),\r
-    fkQualityCutNoTPConlyPrimVtx   (kTRUE),\r
-    fkQualityCutTPCrefit           (kTRUE),\r
-    fkQualityCutnTPCcls            (kTRUE),\r
-    fwithSDD                       (kTRUE),\r
-    fMinnTPCcls                    (0),\r
-    fkExtraSelections              (0),\r
-    fVtxRange                      (0),\r
-    fVtxRangeMin                   (0),\r
-    fApplyAccCut                   (0),\r
-    fMinPtCutOnDaughterTracks      (0),\r
-    fEtaCutOnDaughterTracks        (0),\r
-    \r
-    // - Plots initialisation\r
-    fListHistCascade(0),\r
-\r
-    // - General Plots\r
-    // Cascade multiplicity plots\r
-    fHistCascadeMultiplicityBeforeAnySel(0),\r
-    fHistCascadeMultiplicityAfterSDDSel(0),\r
-    fHistCascadeMultiplicityAfterPhysicsSel(0),\r
-    fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),\r
-    fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),\r
-    fHistCascadeMultiplicityAfterVertexCutSel(0),\r
-    fHistnXiPlusPerEvTot(0),                  // After any event selections, in all the eta and pt range\r
-    fHistnXiMinusPerEvTot(0),                 // After any event selections, in all the eta and pt range\r
-    fHistnOmegaPlusPerEvTot(0),               // After any event selections, in all the eta and pt range\r
-    fHistnOmegaMinusPerEvTot(0),              // After any event selections, in all the eta and pt range\r
-    fHistnXiPlusPerEv(0),                     // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnXiMinusPerEv(0),                    // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnOmegaPlusPerEv(0),                  // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnOmegaMinusPerEv(0),                 // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnAssoXiMinus(0),                     // For the Reconstructed-Associated cascades \r
-    fHistnAssoXiPlus(0),                      // For the Reconstructed-Associated cascades \r
-    fHistnAssoOmegaMinus(0),                  // For the Reconstructed-Associated cascades \r
-    fHistnAssoOmegaPlus(0),                   // For the Reconstructed-Associated cascades \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),                              // After any selections but before |Z| < 10 cm\r
-    fHistPVy(0),                              // After any selections but before |Z| < 10 cm\r
-    fHistPVz(0),                              // After any selections but before |Z| < 10 cm\r
-    fHistPVxAnalysis(0),                      // After any event selections\r
-    fHistPVyAnalysis(0),                      // After any event selections\r
-    fHistPVzAnalysis(0),                      // After any event selections\r
-    // - Plots before Physics Selection\r
-    f3dHistGenPtVsGenYvsNtracksXiMinus(0),    // After the SDD event selection (For efficinecy calculation)\r
-    f3dHistGenPtVsGenctauvsYXiMinus(0),       // After the SDD event selection (For efficinecy calculation)\r
-    f3dHistGenPtVsGenYvsNtracksXiPlus(0),     // After the SDD event selection (For efficinecy calculation)\r
-    f3dHistGenPtVsGenctauvsYXiPlus(0),        // After the SDD event selection (For efficinecy calculation)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaMinus(0), // After the SDD event selection (For efficinecy calculation)\r
-    f3dHistGenPtVsGenctauvsYOmegaMinus(0),    // After the SDD event selection (For efficinecy calculation)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaPlus(0),  // After the SDD event selection (For efficinecy calculation)\r
-    f3dHistGenPtVsGenctauvsYOmegaPlus(0),     // After the SDD event selection (For efficinecy calculation)\r
-    // - Generated cascade plots\r
-    // After all the event selections \r
-    //Xi-\r
-    fHistEtaGenCascXiMinus(0),                // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascXiMinus(0),              // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYXiMinusPhysEff(0),       // \r
-    f2dHistGenPtVsGenYFdblXiMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachXiMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachXiMinus(0),                    // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    //Xi+\r
-    fHistEtaGenCascXiPlus(0),                 // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascXiPlus(0),               // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYXiPlusPhysEff(0),       //\r
-    f2dHistGenPtVsGenYFdblXiPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachXiPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachXiPlus(0),                     // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)\r
-    //Omega-\r
-    fHistEtaGenCascOmegaMinus(0),             // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascOmegaMinus(0),           // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff(0),       //\r
-    f2dHistGenPtVsGenYFdblOmegaMinus(0),      // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachOmegaMinus(0),              // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachOmegaMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    //Omega+      \r
-    fHistEtaGenCascOmegaPlus(0),              // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascOmegaPlus(0),            // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff(0),       //\r
-    f2dHistGenPtVsGenYFdblOmegaPlus(0),       // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachOmegaPlus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachOmegaPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-\r
-    // - Associated to MC cascade plots\r
-    fHistMassXiMinus(0),                      // For the Reconstructed-Associated cascades\r
-    fHistMassXiPlus(0),                       // For the Reconstructed-Associated cascades\r
-    fHistMassOmegaMinus(0),                   // For the Reconstructed-Associated cascades\r
-    fHistMassOmegaPlus(0),                    // For the Reconstructed-Associated cascades\r
-    // Effective mass histos with combined PID\r
-    fHistMassWithCombPIDXiMinus(0),           \r
-    fHistMassWithCombPIDXiPlus(0),\r
-    fHistMassWithCombPIDOmegaMinus(0), \r
-    fHistMassWithCombPIDOmegaPlus(0),  \r
-    // PID Probability versus MC Pt(bachelor track)\r
-    f2dHistPIDprobaKaonVsMCPtBach(0), f2dHistPIDprobaPionVsMCPtBach(0),\r
-    // Effective mass histos with perfect MC PID on the bachelor\r
-    fHistMassWithMcPIDXiMinus(0), fHistMassWithMcPIDXiPlus(0),\r
-    fHistMassWithMcPIDOmegaMinus(0), fHistMassWithMcPIDOmegaPlus(0),\r
-    // Effective mass histos for the cascade candidates associated with MC\r
-    fHistAsMCMassXiMinus(0),           \r
-    fHistAsMCMassXiPlus(0),            \r
-    fHistAsMCMassOmegaMinus(0),\r
-    fHistAsMCMassOmegaPlus(0),\r
-    // Generated Pt Vs generated y, for the cascade candidates associated with MC + Info Comb. PID\r
-    f2dHistAsMCandCombPIDGenPtVsGenYXiMinus(0),\r
-    f2dHistAsMCandCombPIDGenPtVsGenYXiPlus(0),\r
-    f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus(0),\r
-    f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus(0),\r
-    // Generated Pt Vs generated y, for the cascade candidates associated with MC\r
-    f2dHistAsMCGenPtVsGenYXiMinus(0),\r
-    f2dHistAsMCGenPtVsGenYXiPlus(0),\r
-    f2dHistAsMCGenPtVsGenYOmegaMinus(0),\r
-    f2dHistAsMCGenPtVsGenYOmegaPlus(0),\r
-    // Generated Eta of the the cascade candidates associated with MC\r
-    fHistAsMCGenEtaXiMinus(0),\r
-    fHistAsMCGenEtaXiPlus(0),\r
-    fHistAsMCGenEtaOmegaMinus(0),\r
-    fHistAsMCGenEtaOmegaPlus(0),\r
-    // Resolution in Pt as function of generated Pt\r
-    f2dHistAsMCResPtXiMinus(0),                \r
-    f2dHistAsMCResPtXiPlus(0),         \r
-    f2dHistAsMCResPtOmegaMinus(0),\r
-    f2dHistAsMCResPtOmegaPlus(0),      \r
-    // Resolution in R(2D) as function of generated R\r
-    f2dHistAsMCResRXiMinus(0),         \r
-    f2dHistAsMCResRXiPlus(0),          \r
-    f2dHistAsMCResROmegaMinus(0),\r
-    f2dHistAsMCResROmegaPlus(0),\r
-    // Resolution in phi as function of generated Pt\r
-    f2dHistAsMCResPhiXiMinus(0),\r
-    f2dHistAsMCResPhiXiPlus(0),\r
-    f2dHistAsMCResPhiOmegaMinus(0),\r
-    f2dHistAsMCResPhiOmegaPlus(0),\r
-    // Correlation between proton (antiproton) daughter MC pt and Xi/Omega MC pt (to apply Geat/Fluka correction)\r
-    f2dHistAsMCptProtonMCptXiMinus(0),\r
-    f2dHistAsMCptAntiprotonMCptXiPlus(0),\r
-    f2dHistAsMCptProtonMCptOmegaMinus(0),\r
-    f2dHistAsMCptAntiprotonMCptOmegaPlus(0),\r
-    // QA plots\r
-    fHistV0toXiCosineOfPointingAngle(0),\r
-    fHistV0CosineOfPointingAnglevsPtXi(0),\r
-    fHistV0CosineOfPointingAnglevsPtOmega(0), \r
-    \r
-    // Containers                       \r
-    fCFContCascadePIDAsXiMinus(0),\r
-    fCFContCascadePIDAsXiPlus(0),\r
-    fCFContCascadePIDAsOmegaMinus(0),\r
-    fCFContCascadePIDAsOmegaPlus(0),\r
-    fCFContAsCascadeCuts(0)\r
-\r
-    //____Dummy costructor____\r
-    {\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
-//_____Non-default Constructor________________________________________________________________\r
-AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCascadepp276(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
-    fkRejectEventPileUp            (kTRUE),\r
-    fkQualityCutNoTPConlyPrimVtx   (kTRUE),\r
-    fkQualityCutTPCrefit           (kTRUE),\r
-    fkQualityCutnTPCcls            (kTRUE),\r
-    fwithSDD                       (kTRUE),\r
-    fMinnTPCcls                    (0),\r
-    fkExtraSelections              (0),\r
-    fVtxRange                      (0),\r
-    fVtxRangeMin                   (0),\r
-    fApplyAccCut                   (0),\r
-    fMinPtCutOnDaughterTracks      (0),\r
-    fEtaCutOnDaughterTracks        (0),\r
-\r
-    // - Plots initialisation\r
-    fListHistCascade(0),\r
-\r
-    // - General Plots\r
-    // Cascade multiplicity plots\r
-    fHistCascadeMultiplicityBeforeAnySel(0),\r
-    fHistCascadeMultiplicityAfterSDDSel(0),\r
-    fHistCascadeMultiplicityAfterPhysicsSel(0),\r
-    fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),\r
-    fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),\r
-    fHistCascadeMultiplicityAfterVertexCutSel(0),\r
-    fHistnXiPlusPerEvTot(0),                  // After any event selections, in all the eta and pt range\r
-    fHistnXiMinusPerEvTot(0),                 // After any event selections, in all the eta and pt range\r
-    fHistnOmegaPlusPerEvTot(0),               // After any event selections, in all the eta and pt range\r
-    fHistnOmegaMinusPerEvTot(0),              // After any event selections, in all the eta and pt range\r
-    fHistnXiPlusPerEv(0),                     // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnXiMinusPerEv(0),                    // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnOmegaPlusPerEv(0),                  // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnOmegaMinusPerEv(0),                 // After any event selections, in the detector acceptance and over a pt minimum\r
-    fHistnAssoXiMinus(0),                     // For the Reconstructed-Associated cascades \r
-    fHistnAssoXiPlus(0),                      // For the Reconstructed-Associated cascades \r
-    fHistnAssoOmegaMinus(0),                  // For the Reconstructed-Associated cascades \r
-    fHistnAssoOmegaPlus(0),                   // For the Reconstructed-Associated cascades \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),                              // After any selections but before |Z| < 10 cm\r
-    fHistPVy(0),                              // After any selections but before |Z| < 10 cm\r
-    fHistPVz(0),                              // After any selections but before |Z| < 10 cm\r
-    fHistPVxAnalysis(0),                      // After any event selections\r
-    fHistPVyAnalysis(0),                      // After any event selections\r
-    fHistPVzAnalysis(0),                      // After any event selections\r
-    // - Plots before Physics Selection\r
-    f3dHistGenPtVsGenYvsNtracksXiMinus(0),    // After the SDD event selection (For efficiency calculation)\r
-    f3dHistGenPtVsGenctauvsYXiMinus(0),       // After the SDD event selection (For efficiency calculation)\r
-    f3dHistGenPtVsGenYvsNtracksXiPlus(0),     // After the SDD event selection (For efficiency calculation)\r
-    f3dHistGenPtVsGenctauvsYXiPlus(0),        // After the SDD event selection (For efficiency calculation)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaMinus(0), // After the SDD event selection (For efficiency calculation)\r
-    f3dHistGenPtVsGenctauvsYOmegaMinus(0),    // After the SDD event selection (For efficiency calculation)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaPlus(0),  // After the SDD event selection (For efficiency calculation)\r
-    f3dHistGenPtVsGenctauvsYOmegaPlus(0),     // After the SDD event selection (For efficiency calculation)\r
-    // - Generated cascade plots\r
-    // After all the event selections \r
-    //Xi-\r
-    fHistEtaGenCascXiMinus(0),                // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascXiMinus(0),              // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYXiMinusPhysEff(0),       //\r
-    f2dHistGenPtVsGenYFdblXiMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachXiMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachXiMinus(0),                    // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    //Xi+\r
-    fHistEtaGenCascXiPlus(0),                 // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascXiPlus(0),               // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYXiPlusPhysEff(0),       //\r
-    f2dHistGenPtVsGenYFdblXiPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachXiPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachXiPlus(0),                     // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)\r
-    //Omega-\r
-    fHistEtaGenCascOmegaMinus(0),             // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascOmegaMinus(0),           // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff(0),       //\r
-    f2dHistGenPtVsGenYFdblOmegaMinus(0),      // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachOmegaMinus(0),              // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachOmegaMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)\r
-    //Omega+      \r
-    fHistEtaGenCascOmegaPlus(0),              // In all the eta and pt range (as they are generated)\r
-    fHistThetaGenCascOmegaPlus(0),            // In all the eta and pt range (as they are generated)\r
-    f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff(0),    // \r
-    f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff(0),       //\r
-    f2dHistGenPtVsGenYFdblOmegaPlus(0),       // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaLambdaOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBachOmegaPlus(0),               // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaMesDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistThetaBarDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBachOmegaPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtMesDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-    fHistPtBarDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)\r
-\r
-    // - Associated to MC cascade plots\r
-    fHistMassXiMinus(0),                      // For the Reconstructed-Associated cascades\r
-    fHistMassXiPlus(0),                       // For the Reconstructed-Associated cascades\r
-    fHistMassOmegaMinus(0),                   // For the Reconstructed-Associated cascades\r
-    fHistMassOmegaPlus(0),                    // For the Reconstructed-Associated cascades\r
-    // Effective mass histos with combined PID\r
-    fHistMassWithCombPIDXiMinus(0),\r
-    fHistMassWithCombPIDXiPlus(0),\r
-    fHistMassWithCombPIDOmegaMinus(0),\r
-    fHistMassWithCombPIDOmegaPlus(0),\r
-    // PID Probability versus MC Pt(bachelor track)\r
-    f2dHistPIDprobaKaonVsMCPtBach(0), f2dHistPIDprobaPionVsMCPtBach(0),\r
-    // Effective mass histos with perfect MC PID on the bachelor\r
-    fHistMassWithMcPIDXiMinus(0), fHistMassWithMcPIDXiPlus(0),\r
-    fHistMassWithMcPIDOmegaMinus(0), fHistMassWithMcPIDOmegaPlus(0),\r
-    // Effective mass histos for the cascade candidates associated with MC\r
-    fHistAsMCMassXiMinus(0),\r
-    fHistAsMCMassXiPlus(0),\r
-    fHistAsMCMassOmegaMinus(0),\r
-    fHistAsMCMassOmegaPlus(0),\r
-    // Generated Pt Vs generated y, for the cascade candidates associated with MC + Info Comb. PID\r
-    f2dHistAsMCandCombPIDGenPtVsGenYXiMinus(0),\r
-    f2dHistAsMCandCombPIDGenPtVsGenYXiPlus(0),\r
-    f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus(0),\r
-    f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus(0),\r
-    // Generated Pt Vs generated y, for the cascade candidates associated with MC\r
-    f2dHistAsMCGenPtVsGenYXiMinus(0),\r
-    f2dHistAsMCGenPtVsGenYXiPlus(0),\r
-    f2dHistAsMCGenPtVsGenYOmegaMinus(0),\r
-    f2dHistAsMCGenPtVsGenYOmegaPlus(0),\r
-    // Generated Eta of the the cascade candidates associated with MC\r
-    fHistAsMCGenEtaXiMinus(0),\r
-    fHistAsMCGenEtaXiPlus(0),\r
-    fHistAsMCGenEtaOmegaMinus(0),\r
-    fHistAsMCGenEtaOmegaPlus(0),\r
-    // Resolution in Pt as function of generated Pt\r
-    f2dHistAsMCResPtXiMinus(0),\r
-    f2dHistAsMCResPtXiPlus(0),\r
-    f2dHistAsMCResPtOmegaMinus(0),\r
-    f2dHistAsMCResPtOmegaPlus(0),\r
-    // Resolution in R(2D) as function of generated R\r
-    f2dHistAsMCResRXiMinus(0),\r
-    f2dHistAsMCResRXiPlus(0),\r
-    f2dHistAsMCResROmegaMinus(0),\r
-    f2dHistAsMCResROmegaPlus(0),\r
-    // Resolution in phi as function of generated Pt\r
-    f2dHistAsMCResPhiXiMinus(0),\r
-    f2dHistAsMCResPhiXiPlus(0),\r
-    f2dHistAsMCResPhiOmegaMinus(0),\r
-    f2dHistAsMCResPhiOmegaPlus(0),\r
-    // Correlation between proton (antiproton) daughter MC pt and Xi/Omega MC pt (to apply Geat/Fluka correction)\r
-    f2dHistAsMCptProtonMCptXiMinus(0),\r
-    f2dHistAsMCptAntiprotonMCptXiPlus(0),\r
-    f2dHistAsMCptProtonMCptOmegaMinus(0),\r
-    f2dHistAsMCptAntiprotonMCptOmegaPlus(0),\r
-    // QA plots\r
-    fHistV0toXiCosineOfPointingAngle(0),\r
-    fHistV0CosineOfPointingAnglevsPtXi(0),\r
-    fHistV0CosineOfPointingAnglevsPtOmega(0),\r
-\r
-    // Containers                       \r
-    fCFContCascadePIDAsXiMinus(0),\r
-    fCFContCascadePIDAsXiPlus(0),\r
-    fCFContCascadePIDAsOmegaMinus(0),\r
-    fCFContCascadePIDAsOmegaPlus(0),\r
-    fCFContAsCascadeCuts(0)\r
-\r
-    //____Costructor____\r
-    {\r
-      // Define input and output slots here\r
-      // Input slot #0 works with a TChain\r
-      // Output slot #1 writes into a TList container (cascade)\r
-        \r
-        // PbPb default cuts  \r
-        fV0Sels[0] =  33.;       // max allowed chi2\r
-        fV0Sels[1] =   0.1;      // min allowed impact parameter for the 1st daughter \r
-        fV0Sels[2] =   0.1;      // 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
-        fCascSels[0] =  33.;     // max allowed chi2 \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
-        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
-    }\r
-\r
-    //____Destructor____\r
-    AliAnalysisTaskCheckPerformanceCascadepp276::~AliAnalysisTaskCheckPerformanceCascadepp276()\r
-    {\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 (fCFContCascadePIDAsXiMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())    {delete fCFContCascadePIDAsXiMinus;    fCFContCascadePIDAsXiMinus = 0x0;}\r
-      if (fCFContCascadePIDAsXiPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())     {delete fCFContCascadePIDAsXiPlus;     fCFContCascadePIDAsXiPlus = 0x0;}\r
-      if (fCFContCascadePIDAsOmegaMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {delete fCFContCascadePIDAsOmegaMinus; fCFContCascadePIDAsOmegaMinus = 0x0;}\r
-      if (fCFContCascadePIDAsOmegaPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())  {delete fCFContCascadePIDAsOmegaPlus;  fCFContCascadePIDAsOmegaPlus = 0x0;}\r
-      if (fCFContAsCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())          {delete fCFContAsCascadeCuts;          fCFContAsCascadeCuts = 0x0;}\r
-      if (fESDtrackCuts)                                                                             {delete fESDtrackCuts;                 fESDtrackCuts = 0x0;}\r
-    }\r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {\r
-  // Create histograms\r
-  // Called once\r
-\r
- // - Option for AliLog: to suppress the extensive info prompted by a run with MC\r
- AliLog::SetGlobalLogLevel(AliLog::kError); \r
-\r
- // - Definition of the output datamembers     \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 (! fESDtrackCuts ){\r
-      fESDtrackCuts = new AliESDtrackCuts();\r
- }\r
\r
- //----------------------\r
- // Initialize the histos\r
- //----------------------\r
-\r
- //----------------------------------\r
- // - Same general binning definition\r
- Double_t ptBinLimits[101];\r
- for (Int_t iptbin = 0; iptbin<101; ++iptbin) ptBinLimits[iptbin]=iptbin*0.1;\r
- Double_t yBinLimits[111];\r
- for (Int_t iybin = 0; iybin<111; ++iybin) yBinLimits[iybin]=-1.1+iybin*0.02;\r
- Double_t ctauBinLimits[112];\r
- for (Int_t ict = 0; ict<112; ++ict) ctauBinLimits[ict] = (Double_t) (ict-1.); \r
\r
- //------------------\r
- // - General plots\r
-   // - Cascades multiplicity plots \r
-   if(! fHistCascadeMultiplicityBeforeAnySel) {\r
-        fHistCascadeMultiplicityBeforeAnySel = new TH1F("fHistCascadeMultiplicityBeforeAnySel",\r
-                        "Cascades per event (before any selections);Nbr of Cascades/Evt;Events", 50, 0, 50);\r
-        fListHistCascade->Add(fHistCascadeMultiplicityBeforeAnySel);\r
-   }\r
-   if(! fHistCascadeMultiplicityAfterSDDSel) {\r
-        fHistCascadeMultiplicityAfterSDDSel = new TH1F("fHistCascadeMultiplicityAfterSDDSel",\r
-                        "Cascades per event (after only the SDD selection);Nbr of Cascades/Evt;Events", 50, 0, 50);\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", 50, 0, 50);\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", 50, 0, 50);\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", 50, 0, 50);\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", 50, 0, 50);\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 Tracks/Evt;Events", 200, 0, 200);\r
-        fListHistCascade->Add(fHistTrackMultiplicityBeforeAnySel);\r
-   }\r
-   if(! fHistTrackMultiplicityAfterSDDSel) {\r
-        fHistTrackMultiplicityAfterSDDSel = new TH1F("fHistTrackMultiplicityAfterSDDSel",\r
-                        "Tracks per event (after only the SDD selection);Nbr of Tracks/Evt;Events", 200, 0, 200);\r
-        fListHistCascade->Add(fHistTrackMultiplicityAfterSDDSel);\r
-   }\r
-   if(! fHistTrackMultiplicityAfterPhysicsSel) {\r
-        fHistTrackMultiplicityAfterPhysicsSel = new TH1F("fHistTrackMultiplicityAfterPhysicsSel",\r
-                        "Tracks per event (after physics selection);Nbr of Tracks/Evt;Events", 200, 0, 200);\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 Tracks/Evt;Events", 200, 0, 200);\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 Tracks/Evt;Events", 200, 0, 200);\r
-        fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);\r
-   }\r
-   if(! fHistTrackMultiplicityAfterVertexCutSel) {\r
-        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",\r
-                                                           "Tracks per event (after vertex cut selection);Nbr of Tracks/Evt;Events", 200, 0, 200);\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
-\r
- //--------------------------\r
- // - Generated cascade plots\r
-   // - Generated Cascade multiplicity distributions (for singol cascade)\r
-   fHistnXiPlusPerEvTot = new TH1F("fHistnXiPlusPerEvTot", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnXiPlusPerEvTot);\r
-   fHistnXiMinusPerEvTot = new TH1F("fHistnXiMinusPerEvTot", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnXiMinusPerEvTot);\r
-   fHistnOmegaPlusPerEvTot = new TH1F("fHistnOmegaPlusPerEvTot", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnOmegaPlusPerEvTot);\r
-   fHistnOmegaMinusPerEvTot = new TH1F("fHistnOmegaMinusPerEvTot", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnOmegaMinusPerEvTot);   \r
-   fHistnXiPlusPerEv = new TH1F("fHistnXiPlusPerEv", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnXiPlusPerEv);\r
-   fHistnXiMinusPerEv = new TH1F("fHistnXiMinusPerEv", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnXiMinusPerEv);\r
-   fHistnOmegaPlusPerEv = new TH1F("fHistnOmegaPlusPerEv", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnOmegaPlusPerEv);\r
-   fHistnOmegaMinusPerEv = new TH1F("fHistnOmegaMinusPerEv", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnOmegaMinusPerEv);\r
-   // - Xi- \r
-   // - Pseudo-Rapidity distribution\r
-   if (!fHistEtaGenCascXiMinus) {\r
-     fHistEtaGenCascXiMinus = new TH1F("fHistEtaGenCascXiMinus", "#eta of any gen. #Xi^{-}; #eta; Number of Casc", 200, -10, 10);\r
-     fListHistCascade->Add(fHistEtaGenCascXiMinus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksXiMinus) {\r
-     f3dHistGenPtVsGenYvsNtracksXiMinus = new TH3D("f3dHistGenPtVsGenYvsNtracksXiMinus", "MC P_{t} Vs MC Y of Gen #Xi^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-     fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiMinus);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYXiMinus) {\r
-      f3dHistGenPtVsGenctauvsYXiMinus = new TH3D("f3dHistGenPtVsGenctauvsYXiMinus", "MC P_{t} Vs MC ctau Vs Y of Gen #Xi^{-}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiMinus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff) {\r
-     f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff", "MC P_{t} Vs MC Y of Gen #Xi^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-     fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYXiMinusPhysEff) {\r
-      f3dHistGenPtVsGenctauvsYXiMinusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYXiMinusPhysEff", "MC P_{t} Vs MC ctau Vs Y of Gen #Xi^{-}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiMinusPhysEff);\r
-   }\r
-   // - Info at the generation level of multi-strange particle\r
-   if (!fHistThetaGenCascXiMinus) {\r
-      fHistThetaGenCascXiMinus = new TH1F("fHistThetaGenCascXiMinus", "#theta of gen. #Xi^{-}; #theta; Number of Casc.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaGenCascXiMinus);\r
-   }\r
-   if (!f2dHistGenPtVsGenYFdblXiMinus) {\r
-      f2dHistGenPtVsGenYFdblXiMinus = new TH2D("f2dHistGenPtVsGenYFdblXiMinus", "MC P_{t} Vs MC Y of findable Gen #Xi^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistGenPtVsGenYFdblXiMinus);\r
-   }\r
-   // - Theta distribution the daughters (control plots)\r
-   if (!fHistThetaLambdaXiMinus) {\r
-      fHistThetaLambdaXiMinus = new TH1F("fHistThetaLambdaXiMinus", "#theta of gen. #Lambda (Xi dghter); #theta_{#Lambda}; Number of #Lambda^0", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaLambdaXiMinus);\r
-   }\r
-   if (!fHistThetaBachXiMinus) {\r
-      fHistThetaBachXiMinus = new TH1F("fHistThetaBachXiMinus", "#theta of gen. Bach.; #theta_{Bach}; Number of Bach.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBachXiMinus);\r
-   }\r
-   if (!fHistThetaMesDghterXiMinus) {\r
-      fHistThetaMesDghterXiMinus = new TH1F("fHistThetaMesDghterXiMinus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaMesDghterXiMinus);\r
-   }\r
-   if (!fHistThetaBarDghterXiMinus) {\r
-      fHistThetaBarDghterXiMinus = new TH1F("fHistThetaBarDghterXiMinus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBarDghterXiMinus);\r
-   }\r
-   // - Pt distribution (control plots)\r
-   if (!fHistPtBachXiMinus) {\r
-      fHistPtBachXiMinus = new TH1F("fHistPtBachXiMinus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBachXiMinus);\r
-   }\r
-   if (!fHistPtMesDghterXiMinus) {\r
-      fHistPtMesDghterXiMinus = new TH1F("fHistPtMesDghterXiMinus", "p_{t} of gen. Meson #Lambda dghter; pt_{MesDght}; Number of Mes.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtMesDghterXiMinus);\r
-   }\r
-   if (!fHistPtBarDghterXiMinus) {\r
-      fHistPtBarDghterXiMinus = new TH1F("fHistPtBarDghterXiMinus", "p_{t} of gen. Baryon #Lambda dghter; pt_{BarDght}; Number of Bar.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBarDghterXiMinus);\r
-   }\r
-   // - Xi+ \r
-   // - Pseudo-Rapidity distribution\r
-   if (!fHistEtaGenCascXiPlus) {\r
-      fHistEtaGenCascXiPlus = new TH1F("fHistEtaGenCascXiPlus", "#eta of any gen. #Xi^{+}; #eta; Number of Casc", 200, -10, 10);\r
-      fListHistCascade->Add(fHistEtaGenCascXiPlus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksXiPlus) {\r
-      f3dHistGenPtVsGenYvsNtracksXiPlus = new TH3D("f3dHistGenPtVsGenYvsNtracksXiPlus", "MC P_{t} Vs MC Y of Gen #Xi^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiPlus);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYXiPlus) {\r
-      f3dHistGenPtVsGenctauvsYXiPlus = new TH3D("f3dHistGenPtVsGenctauvsYXiPlus", "MC P_{t} Vs MC ctau Vs Yof Gen #Xi^{+}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiPlus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff) {\r
-      f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff", "MC P_{t} Vs MC Y of Gen #Xi^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYXiPlusPhysEff) {\r
-      f3dHistGenPtVsGenctauvsYXiPlusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYXiPlusPhysEff", "MC P_{t} Vs MC ctau Vs Yof Gen #Xi^{+}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiPlusPhysEff);\r
-   }\r
-   // - Info at the generation level of multi-strange particle\r
-   if (!fHistThetaGenCascXiPlus) {\r
-      fHistThetaGenCascXiPlus = new TH1F("fHistThetaGenCascXiPlus", "#theta of gen. #Xi^{+}; #theta; Number of Casc.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaGenCascXiPlus);\r
-   }\r
-   if (!f2dHistGenPtVsGenYFdblXiPlus) {\r
-      f2dHistGenPtVsGenYFdblXiPlus = new TH2D("f2dHistGenPtVsGenYFdblXiPlus", "MC P_{t} Vs MC Y of findable Gen #Xi^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistGenPtVsGenYFdblXiPlus);\r
-   }\r
-   // - Theta distribution the daughters (control plots)\r
-   if (!fHistThetaLambdaXiPlus) {\r
-      fHistThetaLambdaXiPlus = new TH1F("fHistThetaLambdaXiPlus", "#theta of gen. #Lambda (Xi dghter); #theta_{#Lambda}; Number of #Lambda", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaLambdaXiPlus);\r
-   }\r
-   if (!fHistThetaBachXiPlus) {\r
-      fHistThetaBachXiPlus = new TH1F("fHistThetaBachXiPlus", "#theta of gen. Bach.; #theta_{Bach}; Number of Bach.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBachXiPlus);\r
-   }\r
-   if (!fHistThetaMesDghterXiPlus) {\r
-      fHistThetaMesDghterXiPlus = new TH1F("fHistThetaMesDghterXiPlus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaMesDghterXiPlus);\r
-   }\r
-   if (!fHistThetaBarDghterXiPlus) {\r
-      fHistThetaBarDghterXiPlus = new TH1F("fHistThetaBarDghterXiPlus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBarDghterXiPlus);\r
-   }\r
-   // - Pt distribution (control plots)\r
-   if (!fHistPtBachXiPlus) {\r
-      fHistPtBachXiPlus = new TH1F("fHistPtBachXiPlus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBachXiPlus);\r
-   }\r
-   if (!fHistPtMesDghterXiPlus) {\r
-      fHistPtMesDghterXiPlus = new TH1F("fHistPtMesDghterXiPlus", "p_{t} of gen. Meson #Lambda dghter; pt_{MesDght}; Number of Mes.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtMesDghterXiPlus);\r
-   }\r
-   if (!fHistPtBarDghterXiPlus) {\r
-      fHistPtBarDghterXiPlus = new TH1F("fHistPtBarDghterXiPlus", "p_{t} of gen. Baryon #Lambda dghter); pt_{BarDght}; Number of Bar.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBarDghterXiPlus);\r
-   }\r
-   // - Omega- \r
-   // - Pseudo-Rapidity distribution\r
-   if (!fHistEtaGenCascOmegaMinus) {\r
-      fHistEtaGenCascOmegaMinus = new TH1F("fHistEtaGenCascOmegaMinus", "#eta of any gen. #Omega^{-}; #eta; Number of Casc", 200, -10, 10);\r
-      fListHistCascade->Add(fHistEtaGenCascOmegaMinus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksOmegaMinus) {\r
-      f3dHistGenPtVsGenYvsNtracksOmegaMinus = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaMinus", "MC P_{t} Vs MC Y of Gen #Omega^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaMinus);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYOmegaMinus) {\r
-      f3dHistGenPtVsGenctauvsYOmegaMinus = new TH3D("f3dHistGenPtVsGenctauvsYOmegaMinus", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{-} ", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaMinus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff) {\r
-      f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff", "MC P_{t} Vs MC Y of Gen #Omega^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff) {\r
-      f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{-}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff);\r
-   }\r
-   // - Info at the generation level of multi-strange particle\r
-   if (!fHistThetaGenCascOmegaMinus) {\r
-      fHistThetaGenCascOmegaMinus = new TH1F("fHistThetaGenCascOmegaMinus", "#theta of gen. #Omega^{-}; #theta; Number of Casc.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaGenCascOmegaMinus);\r
-   }\r
-   if (!f2dHistGenPtVsGenYFdblOmegaMinus) {\r
-      f2dHistGenPtVsGenYFdblOmegaMinus = new TH2D("f2dHistGenPtVsGenYFdblOmegaMinus", "MC P_{t} Vs MC Y of findable Gen #Omega^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaMinus);\r
-   }\r
-   // - Theta distribution the daughters (control plots)\r
-   if (!fHistThetaLambdaOmegaMinus) {\r
-      fHistThetaLambdaOmegaMinus = new TH1F("fHistThetaLambdaOmegaMinus", "#theta of gen. #Lambda (Omega dghter); #theta_{#Lambda}; Number of #Lambda", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaLambdaOmegaMinus);\r
-   }\r
-   if (!fHistThetaBachOmegaMinus) {\r
-      fHistThetaBachOmegaMinus = new TH1F("fHistThetaBachOmegaMinus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBachOmegaMinus);\r
-   }\r
-   if (!fHistThetaMesDghterOmegaMinus) {\r
-      fHistThetaMesDghterOmegaMinus = new TH1F("fHistThetaMesDghterOmegaMinus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaMesDghterOmegaMinus);\r
-   }\r
-   if (!fHistThetaBarDghterOmegaMinus) {\r
-      fHistThetaBarDghterOmegaMinus = new TH1F("fHistThetaBarDghterOmegaMinus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBarDghterOmegaMinus);\r
-   }\r
-   // - Pt distribution (control plots)\r
-   if (!fHistPtBachOmegaMinus) {\r
-      fHistPtBachOmegaMinus = new TH1F("fHistPtBachOmegaMinus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBachOmegaMinus);\r
-   }\r
-   if (!fHistPtMesDghterOmegaMinus) {\r
-      fHistPtMesDghterOmegaMinus = new TH1F("fHistPtMesDghterOmegaMinus", "p_{t} of gen. Meson #Lambda dghter); pt_{MesDght}; Number of Mes.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtMesDghterOmegaMinus);\r
-   }\r
-   if (!fHistPtBarDghterOmegaMinus) {\r
-      fHistPtBarDghterOmegaMinus = new TH1F("fHistPtBarDghterOmegaMinus", "p_{t} of gen. Baryon #Lambda dghter); pt_{BarDght}; Number of Bar.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBarDghterOmegaMinus);\r
-   }\r
-   // - Omega+ \r
-   // - Pseudo-Rapidity distribution\r
-   if (!fHistEtaGenCascOmegaPlus) {\r
-      fHistEtaGenCascOmegaPlus = new TH1F("fHistEtaGenCascOmegaPlus", "#eta of any gen. #Omega^{+}; #eta; Number of Casc", 200, -10, 10);\r
-      fListHistCascade->Add(fHistEtaGenCascOmegaPlus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksOmegaPlus) {\r
-      f3dHistGenPtVsGenYvsNtracksOmegaPlus = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaPlus", "MC P_{t} Vs MC Y of Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaPlus);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYOmegaPlus) {\r
-      f3dHistGenPtVsGenctauvsYOmegaPlus = new TH3D("f3dHistGenPtVsGenctauvsYOmegaPlus", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{+} ", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaPlus);\r
-   }\r
-   if (!f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff) {\r
-      f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff", "MC P_{t} Vs MC Y of Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff);\r
-   }\r
-   if (!f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff) {\r
-      f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{+}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);\r
-      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff);\r
-   }\r
-   // - Info at the generation level of multi-strange particle\r
-   if (!fHistThetaGenCascOmegaPlus) {\r
-      fHistThetaGenCascOmegaPlus = new TH1F("fHistThetaGenCascOmegaPlus", "#theta of gen. #Omega^{+}; #theta; Number of Casc.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaGenCascOmegaPlus);\r
-   }\r
-   if (!f2dHistGenPtVsGenYFdblOmegaPlus) {\r
-      f2dHistGenPtVsGenYFdblOmegaPlus = new TH2D("f2dHistGenPtVsGenYFdblOmegaPlus", "MC P_{t} Vs MC Y of findable Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaPlus);\r
-   }\r
-   // - Info at the generation level of multi-strange particle\r
-   if (!fHistThetaGenCascOmegaPlus) {\r
-      fHistThetaGenCascOmegaPlus = new TH1F("fHistThetaGenCascOmegaPlus", "#theta of gen. #Omega^{+}; #theta; Number of Casc.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaGenCascOmegaPlus);\r
-   }\r
-   if (!f2dHistGenPtVsGenYFdblOmegaPlus) {\r
-      f2dHistGenPtVsGenYFdblOmegaPlus = new TH2D("f2dHistGenPtVsGenYFdblOmegaPlus", "MC P_{t} Vs MC Y of findable Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaPlus);\r
-   }\r
-   // - Theta distribution the daughters (control plots)\r
-   if (!fHistThetaLambdaOmegaPlus) {\r
-      fHistThetaLambdaOmegaPlus = new TH1F("fHistThetaLambdaOmegaPlus", "#theta of gen. #Lambda (Omega dghter); #theta_{#Lambda}; Number of #Lambda", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaLambdaOmegaPlus);\r
-   }\r
-   if (!fHistThetaBachOmegaPlus) {\r
-      fHistThetaBachOmegaPlus = new TH1F("fHistThetaBachOmegaPlus", "#theta of gen. Bach.; #theta_{Bach}; Number of Bach.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBachOmegaPlus);\r
-   }\r
-   if (!fHistThetaMesDghterOmegaPlus) {\r
-      fHistThetaMesDghterOmegaPlus = new TH1F("fHistThetaMesDghterOmegaPlus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaMesDghterOmegaPlus);\r
-   }\r
-   if (!fHistThetaBarDghterOmegaPlus) {\r
-      fHistThetaBarDghterOmegaPlus = new TH1F("fHistThetaBarDghterOmegaPlus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);\r
-      fListHistCascade->Add(fHistThetaBarDghterOmegaPlus);\r
-   }\r
-   // - Pt distribution (control plots)\r
-   if (!fHistPtBachOmegaPlus) {\r
-      fHistPtBachOmegaPlus = new TH1F("fHistPtBachOmegaPlus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBachOmegaPlus);\r
-   }\r
-   if (!fHistPtMesDghterOmegaPlus) {\r
-      fHistPtMesDghterOmegaPlus = new TH1F("fHistPtMesDghterOmegaPlus", "p_{t} of gen. Meson #Lambda dghter; pt_{MesDght}; Number of Mes.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtMesDghterOmegaPlus);\r
-   }\r
-   if (!fHistPtBarDghterOmegaPlus) {\r
-      fHistPtBarDghterOmegaPlus = new TH1F("fHistPtBarDghterOmegaPlus", "p_{t} of gen. Baryon #Lambda dghter); pt_{BarDght}; Number of Bar.", 200, 0, 10);\r
-      fListHistCascade->Add(fHistPtBarDghterOmegaPlus);\r
-   }\r
\r
- //-------------------------------------------------------------------------\r
- // - Any reconstructed cascades + reconstructed cascades associated with MC\r
-  \r
-   // - Multiplicity cascde plots\r
-   fHistnAssoXiMinus= new TH1F("fHistnAssoXiMinus", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnAssoXiMinus);\r
-   fHistnAssoXiPlus= new TH1F("fHistnAssoXiPlus", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnAssoXiPlus);\r
-   fHistnAssoOmegaMinus= new TH1F("fHistnAssoOmegaMinus", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnAssoOmegaMinus);\r
-   fHistnAssoOmegaPlus= new TH1F("fHistnAssoOmegaPlus", "", 25, 0, 25);\r
-   fListHistCascade->Add(fHistnAssoOmegaPlus);\r
-   // - Effective mass histos for cascades candidates. \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
-   // - Effective mass histos with combined PID\r
-   if (! fHistMassWithCombPIDXiMinus) {\r
-      fHistMassWithCombPIDXiMinus = new TH1F("fHistMassWithCombPIDXiMinus","#Xi^{-} candidates, with Bach. comb. PID; M( #Lambda , #pi^{-} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);\r
-      fListHistCascade->Add(fHistMassWithCombPIDXiMinus);\r
-   }\r
-   if (! fHistMassWithCombPIDXiPlus) {\r
-      fHistMassWithCombPIDXiPlus = new TH1F("fHistMassWithCombPIDXiPlus","#Xi^{+} candidates, with Bach. comb. PID; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);\r
-      fListHistCascade->Add(fHistMassWithCombPIDXiPlus);\r
-   }\r
-   if (! fHistMassWithCombPIDOmegaMinus) {\r
-      fHistMassWithCombPIDOmegaMinus = new TH1F("fHistMassWithCombPIDOmegaMinus","#Omega^{-} candidates, with Bach. comb. PID; M( #Lambda , K^{-} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);\r
-      fListHistCascade->Add(fHistMassWithCombPIDOmegaMinus);\r
-   }\r
-   if (! fHistMassWithCombPIDOmegaPlus) {\r
-      fHistMassWithCombPIDOmegaPlus = new TH1F("fHistMassWithCombPIDOmegaPlus","#Omega^{+} candidates, with Bach. comb. PID; M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);\r
-      fListHistCascade->Add(fHistMassWithCombPIDOmegaPlus);\r
-   }\r
-   // - PID Probability versus MC Pt(bachelor track)\r
-   if (! f2dHistPIDprobaKaonVsMCPtBach ){\r
-      f2dHistPIDprobaKaonVsMCPtBach  = new TH2F("f2dHistPIDprobaKaonVsMCPtBach", "Comb. PID proba to be K^{#pm} Vs MC Bach. Pt; Pt_{MC}(Bach.) (GeV/c); Comb. PID Proba (Bach. = K^{#pm})", 100, 0.0, 5.0, 110, 0.0, 1.10);\r
-      fListHistCascade->Add(f2dHistPIDprobaKaonVsMCPtBach);\r
-   }\r
-   if(! f2dHistPIDprobaPionVsMCPtBach ){\r
-      f2dHistPIDprobaPionVsMCPtBach  = new TH2F("f2dHistPIDprobaPionVsMCPtBach", "Comb. PID proba to be #pi^{#pm} Vs MC Bach. Pt; Pt_{MC}(Bach.) (GeV/c); Comb. PID Proba (Bach. = #pi^{#pm})", 100, 0.0, 5.0, 110, 0.0, 1.10);\r
-      fListHistCascade->Add(f2dHistPIDprobaPionVsMCPtBach);\r
-   }\r
-   // - Effective mass histos with perfect MC PID on the bachelor\r
-   if (! fHistMassWithMcPIDXiMinus) {\r
-      fHistMassWithMcPIDXiMinus = new TH1F("fHistMassWithMcPIDXiMinus", "#Xi^{-} candidates, with Bach. MC PID; M( #Lambda , #pi^{-} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);\r
-      fListHistCascade->Add(fHistMassWithMcPIDXiMinus);\r
-   }\r
-   if (! fHistMassWithMcPIDXiPlus) {\r
-      fHistMassWithMcPIDXiPlus = new TH1F("fHistMassWithMcPIDXiPlus", "#Xi^{+} candidates, with Bach. MC PID; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);\r
-      fListHistCascade->Add(fHistMassWithMcPIDXiPlus);\r
-   }\r
-   if (! fHistMassWithMcPIDOmegaMinus) {\r
-      fHistMassWithMcPIDOmegaMinus = new TH1F("fHistMassWithMcPIDOmegaMinus", "#Omega^{-} candidates, with Bach. MC PID; M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500, 1.5, 2.5);\r
-      fListHistCascade->Add(fHistMassWithMcPIDOmegaMinus);\r
-   }\r
-   if (! fHistMassWithMcPIDOmegaPlus) {\r
-      fHistMassWithMcPIDOmegaPlus = new TH1F("fHistMassWithMcPIDOmegaPlus", "#Omega^{+} candidates, with Bach. MC PID; M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);\r
-      fListHistCascade->Add(fHistMassWithMcPIDOmegaPlus);\r
-   }\r
-   // - Effective mass histos for cascades candidates ASSOCIATED with MC.\r
-   if (! fHistAsMCMassXiMinus) {\r
-      fHistAsMCMassXiMinus = new TH1F("fHistAsMCMassXiMinus", "#Xi^{-} candidates associated to MC; M( #Lambda , #pi^{-} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);\r
-      fListHistCascade->Add(fHistAsMCMassXiMinus);\r
-   }\r
-   if (! fHistAsMCMassXiPlus) {\r
-      fHistAsMCMassXiPlus = new TH1F("fHistAsMCMassXiPlus", "#Xi^{+} candidates associated to MC; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);\r
-      fListHistCascade->Add(fHistAsMCMassXiPlus);\r
-   }\r
-   if (! fHistAsMCMassOmegaMinus) {\r
-      fHistAsMCMassOmegaMinus = new TH1F("fHistAsMCMassOmegaMinus", "#Omega^{-} candidates associated to MC; M( #Lambda , K^{-} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);\r
-      fListHistCascade->Add(fHistAsMCMassOmegaMinus);\r
-   }\r
-   if (! fHistAsMCMassOmegaPlus) {\r
-      fHistAsMCMassOmegaPlus = new TH1F("fHistAsMCMassOmegaPlus", "#Omega^{+} candidates associated to MC; M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);\r
-      fListHistCascade->Add(fHistAsMCMassOmegaPlus);\r
-   }\r
-   // -  Generated Pt Vs generated Y of the cascade candidates associated with MC + having the proper maximum proba of combined PID for the bachelor\r
-   if (!f2dHistAsMCandCombPIDGenPtVsGenYXiMinus) {\r
-      f2dHistAsMCandCombPIDGenPtVsGenYXiMinus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYXiMinus", "MC P_{t} Vs MC Y of #Xi^{-} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYXiMinus);\r
-   }\r
-   if (!f2dHistAsMCandCombPIDGenPtVsGenYXiPlus) {\r
-      f2dHistAsMCandCombPIDGenPtVsGenYXiPlus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYXiPlus", "MC P_{t} Vs MC Y of #Xi^{+} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYXiPlus);\r
-   } \r
-   if (!f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus) {\r
-      f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus", "MC P_{t} Vs MC Y of #Omega^{-} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus);\r
-   }\r
-   if (!f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus) {\r
-      f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus", "MC P_{t} Vs MC Y of #Omega^{+} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus);\r
-   }\r
-   // - Generated Pt Vs Generated Y, for the cascade candidates associated with MC\r
-   if (!f2dHistAsMCGenPtVsGenYXiMinus) {\r
-      f2dHistAsMCGenPtVsGenYXiMinus = new TH2F("f2dHistAsMCGenPtVsGenYXiMinus", "MC P_{t} Vs MC Y of gen. #Xi^{-} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYXiMinus );\r
-   }\r
-   if (!f2dHistAsMCGenPtVsGenYXiPlus) {\r
-      f2dHistAsMCGenPtVsGenYXiPlus = new TH2F("f2dHistAsMCGenPtVsGenYXiPlus", "MC P_{t} Vs MC Y of gen. #Xi^{+} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYXiPlus );\r
-   }\r
-   if (!f2dHistAsMCGenPtVsGenYOmegaMinus) {\r
-      f2dHistAsMCGenPtVsGenYOmegaMinus = new TH2F("f2dHistAsMCGenPtVsGenYOmegaMinus", "MC P_{t} Vs MC Y of gen. #Omega^{-} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYOmegaMinus );\r
-   }\r
-   if (!f2dHistAsMCGenPtVsGenYOmegaPlus) {\r
-      f2dHistAsMCGenPtVsGenYOmegaPlus = new TH2F("f2dHistAsMCGenPtVsGenYOmegaPlus", "MC P_{t} Vs MC Y of gen. #Omega^{+} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);\r
-      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYOmegaPlus );\r
-   } \r
-   // - Generated Eta of the the cascade candidates associated with MC\r
-   if (!fHistAsMCGenEtaXiMinus) {\r
-      fHistAsMCGenEtaXiMinus = new TH1F("fHistAsMCGenEtaXiMinus", "#eta of gen. #Xi^{-} (associated); #eta; Count", 100, -5, 5);\r
-      fListHistCascade->Add( fHistAsMCGenEtaXiMinus );\r
-   }\r
-   if (!fHistAsMCGenEtaXiPlus) {\r
-      fHistAsMCGenEtaXiPlus = new TH1F("fHistAsMCGenEtaXiPlus", "#eta of gen. #Xi^{+} (associated); #eta; Count", 100, -5, 5);\r
-      fListHistCascade->Add( fHistAsMCGenEtaXiPlus );\r
-   }\r
-   if (!fHistAsMCGenEtaOmegaMinus) {\r
-      fHistAsMCGenEtaOmegaMinus = new TH1F("fHistAsMCGenEtaOmegaMinus", "#eta of gen. #Omega^{-} (associated);#eta;Number of Casc", 100, -5, 5);\r
-      fListHistCascade->Add( fHistAsMCGenEtaOmegaMinus );\r
-   }\r
-   if (!fHistAsMCGenEtaOmegaPlus) {\r
-      fHistAsMCGenEtaOmegaPlus = new TH1F("fHistAsMCGenEtaOmegaPlus", "#eta of gen. #Omega^{+} (associated); #eta; Count", 100, -5, 5);\r
-      fListHistCascade->Add( fHistAsMCGenEtaOmegaPlus );\r
-   }\r
-   // - Resolution in Pt as function of generated Pt\r
-   if (! f2dHistAsMCResPtXiMinus) {\r
-      f2dHistAsMCResPtXiMinus = new TH2F("f2dHistAsMCResPtXiMinus", "Resolution in Pt reconstruction for #Xi^{-}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);\r
-      fListHistCascade->Add(f2dHistAsMCResPtXiMinus);\r
-   }\r
-   if (! f2dHistAsMCResPtXiPlus) {\r
-      f2dHistAsMCResPtXiPlus = new TH2F("f2dHistAsMCResPtXiPlus", "Resolution in Pt reconstruction for #Xi^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);\r
-      fListHistCascade->Add(f2dHistAsMCResPtXiPlus);\r
-   }\r
-   if (! f2dHistAsMCResPtOmegaMinus) {\r
-      f2dHistAsMCResPtOmegaMinus = new TH2F("f2dHistAsMCResPtOmegaMinus", "Resolution in Pt reconstruction for #Omega^{-}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);\r
-      fListHistCascade->Add(f2dHistAsMCResPtOmegaMinus);\r
-   }\r
-   if (! f2dHistAsMCResPtOmegaPlus) {\r
-      f2dHistAsMCResPtOmegaPlus = new TH2F("f2dHistAsMCResPtOmegaPlus", "Resolution in Pt reconstruction for #Omega^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);\r
-      fListHistCascade->Add(f2dHistAsMCResPtOmegaPlus);\r
-   }\r
-   // - Resolution in R(2D) as function of generated R\r
-   if (! f2dHistAsMCResRXiMinus) {\r
-      f2dHistAsMCResRXiMinus = new TH2F("f2dHistAsMCResRXiMinus", "Resolution in transv. position for #Xi^{-}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);\r
-      fListHistCascade->Add(f2dHistAsMCResRXiMinus);\r
-   }\r
-   if (! f2dHistAsMCResRXiPlus) {\r
-      f2dHistAsMCResRXiPlus = new TH2F("f2dHistAsMCResRXiPlus", "Resolution in transv. position for #Xi^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);\r
-      fListHistCascade->Add(f2dHistAsMCResRXiPlus);\r
-   } \r
-   if (! f2dHistAsMCResROmegaMinus) {\r
-      f2dHistAsMCResROmegaMinus = new TH2F("f2dHistAsMCResROmegaMinus", "Resolution in transv. position for #Omega^{-}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);\r
-      fListHistCascade->Add(f2dHistAsMCResROmegaMinus);\r
-   }\r
-   if (! f2dHistAsMCResROmegaPlus) {\r
-      f2dHistAsMCResROmegaPlus = new TH2F("f2dHistAsMCResROmegaPlus", "Resolution in transv. position for #Omega^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);\r
-      fListHistCascade->Add(f2dHistAsMCResROmegaPlus);\r
-   }\r
-   // - Resolution in phi as function of generated Pt \r
-   if (! f2dHistAsMCResPhiXiMinus) {\r
-      f2dHistAsMCResPhiXiMinus = new TH2F("f2dHistAsMCResPhiXiMinus", "Resolution in #phi for #Xi^{-}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);\r
-      fListHistCascade->Add(f2dHistAsMCResPhiXiMinus);\r
-   }\r
-   if (! f2dHistAsMCResPhiXiPlus) {\r
-      f2dHistAsMCResPhiXiPlus = new TH2F("f2dHistAsMCResPhiXiPlus", "Resolution in #phi for #Xi^{+}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);\r
-      fListHistCascade->Add(f2dHistAsMCResPhiXiPlus);\r
-   }\r
-   if (! f2dHistAsMCResPhiOmegaMinus) {\r
-      f2dHistAsMCResPhiOmegaMinus = new TH2F("f2dHistAsMCResPhiOmegaMinus", "Resolution in #phi for #Omega^{-}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);  \r
-      fListHistCascade->Add(f2dHistAsMCResPhiOmegaMinus);\r
-   }\r
-   if (! f2dHistAsMCResPhiOmegaPlus) {\r
-      f2dHistAsMCResPhiOmegaPlus = new TH2F("f2dHistAsMCResPhiOmegaPlus", "Resolution in #phi for #Omega^{+}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);\r
-      fListHistCascade->Add(f2dHistAsMCResPhiOmegaPlus);\r
-   }\r
-   //  - Correlation between proton (antiproton) daughter MC pt and Xi/Omega MC pt (to apply Geant/Fluka correction)\r
-   if (!f2dHistAsMCptProtonMCptXiMinus) {\r
-      f2dHistAsMCptProtonMCptXiMinus = new TH2F("f2dHistAsMCptProtonMCptXiMinus", "Proton MC pt vs Xi- MC pt", 100, 0., 10., 100, 0., 10.); \r
-      fListHistCascade->Add(f2dHistAsMCptProtonMCptXiMinus);\r
-   }\r
-   if (!f2dHistAsMCptAntiprotonMCptXiPlus) {\r
-      f2dHistAsMCptAntiprotonMCptXiPlus = new TH2F("f2dHistAsMCptAntiprotonMCptXiPlus", "Antiproton MC pt vs Xi+ MC pt", 100, 0., 10., 100, 0., 10.);\r
-      fListHistCascade->Add(f2dHistAsMCptAntiprotonMCptXiPlus);\r
-   }\r
-   if (!f2dHistAsMCptProtonMCptOmegaMinus) {\r
-      f2dHistAsMCptProtonMCptOmegaMinus = new TH2F("f2dHistAsMCptProtonMCptOmegaMinus", "Proton MC pt vs Omega- MC pt", 100, 0., 10., 100, 0., 10.);\r
-      fListHistCascade->Add(f2dHistAsMCptProtonMCptOmegaMinus);\r
-   }\r
-   if (!f2dHistAsMCptAntiprotonMCptOmegaPlus) {\r
-      f2dHistAsMCptAntiprotonMCptOmegaPlus = new TH2F("f2dHistAsMCptAntiprotonMCptOmegaPlus", "Antiproton MC pt vs Omega+ MC pt", 100, 0., 10., 100, 0., 10.);\r
-      fListHistCascade->Add(f2dHistAsMCptAntiprotonMCptOmegaPlus);\r
-   }\r
-   // - Cosine of Pointing angle\r
-   if (! fHistV0toXiCosineOfPointingAngle) {\r
-      fHistV0toXiCosineOfPointingAngle = new TH1F("fHistV0toXiCosineOfPointingAngle", "Cos. of V0 Ptng Angl / Xi vtx ; Cos(V0 Point. Angl / Xi vtx); Counts", 200, 0.95, 1.0001);\r
-      fListHistCascade->Add(fHistV0toXiCosineOfPointingAngle);\r
-   }\r
-   if (! fHistV0CosineOfPointingAnglevsPtXi) {\r
-      fHistV0CosineOfPointingAnglevsPtXi = new TH2F("fHistV0CosineOfPointingAnglevsPtXi", "Cos. of V0 Ptng Angl vs cascade Pt; Cos(V0 Point. Angl); Counts", 100, 0., 10., 200, 0.95, 1.0001);\r
-      fListHistCascade->Add(fHistV0CosineOfPointingAnglevsPtXi);\r
-   }\r
-   if (! fHistV0CosineOfPointingAnglevsPtOmega) {\r
-      fHistV0CosineOfPointingAnglevsPtOmega = new TH2F("fHistV0CosineOfPointingAnglevsPtOmega", "Cos. of V0 Ptng Angl vs cascade Pt; Cos(V0 Point. Angl); Counts", 100, 0., 10., 200, 0.95, 1.0001);\r
-      fListHistCascade->Add(fHistV0CosineOfPointingAnglevsPtOmega);\r
-   }\r
-\r
-  //--------------\r
-  // - CFContainer\r
-  // PID container Xi-\r
-  if(! fCFContCascadePIDAsXiMinus)  {\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
-     fCFContCascadePIDAsXiMinus = new AliCFContainer(Form("fCFContCascadePIDAsXiMinus_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 );\r
-       //Setting the bin limits \r
-     fCFContCascadePIDAsXiMinus->SetBinLimits(0,   0.0  ,  10.0 );     // Pt(Cascade)\r
-     fCFContCascadePIDAsXiMinus->SetBinLimits(1,   1.2  ,   2.0 );     // Xi Effective mass\r
-     fCFContCascadePIDAsXiMinus->SetBinLimits(2,  -1.1  ,   1.1 );     // Rapidity\r
-       //Setting the step title : one per PID case\r
-     fCFContCascadePIDAsXiMinus->SetStepTitle(0, "No PID");\r
-     fCFContCascadePIDAsXiMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-     fCFContCascadePIDAsXiMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-     fCFContCascadePIDAsXiMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-     fCFContCascadePIDAsXiMinus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-     fCFContCascadePIDAsXiMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-     fCFContCascadePIDAsXiMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");\r
-       //Setting the variable title, per axis\r
-     fCFContCascadePIDAsXiMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-     fCFContCascadePIDAsXiMinus->SetVarTitle(1, "M( #Lambda , #pi^{-} ) (GeV/c^{2})");\r
-     fCFContCascadePIDAsXiMinus->SetVarTitle(2, "Y_{#Xi}");\r
-     fListHistCascade->Add(fCFContCascadePIDAsXiMinus);  \r
-  }\r
-  // PID container Xi+\r
-  if(! fCFContCascadePIDAsXiPlus)  {\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
-     fCFContCascadePIDAsXiPlus = new AliCFContainer(Form("fCFContCascadePIDAsXiPlus_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 );\r
-       //Setting the bin limits (valid  for v4-18-10-AN)\r
-     fCFContCascadePIDAsXiPlus->SetBinLimits(0,   0.0  ,  10.0 );      // Pt(Cascade)\r
-     fCFContCascadePIDAsXiPlus->SetBinLimits(1,   1.2  ,   2.0 );      // Xi Effective mass\r
-     fCFContCascadePIDAsXiPlus->SetBinLimits(2,  -1.1  ,   1.1 );      // Rapidity \r
-       //Setting the step title : one per PID case\r
-     fCFContCascadePIDAsXiPlus->SetStepTitle(0, "No PID");\r
-     fCFContCascadePIDAsXiPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-     fCFContCascadePIDAsXiPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-     fCFContCascadePIDAsXiPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-     fCFContCascadePIDAsXiPlus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-     fCFContCascadePIDAsXiPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-     fCFContCascadePIDAsXiPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");  \r
-       //Setting the variable title, per axis\r
-     fCFContCascadePIDAsXiPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-     fCFContCascadePIDAsXiPlus->SetVarTitle(1, "M( #Lambda , #pi^{+} ) (GeV/c^{2})");\r
-     fCFContCascadePIDAsXiPlus->SetVarTitle(2, "Y_{#Xi}");\r
-     fListHistCascade->Add(fCFContCascadePIDAsXiPlus);\r
-  }\r
-  // PID container Omega-\r
-  if(! fCFContCascadePIDAsOmegaMinus)  {\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
-     fCFContCascadePIDAsOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDAsOmegaMinus_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 );\r
-       //Setting the bin limits \r
-     fCFContCascadePIDAsOmegaMinus->SetBinLimits(0,   0.0  ,  10.0 );  // Pt(Cascade)\r
-     fCFContCascadePIDAsOmegaMinus->SetBinLimits(1,   1.5  ,   2.5 );  // Omega Effective mass\r
-     fCFContCascadePIDAsOmegaMinus->SetBinLimits(2,  -1.1  ,   1.1 );  // Rapidity\r
-       //Setting the step title : one per PID case\r
-     fCFContCascadePIDAsOmegaMinus->SetStepTitle(0, "No PID");\r
-     fCFContCascadePIDAsOmegaMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-     fCFContCascadePIDAsOmegaMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-     fCFContCascadePIDAsOmegaMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-     fCFContCascadePIDAsOmegaMinus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-     fCFContCascadePIDAsOmegaMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-     fCFContCascadePIDAsOmegaMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");\r
-       //Setting the variable title, per axis\r
-     fCFContCascadePIDAsOmegaMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-     fCFContCascadePIDAsOmegaMinus->SetVarTitle(1, "M( #Lambda , K^{-} ) (GeV/c^{2})");\r
-     fCFContCascadePIDAsOmegaMinus->SetVarTitle(2, "Y_{#Omega}");\r
-     fListHistCascade->Add(fCFContCascadePIDAsOmegaMinus);\r
-  }\r
-  // PID container Omega+\r
-  if(! fCFContCascadePIDAsOmegaPlus)  {\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
-     fCFContCascadePIDAsOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDAsOmegaPlus_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 );\r
-       //Setting the bin limits \r
-     fCFContCascadePIDAsOmegaPlus->SetBinLimits(0,   0.0  ,  10.0 );   // Pt(Cascade)\r
-     fCFContCascadePIDAsOmegaPlus->SetBinLimits(1,   1.5  ,   2.5 );   // Omega Effective mass\r
-     fCFContCascadePIDAsOmegaPlus->SetBinLimits(2,  -1.1  ,   1.1 );   // Rapidity\r
-       //Setting the step title : one per PID case\r
-     fCFContCascadePIDAsOmegaPlus->SetStepTitle(0, "No PID");\r
-     fCFContCascadePIDAsOmegaPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");\r
-     fCFContCascadePIDAsOmegaPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");\r
-     fCFContCascadePIDAsOmegaPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");\r
-     fCFContCascadePIDAsOmegaPlus->SetStepTitle(4, "Comb. PID / Bachelor");\r
-     fCFContCascadePIDAsOmegaPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");\r
-     fCFContCascadePIDAsOmegaPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");\r
-       //Setting the variable title, per axis\r
-     fCFContCascadePIDAsOmegaPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");\r
-     fCFContCascadePIDAsOmegaPlus->SetVarTitle(1, "M( #Lambda , K^{+} ) (GeV/c^{2})");\r
-     fCFContCascadePIDAsOmegaPlus->SetVarTitle(2, "Y_{#Omega}");\r
-     fListHistCascade->Add(fCFContCascadePIDAsOmegaPlus);\r
-  }\r
-  // Container for optimisation of topological selections \r
-  if(! fCFContAsCascadeCuts){\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.,3.0]        -> Rec.Cut = 2.0; \r
-     lNbBinsPerVar[1]  = 25;   //DcaBachToPrimVertex             : [0.0,0.24,100.0]    -> Rec.Cur = 0.01;\r
-     lNbBinsPerVar[2]  = 60;     //CascCosineOfPointingAngle    :  [0.94,1.0]          -> Rec.Cut = 0.95;\r
-     //lNbBinsPerVar[2]  = 30;   //CascCosineOfPointingAngle       : [0.97,1.]           -> Rec.Cut = 0.98;\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;  //V0CosineOfPointingAngle         : [0.89,1.0]          -> Rec.Cut = 0.9;\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.05;\r
-     lNbBinsPerVar[10] = 25;   //DcaNegToPrimVertex              : [0.0,0.24,100.0]    -> Rec.Cut = 0.05;\r
-     lNbBinsPerVar[11] = 150;  //InvMassXi                       :  2-MeV/c2 bins\r
-     lNbBinsPerVar[12] = 120;  //InvMassOmega                    :  2-MeV/c2 bins\r
-     lNbBinsPerVar[13] = 100;  //CascTransvMom                   : [0.0,10.0]\r
-     lNbBinsPerVar[14] = 110;  //Y(Xi)                           :  0.02 unit of y per bin \r
-     lNbBinsPerVar[15] = 110;  //Y(Omega)                        :  0.02 unit of y per bin\r
-     lNbBinsPerVar[16] = 112;  //Proper lenght of cascade\r
-     lNbBinsPerVar[17] = 112;  //Proper lenght of V0 \r
-     lNbBinsPerVar[18] = 112;  //Distance V0-Xi in the transverse plane  \r
-     fCFContAsCascadeCuts = new AliCFContainer(Form("fCFContAsCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Cut Container for Asso. Cascades", lNbSteps, lNbVariables, lNbBinsPerVar );\r
-       //Setting the bin limits \r
-       //0 - DcaCascDaughters\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
-     fCFContAsCascadeCuts -> SetBinLimits(0, lBinLim0);\r
-     delete[] lBinLim0;\r
-       //1 - DcaBachToPrimVertex\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
-     fCFContAsCascadeCuts -> SetBinLimits(1, lBinLim1);\r
-     delete [] lBinLim1;\r
-       //2 - CascCosineOfPointingAngle\r
-     fCFContAsCascadeCuts -> SetBinLimits(2, .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
-     fCFContAsCascadeCuts -> SetBinLimits(3, lBinLim3);\r
-     delete[] lBinLim3;\r
-       //4 - InvMassLambdaAsCascDghter\r
-     fCFContAsCascadeCuts->SetBinLimits(4, 1.1, 1.13); \r
-       //5 - DcaV0Daughters\r
-     fCFContAsCascadeCuts->SetBinLimits(5, 0., 2.);        \r
-       //6 - V0CosineOfPointingAngle\r
-     fCFContAsCascadeCuts->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
-     fCFContAsCascadeCuts -> SetBinLimits(7, lBinLim7);\r
-     delete [] lBinLim7;      \r
-       //8 - DcaV0ToPrimVertexXi : 0. to 0.4 \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
-     fCFContAsCascadeCuts -> SetBinLimits(8, lBinLim8);\r
-     delete [] lBinLim8;      \r
-       //9 - DcaPosToPrimVertexXi\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
-     fCFContAsCascadeCuts -> SetBinLimits(9, lBinLim9);\r
-     delete [] lBinLim9;   \r
-       //10 - DcaNegToPrimVertexXi\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
-     fCFContAsCascadeCuts -> SetBinLimits(10, lBinLim10);\r
-     delete [] lBinLim10;  \r
-       //11 - InvMassXi\r
-     fCFContAsCascadeCuts -> SetBinLimits(11, 1.25, 1.40);\r
-       //12 - InvMassOmega\r
-     fCFContAsCascadeCuts -> SetBinLimits(12, 1.62, 1.74);\r
-       //13 - XiTransvMom \r
-     fCFContAsCascadeCuts -> SetBinLimits(13, 0.0, 10.0);\r
-       //14 - Y(Xi) \r
-     fCFContAsCascadeCuts -> SetBinLimits(14, -1.1, 1.1);\r
-       //15 - Y(Omega)\r
-     fCFContAsCascadeCuts -> SetBinLimits(15, -1.1, 1.1); \r
-       //16 - Proper time 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
-     fCFContAsCascadeCuts -> SetBinLimits(16, lBinLim16);\r
-       //17 - Proper time V0 \r
-     fCFContAsCascadeCuts -> SetBinLimits(17, lBinLim16);\r
-       //18 - Distance V0-Xi in the transverse plane\r
-     fCFContAsCascadeCuts -> SetBinLimits(18, lBinLim16);\r
-     delete [] lBinLim16;\r
-       // Setting the number of steps : one for each cascade species (Xi-, Xi+ and Omega-, Omega+)\r
-     fCFContAsCascadeCuts->SetStepTitle(0, "#Xi^{-} candidates associated to MC");\r
-     fCFContAsCascadeCuts->SetStepTitle(1, "#bar{#Xi}^{+} candidates associated to MC");\r
-     fCFContAsCascadeCuts->SetStepTitle(2, "#Omega^{-} candidates associated to MC");\r
-     fCFContAsCascadeCuts->SetStepTitle(3, "#bar{#Omega}^{+} candidates associated to MC");\r
-       // Setting the variable title, per axis\r
-     fCFContAsCascadeCuts->SetVarTitle(0,  "DCA(cascade daughters) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(1,  "ImpactParamToPV(bachelor) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(2,  "cos(cascade PA)");\r
-     fCFContAsCascadeCuts->SetVarTitle(3,  "R_{2d}(cascade decay) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(4,  "M_{#Lambda}(as casc dghter) (GeV/c^{2})");\r
-     fCFContAsCascadeCuts->SetVarTitle(5,  "DCA(V0 daughters) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(6,  "cos(V0 PA) in cascade");\r
-     fCFContAsCascadeCuts->SetVarTitle(7,  "R_{2d}(V0 decay) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(8,  "ImpactParamToPV(V0) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(9,  "ImpactParamToPV(Pos) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(10, "ImpactParamToPV(Neg) (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(11, "Inv. Mass(Xi) (GeV/c^{2})");\r
-     fCFContAsCascadeCuts->SetVarTitle(12, "Inv. Mass(Omega) (GeV/c^{2})");\r
-     fCFContAsCascadeCuts->SetVarTitle(13, "Pt_{MC}(cascade) (GeV/c)");\r
-     fCFContAsCascadeCuts->SetVarTitle(14, "Y_{MC}(Xi)");\r
-     fCFContAsCascadeCuts->SetVarTitle(15, "Y_{MC}(Omega)");\r
-     fCFContAsCascadeCuts->SetVarTitle(16, "mL/p cascade (cm)");\r
-     fCFContAsCascadeCuts->SetVarTitle(17, "mL/p V0 (cm)"); \r
-     fCFContAsCascadeCuts->SetVarTitle(18, "Distance V0-Cascade in the transverse plane (cm)");\r
-     fListHistCascade->Add(fCFContAsCascadeCuts);\r
-  }\r
-\r
- PostData(1, fListHistCascade); \r
- PostData(2, fCFContCascadePIDAsXiMinus);\r
- PostData(3, fCFContCascadePIDAsXiPlus);\r
- PostData(4, fCFContCascadePIDAsOmegaMinus);\r
- PostData(5, fCFContCascadePIDAsOmegaPlus);\r
- PostData(6, fCFContAsCascadeCuts);\r
-\r
-}// end CreateOutputObjects\r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskCheckPerformanceCascadepp276::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
-   AliMCEvent   *lMCevent  = 0x0; \r
-   AliStack     *lMCstack  = 0x0; \r
-   TClonesArray *arrayMC = 0;\r
-\r
-   //-------------------------\r
-   // - Check the PID response\r
-   if (!fPIDResponse) {\r
-        AliError("Cannot get pid response");\r
-        return;\r
-   }\r
-\r
-\r
-  //////////////////   \r
-  // Event selection   \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
-   // Load the InputEvent and check it (for the ESD and AOD)\r
-   if (fAnalysisType == "ESD") {\r
-       lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );\r
-       if (!lESDevent) {\r
-          Printf("ERROR: lESDevent not available \n");\r
-          cout << "Name of the file with pb :" <<  CurrentFileName() << endl;  \r
-          return;\r
-       }\r
-       lMCevent = MCEvent();\r
-       if (!lMCevent) {\r
-           Printf("ERROR: Could not retrieve MC event \n");\r
-           cout << "Name of the file with pb :" <<  CurrentFileName() << endl;\r
-           return;\r
-       }\r
-       lMCstack = lMCevent->Stack();\r
-       if (!lMCstack) {\r
-           Printf("ERROR: Could not retrieve MC stack \n");\r
-           cout << "Name of the file with pb :" <<  CurrentFileName() << endl;\r
-           return;\r
-       }\r
-       // - Cascade vertexer (ESD)\r
-       // Relaunch V0 and Cascade vertexer\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
-           //lESDevent->ResetCascades();\r
-           //lESDevent->ResetV0s();\r
-           //AliV0vertexer lV0vtxer;\r
-           //AliCascadeVertexer lCascVtxer;\r
-           //lV0vtxer.SetCuts(fV0Sels);\r
-           //lCascVtxer.SetCuts(fCascSels);\r
-           //lV0vtxer.Tracks2V0vertices(lESDevent);\r
-           //lCascVtxer.V0sTracks2CascadeVertices(lESDevent);\r
-       }\r
-   } else if (fAnalysisType == "AOD") {  \r
-       lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() ); \r
-       if (!lAODevent) {\r
-                  Printf("ERROR: lAODevent not available \n");\r
-          cout << "Name of the file with pb :" <<  CurrentFileName() << endl;\r
-          return;\r
-       }\r
-       arrayMC = (TClonesArray*) lAODevent->GetList()->FindObject(AliAODMCParticle::StdBranchName());\r
-       if (!arrayMC) AliFatal("Error: MC particles branch not found!\n");\r
-   } else {\r
-       Printf("Analysis type (ESD or AOD) not specified \n");\r
-       return;\r
-   }\r
-\r
-   //------------------------------\r
-   // - Plots Before any selections\r
-   //------------------------------\r
-   // - Define variables\r
-   Int_t  ncascadesBeforeAnySel          = -1; //number of cascades before any selections\r
-   Int_t  nTrackMultiplicityBeforeAnySel = -1; //number of tracks before any selections\r
-   if (fAnalysisType == "ESD") {\r
-       //Multiplicity\r
-       Int_t lMultiplicity = -100;\r
-       lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC, 0.5);\r
-       nTrackMultiplicityBeforeAnySel = lMultiplicity;\r
-       ncascadesBeforeAnySel = lESDevent->GetNumberOfCascades();\r
-   } else if (fAnalysisType == "AOD") {\r
-       //Multiplicity\r
-       Int_t lMultiplicity = -100;\r
-       nTrackMultiplicityBeforeAnySel = lMultiplicity;\r
-       ncascadesBeforeAnySel  = lAODevent->GetNumberOfCascades();\r
-   }\r
-   fHistTrackMultiplicityBeforeAnySel->Fill(nTrackMultiplicityBeforeAnySel);\r
-   fHistCascadeMultiplicityBeforeAnySel->Fill(ncascadesBeforeAnySel);\r
-\r
-   //----------------\r
-   // - SDD selection\r
-   //----------------\r
-   // - Define variables\r
-   Int_t  ncascadesAfterSDDSel          = -1; //number of cascades after SDD selection\r
-   Int_t  nTrackMultiplicityAfterSDDSel = -1; //number of tracks after SDD selection\r
-   if (fkSDDselectionOn) {\r
-        TString trcl = " ";\r
-        trcl = lESDevent->GetFiredTriggerClasses();\r
-        if (fAnalysisType == "ESD") trcl = lESDevent->GetFiredTriggerClasses();\r
-        else if (fAnalysisType == "AOD") trcl = lAODevent->GetFiredTriggerClasses();\r
-        if (fwithSDD){   // ---> Select event with SDD ON\r
-            if(!(trcl.Contains("ALLNOTRD"))) {\r
-                 PostData(1, fListHistCascade);\r
-                 PostData(2, fCFContCascadePIDAsXiMinus);\r
-                 PostData(3, fCFContCascadePIDAsXiPlus);\r
-                 PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-                 PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-                 PostData(6, fCFContAsCascadeCuts);\r
-                 cout<<"Bad event: SDD turn OFF =>  RETURN!! (Exclude it)..."<<endl;\r
-                 return;\r
-            } else {\r
-                 cout<<"Good event: SDD turn ON."<<endl;\r
-            }\r
-        } else if (!fwithSDD){  // ---> Select event with SDD OFF\r
-            if((trcl.Contains("ALLNOTRD"))) {\r
-                 PostData(1, fListHistCascade);\r
-                 PostData(2, fCFContCascadePIDAsXiMinus);\r
-                 PostData(3, fCFContCascadePIDAsXiPlus);\r
-                 PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-                 PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-                 PostData(6, fCFContAsCascadeCuts);\r
-                 cout<<"Bad event:  SDD turn ON =>  RETURN!! (Exclude it)..."<<endl;\r
-                 return;\r
-            } else {\r
-                 cout<<"Good event: SDD turn OFF."<<endl;\r
-            }\r
-        }\r
-   }\r
-   // - Take the number of cascades and tracks after the SDD selection\r
-   if (fAnalysisType == "ESD") {\r
-       Int_t lMultiplicity = -100;\r
-       lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC, 0.5);\r
-       ncascadesAfterSDDSel = lESDevent->GetNumberOfCascades();\r
-       nTrackMultiplicityAfterSDDSel = lMultiplicity;\r
-   } else if (fAnalysisType == "AOD") {\r
-       Int_t lMultiplicity = -100;\r
-       ncascadesAfterSDDSel = lAODevent->GetNumberOfCascades();\r
-       nTrackMultiplicityAfterSDDSel = lMultiplicity;\r
-   }\r
-   // - Fill the plots\r
-   fHistTrackMultiplicityAfterSDDSel->Fill(nTrackMultiplicityAfterSDDSel);\r
-   fHistCascadeMultiplicityAfterSDDSel->Fill(ncascadesAfterSDDSel);\r
-\r
-   //------------------------------\r
-   // - Plots pre-physics selection\r
-   //------------------------------\r
-   // - Produce the 3Dhisto for the efficiency denominator\r
-   Int_t lNbMCPrimary = 0;\r
-   lNbMCPrimary = lMCstack->GetNprimary();\r
-\r
-   for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) {\r
-\r
-     Double_t partEnergy = 0.;\r
-     Double_t partPz     = 0.;\r
-     Double_t partP      = 0.;\r
-     Double_t partPt     = 0.;\r
-     Double_t partVx     = 0.;\r
-     Double_t partVy     = 0.;\r
-     Double_t partVz     = 0.;\r
-     Double_t bacVx      = 0.;\r
-     Double_t bacVy      = 0.;\r
-     Double_t bacVz      = 0.;\r
-     Double_t partMass   = 0.;\r
-     Int_t    PDGcode    = 0;\r
-     Int_t lPrimaryTrackMultiplicity = nTrackMultiplicityAfterSDDSel;\r
-\r
-       if ( fAnalysisType == "ESD" ) {\r
-            TParticle* lCurrentParticlePrimary = 0x0;\r
-            lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );        \r
-            if (!lCurrentParticlePrimary) {\r
-                  Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );\r
-                  continue;\r
-            }\r
-            if (!lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) continue;\r
-            TParticle* xiMC = 0x0;\r
-            xiMC = lCurrentParticlePrimary;\r
-            if (!xiMC) {\r
-                  Printf("MC TParticle pointer to Cascade = 0x0 ! Skip ...");\r
-                  continue;\r
-            }\r
-            partEnergy = xiMC->Energy();\r
-            partPz     = xiMC->Pz();\r
-            partPt     = xiMC->Pt();\r
-            partP      = xiMC->P();\r
-            partMass   = xiMC->GetMass();\r
-            partVx     = xiMC->Vx();\r
-            partVy     = xiMC->Vy();\r
-            partVz     = xiMC->Vz();\r
-            if (xiMC->GetDaughter(0)>=0) {    \r
-                 TParticle *mcBach = lMCstack->Particle(xiMC->GetDaughter(0));\r
-                 if (mcBach) {\r
-                     bacVx  = mcBach->Vx();\r
-                     bacVy  = mcBach->Vy();\r
-                     bacVz  = mcBach->Vz();\r
-                 }\r
-            }\r
-            PDGcode = lCurrentParticlePrimary->GetPdgCode();\r
-       } else if ( fAnalysisType == "AOD" ) {\r
-            AliAODMCParticle *lCurrentParticleaod = (AliAODMCParticle*) arrayMC->At(iCurrentLabelStack);\r
-            if (!lCurrentParticleaod) {\r
-                  Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );\r
-                  continue;\r
-            }\r
-            if (!lCurrentParticleaod->IsPhysicalPrimary()) continue;\r
-            partEnergy = lCurrentParticleaod->E();\r
-            partPz     = lCurrentParticleaod->Pz();\r
-            partP      = lCurrentParticleaod->P();\r
-            partPt     = lCurrentParticleaod->Pt();\r
-            partMass   = lCurrentParticleaod->M(); \r
-            partVx     = lCurrentParticleaod->Xv();\r
-            partVy     = lCurrentParticleaod->Yv();\r
-            partVz     = lCurrentParticleaod->Zv();\r
-            if (lCurrentParticleaod->GetDaughter(0)>=0) {\r
-                 AliAODMCParticle *mcBach = (AliAODMCParticle*) arrayMC->At(lCurrentParticleaod->GetDaughter(0));\r
-                 if (mcBach) {\r
-                     bacVx  = mcBach->Xv();\r
-                     bacVy  = mcBach->Yv();\r
-                     bacVz  = mcBach->Zv();\r
-                 }\r
-            }     \r
-            PDGcode = lCurrentParticleaod->GetPdgCode();\r
-       }\r
-\r
-       // - Calculate rapidity\r
-       Double_t lRapXiMC = 0.5*TMath::Log((partEnergy + partPz) / (partEnergy - partPz + 1.e-13));\r
-       // - Calculate proper lenght\r
-       Double_t lctau = TMath::Sqrt((partVx-bacVx)*(partVx-bacVx)+(partVy-bacVy)*(partVy-bacVy)+(partVz-bacVz)*(partVz-bacVz));\r
-       if (partP != 0.) lctau = lctau*partMass/partP;\r
-       else lctau = -1.;\r
-       // - Fill Histograms\r
-       if (PDGcode ==  3312) {\r
-           f3dHistGenPtVsGenYvsNtracksXiMinus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);\r
-           f3dHistGenPtVsGenctauvsYXiMinus->Fill(partPt, lctau, lRapXiMC);\r
-       }\r
-       if (PDGcode == -3312) {\r
-           f3dHistGenPtVsGenYvsNtracksXiPlus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);\r
-           f3dHistGenPtVsGenctauvsYXiPlus->Fill(partPt, lctau, lRapXiMC);\r
-       }\r
-       if (PDGcode ==  3334) {\r
-           f3dHistGenPtVsGenYvsNtracksOmegaMinus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);\r
-           f3dHistGenPtVsGenctauvsYOmegaMinus->Fill(partPt, lctau, lRapXiMC);\r
-       }\r
-       if (PDGcode == -3334) {\r
-           f3dHistGenPtVsGenYvsNtracksOmegaPlus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);\r
-           f3dHistGenPtVsGenctauvsYOmegaPlus->Fill(partPt, lctau, lRapXiMC);\r
-       }\r
-   }\r
-\r
\r
-   //--------------------\r
-   // - Physics selection\r
-   //--------------------\r
-   // - Define new variables\r
-   Int_t    ncascadesAfterPhysicsSel          = -1; //number of cascades after physics selection\r
-   Int_t    nTrackMultiplicityAfterPhysicsSel = -1; //number of tracks after physics selection\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, fCFContCascadePIDAsXiMinus);\r
-           PostData(3, fCFContCascadePIDAsXiPlus);\r
-           PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-           PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-           PostData(6, fCFContAsCascadeCuts);\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
-   } 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, fCFContCascadePIDAsXiMinus);\r
-           PostData(3, fCFContCascadePIDAsXiPlus);\r
-           PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-           PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-           PostData(6, fCFContAsCascadeCuts);\r
-           return;\r
-       }\r
-       // - Take the number of cascades and tracks after physics selection\r
-       ncascadesAfterPhysicsSel = lAODevent->GetNumberOfCascades();\r
-       nTrackMultiplicityAfterPhysicsSel = -100;\r
-   }\r
-   fHistCascadeMultiplicityAfterPhysicsSel->Fill(ncascadesAfterPhysicsSel);\r
-   fHistTrackMultiplicityAfterPhysicsSel->Fill(nTrackMultiplicityAfterPhysicsSel);\r
-\r
-   //-------------------------------------------------------\r
-   // Select only looking at events with well-established PV\r
-   //-------------------------------------------------------\r
-   Int_t    ncascadesForSelEvtNoTPCOnly                  = -1; //number of cascades after the TPConly selection\r
-   Int_t    nTrackMultiplicityForSelEvtNoTPCOnly         = -1; //number of tracks after the TPConly selection\r
-   if (fAnalysisType == "ESD" ) {\r
-       // - Select only looking at events with well-established PV\r
-       if (fkQualityCutNoTPConlyPrimVtx) {\r
-           const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();\r
-           const AliESDVertex *lPrimaryTrackingVtx = lESDevent->GetPrimaryVertexTracks();\r
-           if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingVtx->GetStatus() ){\r
-               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");\r
-               PostData(1, fListHistCascade);\r
-               PostData(2, fCFContCascadePIDAsXiMinus);\r
-               PostData(3, fCFContCascadePIDAsXiPlus);\r
-               PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-               PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-               PostData(6, fCFContAsCascadeCuts);\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
-       // - Select only looking at events with well-established PV\r
-       if (fkQualityCutNoTPConlyPrimVtx) {\r
-           const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();\r
-           const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();\r
-           if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {\r
-               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");\r
-               PostData(1, fListHistCascade);\r
-               PostData(2, fCFContCascadePIDAsXiMinus);\r
-               PostData(3, fCFContCascadePIDAsXiPlus);\r
-               PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-               PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-               PostData(6, fCFContAsCascadeCuts);\r
-               return;\r
-           }\r
-       }\r
-       // - Take the number of cascades and tracks after TPConly selection\r
-       ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();\r
-       nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME\r
-   }\r
-   fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);\r
-   fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);\r
-    \r
-   //-----------------\r
-   // Pileup selection\r
-   //-----------------\r
-   Int_t    ncascadesForSelEvtNoTPCOnlyNoPileup          = -1; //number of cascades after the NoPileup selection\r
-   Int_t    nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -1; //number of tracks after the Pileup selection\r
-   if (fAnalysisType == "ESD" ) {\r
-       // - Selection for pile up\r
-       if (fkRejectEventPileUp) {\r
-           if(lESDevent->IsPileupFromSPD()){\r
-               AliWarning("Pb / Pile-up event ... return!");\r
-               PostData(1, fListHistCascade);\r
-               PostData(2, fCFContCascadePIDAsXiMinus);\r
-               PostData(3, fCFContCascadePIDAsXiPlus);\r
-               PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-               PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-               PostData(6, fCFContAsCascadeCuts);\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
-       // - Selection for pile up\r
-       if (fkRejectEventPileUp) {\r
-           if(lAODevent->IsPileupFromSPD()){\r
-               AliWarning("Pb / Pile-up event ... return!");\r
-               PostData(1, fListHistCascade);\r
-               PostData(2, fCFContCascadePIDAsXiMinus);\r
-               PostData(3, fCFContCascadePIDAsXiPlus);\r
-               PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-               PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-               PostData(6, fCFContAsCascadeCuts);\r
-               return;\r
-           }\r
-       }\r
-       // - Take the number of cascades and tracks after Pileup selection\r
-       ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();\r
-       nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;\r
-   }\r
-   fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);\r
-   fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);\r
-    \r
-   //-------------------\r
-   // - Vertex selection \r
-   //-------------------\r
-   Int_t    ncascadesAfterVertexSel                      = -1; //number of cascades after vertex selection\r
-   Int_t    nTrackMultiplicityAfterVertexSel             = -1; //number of tracks after vertex selection\r
-   Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};\r
-   Double_t tPrimaryVtxPosition[3] = {-100.0, -100.0, -100.0}; \r
-   Double_t lMagneticField = -10.;\r
-   if (fAnalysisType == "ESD" ) {\r
-       // - Primary vertex definition\r
-       const AliESDVertex *lPrimaryBestVtx = lESDevent->GetPrimaryVertex();\r
-       if (!lPrimaryBestVtx) {\r
-            AliWarning("No prim. vertex in AOD... return!");\r
-            PostData(1, fListHistCascade);\r
-            PostData(2, fCFContCascadePIDAsXiMinus);\r
-            PostData(3, fCFContCascadePIDAsXiPlus);\r
-            PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-            PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-            PostData(6, fCFContAsCascadeCuts);\r
-            return;\r
-       }\r
-       lPrimaryBestVtx->GetXYZ( lBestPrimaryVtxPos );\r
-       // - Vertex position 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
-       // - 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, fCFContCascadePIDAsXiMinus);\r
-                PostData(3, fCFContCascadePIDAsXiPlus);\r
-                PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-                PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-                PostData(6, fCFContAsCascadeCuts);\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
-       // - Primary vertex definition\r
-       const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex(); // get the best primary vertex available for the event GetVertex(0)\r
-       if (!lPrimaryBestAODVtx) {\r
-            AliWarning("No prim. vertex in AOD... return!");\r
-            PostData(1, fListHistCascade);\r
-            PostData(2, fCFContCascadePIDAsXiMinus);\r
-            PostData(3, fCFContCascadePIDAsXiPlus);\r
-            PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-            PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-            PostData(6, fCFContAsCascadeCuts);\r
-            return;\r
-       }\r
-       lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );\r
-       // - Vertex position 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
-       // - 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, fCFContCascadePIDAsXiMinus);\r
-                PostData(3, fCFContCascadePIDAsXiPlus);\r
-                PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-                PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-                PostData(6, fCFContAsCascadeCuts);\r
-                return;\r
-           }\r
-       }\r
-       // - Take the number of cascades and tracks after vertex Z position selection\r
-       ncascadesAfterVertexSel = lAODevent->GetNumberOfCascades();\r
-       nTrackMultiplicityAfterVertexSel = -100;\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] = 0;\r
-   tPrimaryVtxPosition[1] = 0;\r
-   tPrimaryVtxPosition[2] = 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
-   // - Loop over the different types of GENERATED cascades (Xi-+, Omega-+)    \r
-   //----------------------------------------------------------------------\r
-   // - Initialisation of useful local variables               \r
-   Int_t lPdgCodeCasc            = 0;\r
-   Int_t lPdgCodeBach            = 0;\r
-   Int_t lPdgCodeLambda          = 0;\r
-   Int_t lPdgCodeDghtMesV0       = 0;\r
-   Int_t lPdgCodeDghtBarV0       = 0;  \r
-   TH1F *lHistEtaGenCasc         = 0;  \r
-   TH3D *l3dHistGenPtVsGenYvsNtracksPhysEff = 0;\r
-   TH3D *l3dHistGenPtVsGenctauvsYPhysEff    = 0;\r
-   TH1F *lHistThetaGenCasc       = 0;\r
-   TH2D *l2dHistGenPtVsGenYFdbl  = 0;\r
-   TH1F *lHistThetaLambda        = 0;\r
-   TH1F *lHistThetaBach          = 0;\r
-   TH1F *lHistThetaBarDghter     = 0;\r
-   TH1F *lHistThetaMesDghter     = 0;\r
-   TH1F *lHistPtBach             = 0;\r
-   TH1F *lHistPtBarDghter        = 0;\r
-   TH1F *lHistPtMesDghter        = 0;\r
-   Int_t ncascperev = 0; \r
-   Int_t ncascperevtot = 0;\r
-\r
-   for (Int_t iCascType = 1; iCascType < 5; iCascType++) { \r
-         ncascperev = 0;\r
-         ncascperevtot = 0;\r
-         Int_t lPrimaryTrackMultiplicity = nTrackMultiplicityAfterSDDSel;\r
-\r
-         switch (iCascType) {\r
-           case 1: // Xi-\r
-               lPdgCodeCasc       =   3312;  //Xi-\r
-               lPdgCodeBach       =   -211;  //Pi-\r
-               lPdgCodeLambda     =   3122;  //Lambda0\r
-               lPdgCodeDghtMesV0  =   -211;  //Pi-\r
-               lPdgCodeDghtBarV0  =   2212;  //Proton  \r
-               lHistEtaGenCasc        = fHistEtaGenCascXiMinus;         // this plot for any Xi- \r
-              lHistThetaGenCasc      = fHistThetaGenCascXiMinus;       // cascades generated within acceptance (cut in pt + theta)\r
-               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff;\r
-               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYXiMinusPhysEff;\r
-              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblXiMinus;\r
-              lHistThetaLambda       = fHistThetaLambdaXiMinus;\r
-              lHistThetaBach         = fHistThetaBachXiMinus;\r
-              lHistThetaBarDghter    = fHistThetaBarDghterXiMinus;\r
-              lHistThetaMesDghter    = fHistThetaMesDghterXiMinus;\r
-              lHistPtBach            = fHistPtBachXiMinus;\r
-              lHistPtBarDghter       = fHistPtBarDghterXiMinus;\r
-              lHistPtMesDghter       = fHistPtMesDghterXiMinus;\r
-               break; \r
-           case 2: // Xi+\r
-               lPdgCodeCasc        =  -3312;  //Xi+\r
-               lPdgCodeBach        =    211;  //Pi+\r
-               lPdgCodeLambda      =  -3122;  //AntiLambda0\r
-               lPdgCodeDghtMesV0   =    211;  //Pi+\r
-               lPdgCodeDghtBarV0   =  -2212;  //AntiProton  \r
-              lHistEtaGenCasc        = fHistEtaGenCascXiPlus;       // this plot for any Xi+\r
-              lHistThetaGenCasc      = fHistThetaGenCascXiPlus;     // cascades generated within acceptance (cut in pt + theta)\r
-               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff;\r
-               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYXiPlusPhysEff;\r
-              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblXiPlus;\r
-              lHistThetaLambda       = fHistThetaLambdaXiPlus;\r
-              lHistThetaBach         = fHistThetaBachXiPlus;\r
-              lHistThetaBarDghter    = fHistThetaBarDghterXiPlus;\r
-              lHistThetaMesDghter    = fHistThetaMesDghterXiPlus;\r
-              lHistPtBach            = fHistPtBachXiPlus;\r
-              lHistPtBarDghter       = fHistPtBarDghterXiPlus;\r
-              lHistPtMesDghter       = fHistPtMesDghterXiPlus;  \r
-              break;\r
-           case 3: // Omega-\r
-              lPdgCodeCasc       =   3334;  //Omega-\r
-               lPdgCodeBach       =   -321;  //K-\r
-               lPdgCodeLambda     =   3122;  //Lambda0\r
-               lPdgCodeDghtMesV0  =   -211;  //Pi-\r
-               lPdgCodeDghtBarV0  =   2212;  //Proton\r
-              lHistEtaGenCasc        = fHistEtaGenCascOmegaMinus;        // this plot for any Omega+           \r
-              lHistThetaGenCasc      = fHistThetaGenCascOmegaMinus;      // cascades generated within acceptance (cut in pt + theta)\r
-              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblOmegaMinus;\r
-               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff;\r
-               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff;\r
-              lHistThetaLambda       = fHistThetaLambdaOmegaMinus;\r
-              lHistThetaBach         = fHistThetaBachOmegaMinus;\r
-              lHistThetaBarDghter    = fHistThetaBarDghterOmegaMinus;\r
-              lHistThetaMesDghter    = fHistThetaMesDghterOmegaMinus;\r
-              lHistPtBach            = fHistPtBachOmegaMinus;\r
-              lHistPtBarDghter       = fHistPtBarDghterOmegaMinus;\r
-              lHistPtMesDghter       = fHistPtMesDghterOmegaMinus;   \r
-               break;\r
-           case 4:  // Omega+\r
-               lPdgCodeCasc       =  -3334;  //Omega+\r
-               lPdgCodeBach       =    321;  //K+\r
-               lPdgCodeLambda     =  -3122;  //AntiLambda0\r
-               lPdgCodeDghtMesV0  =    211;  //Pi+\r
-               lPdgCodeDghtBarV0  =  -2212;  //AntiProton \r
-              lHistEtaGenCasc        = fHistEtaGenCascOmegaPlus;        // this plot for any Omega-\r
-              lHistThetaGenCasc      = fHistThetaGenCascOmegaPlus;      // cascades generated within acceptance (cut in pt + theta)\r
-              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblOmegaPlus;\r
-               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff;\r
-               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff;\r
-              lHistThetaLambda       = fHistThetaLambdaOmegaPlus;\r
-              lHistThetaBach         = fHistThetaBachOmegaPlus;\r
-              lHistThetaBarDghter    = fHistThetaBarDghterOmegaPlus;\r
-              lHistThetaMesDghter    = fHistThetaMesDghterOmegaPlus;\r
-              lHistPtBach            = fHistPtBachOmegaPlus;\r
-              lHistPtBarDghter       = fHistPtBarDghterOmegaPlus;\r
-              lHistPtMesDghter       = fHistPtMesDghterOmegaPlus;  \r
-               break;\r
-         }\r
-\r
-         for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) {\r
-\r
-               Double_t partEnergy = 0.;\r
-               Double_t partPz     = 0.;\r
-               Double_t partEta    = 0.;\r
-               Double_t partTheta  = 0.;\r
-               Double_t partP      = 0.;\r
-               Double_t partPt     = 0.;\r
-               Double_t partVx     = 0.;\r
-               Double_t partVy     = 0.; \r
-               Double_t partVz     = 0.;\r
-               Double_t bacVx      = 0.;\r
-               Double_t bacVy      = 0.;\r
-               Double_t bacVz      = 0.;    \r
-               Double_t partMass   = 0.;\r
-\r
-               if ( fAnalysisType == "ESD" ) {      \r
-                    TParticle* lCurrentParticle = 0x0; \r
-                    lCurrentParticle = lMCstack->Particle( iCurrentLabelStack );\r
-                    if (!lCurrentParticle) {\r
-                        Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );\r
-                        continue;\r
-                    }\r
-                    if (!lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) continue; \r
-                    if (lCurrentParticle->GetPdgCode() == lPdgCodeCasc) {  // Here !   \r
-                       TParticle* xiMC = 0x0;\r
-                       xiMC = lCurrentParticle;\r
-                       if (!xiMC) {\r
-                           Printf("MC TParticle pointer to Cascade = 0x0 ! Skip ...");\r
-                           continue;\r
-                       }\r
-                        partEnergy = xiMC->Energy();\r
-                        partPz     = xiMC->Pz();\r
-                        partEta    = xiMC->Eta();\r
-                        partPt     = xiMC->Pt();\r
-                        partP      = xiMC->P();\r
-                        partTheta  = xiMC->Theta();\r
-                        partMass   = xiMC->GetMass();\r
-                        partVx     = xiMC->Vx();\r
-                        partVy     = xiMC->Vy();\r
-                        partVz     = xiMC->Vz();\r
-                        if (xiMC->GetDaughter(0)>=0) {\r
-                             TParticle *mcBach = lMCstack->Particle(xiMC->GetDaughter(0));\r
-                             if (mcBach) {\r
-                                 bacVx  = mcBach->Vx();\r
-                                 bacVy  = mcBach->Vy();\r
-                                 bacVz  = mcBach->Vz();\r
-                             }\r
-                        }\r
-                    } else continue;\r
-               } else if ( fAnalysisType == "AOD" ) {\r
-                    AliAODMCParticle *lCurrentParticleaod = (AliAODMCParticle*) arrayMC->At(iCurrentLabelStack);\r
-                    if (!lCurrentParticleaod) {\r
-                        Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );\r
-                        continue;\r
-                    }\r
-                    if (!lCurrentParticleaod->IsPhysicalPrimary()) continue;  \r
-                    if (!(lCurrentParticleaod->PdgCode() == lPdgCodeCasc)) continue;\r
-                    partEnergy = lCurrentParticleaod->E();\r
-                    partPz     = lCurrentParticleaod->Pz();\r
-                    partEta    = lCurrentParticleaod->Eta();\r
-                    partP      = lCurrentParticleaod->P();\r
-                    partPt     = lCurrentParticleaod->Pt();\r
-                    partTheta  = lCurrentParticleaod->Theta();\r
-                    partMass   = lCurrentParticleaod->M();   //FIXME: not sure this works, seems not implemented\r
-                    partVx     = lCurrentParticleaod->Xv();\r
-                    partVy     = lCurrentParticleaod->Yv();\r
-                    partVz     = lCurrentParticleaod->Zv();\r
-                    if (lCurrentParticleaod->GetDaughter(0)>=0) {\r
-                         AliAODMCParticle *mcBach = (AliAODMCParticle*) arrayMC->At(lCurrentParticleaod->GetDaughter(0));\r
-                         if (mcBach) {\r
-                              bacVx  = mcBach->Xv();\r
-                              bacVy  = mcBach->Yv();\r
-                              bacVz  = mcBach->Zv();\r
-                         } \r
-                    }\r
-               }\r
-               ncascperevtot++;        \r
-               // - Fill the first histos : = any generated Xi, not necessarily within the acceptance\r
-               Double_t lRapXiMC = 0.5*TMath::Log((partEnergy + partPz) / (partEnergy - partPz +1.e-13));\r
-               // - Calculate proper time\r
-               Double_t lctau = TMath::Sqrt((partVx-bacVx)*(partVx-bacVx)+(partVy-bacVy)*(partVy-bacVy)+(partVz-bacVz)*(partVz-bacVz));\r
-               if (partP!=0.)    lctau = lctau*partMass/partP;\r
-               else lctau = -1.;\r
-               Double_t lRadToDeg = 180.0/TMath::Pi();\r
-               // - Fill the first histos : = any generated Xi, not necessarily within the acceptance          \r
-               lHistEtaGenCasc->Fill( partEta );        \r
-               l3dHistGenPtVsGenYvsNtracksPhysEff->Fill( partPt, lRapXiMC, lPrimaryTrackMultiplicity );\r
-               l3dHistGenPtVsGenctauvsYPhysEff->Fill( partPt, lctau, lRapXiMC );\r
-               lHistThetaGenCasc->Fill( lRadToDeg * partTheta );\r
-\r
-               //--------------------------------------------------------------------------------------------\r
-               // - Check the emission of particle stays within the acceptance of the detector (cut in theta)\r
-               if (fApplyAccCut) { if( partTheta < TMath::Pi()/4.0 || partTheta > 3.0*TMath::Pi()/4.0 ) continue;}     \r
-\r
-               Float_t lambdaTheta = 0.;\r
-               Float_t bacTheta    = 0.;\r
-               Float_t dghtBarV0Theta = 0.;\r
-               Float_t dghtMesV0Theta = 0.;\r
-               Float_t bacPt       = 0.;\r
-               Float_t dghtBarV0Pt = 0.;\r
-               Float_t dghtMesV0Pt = 0.;\r
-\r
-               if ( fAnalysisType == "ESD" ) { \r
-                    TParticle* xiMC = lMCstack->Particle( iCurrentLabelStack ); \r
-                    if ( xiMC->GetNDaughters() != 2) continue;\r
-                    if ( xiMC->GetDaughter(0) < 0 )  continue;\r
-                    if ( xiMC->GetDaughter(1) < 0 )  continue; \r
-                    TParticle* lDght0ofXi = lMCstack->Particle(  xiMC->GetDaughter(0) );\r
-                    TParticle* lDght1ofXi = lMCstack->Particle(  xiMC->GetDaughter(1) );\r
-                    TParticle* lLambda = 0;\r
-                    TParticle* lBach   = 0;\r
-\r
-                    // Xi - Case 1\r
-                    if ( lDght0ofXi->GetPdgCode() == lPdgCodeLambda && lDght1ofXi->GetPdgCode() == lPdgCodeBach ){                     \r
-                           lLambda = lDght0ofXi;   // dghter0 = Lambda\r
-                           lBach   = lDght1ofXi;   // dghter1 = Pi-\r
-                    }                  \r
-                    // Xi - Case 2\r
-                    else if ( lDght0ofXi->GetPdgCode() == lPdgCodeBach && lDght1ofXi->GetPdgCode() == lPdgCodeLambda ){ \r
-                           lBach   = lDght0ofXi;   // dghter0 = Pi-\r
-                          lLambda = lDght1ofXi;   // dghter1 = Lambda\r
-                    }\r
-                   // Otherwise - Case 3       \r
-                    else continue;\r
-\r
-                    // - Check the emission of particle stays within the acceptance of the detector (cut in pt + theta)\r
-                    if (fApplyAccCut) { \r
-                         if( lLambda->Theta() < TMath::Pi()/4.0 || lLambda->Theta() > 3.0*TMath::Pi()/4.0 ) continue;\r
-                         if( lBach->Theta() < TMath::Pi()/4.0   || lBach->Theta() > 3.0*TMath::Pi()/4.0 )   continue;\r
-                         if( lBach->Pt() < 0.150 ) continue; //FIXME: maybe tuned for Xi but not for K- from Omega ...\r
-                    }                          \r
\r
-                    //---------\r
-                    // - V0 level\r
-                    TParticle* lDghtBarV0 = 0;\r
-                    TParticle* lDghtMesV0 = 0;\r
-                    if( lLambda->GetNDaughters() != 2 )  continue;\r
-                    if( lLambda->GetDaughter(0) < 0 )    continue;\r
-                    if( lLambda->GetDaughter(1) < 0 )    continue;\r
-                    TParticle* lDght0ofLambda = lMCstack->Particle(  lLambda->GetDaughter(0) );\r
-                    TParticle* lDght1ofLambda = lMCstack->Particle(  lLambda->GetDaughter(1) );\r
-\r
-                    // V0 - Case 1\r
-                    if ( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 && lDght1ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 ) {    // Here !                       \r
-                           lDghtBarV0 = lDght0ofLambda;   // dghter0 = Proton\r
-                           lDghtMesV0 = lDght1ofLambda;   // dghter1 = Pi-\r
-                    }                  \r
-                    // V0 - Case 2\r
-                    else if ( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 && lDght1ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 ) {      // Here !\r
-                           lDghtMesV0 = lDght0ofLambda;   // dghter0 = Pi-\r
-                          lDghtBarV0 = lDght1ofLambda;   // dghter1 = Proton\r
-                    }          \r
-                    // Otherwise - Case 3\r
-                    else continue;\r
-                               \r
-                    // - Check the emission of particle stays within the acceptance of the detector\r
-                    if (fApplyAccCut) { \r
-                         if( lDghtBarV0->Theta() < TMath::Pi()/4.0  ||  lDghtBarV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;\r
-                         if( lDghtMesV0->Theta() < TMath::Pi()/4.0  ||  lDghtMesV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;\r
-                         if( lDghtBarV0->Pt() < 0.250 ) continue;\r
-                         if( lDghtMesV0->Pt() < 0.150 ) continue;\r
-                    }\r
\r
-                    lambdaTheta    = lLambda->Theta();\r
-                    bacTheta       = lBach->Theta();\r
-                    dghtBarV0Theta = lDghtBarV0->Theta();                      \r
-                    dghtMesV0Theta = lDghtMesV0->Theta();\r
-                    bacPt          = lBach->Pt();\r
-                    dghtBarV0Pt    = lDghtBarV0->Pt();\r
-                    dghtMesV0Pt    = lDghtMesV0->Pt();\r
-                       \r
-               } else if ( fAnalysisType == "AOD") {\r
-\r
-                    AliAODMCParticle *xiMC = (AliAODMCParticle*) arrayMC->At(iCurrentLabelStack);\r
-                    if (xiMC->GetNDaughters() != 2) continue;\r
-                    if (xiMC->GetDaughter(0) < 0 )  continue;\r
-                    if (xiMC->GetDaughter(1) < 0 )  continue;\r
-\r
-                    AliAODMCParticle* lDght0ofXi = (AliAODMCParticle*) arrayMC->At(  xiMC->GetDaughter(0) );\r
-                    AliAODMCParticle* lDght1ofXi = (AliAODMCParticle*) arrayMC->At(  xiMC->GetDaughter(1) );\r
-\r
-                    AliAODMCParticle* lLambda = 0;\r
-                    AliAODMCParticle* lBach   = 0;\r
-\r
-                    // Xi - Case 1\r
-                    if ( lDght0ofXi->PdgCode() == lPdgCodeLambda  &&  lDght1ofXi->PdgCode() == lPdgCodeBach ){ \r
-                            lLambda = lDght0ofXi;   // dghter0 = Lambda\r
-                            lBach   = lDght1ofXi;   // dghter1 = Pi-\r
-                    }\r
-                    // Xi - Case 2\r
-                    else if ( lDght0ofXi->PdgCode() == lPdgCodeBach && lDght1ofXi->PdgCode() == lPdgCodeLambda ){\r
-                            lBach   = lDght0ofXi;   // dghter0 = Pi\r
-                            lLambda = lDght1ofXi;   //dghter1 = Lambda\r
-                    }\r
-                    // Otherwise - Case 3\r
-                    else continue;\r
-\r
-                    // - Check the emission of particle stays within the acceptance of the detector (cut in pt + theta)\r
-                    if (fApplyAccCut) {\r
-                          if ( lLambda->Theta() < TMath::Pi()/4.0  ||    lLambda->Theta() > 3.0*TMath::Pi()/4.0 ) continue;\r
-                          if( lBach->Theta() < TMath::Pi()/4.0    ||    lBach->Theta() > 3.0*TMath::Pi()/4.0 )   continue;\r
-                          if( lBach->Pt() < 0.150 ) continue; //FIXME : maybe tuned for Xi but not for K- from Omega ...\r
-                    }\r
-\r
-                    //-----------\r
-                    // - V0 level \r
-                    AliAODMCParticle* lDghtBarV0 = 0;\r
-                    AliAODMCParticle* lDghtMesV0 = 0;\r
-\r
-                    if( lLambda->GetNDaughters() != 2 )  continue;\r
-                    if( lLambda->GetDaughter(0) < 0 )    continue;\r
-                    if( lLambda->GetDaughter(1) < 0 )    continue;\r
-\r
-                    AliAODMCParticle* lDght0ofLambda = (AliAODMCParticle*) arrayMC->At(  lLambda->GetDaughter(0) );\r
-                    AliAODMCParticle* lDght1ofLambda = (AliAODMCParticle*) arrayMC->At(  lLambda->GetDaughter(1) );\r
-\r
-                    // V0 - Case 1\r
-                    if ( lDght0ofLambda->PdgCode() == lPdgCodeDghtBarV0 && lDght1ofLambda->PdgCode() == lPdgCodeDghtMesV0 ) { \r
-                            lDghtBarV0 = lDght0ofLambda;   // dghter0 = Proton\r
-                            lDghtMesV0 = lDght1ofLambda;   // dghter1 = Pi-\r
-                    } \r
-                    // V0 - Case 2\r
-                    else if ( lDght0ofLambda->PdgCode() == lPdgCodeDghtMesV0 && lDght1ofLambda->PdgCode() == lPdgCodeDghtBarV0 ) { \r
-                            lDghtMesV0 = lDght0ofLambda;   // dghter0 = Pi-\r
-                            lDghtBarV0 = lDght1ofLambda;   // dghter1 = proton\r
-                    } \r
-                    // V0 otherwise - Case 3\r
-                    else continue;\r
-\r
-                    // - Check the emission of particle stays within the acceptance of the detector\r
-                    if (fApplyAccCut) {\r
-                         if( lDghtBarV0->Theta() < TMath::Pi()/4.0  ||  lDghtBarV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;\r
-                         if( lDghtMesV0->Theta() < TMath::Pi()/4.0  ||  lDghtMesV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;\r
-                         if( lDghtBarV0->Pt() < 0.250 ) continue;\r
-                         if( lDghtMesV0->Pt() < 0.150 ) continue;\r
-                    }\r
-\r
-                    lambdaTheta    = lLambda->Theta();\r
-                    bacTheta       = lBach->Theta();\r
-                    dghtBarV0Theta = lDghtBarV0->Theta();\r
-                    dghtMesV0Theta = lDghtMesV0->Theta();\r
-                    bacPt          = lBach->Pt();\r
-                    dghtBarV0Pt    = lDghtBarV0->Pt();\r
-                    dghtMesV0Pt    = lDghtMesV0->Pt();\r
-               }\r
-\r
-               //---------------------------------------\r
-               // - Filling histos for findable cascades\r
-               // - Fill theta histos \r
-               lHistThetaLambda->Fill( lRadToDeg * lambdaTheta );\r
-               lHistThetaBach->Fill( lRadToDeg * bacTheta );\r
-               lHistThetaBarDghter->Fill( lRadToDeg * dghtBarV0Theta );\r
-               lHistThetaMesDghter->Fill( lRadToDeg * dghtMesV0Theta );\r
-               // - Fill pt histos\r
-               lHistPtBach             ->Fill( bacPt );\r
-               lHistPtBarDghter        ->Fill( dghtBarV0Pt );\r
-               lHistPtMesDghter        ->Fill( dghtMesV0Pt );\r
-               l2dHistGenPtVsGenYFdbl  ->Fill( partPt, lRapXiMC );\r
-\r
-               ncascperev++;                   \r
-                            \r
-         }// This is the end of the loop on primaries\r
-  \r
-         if (iCascType == 1) {\r
-              fHistnXiMinusPerEv->Fill(ncascperev);\r
-              fHistnXiMinusPerEvTot->Fill(ncascperevtot);\r
-         }\r
-         if (iCascType == 2) {\r
-              fHistnXiPlusPerEv->Fill(ncascperev);\r
-              fHistnXiPlusPerEvTot->Fill(ncascperevtot);\r
-         }\r
-         if (iCascType == 3) {\r
-              fHistnOmegaMinusPerEv->Fill(ncascperev);\r
-              fHistnOmegaMinusPerEvTot->Fill(ncascperevtot);\r
-         }\r
-         if (iCascType == 4) {\r
-              fHistnOmegaPlusPerEv->Fill(ncascperev);\r
-              fHistnOmegaPlusPerEvTot->Fill(ncascperevtot);\r
-         }\r
-\r
-         // - Re-initialisation of the local THF pointers\r
-         lHistEtaGenCasc         = 0x0;\r
-         lHistThetaGenCasc       = 0x0;\r
-         l2dHistGenPtVsGenYFdbl  = 0x0;\r
-         lHistThetaLambda        = 0x0;\r
-         lHistThetaBach          = 0x0;\r
-         lHistThetaBarDghter     = 0x0;\r
-         lHistThetaMesDghter     = 0x0;\r
-         lHistPtBach             = 0x0;\r
-         lHistPtBarDghter        = 0x0;\r
-         lHistPtMesDghter        = 0x0;        \r
-\r
-   } // end of loop over the different types of cascades (Xi-+, Omega-+)\r
-       \r
\r
\r
-   //----------------------------------------- \r
-   // - Loop over the reconstructed candidates\r
-   //-----------------------------------------\r
-   Int_t nAssoXiMinus     = 0;\r
-   Int_t nAssoXiPlus      = 0;\r
-   Int_t nAssoOmegaMinus  = 0;\r
-   Int_t nAssoOmegaPlus   = 0;\r
-   Int_t lPosTPCClusters  = 0;\r
-   Int_t lNegTPCClusters  = 0;\r
-   Int_t lBachTPCClusters = 0;\r
-   Double_t lDcaXiDaughters            = -1. ;\r
-   Double_t lDcaBachToPrimVertexXi     = -1. ;\r
-   Double_t lXiCosineOfPointingAngle   = -1. ;\r
-   Double_t lPosXi[3]                  = { -1000.0, -1000.0, -1000.0 };\r
-   Double_t lXiRadius                  = -1000. ;\r
-   Double_t lInvMassLambdaAsCascDghter = 0.;\r
-   Double_t lDcaV0DaughtersXi          = -1.;\r
-   Double_t lV0CosineOfPointingAngleXi = -1.;\r
-   Double_t lV0CosineOfPointingAngle   = -1.;\r
-   Double_t lPosV0Xi[3]                = { -1000. , -1000., -1000. }; // Position of VO coming from cascade\r
-   Double_t lV0RadiusXi                = -1000.;\r
-   Double_t lDcaV0ToPrimVertexXi       = -1.;\r
-   Double_t lDcaPosToPrimVertexXi      = -1.;\r
-   Double_t lDcaNegToPrimVertexXi      = -1.;\r
-   Double_t lChargeXi                  = -1.;\r
-   Double_t lV0mom                     = -1000.;\r
-   Double_t lmcPt                      = -1.;         \r
-   Double_t lmcRapCasc                 = -1.; \r
-   Double_t lmcEta                     = -1000.;     \r
-   Double_t lmcTransvRadius            = -1000.; \r
-   Double_t lrecoPt                    = -100.;     \r
-   Double_t lrecoTransvRadius          = -1000.; \r
-   Double_t lDeltaPhiMcReco            = -1.;\r
-   Double_t lBachTransvMom             = 0.;\r
-   Double_t lpTrackTransvMom           = 0.;\r
-   Double_t lnTrackTransvMom           = 0.;\r
-   Double_t lmcPtPosV0Dghter           = -100.;\r
-   Double_t lmcPtNegV0Dghter           = -100.;\r
-   Double_t lrecoP                     = -100.;\r
-   Double_t lmcPtBach                  = -100.;\r
-   Double_t cascadeMass                = 0.;\r
-\r
-   // - Get the number of cascades\r
-   Int_t ncascades = 0;\r
-   if      ( fAnalysisType == "ESD" ) { ncascades = lESDevent->GetNumberOfCascades(); }\r
-   else if ( fAnalysisType == "AOD" ) { ncascades = lAODevent->GetNumberOfCascades(); }\r
-\r
-   //-------------------------------\r
-   // - Begining of the Cascade Loop\r
-   for (Int_t iXi = 0; iXi < ncascades; iXi++) {\r
-\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
-\r
-        // - Combined PID\r
-        // Reasonable guess for the priors for the cascade track sample (e-, mu, pi, K, p)\r
-        Double_t lPriorsGuessXi[14]    = {0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};\r
-        Double_t lPriorsGuessOmega[14] = {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};\r
-        Double_t ppionBach = 0.0, pkaonBach = 0.0;\r
-        Bool_t   lIsBachelorMCPiMinus  = kFALSE;\r
-        Bool_t   lIsBachelorMCPiPlus   = kFALSE;\r
-        Bool_t   lIsBachelorMCKMinus   = kFALSE;\r
-        Bool_t   lIsBachelorMCKPlus    = kFALSE;\r
-        Double_t lInvMassXiMinus    = 0.;\r
-        Double_t lInvMassXiPlus     = 0.;\r
-        Double_t lInvMassOmegaMinus = 0.;\r
-        Double_t lInvMassOmegaPlus  = 0.;\r
-        Bool_t lAssoXiMinus    = kFALSE;\r
-        Bool_t lAssoXiPlus     = kFALSE;\r
-        Bool_t lAssoOmegaMinus = kFALSE;\r
-        Bool_t lAssoOmegaPlus  = kFALSE;\r
-       \r
-        Float_t  etaBach = 0.;\r
-        Float_t  etaPos  = 0.;\r
-        Float_t  etaNeg  = 0.;\r
-\r
-        if ( fAnalysisType == "ESD" ) {                \r
-\r
-             // - Load the cascade\r
-             AliESDcascade *xiESD = lESDevent->GetCascade(iXi);\r
-            if (!xiESD) continue;\r
-       \r
-            // - Connection to daughter tracks of the current cascade          \r
-             UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xiESD->GetPindex() );\r
-             UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xiESD->GetNindex() );\r
-             UInt_t lBachIdx  = (UInt_t) TMath::Abs( xiESD->GetBindex() );\r
-                   \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) {\r
-                 AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;\r
-             }\r
-             if(lBachIdx == lIdxPosXi) {\r
-                 AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;\r
-             }\r
-      \r
-             // - Get the daughter tracks\r
-            AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );\r
-            AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );\r
-            AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx  );\r
-            if (!pTrackXi || !nTrackXi || !bachTrackXi ) {\r
-                Printf("ERROR: Could not retrieve one of the 3 daughter tracks of the cascade ...");\r
-                continue;\r
-            }\r
-       \r
-             // Get the number of TPC clusters\r
-             lPosTPCClusters   = pTrackXi->GetTPCNcls();\r
-             lNegTPCClusters   = nTrackXi->GetTPCNcls();\r
-             lBachTPCClusters  = bachTrackXi->GetTPCNcls(); \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
-             etaPos  = pTrackXi->Eta();\r
-             etaNeg  = nTrackXi->Eta();\r
-             etaBach = bachTrackXi->Eta();\r
-       \r
-            // - Info over reconstructed cascades\r
-            Double_t lV0quality = 0.;\r
-            if( bachTrackXi->Charge() < 0 ) {\r
-                  //Calculate the effective mass of the Xi- candidate: Xi- hyp. (pdg code 3312\r
-                 lV0quality = 0.;\r
-                 xiESD->ChangeMassHypothesis(lV0quality , 3312);       \r
-                 lInvMassXiMinus = xiESD->GetEffMassXi();\r
-                  //Calculate the effective mass of the Xi- candidate: Omega- hyp. (pdg code 3334)\r
-                 lV0quality = 0.;\r
-                 xiESD->ChangeMassHypothesis(lV0quality , 3334);       \r
-                 lInvMassOmegaMinus = xiESD->GetEffMassXi();\r
-                  //Back to "default" hyp. (Xi-)       \r
-                 lV0quality = 0.;\r
-                 xiESD->ChangeMassHypothesis(lV0quality , 3312);\r
-            }\r
-            if( bachTrackXi->Charge() >  0 ){\r
-                  //Calculate the effective mass of the Xi- candidate: Xi+ hyp. (pdg code -3312)\r
-                 lV0quality = 0.;\r
-                 xiESD->ChangeMassHypothesis(lV0quality , -3312);      \r
-                 lInvMassXiPlus = xiESD->GetEffMassXi();\r
-                  //Calculate the effective mass of the Xi- candidate: Omega+ hyp. (pdg code -3334)\r
-                  lV0quality = 0.;\r
-                  xiESD->ChangeMassHypothesis(lV0quality , -3334);     \r
-                  lInvMassOmegaPlus = xiESD->GetEffMassXi();\r
-                 //Back to "default" hyp. (Xi-)\r
-                  lV0quality = 0.;\r
-                  xiESD->ChangeMassHypothesis(lV0quality , -3312);\r
-            }\r
-             lDcaXiDaughters          = xiESD->GetDcaXiDaughters();\r
-             lDcaBachToPrimVertexXi   = TMath::Abs( bachTrackXi->GetD(lBestPrimaryVtxPos[0],lBestPrimaryVtxPos[1],lMagneticField) );\r
-             lXiCosineOfPointingAngle = xiESD->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );\r
-             xiESD->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] );  \r
-             lInvMassLambdaAsCascDghter = xiESD->GetEffMass();\r
-             lDcaV0DaughtersXi          = xiESD->GetDcaV0Daughters();\r
-             lV0CosineOfPointingAngleXi = xiESD->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );\r
-             lV0CosineOfPointingAngle   = xiESD->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2]); \r
-             xiESD->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] );\r
-             lDcaV0ToPrimVertexXi       = xiESD->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );\r
-             lDcaPosToPrimVertexXi      = TMath::Abs( pTrackXi->GetD(lBestPrimaryVtxPos[0],lBestPrimaryVtxPos[1],lMagneticField) );\r
-             lDcaNegToPrimVertexXi      = TMath::Abs( nTrackXi->GetD(lBestPrimaryVtxPos[0],lBestPrimaryVtxPos[1],lMagneticField) );\r
-            lChargeXi = xiESD->Charge();\r
-       \r
-             //------------------\r
-            // - PID Information\r
-\r
-            // - Combined VO-positive-daughter PID\r
-            AliPID pPidXi;    pPidXi.SetPriors( lPriorsGuessXi );\r
-            AliPID pPidOmega; pPidOmega.SetPriors( lPriorsGuessOmega );                \r
-            if( pTrackXi->IsOn(AliESDtrack::kESDpid) ){  \r
-                 Double_t r[10] = {0.}; pTrackXi->GetESDpid(r);\r
-                 pPidXi.SetProbabilities(r);\r
-                 pPidOmega.SetProbabilities(r);                \r
-                 // Check if the V0 positive track is a proton (case for Xi-)\r
-                 Double_t pproton = pPidXi.GetProbability(AliPID::kProton);\r
-                 if (pproton > pPidXi.GetProbability(AliPID::kElectron) &&\r
-                     pproton > pPidXi.GetProbability(AliPID::kMuon)     &&\r
-                     pproton > pPidXi.GetProbability(AliPID::kPion)     &&\r
-                     pproton > pPidXi.GetProbability(AliPID::kKaon)        ) lIsPosInXiProton = kTRUE;\r
-                 // Check if the V0 positive track is a pi+ (case for Xi+)\r
-                 Double_t ppion = pPidXi.GetProbability(AliPID::kPion);\r
-                 if (ppion > pPidXi.GetProbability(AliPID::kElectron) &&\r
-                     ppion > pPidXi.GetProbability(AliPID::kMuon)     &&\r
-                     ppion > pPidXi.GetProbability(AliPID::kKaon)     &&\r
-                     ppion > pPidXi.GetProbability(AliPID::kProton)      ) lIsPosInXiPion = kTRUE;\r
-                 // Check if the V0 positive track is a proton (case for Omega-)\r
-                 pproton = 0.;\r
-                 pproton = pPidOmega.GetProbability(AliPID::kProton);\r
-                 if (pproton > pPidOmega.GetProbability(AliPID::kElectron) &&\r
-                     pproton > pPidOmega.GetProbability(AliPID::kMuon)     &&\r
-                     pproton > pPidOmega.GetProbability(AliPID::kPion)     &&\r
-                     pproton > pPidOmega.GetProbability(AliPID::kKaon)       ) lIsPosInOmegaProton = kTRUE;\r
-                 // Check if the V0 positive track is a pi+ (case for Omega+)\r
-                 ppion = 0.;\r
-                 ppion = pPidOmega.GetProbability(AliPID::kPion);\r
-                 if (ppion > pPidOmega.GetProbability(AliPID::kElectron) &&\r
-                     ppion > pPidOmega.GetProbability(AliPID::kMuon)     &&\r
-                     ppion > pPidOmega.GetProbability(AliPID::kKaon)     &&\r
-                     ppion > pPidOmega.GetProbability(AliPID::kProton)      ) lIsPosInOmegaPion = kTRUE;\r
-            }          \r
-            // - Combined VO-negative-daughter PID\r
-            AliPID nPidXi;    nPidXi.SetPriors( lPriorsGuessXi );\r
-            AliPID nPidOmega; nPidOmega.SetPriors( lPriorsGuessOmega );                \r
-            if( nTrackXi->IsOn(AliESDtrack::kESDpid) ) {  \r
-                 Double_t r[10] = {0.}; nTrackXi->GetESDpid(r);\r
-                 nPidXi.SetProbabilities(r);\r
-                 nPidOmega.SetProbabilities(r);\r
-                 // Check if the V0 negative track is a pi- (case for Xi-)\r
-                 Double_t ppion = nPidXi.GetProbability(AliPID::kPion);\r
-                 if (ppion > nPidXi.GetProbability(AliPID::kElectron) &&\r
-                     ppion > nPidXi.GetProbability(AliPID::kMuon)     &&\r
-                     ppion > nPidXi.GetProbability(AliPID::kKaon)     &&\r
-                     ppion > nPidXi.GetProbability(AliPID::kProton)      ) lIsNegInXiPion = kTRUE;\r
-                 // Check if the V0 negative track is an anti-proton (case for Xi+)\r
-                 Double_t pproton = nPidXi.GetProbability(AliPID::kProton);\r
-                 if (pproton > nPidXi.GetProbability(AliPID::kElectron) &&\r
-                     pproton > nPidXi.GetProbability(AliPID::kMuon)     &&\r
-                     pproton > nPidXi.GetProbability(AliPID::kPion)     &&\r
-                     pproton > nPidXi.GetProbability(AliPID::kKaon)       ) lIsNegInXiProton = kTRUE;\r
-                 // Check if the V0 negative track is a pi- (case for Omega-)\r
-                 ppion = 0.;\r
-                 ppion = nPidOmega.GetProbability(AliPID::kPion);\r
-                 if (ppion > nPidOmega.GetProbability(AliPID::kElectron) &&\r
-                     ppion > nPidOmega.GetProbability(AliPID::kMuon)     &&\r
-                     ppion > nPidOmega.GetProbability(AliPID::kKaon)     &&\r
-                     ppion > nPidOmega.GetProbability(AliPID::kProton)     ) lIsNegInOmegaPion = kTRUE;\r
-                 // Check if the V0 negative track is an anti-proton (case for Omega+)\r
-                 pproton = 0.;\r
-                 pproton = nPidOmega.GetProbability(AliPID::kProton);\r
-                 if (pproton > nPidOmega.GetProbability(AliPID::kElectron) &&\r
-                     pproton > nPidOmega.GetProbability(AliPID::kMuon)     &&\r
-                     pproton > nPidOmega.GetProbability(AliPID::kPion)     &&\r
-                     pproton > nPidOmega.GetProbability(AliPID::kKaon)       ) lIsNegInOmegaProton = kTRUE;\r
-            }\r
-            // - Combined bachelor PID\r
-            AliPID bachPidXi;    bachPidXi.SetPriors( lPriorsGuessXi );\r
-            AliPID bachPidOmega; bachPidOmega.SetPriors( lPriorsGuessOmega );\r
-            if ( bachTrackXi->IsOn(AliESDtrack::kESDpid) ) {  \r
-                  Double_t r[10] = {0.}; bachTrackXi->GetESDpid(r);\r
-                  bachPidXi.SetProbabilities(r);\r
-                  bachPidOmega.SetProbabilities(r);\r
-                  // Check if the bachelor track is a pion\r
-                  ppionBach = bachPidXi.GetProbability(AliPID::kPion);\r
-                  if (ppionBach > bachPidXi.GetProbability(AliPID::kElectron) &&\r
-                      ppionBach > bachPidXi.GetProbability(AliPID::kMuon)     &&\r
-                      ppionBach > bachPidXi.GetProbability(AliPID::kKaon)     &&\r
-                      ppionBach > bachPidXi.GetProbability(AliPID::kProton)     ) lIsBachelorPion = kTRUE;\r
-                  // Check if the bachelor track is a kaon\r
-                  pkaonBach = bachPidOmega.GetProbability(AliPID::kKaon);\r
-                  if (pkaonBach > bachPidOmega.GetProbability(AliPID::kElectron) &&\r
-                      pkaonBach > bachPidOmega.GetProbability(AliPID::kMuon)     &&\r
-                      pkaonBach > bachPidOmega.GetProbability(AliPID::kPion)     &&\r
-                      pkaonBach > bachPidOmega.GetProbability(AliPID::kProton)     ) lIsBachelorKaon = kTRUE;  \r
-            }\r
-            // - 4-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(); // Do not use GetTPCInnerWall\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
-            // - PID proba Vs Pt(Bach)\r
-            Int_t      lblBachForPID = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );\r
-            TParticle* mcBachForPID  = lMCstack->Particle( lblBachForPID );\r
-            lmcPtBach = mcBachForPID->Pt();\r
-            // - MC perfect PID\r
-            if( mcBachForPID->GetPdgCode() == -211) lIsBachelorMCPiMinus = kTRUE;\r
-            if( mcBachForPID->GetPdgCode() ==  211) lIsBachelorMCPiPlus  = kTRUE;\r
-            if( mcBachForPID->GetPdgCode() == -321) lIsBachelorMCKMinus  = kTRUE;\r
-            if( mcBachForPID->GetPdgCode() ==  321) lIsBachelorMCKPlus   = kTRUE;\r
-       \r
-       \r
-            //---------------------------------------------------------------\r
-            // -  MC association (care : lots of "continue;" below this line)\r
-            if(fDebug > 5) cout<< "MC EventNumber: "<<lMCevent->Header()->GetEvent()<<" / MC event Number in Run : "<<lMCevent->Header()->GetEventNrInRun()<<endl;\r
-            // - Level of the V0 daughters\r
-            Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() );  \r
-            Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() );                 \r
-            TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );\r
-            TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );\r
-            // - Level of the Xi daughters     \r
-            Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ; \r
-            Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();\r
-             if( lblMotherPosV0Dghter != lblMotherNegV0Dghter) continue; // same mother\r
-             if( lblMotherPosV0Dghter < 0 ) continue;                    // this particle is primary, no mother   \r
-             if( lblMotherNegV0Dghter < 0 ) continue;                    // this particle is primary, no mother\r
-                                                                                // mothers = Lambda candidate ... a priori\r
-            TParticle* mcMotherPosV0Dghter = lMCstack->Particle( lblMotherPosV0Dghter );\r
-            TParticle* mcMotherNegV0Dghter = lMCstack->Particle( lblMotherNegV0Dghter );  // MN: redundant?? already checked that labels are the same...-->same part from stack\r
-             Int_t lblBach = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );\r
-            TParticle* mcBach = lMCstack->Particle( lblBach ); \r
-            // - Level of Xi candidate\r
-            Int_t lblGdMotherPosV0Dghter = mcMotherPosV0Dghter->GetFirstMother() ;\r
-            Int_t lblGdMotherNegV0Dghter = mcMotherNegV0Dghter->GetFirstMother() ;\r
-             if( lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter ) continue;\r
-             if( lblGdMotherPosV0Dghter < 0 ) continue;                  // primary lambda ...   \r
-             if( lblGdMotherNegV0Dghter < 0 ) continue;                  // primary lambda ...                                 \r
-                                                                             // Gd mothers = Xi candidate ... a priori\r
-             TParticle* mcGdMotherPosV0Dghter = lMCstack->Particle( lblGdMotherPosV0Dghter );\r
-             TParticle* mcGdMotherNegV0Dghter = lMCstack->Particle( lblGdMotherNegV0Dghter );                          \r
-            Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetFirstMother()  );  \r
-             if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters\r
-            TParticle* mcMotherBach = lMCstack->Particle( lblMotherBach );\r
-            \r
-             // - Check if cascade is primary\r
-             if (!(lMCstack->IsPhysicalPrimary(lblMotherBach))) continue;  \r
-\r
-            // - Manage boolean for association\r
-            if     ( mcMotherBach          ->GetPdgCode() == 3312 &&\r
-                     mcGdMotherPosV0Dghter ->GetPdgCode() == 3312 &&\r
-                     mcGdMotherNegV0Dghter ->GetPdgCode() == 3312   ) {lAssoXiMinus = kTRUE;\r
-                                                                        cascadeMass = 1.321;\r
-                                                                         nAssoXiMinus++; }\r
-            else if( mcMotherBach           ->GetPdgCode() == -3312 &&\r
-                     mcGdMotherPosV0Dghter  ->GetPdgCode() == -3312 &&\r
-                     mcGdMotherNegV0Dghter  ->GetPdgCode() == -3312   ) {lAssoXiPlus = kTRUE;\r
-                                                                          cascadeMass = 1.321;\r
-                                                                          nAssoXiPlus++; }\r
-            else if( mcMotherBach           ->GetPdgCode() == 3334 &&\r
-                     mcGdMotherPosV0Dghter  ->GetPdgCode() == 3334 &&\r
-                     mcGdMotherNegV0Dghter  ->GetPdgCode() == 3334    ) {lAssoOmegaMinus = kTRUE;\r
-                                                                          cascadeMass = 1.672;\r
-                                                                          nAssoOmegaMinus++; }\r
-            else if( mcMotherBach           ->GetPdgCode() == -3334 &&\r
-                     mcGdMotherPosV0Dghter  ->GetPdgCode() == -3334 &&\r
-                     mcGdMotherNegV0Dghter  ->GetPdgCode() == -3334   ) {lAssoOmegaPlus = kTRUE;\r
-                                                                             cascadeMass = 1.672;\r
-                                                                             nAssoOmegaPlus++; }\r
-            // If a proper association  exists ...     \r
-            if(fDebug > 4){\r
-                     cout<<"XiMinus    = "<<lAssoXiMinus   <<endl;\r
-                     cout<<"XiPlus     = "<<lAssoXiPlus    <<endl;\r
-                     cout<<"OmegaMinus = "<<lAssoOmegaMinus<<endl;\r
-                     cout<<"OmegaPlus  = "<<lAssoOmegaPlus <<endl \r
-                         <<"----"            <<endl;   \r
-            }\r
-            if(fDebug > 5){\r
-                        cout<<endl;\r
-                     cout<<"- V0 daughters - "<<endl;\r
-                     cout<<"     + V0 Pos. / Label : "<<lblPosV0Dghter<<" - Pdg Code : "<<mcPosV0Dghter->GetTitle()<<endl;\r
-                     cout<<"     - V0 Neg. / Label : "<<lblNegV0Dghter<<" - Pdg Code : "<<mcNegV0Dghter->GetTitle()<<endl;\r
-\r
-                     cout<<"- Xi daughters - "<<endl;\r
-                     cout<<"     + V0 Pos. mother / Label : "<<lblMotherPosV0Dghter<<" - Pdg Code : "<<mcMotherPosV0Dghter->GetTitle()<<endl;\r
-                     cout<<"     - V0 Neg. mother / Label : "<<lblMotherNegV0Dghter<<" - Pdg Code : "<<mcMotherNegV0Dghter->GetTitle()<<endl;\r
-               \r
-                     cout<<"     --  Bach. / Label :"<<lblBach<<" -  Pdg Code : "<<mcBach->GetTitle()<<endl;\r
-               \r
-                     cout<<"- Xi candidate -"<<endl;\r
-                     cout<<"    +  V0 Pos. Gd Mother / Label : "<<lblGdMotherPosV0Dghter<<" - Pdg Code : "<< mcGdMotherPosV0Dghter->GetTitle()<<endl;\r
-                     cout<<"    -  V0 Neg. Gd Mother / Label : "<<lblGdMotherNegV0Dghter<<" - Pdg Code : "<< mcGdMotherNegV0Dghter->GetTitle()<<endl;\r
-               \r
-                     cout<<"    --  Mother Bach. / Label : "<<lblMotherBach<<" - Pdg Code    : "<<mcMotherBach->GetTitle()<<endl;\r
-                     cout<<endl;\r
-            }\r
-       \r
-             lmcPt             = mcMotherBach->Pt();\r
-             lmcRapCasc        = 0.5*TMath::Log( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) );\r
-             lmcEta            = mcMotherBach->Eta();\r
-             lmcTransvRadius   = mcBach->R(); // to get the decay point of Xi, = the production vertex of Bachelor ...\r
-             TVector3 lmcTVect3Mom( mcMotherBach->Px(), mcMotherBach->Py(), mcMotherBach->Pz() );\r
-             lrecoPt           = xiESD->Pt();\r
-             lrecoTransvRadius = TMath::Sqrt( xiESD->Xv() * xiESD->Xv() + xiESD->Yv() * xiESD->Yv() );\r
-             TVector3 lrecoTVect3Mom( xiESD->Px(), xiESD->Py(), xiESD->Pz() );\r
-             lDeltaPhiMcReco   = lmcTVect3Mom.DeltaPhi( lrecoTVect3Mom ) * 180.0/TMath::Pi();\r
-             lmcPtPosV0Dghter  = mcPosV0Dghter->Pt() ;\r
-             lmcPtNegV0Dghter  = mcNegV0Dghter->Pt();\r
-             lrecoP            = xiESD->P();\r
-             Double_t nV0mom[3] = {0. ,0. ,0. };\r
-             Double_t pV0mom[3] = {0. ,0. ,0. };\r
-             xiESD->GetNPxPyPz(nV0mom[0],nV0mom[1],nV0mom[2]);    \r
-             xiESD->GetPPxPyPz(pV0mom[0],pV0mom[1],pV0mom[2]);\r
-             lV0mom = TMath::Sqrt(TMath::Power(nV0mom[0]+pV0mom[0],2)+TMath::Power(nV0mom[1]+pV0mom[1],2)+TMath::Power(nV0mom[2]+pV0mom[2],2));\r
-             Double_t lBachMomX = 0.; Double_t lBachMomY = 0.; Double_t lBachMomZ = 0.;\r
-             xiESD->GetBPxPyPz(  lBachMomX,  lBachMomY,  lBachMomZ );\r
-             lBachTransvMom   = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY );\r
-             lnTrackTransvMom = TMath::Sqrt( nV0mom[0]*nV0mom[0] + nV0mom[1]*nV0mom[1] );\r
-             lpTrackTransvMom = TMath::Sqrt( pV0mom[0]*pV0mom[0] + pV0mom[1]*pV0mom[1] );\r
-            \r
-        } else if ( fAnalysisType == "AOD" ) {\r
-\r
-             // - Load the cascade\r
-             const AliAODcascade *xiAOD = lAODevent->GetCascade(iXi);\r
-             if (!xiAOD) continue;\r
-\r
-             // - Connection to daughter tracks of the current cascade\r
-             AliAODTrack *pTrackXi    = dynamic_cast<AliAODTrack*>( xiAOD->GetDaughter(0) );\r
-             AliAODTrack *nTrackXi    = dynamic_cast<AliAODTrack*>( xiAOD->GetDaughter(1) );\r
-             AliAODTrack *bachTrackXi = dynamic_cast<AliAODTrack*>( xiAOD->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
-\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) {\r
-                AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;\r
-             }\r
-             if(lBachIdx == lIdxPosXi) {\r
-                AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;\r
-             }\r
-             lPosTPCClusters   = pTrackXi->GetTPCNcls();\r
-             lNegTPCClusters   = nTrackXi->GetTPCNcls();\r
-             lBachTPCClusters  = bachTrackXi->GetTPCNcls();\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!"); 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
-             etaPos  = pTrackXi->Eta();\r
-             etaNeg  = nTrackXi->Eta();\r
-             etaBach = bachTrackXi->Eta();\r
-\r
-             // - Info over reconstructed cascades\r
-             if( bachTrackXi->Charge() < 0 ) {\r
-                  lInvMassXiMinus = xiAOD->MassXi();\r
-                  lInvMassOmegaMinus = xiAOD->MassOmega();\r
-             }\r
-             if( bachTrackXi->Charge() >  0 ){\r
-                  lInvMassXiPlus = xiAOD->MassXi();\r
-                  lInvMassOmegaPlus = xiAOD->MassOmega();\r
-             }\r
-             lDcaXiDaughters            = xiAOD->DcaXiDaughters();\r
-             lDcaBachToPrimVertexXi     = xiAOD->DcaBachToPrimVertex();\r
-             lXiCosineOfPointingAngle   = xiAOD->CosPointingAngleXi( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );\r
-             lPosXi[0]                  = xiAOD->DecayVertexXiX();\r
-             lPosXi[1]                  = xiAOD->DecayVertexXiY();\r
-             lPosXi[2]                  = xiAOD->DecayVertexXiZ();\r
-             lInvMassLambdaAsCascDghter = xiAOD->MassLambda();\r
-             lDcaV0DaughtersXi          = xiAOD->DcaV0Daughters();\r
-             lV0CosineOfPointingAngleXi = xiAOD->CosPointingAngle( lPosXi );\r
-             lV0CosineOfPointingAngle   = xiAOD->CosPointingAngle( lBestPrimaryVtxPos );\r
-             lPosV0Xi[0]                = xiAOD->DecayVertexV0X();\r
-             lPosV0Xi[1]                = xiAOD->DecayVertexV0Y();\r
-             lPosV0Xi[2]                = xiAOD->DecayVertexV0Z();\r
-             lDcaV0ToPrimVertexXi       = xiAOD->DcaV0ToPrimVertex();\r
-             lDcaPosToPrimVertexXi      = xiAOD->DcaPosToPrimVertex();\r
-             lDcaNegToPrimVertexXi      = xiAOD->DcaNegToPrimVertex();\r
-             lChargeXi                  = xiAOD->ChargeXi();\r
-\r
-             //------------------\r
-             // - PID Information\r
-             // Combined VO-positive-daughter PID\r
-             // Combined bachelor PID\r
-             /* \r
-             AliPID bachPidXi;       bachPidXi.SetPriors(    lPriorsGuessXi    );\r
-             AliPID bachPidOmega;    bachPidOmega.SetPriors( lPriorsGuessOmega );\r
-\r
-             if ( bachTrackXi->IsOn(AliESDtrack::kESDpid) ) {  // Combined PID exists\r
-                  Double_t r[10] = {0.}; bachTrackXi->GetESDpid(r);\r
-                  bachPidXi.SetProbabilities(r);\r
-                  bachPidOmega.SetProbabilities(r);\r
-                  // Check if the bachelor track is a pion\r
-                  ppionBach = bachPidXi.GetProbability(AliPID::kPion);\r
-                  if (ppionBach > bachPidXi.GetProbability(AliPID::kElectron) &&\r
-                      ppionBach > bachPidXi.GetProbability(AliPID::kMuon)     &&\r
-                      ppionBach > bachPidXi.GetProbability(AliPID::kKaon)     &&\r
-                      ppionBach > bachPidXi.GetProbability(AliPID::kProton)   )     lIsBachelorPion = kTRUE;\r
-                  // Check if the bachelor track is a kaon\r
-                  pkaonBach = bachPidOmega.GetProbability(AliPID::kKaon);\r
-                  if (pkaonBach > bachPidOmega.GetProbability(AliPID::kElectron) &&\r
-                      pkaonBach > bachPidOmega.GetProbability(AliPID::kMuon)     &&\r
-                      pkaonBach > bachPidOmega.GetProbability(AliPID::kPion)     &&\r
-                      pkaonBach > bachPidOmega.GetProbability(AliPID::kProton)   )  lIsBachelorKaon = kTRUE;\r
-             }// end if bachelor track with existing combined PID\r
-             */\r
-\r
-             // - TPC PID: 4-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(); // Do not use GetTPCInnerWall\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
-             // - PID proba Vs Pt(Bach)\r
-             Int_t lblBachForPID = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );\r
-             AliAODMCParticle* mcBachForPID   = (AliAODMCParticle*) arrayMC->At( lblBachForPID );\r
-             lmcPtBach = mcBachForPID->Pt();\r
-\r
-             // - MC perfect PID\r
-             if( mcBachForPID->PdgCode() == -211) lIsBachelorMCPiMinus = kTRUE;\r
-             if( mcBachForPID->PdgCode() ==  211) lIsBachelorMCPiPlus  = kTRUE;\r
-             if( mcBachForPID->PdgCode() == -321) lIsBachelorMCKMinus  = kTRUE;\r
-             if( mcBachForPID->PdgCode() ==  321) lIsBachelorMCKPlus   = kTRUE;\r
-\r
-             //--------------------------------------------------------------\r
-             // - MC association (care : lots of "continue;" below this line)\r
-             if(fDebug > 5) cout<<"MC EventNumber : "<<lMCevent->Header()->GetEvent()<<" / MC event Number in Run : "<<lMCevent->Header()->GetEventNrInRun()<<endl;\r
-             // - Level of the V0 daughters\r
-             Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() );\r
-             Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() );\r
-             AliAODMCParticle* mcPosV0Dghter = (AliAODMCParticle*) arrayMC->At( lblPosV0Dghter );\r
-             AliAODMCParticle* mcNegV0Dghter = (AliAODMCParticle*) arrayMC->At( lblNegV0Dghter );\r
-             // - Level of the Xi daughters\r
-             Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetMother();   \r
-             Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetMother();\r
-             if( lblMotherPosV0Dghter != lblMotherNegV0Dghter) continue; // same mother\r
-             if( lblMotherPosV0Dghter < 0 ) continue;                    // this particle is primary, no mother\r
-             if( lblMotherNegV0Dghter < 0 ) continue;                    // this particle is primary, no mother\r
-                                                                         // mothers = Lambda candidate ... a priori\r
-             AliAODMCParticle* mcMotherPosV0Dghter = (AliAODMCParticle*) arrayMC->At( lblMotherPosV0Dghter );\r
-             AliAODMCParticle* mcMotherNegV0Dghter = (AliAODMCParticle*) arrayMC->At( lblMotherNegV0Dghter );  \r
-             Int_t      lblBach  = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );\r
-             AliAODMCParticle* mcBach   = (AliAODMCParticle*) arrayMC->At( lblBach );\r
-             // - Level of Xi candidate\r
-             Int_t lblGdMotherPosV0Dghter =   mcMotherPosV0Dghter->GetMother() ;\r
-             Int_t lblGdMotherNegV0Dghter =   mcMotherNegV0Dghter->GetMother() ;\r
-             if( lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter ) continue;\r
-             if( lblGdMotherPosV0Dghter < 0 ) continue;                    // primary lambda ...\r
-             if( lblGdMotherNegV0Dghter < 0 ) continue;                    // primary lambda ...\r
-                                                                           // Gd mothers = Xi candidate ... a priori\r
-             AliAODMCParticle* mcGdMotherPosV0Dghter = (AliAODMCParticle*) arrayMC->At( lblGdMotherPosV0Dghter );\r
-             AliAODMCParticle* mcGdMotherNegV0Dghter = (AliAODMCParticle*) arrayMC->At( lblGdMotherNegV0Dghter );\r
-             Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetMother() );\r
-             if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters\r
-             AliAODMCParticle* mcMotherBach = (AliAODMCParticle*) arrayMC->At( lblMotherBach );\r
-\r
-             // - Check if cascade is primary\r
-             if (!(mcMotherBach->IsPhysicalPrimary())) continue;\r
-\r
-             // - Manage boolean for association\r
-             if     ( mcMotherBach          ->GetPdgCode() == 3312 &&\r
-                      mcGdMotherPosV0Dghter ->GetPdgCode() == 3312 &&\r
-                      mcGdMotherNegV0Dghter ->GetPdgCode() == 3312   ) {lAssoXiMinus = kTRUE;\r
-                                                                        cascadeMass = 1.321;\r
-                                                                        nAssoXiMinus++; }\r
-             else if( mcMotherBach           ->GetPdgCode() == -3312 &&\r
-                      mcGdMotherPosV0Dghter  ->GetPdgCode() == -3312 &&\r
-                      mcGdMotherNegV0Dghter  ->GetPdgCode() == -3312   ) {lAssoXiPlus = kTRUE;\r
-                                                                          cascadeMass = 1.321;\r
-                                                                          nAssoXiPlus++; }\r
-             else if( mcMotherBach           ->GetPdgCode() == 3334 &&\r
-                      mcGdMotherPosV0Dghter  ->GetPdgCode() == 3334 &&\r
-                      mcGdMotherNegV0Dghter  ->GetPdgCode() == 3334   ) {lAssoOmegaMinus = kTRUE;\r
-                                                                         cascadeMass = 1.672;\r
-                                                                         nAssoOmegaMinus++; }\r
-             else if( mcMotherBach           ->GetPdgCode() == -3334 &&\r
-                      mcGdMotherPosV0Dghter  ->GetPdgCode() == -3334 &&\r
-                      mcGdMotherNegV0Dghter  ->GetPdgCode() == -3334   ) {lAssoOmegaPlus = kTRUE;\r
-                                                                          cascadeMass = 1.672;\r
-                                                                          nAssoOmegaPlus++; }\r
-\r
-             lmcPt              = mcMotherBach->Pt();\r
-             lmcRapCasc         = 0.5*TMath::Log( (mcMotherBach->E() + mcMotherBach->Pz()) / (mcMotherBach->E() - mcMotherBach->Pz() +1.e-13) );\r
-             lmcEta             = mcMotherBach->Eta();\r
-             Float_t decayCascX = mcBach->Xv();\r
-             Float_t decayCascY = mcBach->Yv();\r
-             lmcTransvRadius    = TMath::Sqrt(decayCascX*decayCascX+decayCascY*decayCascY); // decay point of Xi, = the production vertex of Bachelor ...\r
-             TVector3 lmcTVect3Mom( mcMotherBach->Px(), mcMotherBach->Py(), mcMotherBach->Pz() );\r
-             Double_t xiMomX    = xiAOD->MomXiX();\r
-             Double_t xiMomY    = xiAOD->MomXiY();\r
-             Double_t xiMomZ    = xiAOD->MomXiZ();\r
-             lrecoPt            = TMath::Sqrt( xiMomX*xiMomX   + xiMomY*xiMomY ); \r
-             lrecoTransvRadius  = TMath::Sqrt( xiAOD->DecayVertexXiX() * xiAOD->DecayVertexXiX() + xiAOD->DecayVertexXiY() * xiAOD->DecayVertexXiY() );\r
-             TVector3 lrecoTVect3Mom( xiMomX, xiMomY, xiMomZ );\r
-             lDeltaPhiMcReco    = lmcTVect3Mom.DeltaPhi( lrecoTVect3Mom ) * 180.0/TMath::Pi();\r
-             lmcPtPosV0Dghter   = mcPosV0Dghter->Pt() ;\r
-             lmcPtNegV0Dghter   = mcNegV0Dghter->Pt();\r
-             lrecoP             = TMath::Sqrt( xiMomX*xiMomX   + xiMomY*xiMomY   + xiMomZ*xiMomZ );;\r
-             Double_t lV0momX   = xiAOD->MomV0X();\r
-             Double_t lV0momY   = xiAOD->MomV0Y();\r
-             Double_t lV0momZ   = xiAOD->MomV0Z();\r
-             lV0mom             = TMath::Sqrt(TMath::Power(lV0momX,2)+TMath::Power(lV0momY,2)+TMath::Power(lV0momZ,2));\r
-             Double_t lBachMomX = xiAOD->MomBachX();\r
-             Double_t lBachMomY = xiAOD->MomBachY();\r
-             lBachTransvMom  = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY );\r
-             Double_t lV0NMomX = xiAOD->MomNegX();\r
-             Double_t lV0NMomY = xiAOD->MomNegY();\r
-             Double_t lV0PMomX = xiAOD->MomPosX();\r
-             Double_t lV0PMomY = xiAOD->MomPosY();\r
-             lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );\r
-             lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );\r
-            \r
-        }\r
-\r
-        lXiRadius   = TMath::Sqrt( lPosXi[0]*lPosXi[0]  +  lPosXi[1]*lPosXi[1] );\r
-        lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0]  +  lPosV0Xi[1]*lPosV0Xi[1] ); \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
-        // - Extra-selection for cascade candidates\r
-        if (fkExtraSelections) {\r
-                if (lDcaXiDaughters > 0.3) continue;              // in AliCascadeVertexer\r
-                if (lXiCosineOfPointingAngle < 0.999 ) continue;  // in AliCascadeVertexer\r
-                if (lDcaV0ToPrimVertexXi < 0.05) continue;        // in AliCascadeVertexer\r
-                if (lDcaBachToPrimVertexXi < 0.03) continue;      // in AliCascadeVertexer\r
-                if (lDcaV0DaughtersXi > 1.) continue;             // in AliV0vertexer\r
-                if (lV0CosineOfPointingAngleXi < 0.998) continue; // in AliV0vertexer\r
-                if (lDcaPosToPrimVertexXi < 0.1) continue;        // in AliV0vertexer\r
-                if (lDcaNegToPrimVertexXi < 0.1) continue;        // in AliV0vertexer\r
-                if(lXiRadius < .9) continue;                      // in AliCascadeVertexer\r
-                if(lV0RadiusXi < 0.9) continue;                   // in AliV0vertexer\r
-        }\r
-\r
-        //-------------------------\r
-        // - Fill combined PID TH1s\r
-        if( lChargeXi < 0 && lIsBachelorPion )    fHistMassWithCombPIDXiMinus    ->Fill( lInvMassXiMinus    );\r
-        if( lChargeXi > 0 && lIsBachelorPion )    fHistMassWithCombPIDXiPlus     ->Fill( lInvMassXiPlus     );\r
-        if( lChargeXi < 0 && lIsBachelorKaon )    fHistMassWithCombPIDOmegaMinus ->Fill( lInvMassOmegaMinus );\r
-        if( lChargeXi > 0 && lIsBachelorKaon )    fHistMassWithCombPIDOmegaPlus  ->Fill( lInvMassOmegaPlus  );\r
-        if( lChargeXi < 0 )   fHistMassXiMinus    ->Fill( lInvMassXiMinus );\r
-        if( lChargeXi > 0 )   fHistMassXiPlus     ->Fill( lInvMassXiPlus );\r
-        if( lChargeXi < 0 )   fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus );\r
-        if( lChargeXi > 0 )   fHistMassOmegaPlus  ->Fill( lInvMassOmegaPlus );\r
-        if(lIsBachelorPion)   f2dHistPIDprobaPionVsMCPtBach->Fill( lmcPtBach, ppionBach );\r
-        if(lIsBachelorKaon)   f2dHistPIDprobaKaonVsMCPtBach->Fill( lmcPtBach, pkaonBach );\r
-        if( lChargeXi < 0 && lIsBachelorMCPiMinus )    fHistMassWithMcPIDXiMinus     ->Fill( lInvMassXiMinus );\r
-        if( lChargeXi > 0 && lIsBachelorMCPiPlus  )    fHistMassWithMcPIDXiPlus      ->Fill( lInvMassXiPlus );\r
-        if( lChargeXi < 0 && lIsBachelorMCKMinus  )    fHistMassWithMcPIDOmegaMinus  ->Fill( lInvMassOmegaMinus );\r
-        if( lChargeXi > 0 && lIsBachelorMCKPlus   )    fHistMassWithMcPIDOmegaPlus   ->Fill( lInvMassOmegaPlus );\r
-\r
-\r
-        // - No association, skip the rest of the code\r
-        if(!lAssoXiMinus && !lAssoXiPlus && !lAssoOmegaMinus && !lAssoOmegaPlus) continue; \r
-\r
-        //--------------\r
-        // - Proper time         \r
-        // For cascade (reconstructed)   \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 (lrecoP!=0) lctau = lctau*cascadeMass/lrecoP;   \r
-        else lctau = -1.;\r
-        // 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 (lV0mom!=0) lctauV0 = distV0Xi*lambdaMass/lV0mom; \r
-        // Distance\r
-        Float_t distTV0Xi = TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2));\r
-       \r
-        //------------------------------------------------------------\r
-        // - Fill histos for the cascade candidates associated with MC\r
-        if( lChargeXi < 0 && lAssoXiMinus){    \r
-                fHistAsMCMassXiMinus         ->Fill( lInvMassXiMinus  );\r
-               if(lIsBachelorPion)     f2dHistAsMCandCombPIDGenPtVsGenYXiMinus->Fill( lmcPt, lmcRapCasc );\r
-               f2dHistAsMCGenPtVsGenYXiMinus ->Fill( lmcPt, lmcRapCasc);\r
-               fHistAsMCGenEtaXiMinus        ->Fill( lmcEta           );\r
-               f2dHistAsMCResPtXiMinus       ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );\r
-               f2dHistAsMCResRXiMinus        ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );\r
-                f2dHistAsMCResPhiXiMinus      ->Fill( lmcPt, lDeltaPhiMcReco );\r
-                f2dHistAsMCptProtonMCptXiMinus->Fill(lmcPt,lmcPtPosV0Dghter);\r
-                fHistV0CosineOfPointingAnglevsPtXi->Fill(lmcPt,lV0CosineOfPointingAngle);\r
-        }      \r
-        else if( lChargeXi > 0 && lAssoXiPlus){        \r
-               fHistAsMCMassXiPlus           ->Fill( lInvMassXiPlus   );\r
-               if(lIsBachelorPion)     f2dHistAsMCandCombPIDGenPtVsGenYXiPlus->Fill( lmcPt, lmcRapCasc );\r
-               f2dHistAsMCGenPtVsGenYXiPlus  ->Fill( lmcPt, lmcRapCasc);\r
-               fHistAsMCGenEtaXiPlus         ->Fill( lmcEta           );\r
-               f2dHistAsMCResPtXiPlus        ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );\r
-               f2dHistAsMCResRXiPlus         ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );\r
-                f2dHistAsMCResPhiXiPlus       ->Fill( lmcPt, lDeltaPhiMcReco );\r
-                f2dHistAsMCptAntiprotonMCptXiPlus->Fill(lmcPt,lmcPtNegV0Dghter);\r
-                fHistV0CosineOfPointingAnglevsPtXi->Fill(lmcPt,lV0CosineOfPointingAngle);\r
-        }\r
-        else if( lChargeXi < 0 && lAssoOmegaMinus){    \r
-               fHistAsMCMassOmegaMinus          ->Fill( lInvMassOmegaMinus );\r
-               if(lIsBachelorKaon)     f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus->Fill( lmcPt, lmcRapCasc );\r
-               f2dHistAsMCGenPtVsGenYOmegaMinus ->Fill( lmcPt, lmcRapCasc  );\r
-               fHistAsMCGenEtaOmegaMinus        ->Fill( lmcEta             );\r
-               f2dHistAsMCResPtOmegaMinus       ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );\r
-               f2dHistAsMCResROmegaMinus        ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );\r
-                f2dHistAsMCResPhiOmegaMinus      ->Fill( lmcPt, lDeltaPhiMcReco );\r
-                f2dHistAsMCptProtonMCptOmegaMinus->Fill(lmcPt,lmcPtPosV0Dghter);\r
-                fHistV0CosineOfPointingAnglevsPtOmega->Fill(lmcPt,lV0CosineOfPointingAngle);\r
-        }      \r
-        else if( lChargeXi > 0 && lAssoOmegaPlus){     \r
-               fHistAsMCMassOmegaPlus           ->Fill( lInvMassOmegaPlus );\r
-               if(lIsBachelorKaon)     f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus->Fill( lmcPt, lmcRapCasc );\r
-               f2dHistAsMCGenPtVsGenYOmegaPlus  ->Fill( lmcPt, lmcRapCasc   );\r
-               fHistAsMCGenEtaOmegaPlus         ->Fill( lmcEta            );\r
-               f2dHistAsMCResPtOmegaPlus        ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );\r
-               f2dHistAsMCResROmegaPlus         ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );\r
-                f2dHistAsMCResPhiOmegaPlus       ->Fill( lmcPt, lDeltaPhiMcReco );\r
-                f2dHistAsMCptAntiprotonMCptOmegaPlus->Fill(lmcPt,lmcPtNegV0Dghter);\r
-                fHistV0CosineOfPointingAnglevsPtOmega->Fill(lmcPt,lV0CosineOfPointingAngle);\r
-        }\r
-        fHistV0toXiCosineOfPointingAngle->Fill(lV0CosineOfPointingAngleXi);\r
-\r
-        //------------------         \r
-        // - Fill containers\r
-       \r
-        // - Filling the AliCFContainer (optimisation of topological selections + systematics)\r
-        Double_t lContainerCutVars[19] = {0.0};\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]  = lV0CosineOfPointingAngleXi;\r
-        lContainerCutVars[7]  = lV0RadiusXi;\r
-        lContainerCutVars[8]  = lDcaV0ToPrimVertexXi;  \r
-        lContainerCutVars[9]  = lDcaPosToPrimVertexXi;\r
-        lContainerCutVars[10] = lDcaNegToPrimVertexXi;\r
-        lContainerCutVars[13] = lmcPt;\r
-        lContainerCutVars[16] = lctau;\r
-        lContainerCutVars[17] = lctauV0;\r
-        lContainerCutVars[18] = distTV0Xi;\r
-        // All cases should be covered below\r
-        if( lChargeXi < 0 && lAssoXiMinus    ) {\r
-                     lContainerCutVars[11] = lInvMassXiMinus;\r
-                     lContainerCutVars[12] = lInvMassOmegaMinus;//1.63;\r
-                     lContainerCutVars[14] = lmcRapCasc;\r
-                     lContainerCutVars[15] = -1.;\r
-                     if ( lIsBachelorPionForTPC   && lIsPosProtonForTPC    && lIsNegPionForTPC )    \r
-                       fCFContAsCascadeCuts->Fill(lContainerCutVars,0); // for Xi-\r
-        }\r
-        if( lChargeXi > 0 && lAssoXiPlus    ) {\r
-                     lContainerCutVars[11] = lInvMassXiPlus;\r
-                     lContainerCutVars[12] = lInvMassOmegaPlus;//1.26;\r
-                     lContainerCutVars[14] = lmcRapCasc;\r
-                     lContainerCutVars[15] = -1.; \r
-                     if ( lIsBachelorPionForTPC   && lIsNegProtonForTPC    && lIsPosPionForTPC )    \r
-                       fCFContAsCascadeCuts->Fill(lContainerCutVars,1); // for Xi+\r
-        }\r
-        if( lChargeXi < 0 && lAssoOmegaMinus ) {\r
-                     lContainerCutVars[11] = lInvMassXiMinus;//1.63;\r
-                     lContainerCutVars[12] = lInvMassOmegaMinus;\r
-                     lContainerCutVars[14] = -1.;\r
-                     lContainerCutVars[15] = lmcRapCasc;\r
-                     if ( lIsBachelorKaonForTPC   && lIsPosProtonForTPC    && lIsNegPionForTPC )    \r
-                       fCFContAsCascadeCuts->Fill(lContainerCutVars,2); // for Omega-\r
-        }\r
-        if( lChargeXi > 0 && lAssoOmegaPlus  ) {\r
-                     lContainerCutVars[11] = lInvMassXiPlus;//1.26;\r
-                     lContainerCutVars[12] = lInvMassOmegaPlus;\r
-                     lContainerCutVars[14] = -1.;\r
-                     lContainerCutVars[15] = lmcRapCasc;\r
-                     if ( lIsBachelorKaonForTPC   && lIsNegProtonForTPC    && lIsPosPionForTPC )    \r
-                       fCFContAsCascadeCuts->Fill(lContainerCutVars,3); // for Omega+\r
-        }\r
-        \r
-        // - Filling the AliCFContainers related to PID\r
-        Double_t lContainerPIDVars[3] = {0.0};\r
-       \r
-        // Xi Minus            \r
-        if( lChargeXi < 0 && lAssoXiMinus ) {\r
-               lContainerPIDVars[0] = lmcPt;\r
-               lContainerPIDVars[1] = lInvMassXiMinus;\r
-               lContainerPIDVars[2] = lmcRapCasc;\r
-               // No PID\r
-               fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 0); // No PID\r
-               // TPC PID\r
-               if( lIsBachelorPionForTPC ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track\r
-               if( lIsBachelorPionForTPC && lIsPosProtonForTPC ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks   \r
-               if( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-               // Combined PID\r
-               if( lIsBachelorPion ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor\r
-               if( lIsBachelorPion && lIsPosInXiProton ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-               if( lIsBachelorPion && lIsPosInXiProton && lIsNegInXiPion ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-        }      \r
-        lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; \r
-       \r
-        // Xi Plus             \r
-        if( lChargeXi > 0 && lAssoXiPlus ) {\r
-               lContainerPIDVars[0] = lmcPt;\r
-               lContainerPIDVars[1] = lInvMassXiPlus;\r
-              lContainerPIDVars[2] = lmcRapCasc;\r
-              // No PID\r
-              fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 0); // No PID\r
-              // TPC PID\r
-              if( lIsBachelorPionForTPC ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track\r
-              if( lIsBachelorPionForTPC && lIsNegProtonForTPC ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks\r
-              if( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-              // Combined PID\r
-              if( lIsBachelorPion ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor\r
-              if( lIsBachelorPion && lIsNegInXiProton ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-              if( lIsBachelorPion && lIsNegInXiProton && lIsPosInXiPion ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-        }      \r
-        lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; \r
-       \r
-        // Omega Minus         \r
-        if( lChargeXi < 0 && lAssoOmegaMinus ) {\r
-              lContainerPIDVars[0] = lmcPt;\r
-              lContainerPIDVars[1] = lInvMassOmegaMinus;\r
-              lContainerPIDVars[2] = lmcRapCasc;               \r
-              // No PID\r
-              fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 0); // No PID\r
-              // TPC PID\r
-              if( lIsBachelorKaonForTPC ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track\r
-              if( lIsBachelorKaonForTPC && lIsPosProtonForTPC ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks\r
-              if( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-              // Combined PID\r
-              if( lIsBachelorKaon ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor\r
-              if( lIsBachelorKaon && lIsPosInOmegaProton ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-              if( lIsBachelorKaon && lIsPosInOmegaProton && lIsNegInOmegaPion ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-        }      \r
-        lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; \r
-       \r
-        // Omega Plus          \r
-        if( lChargeXi > 0 && lAssoOmegaPlus) {\r
-              lContainerPIDVars[0] = lmcPt;\r
-              lContainerPIDVars[1] = lInvMassOmegaPlus;\r
-              lContainerPIDVars[2] = lmcRapCasc;               \r
-              // No PID\r
-              fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 0); // No PID\r
-              // TPC PID\r
-              if( lIsBachelorKaonForTPC ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track\r
-                    if( lIsBachelorKaonForTPC && lIsNegProtonForTPC ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks\r
-                    if( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks\r
-                    // Combined PID\r
-                    if( lIsBachelorKaon ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor\r
-                    if( lIsBachelorKaon && lIsNegInOmegaProton ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon\r
-                    if( lIsBachelorKaon && lIsNegInOmegaProton && lIsPosInOmegaPion ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson\r
-        }      \r
-       \r
-   }// End of loop over reconstructed cascades\r
\r
-   fHistnAssoXiMinus->Fill(nAssoXiMinus);\r
-   fHistnAssoXiPlus->Fill(nAssoXiPlus);\r
-   fHistnAssoOmegaMinus->Fill(nAssoOmegaMinus);\r
-   fHistnAssoOmegaPlus->Fill(nAssoOmegaPlus);  \r
\r
-   // Post output data.\r
-   PostData(1, fListHistCascade);\r
-   PostData(2, fCFContCascadePIDAsXiMinus);\r
-   PostData(3, fCFContCascadePIDAsXiPlus);\r
-   PostData(4, fCFContCascadePIDAsOmegaMinus);\r
-   PostData(5, fCFContCascadePIDAsOmegaPlus);\r
-   PostData(6, fCFContAsCascadeCuts);\r
-\r
-}      \r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskCheckPerformanceCascadepp276::Terminate(Option_t *) {\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
-       Printf("ERROR - AliAnalysisTaskCheckPerformanceCascadepp276 : ouput data container list not available\n");\r
-       return;\r
-  }    \r
-       \r
-  fHistTrackMultiplicityBeforeAnySel = dynamic_cast<TH1F*> (  cRetrievedList->FindObject("fHistTrackMultiplicityBeforeAnySel")  );\r
-  if (!fHistTrackMultiplicityBeforeAnySel) {\r
-    Printf("ERROR - AliAnalysisTaskCheckPerformanceCascadepp276 : fHistTrackMultiplicityBeforeAnySel not available");\r
-    return;\r
-  }\r
-  \r
-   \r
-  TCanvas *canCheckPerformanceCascade = new TCanvas("AliAnalysisTaskCheckPerformanceCascadepp276","Multiplicity",10,10,510,510);\r
-  canCheckPerformanceCascade->cd(1)->SetLogy();\r
-\r
-  fHistTrackMultiplicityBeforeAnySel->SetMarkerStyle(22);\r
-  fHistTrackMultiplicityBeforeAnySel->DrawCopy("E");\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.                  *
+ **************************************************************************/
+
+//-----------------------------------------------------------------
+//           AliAnalysisTaskCheckPerformanceCascadePbPb class
+//            This task is for a performance study of cascade identification in PbPb.
+//            It works with MC info and ESD/AOD.
+//            Origin   : AliAnalysisTaskCheckPerformanceCascade class by A. Maire Nov2010, antonin.maire@ires.in2p3.fr
+//            Modified for PbPb analysis: M. Nicassio Feb2011, maria.nicassio@ba.infn.it:
+//                        - physics selection moved to the run.C macro
+//                        - added centrality selection and possibility to select events in nTracks ranges 
+//                        - added new histograms 
+//                        - modified binning of some histograms and containers 
+//                        - flag to enable CF container usage 
+//                        - check in the destructor for CAF usage
+//                        - flag for acceptance cut in the MC part
+//                        - in the MC particle selection IsPhysicalPrimary added and number of particles taken as appropriate for HIJING 
+//                          (however for cascades one gets the same if runs on Nprimaries in the stack and does not check IsPhysicalPrimary)
+//                        - automatic settings for PID 
+//                        - selection of injected cascades and HIJING cascades (kind of "bug" in method IsFromBGEvent())
+//                        - added proper time histograms for cascades and lambdas
+//                        - cos of PA V0 wrt Xi vertex and not primary vertex  
+//                        - distance xi-V0 added in the container
+//                        - AOD analysis developed (January 2012)
+//
+//
+//
+//              Adapted to pp 2.76 analysis: D. Colella, domenico.colella@ba.infn.it (Nov. 2012):
+//                        - added new and removed other histograms 
+//                        - Physics selection moved here (mainly for normalization in the efficiency calcuation)
+//                        - Centrality selection deleted
+//                        - 3DHisto denominator moved before any event selection for Normalization
+//                        - injected and natural part of MC selection removed
+// 
+//
+//
+//-----------------------------------------------------------------
+
+
+#include <Riostream.h>
+
+#include "TList.h"
+#include "TFile.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3F.h"
+#include "TVector3.h"
+#include "TCanvas.h"
+#include "TParticle.h"
+#include "TMath.h"
+
+#include "AliLog.h"
+#include "AliHeader.h"
+#include "AliMCEvent.h"
+#include "AliStack.h"
+#include "AliMultiplicity.h"
+#include "AliInputEventHandler.h"
+#include "AliAnalysisManager.h"
+
+#include "AliCFContainer.h"
+
+#include "AliESDVZERO.h"
+
+#include "AliGenEventHeader.h"
+#include "AliGenCocktailEventHeader.h"
+#include "AliGenHijingEventHeader.h"
+#include "AliESDtrackCuts.h"
+#include "AliPIDResponse.h"
+#include "AliV0vertexer.h"
+#include "AliCascadeVertexer.h"
+#include "AliESDEvent.h"
+#include "AliESDcascade.h"
+#include "AliAODEvent.h"
+#include "AliAODMCParticle.h" 
+#include "AliAnalysisTaskCheckPerformanceCascadepp276.h"
+
+using std::cout;
+using std::endl;
+
+ClassImp(AliAnalysisTaskCheckPerformanceCascadepp276)
+
+
+
+//________________________________________________________________________________________
+AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCascadepp276() 
+: AliAnalysisTaskSE(), // <- take care to AliAnalysisTask( empty )
+    fAnalysisType                  ("ESD"), 
+    fESDtrackCuts                  (0), 
+    fPIDResponse                   (0),
+    fkRerunV0CascVertexers         (0),
+    fkSDDselectionOn               (kTRUE),
+    fkQualityCutZprimVtxPos        (kTRUE),
+    fkRejectEventPileUp            (kTRUE),
+    fkQualityCutNoTPConlyPrimVtx   (kTRUE),
+    fkQualityCutTPCrefit           (kTRUE),
+    fkQualityCutnTPCcls            (kTRUE),
+    fwithSDD                       (kTRUE),
+    fMinnTPCcls                    (0),
+    fkExtraSelections              (0),
+    fVtxRange                      (0),
+    fVtxRangeMin                   (0),
+    fApplyAccCut                   (0),
+    fMinPtCutOnDaughterTracks      (0),
+    fEtaCutOnDaughterTracks        (0),
+    
+    // - Plots initialisation
+    fListHistCascade(0),
+
+    // - General Plots
+    // Cascade multiplicity plots
+    fHistCascadeMultiplicityBeforeAnySel(0),
+    fHistCascadeMultiplicityAfterSDDSel(0),
+    fHistCascadeMultiplicityAfterPhysicsSel(0),
+    fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
+    fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistCascadeMultiplicityAfterVertexCutSel(0),
+    fHistnXiPlusPerEvTot(0),                  // After any event selections, in all the eta and pt range
+    fHistnXiMinusPerEvTot(0),                 // After any event selections, in all the eta and pt range
+    fHistnOmegaPlusPerEvTot(0),               // After any event selections, in all the eta and pt range
+    fHistnOmegaMinusPerEvTot(0),              // After any event selections, in all the eta and pt range
+    fHistnXiPlusPerEv(0),                     // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnXiMinusPerEv(0),                    // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnOmegaPlusPerEv(0),                  // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnOmegaMinusPerEv(0),                 // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnAssoXiMinus(0),                     // For the Reconstructed-Associated cascades 
+    fHistnAssoXiPlus(0),                      // For the Reconstructed-Associated cascades 
+    fHistnAssoOmegaMinus(0),                  // For the Reconstructed-Associated cascades 
+    fHistnAssoOmegaPlus(0),                   // For the Reconstructed-Associated cascades 
+    // Tracks multiplicity plots
+    fHistTrackMultiplicityBeforeAnySel(0),
+    fHistTrackMultiplicityAfterSDDSel(0),
+    fHistTrackMultiplicityAfterPhysicsSel(0),
+    fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
+    fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistTrackMultiplicityAfterVertexCutSel(0),
+    // Vertex position plots (BestVertex)
+    fHistPVx(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVy(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVz(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVxAnalysis(0),                      // After any event selections
+    fHistPVyAnalysis(0),                      // After any event selections
+    fHistPVzAnalysis(0),                      // After any event selections
+    // - Plots before Physics Selection
+    f3dHistGenPtVsGenYvsNtracksXiMinus(0),    // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenctauvsYXiMinus(0),       // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenYvsNtracksXiPlus(0),     // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenctauvsYXiPlus(0),        // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenYvsNtracksOmegaMinus(0), // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenctauvsYOmegaMinus(0),    // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenYvsNtracksOmegaPlus(0),  // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenctauvsYOmegaPlus(0),     // After the SDD event selection (For efficinecy calculation)
+    // - Generated cascade plots
+    // After all the event selections 
+    //Xi-
+    fHistEtaGenCascXiMinus(0),                // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascXiMinus(0),              // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYXiMinusPhysEff(0),       // 
+    f2dHistGenPtVsGenYFdblXiMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachXiMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachXiMinus(0),                    // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    //Xi+
+    fHistEtaGenCascXiPlus(0),                 // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascXiPlus(0),               // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYXiPlusPhysEff(0),       //
+    f2dHistGenPtVsGenYFdblXiPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachXiPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachXiPlus(0),                     // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)
+    //Omega-
+    fHistEtaGenCascOmegaMinus(0),             // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascOmegaMinus(0),           // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff(0),       //
+    f2dHistGenPtVsGenYFdblOmegaMinus(0),      // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachOmegaMinus(0),              // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachOmegaMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    //Omega+      
+    fHistEtaGenCascOmegaPlus(0),              // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascOmegaPlus(0),            // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff(0),       //
+    f2dHistGenPtVsGenYFdblOmegaPlus(0),       // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachOmegaPlus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachOmegaPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+
+    // - Associated to MC cascade plots
+    fHistMassXiMinus(0),                      // For the Reconstructed-Associated cascades
+    fHistMassXiPlus(0),                       // For the Reconstructed-Associated cascades
+    fHistMassOmegaMinus(0),                   // For the Reconstructed-Associated cascades
+    fHistMassOmegaPlus(0),                    // For the Reconstructed-Associated cascades
+    // Effective mass histos with combined PID
+    fHistMassWithCombPIDXiMinus(0),           
+    fHistMassWithCombPIDXiPlus(0),
+    fHistMassWithCombPIDOmegaMinus(0), 
+    fHistMassWithCombPIDOmegaPlus(0),  
+    // PID Probability versus MC Pt(bachelor track)
+    f2dHistPIDprobaKaonVsMCPtBach(0), f2dHistPIDprobaPionVsMCPtBach(0),
+    // Effective mass histos with perfect MC PID on the bachelor
+    fHistMassWithMcPIDXiMinus(0), fHistMassWithMcPIDXiPlus(0),
+    fHistMassWithMcPIDOmegaMinus(0), fHistMassWithMcPIDOmegaPlus(0),
+    // Effective mass histos for the cascade candidates associated with MC
+    fHistAsMCMassXiMinus(0),           
+    fHistAsMCMassXiPlus(0),            
+    fHistAsMCMassOmegaMinus(0),
+    fHistAsMCMassOmegaPlus(0),
+    // Generated Pt Vs generated y, for the cascade candidates associated with MC + Info Comb. PID
+    f2dHistAsMCandCombPIDGenPtVsGenYXiMinus(0),
+    f2dHistAsMCandCombPIDGenPtVsGenYXiPlus(0),
+    f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus(0),
+    f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus(0),
+    // Generated Pt Vs generated y, for the cascade candidates associated with MC
+    f2dHistAsMCGenPtVsGenYXiMinus(0),
+    f2dHistAsMCGenPtVsGenYXiPlus(0),
+    f2dHistAsMCGenPtVsGenYOmegaMinus(0),
+    f2dHistAsMCGenPtVsGenYOmegaPlus(0),
+    // Generated Eta of the the cascade candidates associated with MC
+    fHistAsMCGenEtaXiMinus(0),
+    fHistAsMCGenEtaXiPlus(0),
+    fHistAsMCGenEtaOmegaMinus(0),
+    fHistAsMCGenEtaOmegaPlus(0),
+    // Resolution in Pt as function of generated Pt
+    f2dHistAsMCResPtXiMinus(0),                
+    f2dHistAsMCResPtXiPlus(0),         
+    f2dHistAsMCResPtOmegaMinus(0),
+    f2dHistAsMCResPtOmegaPlus(0),      
+    // Resolution in R(2D) as function of generated R
+    f2dHistAsMCResRXiMinus(0),         
+    f2dHistAsMCResRXiPlus(0),          
+    f2dHistAsMCResROmegaMinus(0),
+    f2dHistAsMCResROmegaPlus(0),
+    // Resolution in phi as function of generated Pt
+    f2dHistAsMCResPhiXiMinus(0),
+    f2dHistAsMCResPhiXiPlus(0),
+    f2dHistAsMCResPhiOmegaMinus(0),
+    f2dHistAsMCResPhiOmegaPlus(0),
+    // Correlation between proton (antiproton) daughter MC pt and Xi/Omega MC pt (to apply Geat/Fluka correction)
+    f2dHistAsMCptProtonMCptXiMinus(0),
+    f2dHistAsMCptAntiprotonMCptXiPlus(0),
+    f2dHistAsMCptProtonMCptOmegaMinus(0),
+    f2dHistAsMCptAntiprotonMCptOmegaPlus(0),
+    // QA plots
+    fHistV0toXiCosineOfPointingAngle(0),
+    fHistV0CosineOfPointingAnglevsPtXi(0),
+    fHistV0CosineOfPointingAnglevsPtOmega(0), 
+    
+    // Containers                       
+    fCFContCascadePIDAsXiMinus(0),
+    fCFContCascadePIDAsXiPlus(0),
+    fCFContCascadePIDAsOmegaMinus(0),
+    fCFContCascadePIDAsOmegaPlus(0),
+    fCFContAsCascadeCuts(0)
+
+    //____Dummy costructor____
+    {
+        for(Int_t iV0selIdx   = 0; iV0selIdx   < 7; iV0selIdx++   ) { fV0Sels          [iV0selIdx   ] = -1.; }
+        for(Int_t iCascSelIdx = 0; iCascSelIdx < 8; iCascSelIdx++ ) { fCascSels        [iCascSelIdx ] = -1.; }
+    }
+     
+        
+     
+//_____Non-default Constructor________________________________________________________________
+AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCascadepp276(const char *name) 
+  : AliAnalysisTaskSE(name),
+    fAnalysisType                  ("ESD"), 
+    fESDtrackCuts                  (0),
+    fPIDResponse                   (0),
+    fkRerunV0CascVertexers         (0),
+    fkSDDselectionOn               (kTRUE),
+    fkQualityCutZprimVtxPos        (kTRUE),
+    fkRejectEventPileUp            (kTRUE),
+    fkQualityCutNoTPConlyPrimVtx   (kTRUE),
+    fkQualityCutTPCrefit           (kTRUE),
+    fkQualityCutnTPCcls            (kTRUE),
+    fwithSDD                       (kTRUE),
+    fMinnTPCcls                    (0),
+    fkExtraSelections              (0),
+    fVtxRange                      (0),
+    fVtxRangeMin                   (0),
+    fApplyAccCut                   (0),
+    fMinPtCutOnDaughterTracks      (0),
+    fEtaCutOnDaughterTracks        (0),
+
+    // - Plots initialisation
+    fListHistCascade(0),
+
+    // - General Plots
+    // Cascade multiplicity plots
+    fHistCascadeMultiplicityBeforeAnySel(0),
+    fHistCascadeMultiplicityAfterSDDSel(0),
+    fHistCascadeMultiplicityAfterPhysicsSel(0),
+    fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
+    fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistCascadeMultiplicityAfterVertexCutSel(0),
+    fHistnXiPlusPerEvTot(0),                  // After any event selections, in all the eta and pt range
+    fHistnXiMinusPerEvTot(0),                 // After any event selections, in all the eta and pt range
+    fHistnOmegaPlusPerEvTot(0),               // After any event selections, in all the eta and pt range
+    fHistnOmegaMinusPerEvTot(0),              // After any event selections, in all the eta and pt range
+    fHistnXiPlusPerEv(0),                     // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnXiMinusPerEv(0),                    // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnOmegaPlusPerEv(0),                  // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnOmegaMinusPerEv(0),                 // After any event selections, in the detector acceptance and over a pt minimum
+    fHistnAssoXiMinus(0),                     // For the Reconstructed-Associated cascades 
+    fHistnAssoXiPlus(0),                      // For the Reconstructed-Associated cascades 
+    fHistnAssoOmegaMinus(0),                  // For the Reconstructed-Associated cascades 
+    fHistnAssoOmegaPlus(0),                   // For the Reconstructed-Associated cascades 
+    // Tracks multiplicity plots
+    fHistTrackMultiplicityBeforeAnySel(0),
+    fHistTrackMultiplicityAfterSDDSel(0),
+    fHistTrackMultiplicityAfterPhysicsSel(0),
+    fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
+    fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistTrackMultiplicityAfterVertexCutSel(0),
+    // Vertex position plots (BestVertex)
+    fHistPVx(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVy(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVz(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVxAnalysis(0),                      // After any event selections
+    fHistPVyAnalysis(0),                      // After any event selections
+    fHistPVzAnalysis(0),                      // After any event selections
+    // - Plots before Physics Selection
+    f3dHistGenPtVsGenYvsNtracksXiMinus(0),    // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYXiMinus(0),       // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenYvsNtracksXiPlus(0),     // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYXiPlus(0),        // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenYvsNtracksOmegaMinus(0), // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYOmegaMinus(0),    // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenYvsNtracksOmegaPlus(0),  // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYOmegaPlus(0),     // After the SDD event selection (For efficiency calculation)
+    // - Generated cascade plots
+    // After all the event selections 
+    //Xi-
+    fHistEtaGenCascXiMinus(0),                // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascXiMinus(0),              // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYXiMinusPhysEff(0),       //
+    f2dHistGenPtVsGenYFdblXiMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachXiMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterXiMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachXiMinus(0),                    // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterXiMinus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    //Xi+
+    fHistEtaGenCascXiPlus(0),                 // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascXiPlus(0),               // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYXiPlusPhysEff(0),       //
+    f2dHistGenPtVsGenYFdblXiPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachXiPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterXiPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachXiPlus(0),                     // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterXiPlus(0),                // In the detector acceptance and over a pt minimum (Findable particle)
+    //Omega-
+    fHistEtaGenCascOmegaMinus(0),             // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascOmegaMinus(0),           // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff(0),       //
+    f2dHistGenPtVsGenYFdblOmegaMinus(0),      // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachOmegaMinus(0),              // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterOmegaMinus(0),         // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachOmegaMinus(0),                 // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterOmegaMinus(0),            // In the detector acceptance and over a pt minimum (Findable particle)
+    //Omega+      
+    fHistEtaGenCascOmegaPlus(0),              // In all the eta and pt range (as they are generated)
+    fHistThetaGenCascOmegaPlus(0),            // In all the eta and pt range (as they are generated)
+    f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff(0),    // 
+    f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff(0),       //
+    f2dHistGenPtVsGenYFdblOmegaPlus(0),       // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaLambdaOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBachOmegaPlus(0),               // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaMesDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistThetaBarDghterOmegaPlus(0),          // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBachOmegaPlus(0),                  // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtMesDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+    fHistPtBarDghterOmegaPlus(0),             // In the detector acceptance and over a pt minimum (Findable particle)
+
+    // - Associated to MC cascade plots
+    fHistMassXiMinus(0),                      // For the Reconstructed-Associated cascades
+    fHistMassXiPlus(0),                       // For the Reconstructed-Associated cascades
+    fHistMassOmegaMinus(0),                   // For the Reconstructed-Associated cascades
+    fHistMassOmegaPlus(0),                    // For the Reconstructed-Associated cascades
+    // Effective mass histos with combined PID
+    fHistMassWithCombPIDXiMinus(0),
+    fHistMassWithCombPIDXiPlus(0),
+    fHistMassWithCombPIDOmegaMinus(0),
+    fHistMassWithCombPIDOmegaPlus(0),
+    // PID Probability versus MC Pt(bachelor track)
+    f2dHistPIDprobaKaonVsMCPtBach(0), f2dHistPIDprobaPionVsMCPtBach(0),
+    // Effective mass histos with perfect MC PID on the bachelor
+    fHistMassWithMcPIDXiMinus(0), fHistMassWithMcPIDXiPlus(0),
+    fHistMassWithMcPIDOmegaMinus(0), fHistMassWithMcPIDOmegaPlus(0),
+    // Effective mass histos for the cascade candidates associated with MC
+    fHistAsMCMassXiMinus(0),
+    fHistAsMCMassXiPlus(0),
+    fHistAsMCMassOmegaMinus(0),
+    fHistAsMCMassOmegaPlus(0),
+    // Generated Pt Vs generated y, for the cascade candidates associated with MC + Info Comb. PID
+    f2dHistAsMCandCombPIDGenPtVsGenYXiMinus(0),
+    f2dHistAsMCandCombPIDGenPtVsGenYXiPlus(0),
+    f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus(0),
+    f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus(0),
+    // Generated Pt Vs generated y, for the cascade candidates associated with MC
+    f2dHistAsMCGenPtVsGenYXiMinus(0),
+    f2dHistAsMCGenPtVsGenYXiPlus(0),
+    f2dHistAsMCGenPtVsGenYOmegaMinus(0),
+    f2dHistAsMCGenPtVsGenYOmegaPlus(0),
+    // Generated Eta of the the cascade candidates associated with MC
+    fHistAsMCGenEtaXiMinus(0),
+    fHistAsMCGenEtaXiPlus(0),
+    fHistAsMCGenEtaOmegaMinus(0),
+    fHistAsMCGenEtaOmegaPlus(0),
+    // Resolution in Pt as function of generated Pt
+    f2dHistAsMCResPtXiMinus(0),
+    f2dHistAsMCResPtXiPlus(0),
+    f2dHistAsMCResPtOmegaMinus(0),
+    f2dHistAsMCResPtOmegaPlus(0),
+    // Resolution in R(2D) as function of generated R
+    f2dHistAsMCResRXiMinus(0),
+    f2dHistAsMCResRXiPlus(0),
+    f2dHistAsMCResROmegaMinus(0),
+    f2dHistAsMCResROmegaPlus(0),
+    // Resolution in phi as function of generated Pt
+    f2dHistAsMCResPhiXiMinus(0),
+    f2dHistAsMCResPhiXiPlus(0),
+    f2dHistAsMCResPhiOmegaMinus(0),
+    f2dHistAsMCResPhiOmegaPlus(0),
+    // Correlation between proton (antiproton) daughter MC pt and Xi/Omega MC pt (to apply Geat/Fluka correction)
+    f2dHistAsMCptProtonMCptXiMinus(0),
+    f2dHistAsMCptAntiprotonMCptXiPlus(0),
+    f2dHistAsMCptProtonMCptOmegaMinus(0),
+    f2dHistAsMCptAntiprotonMCptOmegaPlus(0),
+    // QA plots
+    fHistV0toXiCosineOfPointingAngle(0),
+    fHistV0CosineOfPointingAnglevsPtXi(0),
+    fHistV0CosineOfPointingAnglevsPtOmega(0),
+
+    // Containers                       
+    fCFContCascadePIDAsXiMinus(0),
+    fCFContCascadePIDAsXiPlus(0),
+    fCFContCascadePIDAsOmegaMinus(0),
+    fCFContCascadePIDAsOmegaPlus(0),
+    fCFContAsCascadeCuts(0)
+
+    //____Costructor____
+    {
+      // Define input and output slots here
+      // Input slot #0 works with a TChain
+      // Output slot #1 writes into a TList container (cascade)
+        
+        // PbPb default cuts  
+        fV0Sels[0] =  33.;       // max allowed chi2
+        fV0Sels[1] =   0.1;      // min allowed impact parameter for the 1st daughter 
+        fV0Sels[2] =   0.1;      // 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 
+        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                  
+              
+        DefineOutput(1, TList::Class());
+        DefineOutput(2, AliCFContainer::Class());
+        DefineOutput(3, AliCFContainer::Class());
+        DefineOutput(4, AliCFContainer::Class());
+        DefineOutput(5, AliCFContainer::Class());
+        DefineOutput(6, AliCFContainer::Class());
+    }
+
+    //____Destructor____
+    AliAnalysisTaskCheckPerformanceCascadepp276::~AliAnalysisTaskCheckPerformanceCascadepp276()
+    {
+      // 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 (fCFContCascadePIDAsXiMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())    {delete fCFContCascadePIDAsXiMinus;    fCFContCascadePIDAsXiMinus = 0x0;}
+      if (fCFContCascadePIDAsXiPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())     {delete fCFContCascadePIDAsXiPlus;     fCFContCascadePIDAsXiPlus = 0x0;}
+      if (fCFContCascadePIDAsOmegaMinus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {delete fCFContCascadePIDAsOmegaMinus; fCFContCascadePIDAsOmegaMinus = 0x0;}
+      if (fCFContCascadePIDAsOmegaPlus && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())  {delete fCFContCascadePIDAsOmegaPlus;  fCFContCascadePIDAsOmegaPlus = 0x0;}
+      if (fCFContAsCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())          {delete fCFContAsCascadeCuts;          fCFContAsCascadeCuts = 0x0;}
+      if (fESDtrackCuts)                                                                             {delete fESDtrackCuts;                 fESDtrackCuts = 0x0;}
+    }
+
+
+//________________________________________________________________________
+void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
+  // Create histograms
+  // Called once
+
+ // - Option for AliLog: to suppress the extensive info prompted by a run with MC
+ AliLog::SetGlobalLogLevel(AliLog::kError); 
+
+ // - Definition of the output datamembers     
+ 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 (! fESDtrackCuts ){
+      fESDtrackCuts = new AliESDtrackCuts();
+ }
+ //----------------------
+ // Initialize the histos
+ //----------------------
+
+ //----------------------------------
+ // - Same general binning definition
+ Double_t ptBinLimits[101];
+ for (Int_t iptbin = 0; iptbin<101; ++iptbin) ptBinLimits[iptbin]=iptbin*0.1;
+ Double_t yBinLimits[111];
+ for (Int_t iybin = 0; iybin<111; ++iybin) yBinLimits[iybin]=-1.1+iybin*0.02;
+ Double_t ctauBinLimits[112];
+ for (Int_t ict = 0; ict<112; ++ict) ctauBinLimits[ict] = (Double_t) (ict-1.); 
+ //------------------
+ // - General plots
+   // - Cascades multiplicity plots 
+   if(! fHistCascadeMultiplicityBeforeAnySel) {
+        fHistCascadeMultiplicityBeforeAnySel = new TH1F("fHistCascadeMultiplicityBeforeAnySel",
+                        "Cascades per event (before any selections);Nbr of Cascades/Evt;Events", 50, 0, 50);
+        fListHistCascade->Add(fHistCascadeMultiplicityBeforeAnySel);
+   }
+   if(! fHistCascadeMultiplicityAfterSDDSel) {
+        fHistCascadeMultiplicityAfterSDDSel = new TH1F("fHistCascadeMultiplicityAfterSDDSel",
+                        "Cascades per event (after only the SDD selection);Nbr of Cascades/Evt;Events", 50, 0, 50);
+        fListHistCascade->Add(fHistCascadeMultiplicityAfterSDDSel);
+   }
+   if(! fHistCascadeMultiplicityAfterPhysicsSel) {
+        fHistCascadeMultiplicityAfterPhysicsSel = new TH1F("fHistCascadeMultiplicityAfterPhysicsSel",
+                        "Cascades per event (after physics selection);Nbr of Cascades/Evt;Events", 50, 0, 50);
+        fListHistCascade->Add(fHistCascadeMultiplicityAfterPhysicsSel);
+   }
+   if(! fHistCascadeMultiplicityForSelEvtNoTPCOnly) {
+        fHistCascadeMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistCascadeMultiplicityForSelEvtNoTPCOnly",
+                        "Cascades per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events", 50, 0, 50);
+        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", 50, 0, 50);
+        fListHistCascade->Add(fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup);
+   }
+   if(! fHistCascadeMultiplicityAfterVertexCutSel) {
+        fHistCascadeMultiplicityAfterVertexCutSel = new TH1F("fHistCascadeMultiplicityAfterVertexCutSel",
+                                                             "Cascades per event (after vertex cut selection);Nbr of Cascades/Evt;Events", 50, 0, 50);
+        fListHistCascade->Add(fHistCascadeMultiplicityAfterVertexCutSel);
+   }
+   // - Tracks multiplicity plots 
+   if(! fHistTrackMultiplicityBeforeAnySel) {
+        fHistTrackMultiplicityBeforeAnySel = new TH1F("fHistTrackMultiplicityBeforeAnySel",
+                        "Tracks per event (before any selections);Nbr of Tracks/Evt;Events", 200, 0, 200);
+        fListHistCascade->Add(fHistTrackMultiplicityBeforeAnySel);
+   }
+   if(! fHistTrackMultiplicityAfterSDDSel) {
+        fHistTrackMultiplicityAfterSDDSel = new TH1F("fHistTrackMultiplicityAfterSDDSel",
+                        "Tracks per event (after only the SDD selection);Nbr of Tracks/Evt;Events", 200, 0, 200);
+        fListHistCascade->Add(fHistTrackMultiplicityAfterSDDSel);
+   }
+   if(! fHistTrackMultiplicityAfterPhysicsSel) {
+        fHistTrackMultiplicityAfterPhysicsSel = new TH1F("fHistTrackMultiplicityAfterPhysicsSel",
+                        "Tracks per event (after physics selection);Nbr of Tracks/Evt;Events", 200, 0, 200);
+        fListHistCascade->Add(fHistTrackMultiplicityAfterPhysicsSel);
+   }
+   if(! fHistTrackMultiplicityForSelEvtNoTPCOnly) {
+        fHistTrackMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistTrackMultiplicityForSelEvtNoTPCOnly",
+                        "Tracks per event (for selected events with well-established PV);Nbr of Tracks/Evt;Events", 200, 0, 200);
+        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 Tracks/Evt;Events", 200, 0, 200);
+        fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
+   }
+   if(! fHistTrackMultiplicityAfterVertexCutSel) {
+        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",
+                                                           "Tracks per event (after vertex cut selection);Nbr of Tracks/Evt;Events", 200, 0, 200);
+        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);
+   }
+
+ //--------------------------
+ // - Generated cascade plots
+   // - Generated Cascade multiplicity distributions (for singol cascade)
+   fHistnXiPlusPerEvTot = new TH1F("fHistnXiPlusPerEvTot", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnXiPlusPerEvTot);
+   fHistnXiMinusPerEvTot = new TH1F("fHistnXiMinusPerEvTot", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnXiMinusPerEvTot);
+   fHistnOmegaPlusPerEvTot = new TH1F("fHistnOmegaPlusPerEvTot", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnOmegaPlusPerEvTot);
+   fHistnOmegaMinusPerEvTot = new TH1F("fHistnOmegaMinusPerEvTot", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnOmegaMinusPerEvTot);   
+   fHistnXiPlusPerEv = new TH1F("fHistnXiPlusPerEv", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnXiPlusPerEv);
+   fHistnXiMinusPerEv = new TH1F("fHistnXiMinusPerEv", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnXiMinusPerEv);
+   fHistnOmegaPlusPerEv = new TH1F("fHistnOmegaPlusPerEv", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnOmegaPlusPerEv);
+   fHistnOmegaMinusPerEv = new TH1F("fHistnOmegaMinusPerEv", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnOmegaMinusPerEv);
+   // - Xi- 
+   // - Pseudo-Rapidity distribution
+   if (!fHistEtaGenCascXiMinus) {
+     fHistEtaGenCascXiMinus = new TH1F("fHistEtaGenCascXiMinus", "#eta of any gen. #Xi^{-}; #eta; Number of Casc", 200, -10, 10);
+     fListHistCascade->Add(fHistEtaGenCascXiMinus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksXiMinus) {
+     f3dHistGenPtVsGenYvsNtracksXiMinus = new TH3D("f3dHistGenPtVsGenYvsNtracksXiMinus", "MC P_{t} Vs MC Y of Gen #Xi^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+     fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiMinus);
+   }
+   if (!f3dHistGenPtVsGenctauvsYXiMinus) {
+      f3dHistGenPtVsGenctauvsYXiMinus = new TH3D("f3dHistGenPtVsGenctauvsYXiMinus", "MC P_{t} Vs MC ctau Vs Y of Gen #Xi^{-}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiMinus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff) {
+     f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff", "MC P_{t} Vs MC Y of Gen #Xi^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+     fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff);
+   }
+   if (!f3dHistGenPtVsGenctauvsYXiMinusPhysEff) {
+      f3dHistGenPtVsGenctauvsYXiMinusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYXiMinusPhysEff", "MC P_{t} Vs MC ctau Vs Y of Gen #Xi^{-}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiMinusPhysEff);
+   }
+   // - Info at the generation level of multi-strange particle
+   if (!fHistThetaGenCascXiMinus) {
+      fHistThetaGenCascXiMinus = new TH1F("fHistThetaGenCascXiMinus", "#theta of gen. #Xi^{-}; #theta; Number of Casc.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaGenCascXiMinus);
+   }
+   if (!f2dHistGenPtVsGenYFdblXiMinus) {
+      f2dHistGenPtVsGenYFdblXiMinus = new TH2D("f2dHistGenPtVsGenYFdblXiMinus", "MC P_{t} Vs MC Y of findable Gen #Xi^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistGenPtVsGenYFdblXiMinus);
+   }
+   // - Theta distribution the daughters (control plots)
+   if (!fHistThetaLambdaXiMinus) {
+      fHistThetaLambdaXiMinus = new TH1F("fHistThetaLambdaXiMinus", "#theta of gen. #Lambda (Xi dghter); #theta_{#Lambda}; Number of #Lambda^0", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaLambdaXiMinus);
+   }
+   if (!fHistThetaBachXiMinus) {
+      fHistThetaBachXiMinus = new TH1F("fHistThetaBachXiMinus", "#theta of gen. Bach.; #theta_{Bach}; Number of Bach.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBachXiMinus);
+   }
+   if (!fHistThetaMesDghterXiMinus) {
+      fHistThetaMesDghterXiMinus = new TH1F("fHistThetaMesDghterXiMinus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaMesDghterXiMinus);
+   }
+   if (!fHistThetaBarDghterXiMinus) {
+      fHistThetaBarDghterXiMinus = new TH1F("fHistThetaBarDghterXiMinus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBarDghterXiMinus);
+   }
+   // - Pt distribution (control plots)
+   if (!fHistPtBachXiMinus) {
+      fHistPtBachXiMinus = new TH1F("fHistPtBachXiMinus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBachXiMinus);
+   }
+   if (!fHistPtMesDghterXiMinus) {
+      fHistPtMesDghterXiMinus = new TH1F("fHistPtMesDghterXiMinus", "p_{t} of gen. Meson #Lambda dghter; pt_{MesDght}; Number of Mes.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtMesDghterXiMinus);
+   }
+   if (!fHistPtBarDghterXiMinus) {
+      fHistPtBarDghterXiMinus = new TH1F("fHistPtBarDghterXiMinus", "p_{t} of gen. Baryon #Lambda dghter; pt_{BarDght}; Number of Bar.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBarDghterXiMinus);
+   }
+   // - Xi+ 
+   // - Pseudo-Rapidity distribution
+   if (!fHistEtaGenCascXiPlus) {
+      fHistEtaGenCascXiPlus = new TH1F("fHistEtaGenCascXiPlus", "#eta of any gen. #Xi^{+}; #eta; Number of Casc", 200, -10, 10);
+      fListHistCascade->Add(fHistEtaGenCascXiPlus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksXiPlus) {
+      f3dHistGenPtVsGenYvsNtracksXiPlus = new TH3D("f3dHistGenPtVsGenYvsNtracksXiPlus", "MC P_{t} Vs MC Y of Gen #Xi^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiPlus);
+   }
+   if (!f3dHistGenPtVsGenctauvsYXiPlus) {
+      f3dHistGenPtVsGenctauvsYXiPlus = new TH3D("f3dHistGenPtVsGenctauvsYXiPlus", "MC P_{t} Vs MC ctau Vs Yof Gen #Xi^{+}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiPlus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff) {
+      f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff", "MC P_{t} Vs MC Y of Gen #Xi^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff);
+   }
+   if (!f3dHistGenPtVsGenctauvsYXiPlusPhysEff) {
+      f3dHistGenPtVsGenctauvsYXiPlusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYXiPlusPhysEff", "MC P_{t} Vs MC ctau Vs Yof Gen #Xi^{+}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYXiPlusPhysEff);
+   }
+   // - Info at the generation level of multi-strange particle
+   if (!fHistThetaGenCascXiPlus) {
+      fHistThetaGenCascXiPlus = new TH1F("fHistThetaGenCascXiPlus", "#theta of gen. #Xi^{+}; #theta; Number of Casc.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaGenCascXiPlus);
+   }
+   if (!f2dHistGenPtVsGenYFdblXiPlus) {
+      f2dHistGenPtVsGenYFdblXiPlus = new TH2D("f2dHistGenPtVsGenYFdblXiPlus", "MC P_{t} Vs MC Y of findable Gen #Xi^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistGenPtVsGenYFdblXiPlus);
+   }
+   // - Theta distribution the daughters (control plots)
+   if (!fHistThetaLambdaXiPlus) {
+      fHistThetaLambdaXiPlus = new TH1F("fHistThetaLambdaXiPlus", "#theta of gen. #Lambda (Xi dghter); #theta_{#Lambda}; Number of #Lambda", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaLambdaXiPlus);
+   }
+   if (!fHistThetaBachXiPlus) {
+      fHistThetaBachXiPlus = new TH1F("fHistThetaBachXiPlus", "#theta of gen. Bach.; #theta_{Bach}; Number of Bach.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBachXiPlus);
+   }
+   if (!fHistThetaMesDghterXiPlus) {
+      fHistThetaMesDghterXiPlus = new TH1F("fHistThetaMesDghterXiPlus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaMesDghterXiPlus);
+   }
+   if (!fHistThetaBarDghterXiPlus) {
+      fHistThetaBarDghterXiPlus = new TH1F("fHistThetaBarDghterXiPlus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBarDghterXiPlus);
+   }
+   // - Pt distribution (control plots)
+   if (!fHistPtBachXiPlus) {
+      fHistPtBachXiPlus = new TH1F("fHistPtBachXiPlus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBachXiPlus);
+   }
+   if (!fHistPtMesDghterXiPlus) {
+      fHistPtMesDghterXiPlus = new TH1F("fHistPtMesDghterXiPlus", "p_{t} of gen. Meson #Lambda dghter; pt_{MesDght}; Number of Mes.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtMesDghterXiPlus);
+   }
+   if (!fHistPtBarDghterXiPlus) {
+      fHistPtBarDghterXiPlus = new TH1F("fHistPtBarDghterXiPlus", "p_{t} of gen. Baryon #Lambda dghter); pt_{BarDght}; Number of Bar.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBarDghterXiPlus);
+   }
+   // - Omega- 
+   // - Pseudo-Rapidity distribution
+   if (!fHistEtaGenCascOmegaMinus) {
+      fHistEtaGenCascOmegaMinus = new TH1F("fHistEtaGenCascOmegaMinus", "#eta of any gen. #Omega^{-}; #eta; Number of Casc", 200, -10, 10);
+      fListHistCascade->Add(fHistEtaGenCascOmegaMinus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksOmegaMinus) {
+      f3dHistGenPtVsGenYvsNtracksOmegaMinus = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaMinus", "MC P_{t} Vs MC Y of Gen #Omega^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaMinus);
+   }
+   if (!f3dHistGenPtVsGenctauvsYOmegaMinus) {
+      f3dHistGenPtVsGenctauvsYOmegaMinus = new TH3D("f3dHistGenPtVsGenctauvsYOmegaMinus", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{-} ", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaMinus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff) {
+      f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff", "MC P_{t} Vs MC Y of Gen #Omega^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff);
+   }
+   if (!f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff) {
+      f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{-}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff);
+   }
+   // - Info at the generation level of multi-strange particle
+   if (!fHistThetaGenCascOmegaMinus) {
+      fHistThetaGenCascOmegaMinus = new TH1F("fHistThetaGenCascOmegaMinus", "#theta of gen. #Omega^{-}; #theta; Number of Casc.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaGenCascOmegaMinus);
+   }
+   if (!f2dHistGenPtVsGenYFdblOmegaMinus) {
+      f2dHistGenPtVsGenYFdblOmegaMinus = new TH2D("f2dHistGenPtVsGenYFdblOmegaMinus", "MC P_{t} Vs MC Y of findable Gen #Omega^{-}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaMinus);
+   }
+   // - Theta distribution the daughters (control plots)
+   if (!fHistThetaLambdaOmegaMinus) {
+      fHistThetaLambdaOmegaMinus = new TH1F("fHistThetaLambdaOmegaMinus", "#theta of gen. #Lambda (Omega dghter); #theta_{#Lambda}; Number of #Lambda", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaLambdaOmegaMinus);
+   }
+   if (!fHistThetaBachOmegaMinus) {
+      fHistThetaBachOmegaMinus = new TH1F("fHistThetaBachOmegaMinus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBachOmegaMinus);
+   }
+   if (!fHistThetaMesDghterOmegaMinus) {
+      fHistThetaMesDghterOmegaMinus = new TH1F("fHistThetaMesDghterOmegaMinus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaMesDghterOmegaMinus);
+   }
+   if (!fHistThetaBarDghterOmegaMinus) {
+      fHistThetaBarDghterOmegaMinus = new TH1F("fHistThetaBarDghterOmegaMinus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBarDghterOmegaMinus);
+   }
+   // - Pt distribution (control plots)
+   if (!fHistPtBachOmegaMinus) {
+      fHistPtBachOmegaMinus = new TH1F("fHistPtBachOmegaMinus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBachOmegaMinus);
+   }
+   if (!fHistPtMesDghterOmegaMinus) {
+      fHistPtMesDghterOmegaMinus = new TH1F("fHistPtMesDghterOmegaMinus", "p_{t} of gen. Meson #Lambda dghter); pt_{MesDght}; Number of Mes.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtMesDghterOmegaMinus);
+   }
+   if (!fHistPtBarDghterOmegaMinus) {
+      fHistPtBarDghterOmegaMinus = new TH1F("fHistPtBarDghterOmegaMinus", "p_{t} of gen. Baryon #Lambda dghter); pt_{BarDght}; Number of Bar.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBarDghterOmegaMinus);
+   }
+   // - Omega+ 
+   // - Pseudo-Rapidity distribution
+   if (!fHistEtaGenCascOmegaPlus) {
+      fHistEtaGenCascOmegaPlus = new TH1F("fHistEtaGenCascOmegaPlus", "#eta of any gen. #Omega^{+}; #eta; Number of Casc", 200, -10, 10);
+      fListHistCascade->Add(fHistEtaGenCascOmegaPlus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksOmegaPlus) {
+      f3dHistGenPtVsGenYvsNtracksOmegaPlus = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaPlus", "MC P_{t} Vs MC Y of Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaPlus);
+   }
+   if (!f3dHistGenPtVsGenctauvsYOmegaPlus) {
+      f3dHistGenPtVsGenctauvsYOmegaPlus = new TH3D("f3dHistGenPtVsGenctauvsYOmegaPlus", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{+} ", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaPlus);
+   }
+   if (!f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff) {
+      f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff = new TH3D("f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff", "MC P_{t} Vs MC Y of Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 110, -1.1, 1.1, 200, 0., 200.);
+      fListHistCascade->Add(f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff);
+   }
+   if (!f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff) {
+      f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff = new TH3D("f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff", "MC P_{t} Vs MC ctau Vs Y of Gen #Omega^{+}", 100, ptBinLimits, 111, ctauBinLimits, 110, yBinLimits);
+      fListHistCascade->Add(f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff);
+   }
+   // - Info at the generation level of multi-strange particle
+   if (!fHistThetaGenCascOmegaPlus) {
+      fHistThetaGenCascOmegaPlus = new TH1F("fHistThetaGenCascOmegaPlus", "#theta of gen. #Omega^{+}; #theta; Number of Casc.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaGenCascOmegaPlus);
+   }
+   if (!f2dHistGenPtVsGenYFdblOmegaPlus) {
+      f2dHistGenPtVsGenYFdblOmegaPlus = new TH2D("f2dHistGenPtVsGenYFdblOmegaPlus", "MC P_{t} Vs MC Y of findable Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaPlus);
+   }
+   // - Info at the generation level of multi-strange particle
+   if (!fHistThetaGenCascOmegaPlus) {
+      fHistThetaGenCascOmegaPlus = new TH1F("fHistThetaGenCascOmegaPlus", "#theta of gen. #Omega^{+}; #theta; Number of Casc.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaGenCascOmegaPlus);
+   }
+   if (!f2dHistGenPtVsGenYFdblOmegaPlus) {
+      f2dHistGenPtVsGenYFdblOmegaPlus = new TH2D("f2dHistGenPtVsGenYFdblOmegaPlus", "MC P_{t} Vs MC Y of findable Gen #Omega^{+}; Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaPlus);
+   }
+   // - Theta distribution the daughters (control plots)
+   if (!fHistThetaLambdaOmegaPlus) {
+      fHistThetaLambdaOmegaPlus = new TH1F("fHistThetaLambdaOmegaPlus", "#theta of gen. #Lambda (Omega dghter); #theta_{#Lambda}; Number of #Lambda", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaLambdaOmegaPlus);
+   }
+   if (!fHistThetaBachOmegaPlus) {
+      fHistThetaBachOmegaPlus = new TH1F("fHistThetaBachOmegaPlus", "#theta of gen. Bach.; #theta_{Bach}; Number of Bach.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBachOmegaPlus);
+   }
+   if (!fHistThetaMesDghterOmegaPlus) {
+      fHistThetaMesDghterOmegaPlus = new TH1F("fHistThetaMesDghterOmegaPlus", "#theta of gen. Meson #Lambda dghter; #theta_{MesDght}; Number of Mes.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaMesDghterOmegaPlus);
+   }
+   if (!fHistThetaBarDghterOmegaPlus) {
+      fHistThetaBarDghterOmegaPlus = new TH1F("fHistThetaBarDghterOmegaPlus", "#theta of gen. Baryon #Lambda dghter; #theta_{BarDght}; Number of Bar.", 200, -10, 190);
+      fListHistCascade->Add(fHistThetaBarDghterOmegaPlus);
+   }
+   // - Pt distribution (control plots)
+   if (!fHistPtBachOmegaPlus) {
+      fHistPtBachOmegaPlus = new TH1F("fHistPtBachOmegaPlus", "p_{t} of gen. Bach.; pt_{Bach}; Number of Bach.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBachOmegaPlus);
+   }
+   if (!fHistPtMesDghterOmegaPlus) {
+      fHistPtMesDghterOmegaPlus = new TH1F("fHistPtMesDghterOmegaPlus", "p_{t} of gen. Meson #Lambda dghter; pt_{MesDght}; Number of Mes.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtMesDghterOmegaPlus);
+   }
+   if (!fHistPtBarDghterOmegaPlus) {
+      fHistPtBarDghterOmegaPlus = new TH1F("fHistPtBarDghterOmegaPlus", "p_{t} of gen. Baryon #Lambda dghter); pt_{BarDght}; Number of Bar.", 200, 0, 10);
+      fListHistCascade->Add(fHistPtBarDghterOmegaPlus);
+   }
+ //-------------------------------------------------------------------------
+ // - Any reconstructed cascades + reconstructed cascades associated with MC
+  
+   // - Multiplicity cascde plots
+   fHistnAssoXiMinus= new TH1F("fHistnAssoXiMinus", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnAssoXiMinus);
+   fHistnAssoXiPlus= new TH1F("fHistnAssoXiPlus", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnAssoXiPlus);
+   fHistnAssoOmegaMinus= new TH1F("fHistnAssoOmegaMinus", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnAssoOmegaMinus);
+   fHistnAssoOmegaPlus= new TH1F("fHistnAssoOmegaPlus", "", 25, 0, 25);
+   fListHistCascade->Add(fHistnAssoOmegaPlus);
+   // - Effective mass histos for cascades candidates. 
+   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);
+   }
+   // - Effective mass histos with combined PID
+   if (! fHistMassWithCombPIDXiMinus) {
+      fHistMassWithCombPIDXiMinus = new TH1F("fHistMassWithCombPIDXiMinus","#Xi^{-} candidates, with Bach. comb. PID; M( #Lambda , #pi^{-} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);
+      fListHistCascade->Add(fHistMassWithCombPIDXiMinus);
+   }
+   if (! fHistMassWithCombPIDXiPlus) {
+      fHistMassWithCombPIDXiPlus = new TH1F("fHistMassWithCombPIDXiPlus","#Xi^{+} candidates, with Bach. comb. PID; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);
+      fListHistCascade->Add(fHistMassWithCombPIDXiPlus);
+   }
+   if (! fHistMassWithCombPIDOmegaMinus) {
+      fHistMassWithCombPIDOmegaMinus = new TH1F("fHistMassWithCombPIDOmegaMinus","#Omega^{-} candidates, with Bach. comb. PID; M( #Lambda , K^{-} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);
+      fListHistCascade->Add(fHistMassWithCombPIDOmegaMinus);
+   }
+   if (! fHistMassWithCombPIDOmegaPlus) {
+      fHistMassWithCombPIDOmegaPlus = new TH1F("fHistMassWithCombPIDOmegaPlus","#Omega^{+} candidates, with Bach. comb. PID; M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);
+      fListHistCascade->Add(fHistMassWithCombPIDOmegaPlus);
+   }
+   // - PID Probability versus MC Pt(bachelor track)
+   if (! f2dHistPIDprobaKaonVsMCPtBach ){
+      f2dHistPIDprobaKaonVsMCPtBach  = new TH2F("f2dHistPIDprobaKaonVsMCPtBach", "Comb. PID proba to be K^{#pm} Vs MC Bach. Pt; Pt_{MC}(Bach.) (GeV/c); Comb. PID Proba (Bach. = K^{#pm})", 100, 0.0, 5.0, 110, 0.0, 1.10);
+      fListHistCascade->Add(f2dHistPIDprobaKaonVsMCPtBach);
+   }
+   if(! f2dHistPIDprobaPionVsMCPtBach ){
+      f2dHistPIDprobaPionVsMCPtBach  = new TH2F("f2dHistPIDprobaPionVsMCPtBach", "Comb. PID proba to be #pi^{#pm} Vs MC Bach. Pt; Pt_{MC}(Bach.) (GeV/c); Comb. PID Proba (Bach. = #pi^{#pm})", 100, 0.0, 5.0, 110, 0.0, 1.10);
+      fListHistCascade->Add(f2dHistPIDprobaPionVsMCPtBach);
+   }
+   // - Effective mass histos with perfect MC PID on the bachelor
+   if (! fHistMassWithMcPIDXiMinus) {
+      fHistMassWithMcPIDXiMinus = new TH1F("fHistMassWithMcPIDXiMinus", "#Xi^{-} candidates, with Bach. MC PID; M( #Lambda , #pi^{-} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);
+      fListHistCascade->Add(fHistMassWithMcPIDXiMinus);
+   }
+   if (! fHistMassWithMcPIDXiPlus) {
+      fHistMassWithMcPIDXiPlus = new TH1F("fHistMassWithMcPIDXiPlus", "#Xi^{+} candidates, with Bach. MC PID; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);
+      fListHistCascade->Add(fHistMassWithMcPIDXiPlus);
+   }
+   if (! fHistMassWithMcPIDOmegaMinus) {
+      fHistMassWithMcPIDOmegaMinus = new TH1F("fHistMassWithMcPIDOmegaMinus", "#Omega^{-} candidates, with Bach. MC PID; M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500, 1.5, 2.5);
+      fListHistCascade->Add(fHistMassWithMcPIDOmegaMinus);
+   }
+   if (! fHistMassWithMcPIDOmegaPlus) {
+      fHistMassWithMcPIDOmegaPlus = new TH1F("fHistMassWithMcPIDOmegaPlus", "#Omega^{+} candidates, with Bach. MC PID; M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);
+      fListHistCascade->Add(fHistMassWithMcPIDOmegaPlus);
+   }
+   // - Effective mass histos for cascades candidates ASSOCIATED with MC.
+   if (! fHistAsMCMassXiMinus) {
+      fHistAsMCMassXiMinus = new TH1F("fHistAsMCMassXiMinus", "#Xi^{-} candidates associated to MC; M( #Lambda , #pi^{-} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);
+      fListHistCascade->Add(fHistAsMCMassXiMinus);
+   }
+   if (! fHistAsMCMassXiPlus) {
+      fHistAsMCMassXiPlus = new TH1F("fHistAsMCMassXiPlus", "#Xi^{+} candidates associated to MC; M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2}); Counts", 400, 1.2, 2.0);
+      fListHistCascade->Add(fHistAsMCMassXiPlus);
+   }
+   if (! fHistAsMCMassOmegaMinus) {
+      fHistAsMCMassOmegaMinus = new TH1F("fHistAsMCMassOmegaMinus", "#Omega^{-} candidates associated to MC; M( #Lambda , K^{-} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);
+      fListHistCascade->Add(fHistAsMCMassOmegaMinus);
+   }
+   if (! fHistAsMCMassOmegaPlus) {
+      fHistAsMCMassOmegaPlus = new TH1F("fHistAsMCMassOmegaPlus", "#Omega^{+} candidates associated to MC; M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2}); Counts", 500, 1.5, 2.5);
+      fListHistCascade->Add(fHistAsMCMassOmegaPlus);
+   }
+   // -  Generated Pt Vs generated Y of the cascade candidates associated with MC + having the proper maximum proba of combined PID for the bachelor
+   if (!f2dHistAsMCandCombPIDGenPtVsGenYXiMinus) {
+      f2dHistAsMCandCombPIDGenPtVsGenYXiMinus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYXiMinus", "MC P_{t} Vs MC Y of #Xi^{-} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYXiMinus);
+   }
+   if (!f2dHistAsMCandCombPIDGenPtVsGenYXiPlus) {
+      f2dHistAsMCandCombPIDGenPtVsGenYXiPlus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYXiPlus", "MC P_{t} Vs MC Y of #Xi^{+} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 100, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYXiPlus);
+   } 
+   if (!f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus) {
+      f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus", "MC P_{t} Vs MC Y of #Omega^{-} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus);
+   }
+   if (!f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus) {
+      f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus", "MC P_{t} Vs MC Y of #Omega^{+} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus);
+   }
+   // - Generated Pt Vs Generated Y, for the cascade candidates associated with MC
+   if (!f2dHistAsMCGenPtVsGenYXiMinus) {
+      f2dHistAsMCGenPtVsGenYXiMinus = new TH2F("f2dHistAsMCGenPtVsGenYXiMinus", "MC P_{t} Vs MC Y of gen. #Xi^{-} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYXiMinus );
+   }
+   if (!f2dHistAsMCGenPtVsGenYXiPlus) {
+      f2dHistAsMCGenPtVsGenYXiPlus = new TH2F("f2dHistAsMCGenPtVsGenYXiPlus", "MC P_{t} Vs MC Y of gen. #Xi^{+} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYXiPlus );
+   }
+   if (!f2dHistAsMCGenPtVsGenYOmegaMinus) {
+      f2dHistAsMCGenPtVsGenYOmegaMinus = new TH2F("f2dHistAsMCGenPtVsGenYOmegaMinus", "MC P_{t} Vs MC Y of gen. #Omega^{-} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYOmegaMinus );
+   }
+   if (!f2dHistAsMCGenPtVsGenYOmegaPlus) {
+      f2dHistAsMCGenPtVsGenYOmegaPlus = new TH2F("f2dHistAsMCGenPtVsGenYOmegaPlus", "MC P_{t} Vs MC Y of gen. #Omega^{+} (associated); Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1);
+      fListHistCascade->Add(f2dHistAsMCGenPtVsGenYOmegaPlus );
+   } 
+   // - Generated Eta of the the cascade candidates associated with MC
+   if (!fHistAsMCGenEtaXiMinus) {
+      fHistAsMCGenEtaXiMinus = new TH1F("fHistAsMCGenEtaXiMinus", "#eta of gen. #Xi^{-} (associated); #eta; Count", 100, -5, 5);
+      fListHistCascade->Add( fHistAsMCGenEtaXiMinus );
+   }
+   if (!fHistAsMCGenEtaXiPlus) {
+      fHistAsMCGenEtaXiPlus = new TH1F("fHistAsMCGenEtaXiPlus", "#eta of gen. #Xi^{+} (associated); #eta; Count", 100, -5, 5);
+      fListHistCascade->Add( fHistAsMCGenEtaXiPlus );
+   }
+   if (!fHistAsMCGenEtaOmegaMinus) {
+      fHistAsMCGenEtaOmegaMinus = new TH1F("fHistAsMCGenEtaOmegaMinus", "#eta of gen. #Omega^{-} (associated);#eta;Number of Casc", 100, -5, 5);
+      fListHistCascade->Add( fHistAsMCGenEtaOmegaMinus );
+   }
+   if (!fHistAsMCGenEtaOmegaPlus) {
+      fHistAsMCGenEtaOmegaPlus = new TH1F("fHistAsMCGenEtaOmegaPlus", "#eta of gen. #Omega^{+} (associated); #eta; Count", 100, -5, 5);
+      fListHistCascade->Add( fHistAsMCGenEtaOmegaPlus );
+   }
+   // - Resolution in Pt as function of generated Pt
+   if (! f2dHistAsMCResPtXiMinus) {
+      f2dHistAsMCResPtXiMinus = new TH2F("f2dHistAsMCResPtXiMinus", "Resolution in Pt reconstruction for #Xi^{-}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);
+      fListHistCascade->Add(f2dHistAsMCResPtXiMinus);
+   }
+   if (! f2dHistAsMCResPtXiPlus) {
+      f2dHistAsMCResPtXiPlus = new TH2F("f2dHistAsMCResPtXiPlus", "Resolution in Pt reconstruction for #Xi^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);
+      fListHistCascade->Add(f2dHistAsMCResPtXiPlus);
+   }
+   if (! f2dHistAsMCResPtOmegaMinus) {
+      f2dHistAsMCResPtOmegaMinus = new TH2F("f2dHistAsMCResPtOmegaMinus", "Resolution in Pt reconstruction for #Omega^{-}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);
+      fListHistCascade->Add(f2dHistAsMCResPtOmegaMinus);
+   }
+   if (! f2dHistAsMCResPtOmegaPlus) {
+      f2dHistAsMCResPtOmegaPlus = new TH2F("f2dHistAsMCResPtOmegaPlus", "Resolution in Pt reconstruction for #Omega^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1);
+      fListHistCascade->Add(f2dHistAsMCResPtOmegaPlus);
+   }
+   // - Resolution in R(2D) as function of generated R
+   if (! f2dHistAsMCResRXiMinus) {
+      f2dHistAsMCResRXiMinus = new TH2F("f2dHistAsMCResRXiMinus", "Resolution in transv. position for #Xi^{-}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);
+      fListHistCascade->Add(f2dHistAsMCResRXiMinus);
+   }
+   if (! f2dHistAsMCResRXiPlus) {
+      f2dHistAsMCResRXiPlus = new TH2F("f2dHistAsMCResRXiPlus", "Resolution in transv. position for #Xi^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);
+      fListHistCascade->Add(f2dHistAsMCResRXiPlus);
+   } 
+   if (! f2dHistAsMCResROmegaMinus) {
+      f2dHistAsMCResROmegaMinus = new TH2F("f2dHistAsMCResROmegaMinus", "Resolution in transv. position for #Omega^{-}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);
+      fListHistCascade->Add(f2dHistAsMCResROmegaMinus);
+   }
+   if (! f2dHistAsMCResROmegaPlus) {
+      f2dHistAsMCResROmegaPlus = new TH2F("f2dHistAsMCResROmegaPlus", "Resolution in transv. position for #Omega^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3);
+      fListHistCascade->Add(f2dHistAsMCResROmegaPlus);
+   }
+   // - Resolution in phi as function of generated Pt 
+   if (! f2dHistAsMCResPhiXiMinus) {
+      f2dHistAsMCResPhiXiMinus = new TH2F("f2dHistAsMCResPhiXiMinus", "Resolution in #phi for #Xi^{-}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);
+      fListHistCascade->Add(f2dHistAsMCResPhiXiMinus);
+   }
+   if (! f2dHistAsMCResPhiXiPlus) {
+      f2dHistAsMCResPhiXiPlus = new TH2F("f2dHistAsMCResPhiXiPlus", "Resolution in #phi for #Xi^{+}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);
+      fListHistCascade->Add(f2dHistAsMCResPhiXiPlus);
+   }
+   if (! f2dHistAsMCResPhiOmegaMinus) {
+      f2dHistAsMCResPhiOmegaMinus = new TH2F("f2dHistAsMCResPhiOmegaMinus", "Resolution in #phi for #Omega^{-}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);  
+      fListHistCascade->Add(f2dHistAsMCResPhiOmegaMinus);
+   }
+   if (! f2dHistAsMCResPhiOmegaPlus) {
+      f2dHistAsMCResPhiOmegaPlus = new TH2F("f2dHistAsMCResPhiOmegaPlus", "Resolution in #phi for #Omega^{+}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco)   (deg)", 200, 0., 10., 60, -30., 30.);
+      fListHistCascade->Add(f2dHistAsMCResPhiOmegaPlus);
+   }
+   //  - Correlation between proton (antiproton) daughter MC pt and Xi/Omega MC pt (to apply Geant/Fluka correction)
+   if (!f2dHistAsMCptProtonMCptXiMinus) {
+      f2dHistAsMCptProtonMCptXiMinus = new TH2F("f2dHistAsMCptProtonMCptXiMinus", "Proton MC pt vs Xi- MC pt", 100, 0., 10., 100, 0., 10.); 
+      fListHistCascade->Add(f2dHistAsMCptProtonMCptXiMinus);
+   }
+   if (!f2dHistAsMCptAntiprotonMCptXiPlus) {
+      f2dHistAsMCptAntiprotonMCptXiPlus = new TH2F("f2dHistAsMCptAntiprotonMCptXiPlus", "Antiproton MC pt vs Xi+ MC pt", 100, 0., 10., 100, 0., 10.);
+      fListHistCascade->Add(f2dHistAsMCptAntiprotonMCptXiPlus);
+   }
+   if (!f2dHistAsMCptProtonMCptOmegaMinus) {
+      f2dHistAsMCptProtonMCptOmegaMinus = new TH2F("f2dHistAsMCptProtonMCptOmegaMinus", "Proton MC pt vs Omega- MC pt", 100, 0., 10., 100, 0., 10.);
+      fListHistCascade->Add(f2dHistAsMCptProtonMCptOmegaMinus);
+   }
+   if (!f2dHistAsMCptAntiprotonMCptOmegaPlus) {
+      f2dHistAsMCptAntiprotonMCptOmegaPlus = new TH2F("f2dHistAsMCptAntiprotonMCptOmegaPlus", "Antiproton MC pt vs Omega+ MC pt", 100, 0., 10., 100, 0., 10.);
+      fListHistCascade->Add(f2dHistAsMCptAntiprotonMCptOmegaPlus);
+   }
+   // - Cosine of Pointing angle
+   if (! fHistV0toXiCosineOfPointingAngle) {
+      fHistV0toXiCosineOfPointingAngle = new TH1F("fHistV0toXiCosineOfPointingAngle", "Cos. of V0 Ptng Angl / Xi vtx ; Cos(V0 Point. Angl / Xi vtx); Counts", 200, 0.95, 1.0001);
+      fListHistCascade->Add(fHistV0toXiCosineOfPointingAngle);
+   }
+   if (! fHistV0CosineOfPointingAnglevsPtXi) {
+      fHistV0CosineOfPointingAnglevsPtXi = new TH2F("fHistV0CosineOfPointingAnglevsPtXi", "Cos. of V0 Ptng Angl vs cascade Pt; Cos(V0 Point. Angl); Counts", 100, 0., 10., 200, 0.95, 1.0001);
+      fListHistCascade->Add(fHistV0CosineOfPointingAnglevsPtXi);
+   }
+   if (! fHistV0CosineOfPointingAnglevsPtOmega) {
+      fHistV0CosineOfPointingAnglevsPtOmega = new TH2F("fHistV0CosineOfPointingAnglevsPtOmega", "Cos. of V0 Ptng Angl vs cascade Pt; Cos(V0 Point. Angl); Counts", 100, 0., 10., 200, 0.95, 1.0001);
+      fListHistCascade->Add(fHistV0CosineOfPointingAnglevsPtOmega);
+   }
+
+  //--------------
+  // - CFContainer
+  // PID container Xi-
+  if(! fCFContCascadePIDAsXiMinus)  {
+     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;
+     fCFContCascadePIDAsXiMinus = new AliCFContainer(Form("fCFContCascadePIDAsXiMinus_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 
+     fCFContCascadePIDAsXiMinus->SetBinLimits(0,   0.0  ,  10.0 );     // Pt(Cascade)
+     fCFContCascadePIDAsXiMinus->SetBinLimits(1,   1.2  ,   2.0 );     // Xi Effective mass
+     fCFContCascadePIDAsXiMinus->SetBinLimits(2,  -1.1  ,   1.1 );     // Rapidity
+       //Setting the step title : one per PID case
+     fCFContCascadePIDAsXiMinus->SetStepTitle(0, "No PID");
+     fCFContCascadePIDAsXiMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+     fCFContCascadePIDAsXiMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+     fCFContCascadePIDAsXiMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+     fCFContCascadePIDAsXiMinus->SetStepTitle(4, "Comb. PID / Bachelor");
+     fCFContCascadePIDAsXiMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+     fCFContCascadePIDAsXiMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
+       //Setting the variable title, per axis
+     fCFContCascadePIDAsXiMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+     fCFContCascadePIDAsXiMinus->SetVarTitle(1, "M( #Lambda , #pi^{-} ) (GeV/c^{2})");
+     fCFContCascadePIDAsXiMinus->SetVarTitle(2, "Y_{#Xi}");
+     fListHistCascade->Add(fCFContCascadePIDAsXiMinus);  
+  }
+  // PID container Xi+
+  if(! fCFContCascadePIDAsXiPlus)  {
+     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;
+     fCFContCascadePIDAsXiPlus = new AliCFContainer(Form("fCFContCascadePIDAsXiPlus_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 (valid  for v4-18-10-AN)
+     fCFContCascadePIDAsXiPlus->SetBinLimits(0,   0.0  ,  10.0 );      // Pt(Cascade)
+     fCFContCascadePIDAsXiPlus->SetBinLimits(1,   1.2  ,   2.0 );      // Xi Effective mass
+     fCFContCascadePIDAsXiPlus->SetBinLimits(2,  -1.1  ,   1.1 );      // Rapidity 
+       //Setting the step title : one per PID case
+     fCFContCascadePIDAsXiPlus->SetStepTitle(0, "No PID");
+     fCFContCascadePIDAsXiPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+     fCFContCascadePIDAsXiPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+     fCFContCascadePIDAsXiPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+     fCFContCascadePIDAsXiPlus->SetStepTitle(4, "Comb. PID / Bachelor");
+     fCFContCascadePIDAsXiPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+     fCFContCascadePIDAsXiPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");  
+       //Setting the variable title, per axis
+     fCFContCascadePIDAsXiPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+     fCFContCascadePIDAsXiPlus->SetVarTitle(1, "M( #Lambda , #pi^{+} ) (GeV/c^{2})");
+     fCFContCascadePIDAsXiPlus->SetVarTitle(2, "Y_{#Xi}");
+     fListHistCascade->Add(fCFContCascadePIDAsXiPlus);
+  }
+  // PID container Omega-
+  if(! fCFContCascadePIDAsOmegaMinus)  {
+     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;
+     fCFContCascadePIDAsOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDAsOmegaMinus_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 
+     fCFContCascadePIDAsOmegaMinus->SetBinLimits(0,   0.0  ,  10.0 );  // Pt(Cascade)
+     fCFContCascadePIDAsOmegaMinus->SetBinLimits(1,   1.5  ,   2.5 );  // Omega Effective mass
+     fCFContCascadePIDAsOmegaMinus->SetBinLimits(2,  -1.1  ,   1.1 );  // Rapidity
+       //Setting the step title : one per PID case
+     fCFContCascadePIDAsOmegaMinus->SetStepTitle(0, "No PID");
+     fCFContCascadePIDAsOmegaMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+     fCFContCascadePIDAsOmegaMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+     fCFContCascadePIDAsOmegaMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+     fCFContCascadePIDAsOmegaMinus->SetStepTitle(4, "Comb. PID / Bachelor");
+     fCFContCascadePIDAsOmegaMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+     fCFContCascadePIDAsOmegaMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
+       //Setting the variable title, per axis
+     fCFContCascadePIDAsOmegaMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+     fCFContCascadePIDAsOmegaMinus->SetVarTitle(1, "M( #Lambda , K^{-} ) (GeV/c^{2})");
+     fCFContCascadePIDAsOmegaMinus->SetVarTitle(2, "Y_{#Omega}");
+     fListHistCascade->Add(fCFContCascadePIDAsOmegaMinus);
+  }
+  // PID container Omega+
+  if(! fCFContCascadePIDAsOmegaPlus)  {
+     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;  
+     fCFContCascadePIDAsOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDAsOmegaPlus_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 
+     fCFContCascadePIDAsOmegaPlus->SetBinLimits(0,   0.0  ,  10.0 );   // Pt(Cascade)
+     fCFContCascadePIDAsOmegaPlus->SetBinLimits(1,   1.5  ,   2.5 );   // Omega Effective mass
+     fCFContCascadePIDAsOmegaPlus->SetBinLimits(2,  -1.1  ,   1.1 );   // Rapidity
+       //Setting the step title : one per PID case
+     fCFContCascadePIDAsOmegaPlus->SetStepTitle(0, "No PID");
+     fCFContCascadePIDAsOmegaPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
+     fCFContCascadePIDAsOmegaPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
+     fCFContCascadePIDAsOmegaPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
+     fCFContCascadePIDAsOmegaPlus->SetStepTitle(4, "Comb. PID / Bachelor");
+     fCFContCascadePIDAsOmegaPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
+     fCFContCascadePIDAsOmegaPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
+       //Setting the variable title, per axis
+     fCFContCascadePIDAsOmegaPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
+     fCFContCascadePIDAsOmegaPlus->SetVarTitle(1, "M( #Lambda , K^{+} ) (GeV/c^{2})");
+     fCFContCascadePIDAsOmegaPlus->SetVarTitle(2, "Y_{#Omega}");
+     fListHistCascade->Add(fCFContCascadePIDAsOmegaPlus);
+  }
+  // Container for optimisation of topological selections 
+  if(! fCFContAsCascadeCuts){
+       // 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.,3.0]        -> Rec.Cut = 2.0; 
+     lNbBinsPerVar[1]  = 25;   //DcaBachToPrimVertex             : [0.0,0.24,100.0]    -> Rec.Cur = 0.01;
+     lNbBinsPerVar[2]  = 60;     //CascCosineOfPointingAngle    :  [0.94,1.0]          -> Rec.Cut = 0.95;
+     //lNbBinsPerVar[2]  = 30;   //CascCosineOfPointingAngle       : [0.97,1.]           -> Rec.Cut = 0.98;
+     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]  = 20;   //DcaV0Daughters                  : [0.0,2.0]           -> Rec.Cut = 1.5;
+     lNbBinsPerVar[6]  = 201;  //V0CosineOfPointingAngle         : [0.89,1.0]          -> Rec.Cut = 0.9;
+     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.05;
+     lNbBinsPerVar[10] = 25;   //DcaNegToPrimVertex              : [0.0,0.24,100.0]    -> Rec.Cut = 0.05;
+     lNbBinsPerVar[11] = 150;  //InvMassXi                       :  2-MeV/c2 bins
+     lNbBinsPerVar[12] = 120;  //InvMassOmega                    :  2-MeV/c2 bins
+     lNbBinsPerVar[13] = 100;  //CascTransvMom                   : [0.0,10.0]
+     lNbBinsPerVar[14] = 110;  //Y(Xi)                           :  0.02 unit of y per bin 
+     lNbBinsPerVar[15] = 110;  //Y(Omega)                        :  0.02 unit of y per bin
+     lNbBinsPerVar[16] = 112;  //Proper lenght of cascade
+     lNbBinsPerVar[17] = 112;  //Proper lenght of V0 
+     lNbBinsPerVar[18] = 112;  //Distance V0-Xi in the transverse plane  
+     fCFContAsCascadeCuts = new AliCFContainer(Form("fCFContAsCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Cut Container for Asso. Cascades", lNbSteps, lNbVariables, lNbBinsPerVar );
+       //Setting the bin limits 
+       //0 - DcaCascDaughters
+     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;
+     fCFContAsCascadeCuts -> SetBinLimits(0, lBinLim0);
+     delete[] lBinLim0;
+       //1 - DcaBachToPrimVertex
+     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;
+     fCFContAsCascadeCuts -> SetBinLimits(1, lBinLim1);
+     delete [] lBinLim1;
+       //2 - CascCosineOfPointingAngle
+     fCFContAsCascadeCuts -> SetBinLimits(2, .94, 1.);        
+       //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;
+     fCFContAsCascadeCuts -> SetBinLimits(3, lBinLim3);
+     delete[] lBinLim3;
+       //4 - InvMassLambdaAsCascDghter
+     fCFContAsCascadeCuts->SetBinLimits(4, 1.1, 1.13); 
+       //5 - DcaV0Daughters
+     fCFContAsCascadeCuts->SetBinLimits(5, 0., 2.);        
+       //6 - V0CosineOfPointingAngle
+     fCFContAsCascadeCuts->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;
+     fCFContAsCascadeCuts -> SetBinLimits(7, lBinLim7);
+     delete [] lBinLim7;      
+       //8 - DcaV0ToPrimVertexXi : 0. to 0.4 
+     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;
+     fCFContAsCascadeCuts -> SetBinLimits(8, lBinLim8);
+     delete [] lBinLim8;      
+       //9 - DcaPosToPrimVertexXi
+     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;
+     fCFContAsCascadeCuts -> SetBinLimits(9, lBinLim9);
+     delete [] lBinLim9;   
+       //10 - DcaNegToPrimVertexXi
+     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;
+     fCFContAsCascadeCuts -> SetBinLimits(10, lBinLim10);
+     delete [] lBinLim10;  
+       //11 - InvMassXi
+     fCFContAsCascadeCuts -> SetBinLimits(11, 1.25, 1.40);
+       //12 - InvMassOmega
+     fCFContAsCascadeCuts -> SetBinLimits(12, 1.62, 1.74);
+       //13 - XiTransvMom 
+     fCFContAsCascadeCuts -> SetBinLimits(13, 0.0, 10.0);
+       //14 - Y(Xi) 
+     fCFContAsCascadeCuts -> SetBinLimits(14, -1.1, 1.1);
+       //15 - Y(Omega)
+     fCFContAsCascadeCuts -> SetBinLimits(15, -1.1, 1.1); 
+       //16 - Proper time 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;
+     fCFContAsCascadeCuts -> SetBinLimits(16, lBinLim16);
+       //17 - Proper time V0 
+     fCFContAsCascadeCuts -> SetBinLimits(17, lBinLim16);
+       //18 - Distance V0-Xi in the transverse plane
+     fCFContAsCascadeCuts -> SetBinLimits(18, lBinLim16);
+     delete [] lBinLim16;
+       // Setting the number of steps : one for each cascade species (Xi-, Xi+ and Omega-, Omega+)
+     fCFContAsCascadeCuts->SetStepTitle(0, "#Xi^{-} candidates associated to MC");
+     fCFContAsCascadeCuts->SetStepTitle(1, "#bar{#Xi}^{+} candidates associated to MC");
+     fCFContAsCascadeCuts->SetStepTitle(2, "#Omega^{-} candidates associated to MC");
+     fCFContAsCascadeCuts->SetStepTitle(3, "#bar{#Omega}^{+} candidates associated to MC");
+       // Setting the variable title, per axis
+     fCFContAsCascadeCuts->SetVarTitle(0,  "DCA(cascade daughters) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(1,  "ImpactParamToPV(bachelor) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(2,  "cos(cascade PA)");
+     fCFContAsCascadeCuts->SetVarTitle(3,  "R_{2d}(cascade decay) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(4,  "M_{#Lambda}(as casc dghter) (GeV/c^{2})");
+     fCFContAsCascadeCuts->SetVarTitle(5,  "DCA(V0 daughters) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(6,  "cos(V0 PA) in cascade");
+     fCFContAsCascadeCuts->SetVarTitle(7,  "R_{2d}(V0 decay) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(8,  "ImpactParamToPV(V0) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(9,  "ImpactParamToPV(Pos) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(10, "ImpactParamToPV(Neg) (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(11, "Inv. Mass(Xi) (GeV/c^{2})");
+     fCFContAsCascadeCuts->SetVarTitle(12, "Inv. Mass(Omega) (GeV/c^{2})");
+     fCFContAsCascadeCuts->SetVarTitle(13, "Pt_{MC}(cascade) (GeV/c)");
+     fCFContAsCascadeCuts->SetVarTitle(14, "Y_{MC}(Xi)");
+     fCFContAsCascadeCuts->SetVarTitle(15, "Y_{MC}(Omega)");
+     fCFContAsCascadeCuts->SetVarTitle(16, "mL/p cascade (cm)");
+     fCFContAsCascadeCuts->SetVarTitle(17, "mL/p V0 (cm)"); 
+     fCFContAsCascadeCuts->SetVarTitle(18, "Distance V0-Cascade in the transverse plane (cm)");
+     fListHistCascade->Add(fCFContAsCascadeCuts);
+  }
+
+ PostData(1, fListHistCascade); 
+ PostData(2, fCFContCascadePIDAsXiMinus);
+ PostData(3, fCFContCascadePIDAsXiPlus);
+ PostData(4, fCFContCascadePIDAsOmegaMinus);
+ PostData(5, fCFContCascadePIDAsOmegaPlus);
+ PostData(6, fCFContAsCascadeCuts);
+
+}// end CreateOutputObjects
+
+
+//________________________________________________________________________
+void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
+       
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  // Main loop (called for each event)
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+   
+   //------------------
+   // - Define variables
+   AliESDEvent  *lESDevent = 0x0;
+   AliAODEvent  *lAODevent = 0x0;
+   AliMCEvent   *lMCevent  = 0x0; 
+   AliStack     *lMCstack  = 0x0; 
+   TClonesArray *arrayMC = 0;
+
+   //-------------------------
+   // - Check the PID response
+   if (!fPIDResponse) {
+        AliError("Cannot get pid response");
+        return;
+   }
+
+
+  //////////////////   
+  // Event selection   
+  //////////////////
+  // 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
+    
+   //---------------------------------------------------------
+   // Load the InputEvent and check it (for the ESD and AOD)
+   if (fAnalysisType == "ESD") {
+       lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
+       if (!lESDevent) {
+          Printf("ERROR: lESDevent not available \n");
+          cout << "Name of the file with pb :" <<  CurrentFileName() << endl;  
+          return;
+       }
+       lMCevent = MCEvent();
+       if (!lMCevent) {
+           Printf("ERROR: Could not retrieve MC event \n");
+           cout << "Name of the file with pb :" <<  CurrentFileName() << endl;
+           return;
+       }
+       lMCstack = lMCevent->Stack();
+       if (!lMCstack) {
+           Printf("ERROR: Could not retrieve MC stack \n");
+           cout << "Name of the file with pb :" <<  CurrentFileName() << endl;
+           return;
+       }
+       // - Cascade vertexer (ESD)
+       // Relaunch V0 and Cascade vertexer
+       if (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; 
+           //---
+           //lESDevent->ResetCascades();
+           //lESDevent->ResetV0s();
+           //AliV0vertexer lV0vtxer;
+           //AliCascadeVertexer lCascVtxer;
+           //lV0vtxer.SetCuts(fV0Sels);
+           //lCascVtxer.SetCuts(fCascSels);
+           //lV0vtxer.Tracks2V0vertices(lESDevent);
+           //lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
+       }
+   } else if (fAnalysisType == "AOD") {  
+       lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() ); 
+       if (!lAODevent) {
+                  Printf("ERROR: lAODevent not available \n");
+          cout << "Name of the file with pb :" <<  CurrentFileName() << endl;
+          return;
+       }
+       arrayMC = (TClonesArray*) lAODevent->GetList()->FindObject(AliAODMCParticle::StdBranchName());
+       if (!arrayMC) AliFatal("Error: MC particles branch not found!\n");
+   } else {
+       Printf("Analysis type (ESD or AOD) not specified \n");
+       return;
+   }
+
+   //------------------------------
+   // - Plots Before any selections
+   //------------------------------
+   // - Define variables
+   Int_t  ncascadesBeforeAnySel          = -1; //number of cascades before any selections
+   Int_t  nTrackMultiplicityBeforeAnySel = -1; //number of tracks before any selections
+   if (fAnalysisType == "ESD") {
+       //Multiplicity
+       Int_t lMultiplicity = -100;
+       lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC, 0.5);
+       nTrackMultiplicityBeforeAnySel = lMultiplicity;
+       ncascadesBeforeAnySel = lESDevent->GetNumberOfCascades();
+   } else if (fAnalysisType == "AOD") {
+       //Multiplicity
+       Int_t lMultiplicity = -100;
+       nTrackMultiplicityBeforeAnySel = lMultiplicity;
+       ncascadesBeforeAnySel  = lAODevent->GetNumberOfCascades();
+   }
+   fHistTrackMultiplicityBeforeAnySel->Fill(nTrackMultiplicityBeforeAnySel);
+   fHistCascadeMultiplicityBeforeAnySel->Fill(ncascadesBeforeAnySel);
+
+   //----------------
+   // - SDD selection
+   //----------------
+   // - Define variables
+   Int_t  ncascadesAfterSDDSel          = -1; //number of cascades after SDD selection
+   Int_t  nTrackMultiplicityAfterSDDSel = -1; //number of tracks after SDD selection
+   if (fkSDDselectionOn) {
+        TString trcl = " ";
+        trcl = lESDevent->GetFiredTriggerClasses();
+        if (fAnalysisType == "ESD") trcl = lESDevent->GetFiredTriggerClasses();
+        else if (fAnalysisType == "AOD") trcl = lAODevent->GetFiredTriggerClasses();
+        if (fwithSDD){   // ---> Select event with SDD ON
+            if(!(trcl.Contains("ALLNOTRD"))) {
+                 PostData(1, fListHistCascade);
+                 PostData(2, fCFContCascadePIDAsXiMinus);
+                 PostData(3, fCFContCascadePIDAsXiPlus);
+                 PostData(4, fCFContCascadePIDAsOmegaMinus);
+                 PostData(5, fCFContCascadePIDAsOmegaPlus);
+                 PostData(6, fCFContAsCascadeCuts);
+                 cout<<"Bad event: SDD turn OFF =>  RETURN!! (Exclude it)..."<<endl;
+                 return;
+            } else {
+                 cout<<"Good event: SDD turn ON."<<endl;
+            }
+        } else if (!fwithSDD){  // ---> Select event with SDD OFF
+            if((trcl.Contains("ALLNOTRD"))) {
+                 PostData(1, fListHistCascade);
+                 PostData(2, fCFContCascadePIDAsXiMinus);
+                 PostData(3, fCFContCascadePIDAsXiPlus);
+                 PostData(4, fCFContCascadePIDAsOmegaMinus);
+                 PostData(5, fCFContCascadePIDAsOmegaPlus);
+                 PostData(6, fCFContAsCascadeCuts);
+                 cout<<"Bad event:  SDD turn ON =>  RETURN!! (Exclude it)..."<<endl;
+                 return;
+            } else {
+                 cout<<"Good event: SDD turn OFF."<<endl;
+            }
+        }
+   }
+   // - Take the number of cascades and tracks after the SDD selection
+   if (fAnalysisType == "ESD") {
+       Int_t lMultiplicity = -100;
+       lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC, 0.5);
+       ncascadesAfterSDDSel = lESDevent->GetNumberOfCascades();
+       nTrackMultiplicityAfterSDDSel = lMultiplicity;
+   } else if (fAnalysisType == "AOD") {
+       Int_t lMultiplicity = -100;
+       ncascadesAfterSDDSel = lAODevent->GetNumberOfCascades();
+       nTrackMultiplicityAfterSDDSel = lMultiplicity;
+   }
+   // - Fill the plots
+   fHistTrackMultiplicityAfterSDDSel->Fill(nTrackMultiplicityAfterSDDSel);
+   fHistCascadeMultiplicityAfterSDDSel->Fill(ncascadesAfterSDDSel);
+
+   //------------------------------
+   // - Plots pre-physics selection
+   //------------------------------
+   // - Produce the 3Dhisto for the efficiency denominator
+   Int_t lNbMCPrimary = 0;
+   lNbMCPrimary = lMCstack->GetNprimary();
+
+   for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) {
+
+     Double_t partEnergy = 0.;
+     Double_t partPz     = 0.;
+     Double_t partP      = 0.;
+     Double_t partPt     = 0.;
+     Double_t partVx     = 0.;
+     Double_t partVy     = 0.;
+     Double_t partVz     = 0.;
+     Double_t bacVx      = 0.;
+     Double_t bacVy      = 0.;
+     Double_t bacVz      = 0.;
+     Double_t partMass   = 0.;
+     Int_t    PDGcode    = 0;
+     Int_t lPrimaryTrackMultiplicity = nTrackMultiplicityAfterSDDSel;
+
+       if ( fAnalysisType == "ESD" ) {
+            TParticle* lCurrentParticlePrimary = 0x0;
+            lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );        
+            if (!lCurrentParticlePrimary) {
+                  Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
+                  continue;
+            }
+            if (!lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) continue;
+            TParticle* xiMC = 0x0;
+            xiMC = lCurrentParticlePrimary;
+            if (!xiMC) {
+                  Printf("MC TParticle pointer to Cascade = 0x0 ! Skip ...");
+                  continue;
+            }
+            partEnergy = xiMC->Energy();
+            partPz     = xiMC->Pz();
+            partPt     = xiMC->Pt();
+            partP      = xiMC->P();
+            partMass   = xiMC->GetMass();
+            partVx     = xiMC->Vx();
+            partVy     = xiMC->Vy();
+            partVz     = xiMC->Vz();
+            if (xiMC->GetDaughter(0)>=0) {    
+                 TParticle *mcBach = lMCstack->Particle(xiMC->GetDaughter(0));
+                 if (mcBach) {
+                     bacVx  = mcBach->Vx();
+                     bacVy  = mcBach->Vy();
+                     bacVz  = mcBach->Vz();
+                 }
+            }
+            PDGcode = lCurrentParticlePrimary->GetPdgCode();
+       } else if ( fAnalysisType == "AOD" ) {
+            AliAODMCParticle *lCurrentParticleaod = (AliAODMCParticle*) arrayMC->At(iCurrentLabelStack);
+            if (!lCurrentParticleaod) {
+                  Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
+                  continue;
+            }
+            if (!lCurrentParticleaod->IsPhysicalPrimary()) continue;
+            partEnergy = lCurrentParticleaod->E();
+            partPz     = lCurrentParticleaod->Pz();
+            partP      = lCurrentParticleaod->P();
+            partPt     = lCurrentParticleaod->Pt();
+            partMass   = lCurrentParticleaod->M(); 
+            partVx     = lCurrentParticleaod->Xv();
+            partVy     = lCurrentParticleaod->Yv();
+            partVz     = lCurrentParticleaod->Zv();
+            if (lCurrentParticleaod->GetDaughter(0)>=0) {
+                 AliAODMCParticle *mcBach = (AliAODMCParticle*) arrayMC->At(lCurrentParticleaod->GetDaughter(0));
+                 if (mcBach) {
+                     bacVx  = mcBach->Xv();
+                     bacVy  = mcBach->Yv();
+                     bacVz  = mcBach->Zv();
+                 }
+            }     
+            PDGcode = lCurrentParticleaod->GetPdgCode();
+       }
+
+       // - Calculate rapidity
+       Double_t lRapXiMC = 0.5*TMath::Log((partEnergy + partPz) / (partEnergy - partPz + 1.e-13));
+       // - Calculate proper lenght
+       Double_t lctau = TMath::Sqrt((partVx-bacVx)*(partVx-bacVx)+(partVy-bacVy)*(partVy-bacVy)+(partVz-bacVz)*(partVz-bacVz));
+       if (partP != 0.) lctau = lctau*partMass/partP;
+       else lctau = -1.;
+       // - Fill Histograms
+       if (PDGcode ==  3312) {
+           f3dHistGenPtVsGenYvsNtracksXiMinus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);
+           f3dHistGenPtVsGenctauvsYXiMinus->Fill(partPt, lctau, lRapXiMC);
+       }
+       if (PDGcode == -3312) {
+           f3dHistGenPtVsGenYvsNtracksXiPlus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);
+           f3dHistGenPtVsGenctauvsYXiPlus->Fill(partPt, lctau, lRapXiMC);
+       }
+       if (PDGcode ==  3334) {
+           f3dHistGenPtVsGenYvsNtracksOmegaMinus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);
+           f3dHistGenPtVsGenctauvsYOmegaMinus->Fill(partPt, lctau, lRapXiMC);
+       }
+       if (PDGcode == -3334) {
+           f3dHistGenPtVsGenYvsNtracksOmegaPlus->Fill(partPt, lRapXiMC, lPrimaryTrackMultiplicity);
+           f3dHistGenPtVsGenctauvsYOmegaPlus->Fill(partPt, lctau, lRapXiMC);
+       }
+   }
+
+   //--------------------
+   // - Physics selection
+   //--------------------
+   // - Define new variables
+   Int_t    ncascadesAfterPhysicsSel          = -1; //number of cascades after physics selection
+   Int_t    nTrackMultiplicityAfterPhysicsSel = -1; //number of tracks after physics selection
+   // - Selection for ESD and AOD
+   if (fAnalysisType == "ESD") {
+       UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+       Bool_t isSelected = 0;
+       isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+       if(!isSelected){
+           PostData(1, fListHistCascade);
+           PostData(2, fCFContCascadePIDAsXiMinus);
+           PostData(3, fCFContCascadePIDAsXiPlus);
+           PostData(4, fCFContCascadePIDAsOmegaMinus);
+           PostData(5, fCFContCascadePIDAsOmegaPlus);
+           PostData(6, fCFContAsCascadeCuts);
+           return;
+       }
+       // - 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") {
+       UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+       Bool_t isSelected = 0;
+       isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+       if(!isSelected){
+           PostData(1, fListHistCascade);
+           PostData(2, fCFContCascadePIDAsXiMinus);
+           PostData(3, fCFContCascadePIDAsXiPlus);
+           PostData(4, fCFContCascadePIDAsOmegaMinus);
+           PostData(5, fCFContCascadePIDAsOmegaPlus);
+           PostData(6, fCFContAsCascadeCuts);
+           return;
+       }
+       // - Take the number of cascades and tracks after physics selection
+       ncascadesAfterPhysicsSel = lAODevent->GetNumberOfCascades();
+       nTrackMultiplicityAfterPhysicsSel = -100;
+   }
+   fHistCascadeMultiplicityAfterPhysicsSel->Fill(ncascadesAfterPhysicsSel);
+   fHistTrackMultiplicityAfterPhysicsSel->Fill(nTrackMultiplicityAfterPhysicsSel);
+
+   //-------------------------------------------------------
+   // Select only looking at events with well-established PV
+   //-------------------------------------------------------
+   Int_t    ncascadesForSelEvtNoTPCOnly                  = -1; //number of cascades after the TPConly selection
+   Int_t    nTrackMultiplicityForSelEvtNoTPCOnly         = -1; //number of tracks after the TPConly selection
+   if (fAnalysisType == "ESD" ) {
+       // - Select only looking at events with well-established PV
+       if (fkQualityCutNoTPConlyPrimVtx) {
+           const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
+           const AliESDVertex *lPrimaryTrackingVtx = lESDevent->GetPrimaryVertexTracks();
+           if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingVtx->GetStatus() ){
+               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               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") {
+       // - Select only looking at events with well-established PV
+       if (fkQualityCutNoTPConlyPrimVtx) {
+           const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();
+           const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();
+           if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {
+               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               return;
+           }
+       }
+       // - Take the number of cascades and tracks after TPConly selection
+       ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();
+       nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME
+   }
+   fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);
+   fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);
+    
+   //-----------------
+   // Pileup selection
+   //-----------------
+   Int_t    ncascadesForSelEvtNoTPCOnlyNoPileup          = -1; //number of cascades after the NoPileup selection
+   Int_t    nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -1; //number of tracks after the Pileup selection
+   if (fAnalysisType == "ESD" ) {
+       // - Selection for pile up
+       if (fkRejectEventPileUp) {
+           if(lESDevent->IsPileupFromSPD()){
+               AliWarning("Pb / Pile-up event ... return!");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               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") {
+       // - Selection for pile up
+       if (fkRejectEventPileUp) {
+           if(lAODevent->IsPileupFromSPD()){
+               AliWarning("Pb / Pile-up event ... return!");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               return;
+           }
+       }
+       // - Take the number of cascades and tracks after Pileup selection
+       ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();
+       nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;
+   }
+   fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);
+   fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
+    
+   //-------------------
+   // - Vertex selection 
+   //-------------------
+   Int_t    ncascadesAfterVertexSel                      = -1; //number of cascades after vertex selection
+   Int_t    nTrackMultiplicityAfterVertexSel             = -1; //number of tracks after vertex selection
+   Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
+   Double_t tPrimaryVtxPosition[3] = {-100.0, -100.0, -100.0}; 
+   Double_t lMagneticField = -10.;
+   if (fAnalysisType == "ESD" ) {
+       // - Primary vertex definition
+       const AliESDVertex *lPrimaryBestVtx = lESDevent->GetPrimaryVertex();
+       if (!lPrimaryBestVtx) {
+            AliWarning("No prim. vertex in AOD... return!");
+            PostData(1, fListHistCascade);
+            PostData(2, fCFContCascadePIDAsXiMinus);
+            PostData(3, fCFContCascadePIDAsXiPlus);
+            PostData(4, fCFContCascadePIDAsOmegaMinus);
+            PostData(5, fCFContCascadePIDAsOmegaPlus);
+            PostData(6, fCFContAsCascadeCuts);
+            return;
+       }
+       lPrimaryBestVtx->GetXYZ( lBestPrimaryVtxPos );
+       // - Vertex position 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();
+       // - 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, fCFContCascadePIDAsXiMinus);
+                PostData(3, fCFContCascadePIDAsXiPlus);
+                PostData(4, fCFContCascadePIDAsOmegaMinus);
+                PostData(5, fCFContCascadePIDAsOmegaPlus);
+                PostData(6, fCFContAsCascadeCuts);
+                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") {
+       // - Primary vertex definition
+       const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex(); // get the best primary vertex available for the event GetVertex(0)
+       if (!lPrimaryBestAODVtx) {
+            AliWarning("No prim. vertex in AOD... return!");
+            PostData(1, fListHistCascade);
+            PostData(2, fCFContCascadePIDAsXiMinus);
+            PostData(3, fCFContCascadePIDAsXiPlus);
+            PostData(4, fCFContCascadePIDAsOmegaMinus);
+            PostData(5, fCFContCascadePIDAsOmegaPlus);
+            PostData(6, fCFContAsCascadeCuts);
+            return;
+       }
+       lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );
+       // - Vertex position 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();
+       // - 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, fCFContCascadePIDAsXiMinus);
+                PostData(3, fCFContCascadePIDAsXiPlus);
+                PostData(4, fCFContCascadePIDAsOmegaMinus);
+                PostData(5, fCFContCascadePIDAsOmegaPlus);
+                PostData(6, fCFContAsCascadeCuts);
+                return;
+           }
+       }
+       // - Take the number of cascades and tracks after vertex Z position selection
+       ncascadesAfterVertexSel = lAODevent->GetNumberOfCascades();
+       nTrackMultiplicityAfterVertexSel = -100;
+   }
+   // - Fill the plots
+   fHistCascadeMultiplicityAfterVertexCutSel->Fill(ncascadesAfterVertexSel);
+   fHistTrackMultiplicityAfterVertexCutSel->Fill(nTrackMultiplicityAfterVertexSel);
+
+   // - Vertex position plots: after any event selections
+   tPrimaryVtxPosition[0] = 0;
+   tPrimaryVtxPosition[1] = 0;
+   tPrimaryVtxPosition[2] = 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] );
+    
+
+   //----------------------------------------------------------------------    
+   // - Loop over the different types of GENERATED cascades (Xi-+, Omega-+)    
+   //----------------------------------------------------------------------
+   // - Initialisation of useful local variables               
+   Int_t lPdgCodeCasc            = 0;
+   Int_t lPdgCodeBach            = 0;
+   Int_t lPdgCodeLambda          = 0;
+   Int_t lPdgCodeDghtMesV0       = 0;
+   Int_t lPdgCodeDghtBarV0       = 0;  
+   TH1F *lHistEtaGenCasc         = 0;  
+   TH3D *l3dHistGenPtVsGenYvsNtracksPhysEff = 0;
+   TH3D *l3dHistGenPtVsGenctauvsYPhysEff    = 0;
+   TH1F *lHistThetaGenCasc       = 0;
+   TH2D *l2dHistGenPtVsGenYFdbl  = 0;
+   TH1F *lHistThetaLambda        = 0;
+   TH1F *lHistThetaBach          = 0;
+   TH1F *lHistThetaBarDghter     = 0;
+   TH1F *lHistThetaMesDghter     = 0;
+   TH1F *lHistPtBach             = 0;
+   TH1F *lHistPtBarDghter        = 0;
+   TH1F *lHistPtMesDghter        = 0;
+   Int_t ncascperev = 0; 
+   Int_t ncascperevtot = 0;
+
+   for (Int_t iCascType = 1; iCascType < 5; iCascType++) { 
+         ncascperev = 0;
+         ncascperevtot = 0;
+         Int_t lPrimaryTrackMultiplicity = nTrackMultiplicityAfterSDDSel;
+
+         switch (iCascType) {
+           case 1: // Xi-
+               lPdgCodeCasc       =   3312;  //Xi-
+               lPdgCodeBach       =   -211;  //Pi-
+               lPdgCodeLambda     =   3122;  //Lambda0
+               lPdgCodeDghtMesV0  =   -211;  //Pi-
+               lPdgCodeDghtBarV0  =   2212;  //Proton  
+               lHistEtaGenCasc        = fHistEtaGenCascXiMinus;         // this plot for any Xi- 
+              lHistThetaGenCasc      = fHistThetaGenCascXiMinus;       // cascades generated within acceptance (cut in pt + theta)
+               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksXiMinusPhysEff;
+               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYXiMinusPhysEff;
+              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblXiMinus;
+              lHistThetaLambda       = fHistThetaLambdaXiMinus;
+              lHistThetaBach         = fHistThetaBachXiMinus;
+              lHistThetaBarDghter    = fHistThetaBarDghterXiMinus;
+              lHistThetaMesDghter    = fHistThetaMesDghterXiMinus;
+              lHistPtBach            = fHistPtBachXiMinus;
+              lHistPtBarDghter       = fHistPtBarDghterXiMinus;
+              lHistPtMesDghter       = fHistPtMesDghterXiMinus;
+               break; 
+           case 2: // Xi+
+               lPdgCodeCasc        =  -3312;  //Xi+
+               lPdgCodeBach        =    211;  //Pi+
+               lPdgCodeLambda      =  -3122;  //AntiLambda0
+               lPdgCodeDghtMesV0   =    211;  //Pi+
+               lPdgCodeDghtBarV0   =  -2212;  //AntiProton  
+              lHistEtaGenCasc        = fHistEtaGenCascXiPlus;       // this plot for any Xi+
+              lHistThetaGenCasc      = fHistThetaGenCascXiPlus;     // cascades generated within acceptance (cut in pt + theta)
+               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksXiPlusPhysEff;
+               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYXiPlusPhysEff;
+              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblXiPlus;
+              lHistThetaLambda       = fHistThetaLambdaXiPlus;
+              lHistThetaBach         = fHistThetaBachXiPlus;
+              lHistThetaBarDghter    = fHistThetaBarDghterXiPlus;
+              lHistThetaMesDghter    = fHistThetaMesDghterXiPlus;
+              lHistPtBach            = fHistPtBachXiPlus;
+              lHistPtBarDghter       = fHistPtBarDghterXiPlus;
+              lHistPtMesDghter       = fHistPtMesDghterXiPlus;  
+              break;
+           case 3: // Omega-
+              lPdgCodeCasc       =   3334;  //Omega-
+               lPdgCodeBach       =   -321;  //K-
+               lPdgCodeLambda     =   3122;  //Lambda0
+               lPdgCodeDghtMesV0  =   -211;  //Pi-
+               lPdgCodeDghtBarV0  =   2212;  //Proton
+              lHistEtaGenCasc        = fHistEtaGenCascOmegaMinus;        // this plot for any Omega+           
+              lHistThetaGenCasc      = fHistThetaGenCascOmegaMinus;      // cascades generated within acceptance (cut in pt + theta)
+              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblOmegaMinus;
+               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksOmegaMinusPhysEff;
+               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYOmegaMinusPhysEff;
+              lHistThetaLambda       = fHistThetaLambdaOmegaMinus;
+              lHistThetaBach         = fHistThetaBachOmegaMinus;
+              lHistThetaBarDghter    = fHistThetaBarDghterOmegaMinus;
+              lHistThetaMesDghter    = fHistThetaMesDghterOmegaMinus;
+              lHistPtBach            = fHistPtBachOmegaMinus;
+              lHistPtBarDghter       = fHistPtBarDghterOmegaMinus;
+              lHistPtMesDghter       = fHistPtMesDghterOmegaMinus;   
+               break;
+           case 4:  // Omega+
+               lPdgCodeCasc       =  -3334;  //Omega+
+               lPdgCodeBach       =    321;  //K+
+               lPdgCodeLambda     =  -3122;  //AntiLambda0
+               lPdgCodeDghtMesV0  =    211;  //Pi+
+               lPdgCodeDghtBarV0  =  -2212;  //AntiProton 
+              lHistEtaGenCasc        = fHistEtaGenCascOmegaPlus;        // this plot for any Omega-
+              lHistThetaGenCasc      = fHistThetaGenCascOmegaPlus;      // cascades generated within acceptance (cut in pt + theta)
+              l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblOmegaPlus;
+               l3dHistGenPtVsGenYvsNtracksPhysEff = f3dHistGenPtVsGenYvsNtracksOmegaPlusPhysEff;
+               l3dHistGenPtVsGenctauvsYPhysEff    = f3dHistGenPtVsGenctauvsYOmegaPlusPhysEff;
+              lHistThetaLambda       = fHistThetaLambdaOmegaPlus;
+              lHistThetaBach         = fHistThetaBachOmegaPlus;
+              lHistThetaBarDghter    = fHistThetaBarDghterOmegaPlus;
+              lHistThetaMesDghter    = fHistThetaMesDghterOmegaPlus;
+              lHistPtBach            = fHistPtBachOmegaPlus;
+              lHistPtBarDghter       = fHistPtBarDghterOmegaPlus;
+              lHistPtMesDghter       = fHistPtMesDghterOmegaPlus;  
+               break;
+         }
+
+         for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) {
+
+               Double_t partEnergy = 0.;
+               Double_t partPz     = 0.;
+               Double_t partEta    = 0.;
+               Double_t partTheta  = 0.;
+               Double_t partP      = 0.;
+               Double_t partPt     = 0.;
+               Double_t partVx     = 0.;
+               Double_t partVy     = 0.; 
+               Double_t partVz     = 0.;
+               Double_t bacVx      = 0.;
+               Double_t bacVy      = 0.;
+               Double_t bacVz      = 0.;    
+               Double_t partMass   = 0.;
+
+               if ( fAnalysisType == "ESD" ) {      
+                    TParticle* lCurrentParticle = 0x0; 
+                    lCurrentParticle = lMCstack->Particle( iCurrentLabelStack );
+                    if (!lCurrentParticle) {
+                        Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
+                        continue;
+                    }
+                    if (!lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) continue; 
+                    if (lCurrentParticle->GetPdgCode() == lPdgCodeCasc) {  // Here !   
+                       TParticle* xiMC = 0x0;
+                       xiMC = lCurrentParticle;
+                       if (!xiMC) {
+                           Printf("MC TParticle pointer to Cascade = 0x0 ! Skip ...");
+                           continue;
+                       }
+                        partEnergy = xiMC->Energy();
+                        partPz     = xiMC->Pz();
+                        partEta    = xiMC->Eta();
+                        partPt     = xiMC->Pt();
+                        partP      = xiMC->P();
+                        partTheta  = xiMC->Theta();
+                        partMass   = xiMC->GetMass();
+                        partVx     = xiMC->Vx();
+                        partVy     = xiMC->Vy();
+                        partVz     = xiMC->Vz();
+                        if (xiMC->GetDaughter(0)>=0) {
+                             TParticle *mcBach = lMCstack->Particle(xiMC->GetDaughter(0));
+                             if (mcBach) {
+                                 bacVx  = mcBach->Vx();
+                                 bacVy  = mcBach->Vy();
+                                 bacVz  = mcBach->Vz();
+                             }
+                        }
+                    } else continue;
+               } else if ( fAnalysisType == "AOD" ) {
+                    AliAODMCParticle *lCurrentParticleaod = (AliAODMCParticle*) arrayMC->At(iCurrentLabelStack);
+                    if (!lCurrentParticleaod) {
+                        Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
+                        continue;
+                    }
+                    if (!lCurrentParticleaod->IsPhysicalPrimary()) continue;  
+                    if (!(lCurrentParticleaod->PdgCode() == lPdgCodeCasc)) continue;
+                    partEnergy = lCurrentParticleaod->E();
+                    partPz     = lCurrentParticleaod->Pz();
+                    partEta    = lCurrentParticleaod->Eta();
+                    partP      = lCurrentParticleaod->P();
+                    partPt     = lCurrentParticleaod->Pt();
+                    partTheta  = lCurrentParticleaod->Theta();
+                    partMass   = lCurrentParticleaod->M();   //FIXME: not sure this works, seems not implemented
+                    partVx     = lCurrentParticleaod->Xv();
+                    partVy     = lCurrentParticleaod->Yv();
+                    partVz     = lCurrentParticleaod->Zv();
+                    if (lCurrentParticleaod->GetDaughter(0)>=0) {
+                         AliAODMCParticle *mcBach = (AliAODMCParticle*) arrayMC->At(lCurrentParticleaod->GetDaughter(0));
+                         if (mcBach) {
+                              bacVx  = mcBach->Xv();
+                              bacVy  = mcBach->Yv();
+                              bacVz  = mcBach->Zv();
+                         } 
+                    }
+               }
+               ncascperevtot++;        
+               // - Fill the first histos : = any generated Xi, not necessarily within the acceptance
+               Double_t lRapXiMC = 0.5*TMath::Log((partEnergy + partPz) / (partEnergy - partPz +1.e-13));
+               // - Calculate proper time
+               Double_t lctau = TMath::Sqrt((partVx-bacVx)*(partVx-bacVx)+(partVy-bacVy)*(partVy-bacVy)+(partVz-bacVz)*(partVz-bacVz));
+               if (partP!=0.)    lctau = lctau*partMass/partP;
+               else lctau = -1.;
+               Double_t lRadToDeg = 180.0/TMath::Pi();
+               // - Fill the first histos : = any generated Xi, not necessarily within the acceptance          
+               lHistEtaGenCasc->Fill( partEta );        
+               l3dHistGenPtVsGenYvsNtracksPhysEff->Fill( partPt, lRapXiMC, lPrimaryTrackMultiplicity );
+               l3dHistGenPtVsGenctauvsYPhysEff->Fill( partPt, lctau, lRapXiMC );
+               lHistThetaGenCasc->Fill( lRadToDeg * partTheta );
+
+               //--------------------------------------------------------------------------------------------
+               // - Check the emission of particle stays within the acceptance of the detector (cut in theta)
+               if (fApplyAccCut) { if( partTheta < TMath::Pi()/4.0 || partTheta > 3.0*TMath::Pi()/4.0 ) continue;}     
+
+               Float_t lambdaTheta = 0.;
+               Float_t bacTheta    = 0.;
+               Float_t dghtBarV0Theta = 0.;
+               Float_t dghtMesV0Theta = 0.;
+               Float_t bacPt       = 0.;
+               Float_t dghtBarV0Pt = 0.;
+               Float_t dghtMesV0Pt = 0.;
+
+               if ( fAnalysisType == "ESD" ) { 
+                    TParticle* xiMC = lMCstack->Particle( iCurrentLabelStack ); 
+                    if ( xiMC->GetNDaughters() != 2) continue;
+                    if ( xiMC->GetDaughter(0) < 0 )  continue;
+                    if ( xiMC->GetDaughter(1) < 0 )  continue; 
+                    TParticle* lDght0ofXi = lMCstack->Particle(  xiMC->GetDaughter(0) );
+                    TParticle* lDght1ofXi = lMCstack->Particle(  xiMC->GetDaughter(1) );
+                    TParticle* lLambda = 0;
+                    TParticle* lBach   = 0;
+
+                    // Xi - Case 1
+                    if ( lDght0ofXi->GetPdgCode() == lPdgCodeLambda && lDght1ofXi->GetPdgCode() == lPdgCodeBach ){                     
+                           lLambda = lDght0ofXi;   // dghter0 = Lambda
+                           lBach   = lDght1ofXi;   // dghter1 = Pi-
+                    }                  
+                    // Xi - Case 2
+                    else if ( lDght0ofXi->GetPdgCode() == lPdgCodeBach && lDght1ofXi->GetPdgCode() == lPdgCodeLambda ){ 
+                           lBach   = lDght0ofXi;   // dghter0 = Pi-
+                          lLambda = lDght1ofXi;   // dghter1 = Lambda
+                    }
+                   // Otherwise - Case 3       
+                    else continue;
+
+                    // - Check the emission of particle stays within the acceptance of the detector (cut in pt + theta)
+                    if (fApplyAccCut) { 
+                         if( lLambda->Theta() < TMath::Pi()/4.0 || lLambda->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
+                         if( lBach->Theta() < TMath::Pi()/4.0   || lBach->Theta() > 3.0*TMath::Pi()/4.0 )   continue;
+                         if( lBach->Pt() < 0.150 ) continue; //FIXME: maybe tuned for Xi but not for K- from Omega ...
+                    }                          
+                    //---------
+                    // - V0 level
+                    TParticle* lDghtBarV0 = 0;
+                    TParticle* lDghtMesV0 = 0;
+                    if( lLambda->GetNDaughters() != 2 )  continue;
+                    if( lLambda->GetDaughter(0) < 0 )    continue;
+                    if( lLambda->GetDaughter(1) < 0 )    continue;
+                    TParticle* lDght0ofLambda = lMCstack->Particle(  lLambda->GetDaughter(0) );
+                    TParticle* lDght1ofLambda = lMCstack->Particle(  lLambda->GetDaughter(1) );
+
+                    // V0 - Case 1
+                    if ( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 && lDght1ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 ) {    // Here !                       
+                           lDghtBarV0 = lDght0ofLambda;   // dghter0 = Proton
+                           lDghtMesV0 = lDght1ofLambda;   // dghter1 = Pi-
+                    }                  
+                    // V0 - Case 2
+                    else if ( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 && lDght1ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 ) {      // Here !
+                           lDghtMesV0 = lDght0ofLambda;   // dghter0 = Pi-
+                          lDghtBarV0 = lDght1ofLambda;   // dghter1 = Proton
+                    }          
+                    // Otherwise - Case 3
+                    else continue;
+                               
+                    // - Check the emission of particle stays within the acceptance of the detector
+                    if (fApplyAccCut) { 
+                         if( lDghtBarV0->Theta() < TMath::Pi()/4.0  ||  lDghtBarV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
+                         if( lDghtMesV0->Theta() < TMath::Pi()/4.0  ||  lDghtMesV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
+                         if( lDghtBarV0->Pt() < 0.250 ) continue;
+                         if( lDghtMesV0->Pt() < 0.150 ) continue;
+                    }
+                    lambdaTheta    = lLambda->Theta();
+                    bacTheta       = lBach->Theta();
+                    dghtBarV0Theta = lDghtBarV0->Theta();                      
+                    dghtMesV0Theta = lDghtMesV0->Theta();
+                    bacPt          = lBach->Pt();
+                    dghtBarV0Pt    = lDghtBarV0->Pt();
+                    dghtMesV0Pt    = lDghtMesV0->Pt();
+                       
+               } else if ( fAnalysisType == "AOD") {
+
+                    AliAODMCParticle *xiMC = (AliAODMCParticle*) arrayMC->At(iCurrentLabelStack);
+                    if (xiMC->GetNDaughters() != 2) continue;
+                    if (xiMC->GetDaughter(0) < 0 )  continue;
+                    if (xiMC->GetDaughter(1) < 0 )  continue;
+
+                    AliAODMCParticle* lDght0ofXi = (AliAODMCParticle*) arrayMC->At(  xiMC->GetDaughter(0) );
+                    AliAODMCParticle* lDght1ofXi = (AliAODMCParticle*) arrayMC->At(  xiMC->GetDaughter(1) );
+
+                    AliAODMCParticle* lLambda = 0;
+                    AliAODMCParticle* lBach   = 0;
+
+                    // Xi - Case 1
+                    if ( lDght0ofXi->PdgCode() == lPdgCodeLambda  &&  lDght1ofXi->PdgCode() == lPdgCodeBach ){ 
+                            lLambda = lDght0ofXi;   // dghter0 = Lambda
+                            lBach   = lDght1ofXi;   // dghter1 = Pi-
+                    }
+                    // Xi - Case 2
+                    else if ( lDght0ofXi->PdgCode() == lPdgCodeBach && lDght1ofXi->PdgCode() == lPdgCodeLambda ){
+                            lBach   = lDght0ofXi;   // dghter0 = Pi
+                            lLambda = lDght1ofXi;   //dghter1 = Lambda
+                    }
+                    // Otherwise - Case 3
+                    else continue;
+
+                    // - Check the emission of particle stays within the acceptance of the detector (cut in pt + theta)
+                    if (fApplyAccCut) {
+                          if ( lLambda->Theta() < TMath::Pi()/4.0  ||    lLambda->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
+                          if( lBach->Theta() < TMath::Pi()/4.0    ||    lBach->Theta() > 3.0*TMath::Pi()/4.0 )   continue;
+                          if( lBach->Pt() < 0.150 ) continue; //FIXME : maybe tuned for Xi but not for K- from Omega ...
+                    }
+
+                    //-----------
+                    // - V0 level 
+                    AliAODMCParticle* lDghtBarV0 = 0;
+                    AliAODMCParticle* lDghtMesV0 = 0;
+
+                    if( lLambda->GetNDaughters() != 2 )  continue;
+                    if( lLambda->GetDaughter(0) < 0 )    continue;
+                    if( lLambda->GetDaughter(1) < 0 )    continue;
+
+                    AliAODMCParticle* lDght0ofLambda = (AliAODMCParticle*) arrayMC->At(  lLambda->GetDaughter(0) );
+                    AliAODMCParticle* lDght1ofLambda = (AliAODMCParticle*) arrayMC->At(  lLambda->GetDaughter(1) );
+
+                    // V0 - Case 1
+                    if ( lDght0ofLambda->PdgCode() == lPdgCodeDghtBarV0 && lDght1ofLambda->PdgCode() == lPdgCodeDghtMesV0 ) { 
+                            lDghtBarV0 = lDght0ofLambda;   // dghter0 = Proton
+                            lDghtMesV0 = lDght1ofLambda;   // dghter1 = Pi-
+                    } 
+                    // V0 - Case 2
+                    else if ( lDght0ofLambda->PdgCode() == lPdgCodeDghtMesV0 && lDght1ofLambda->PdgCode() == lPdgCodeDghtBarV0 ) { 
+                            lDghtMesV0 = lDght0ofLambda;   // dghter0 = Pi-
+                            lDghtBarV0 = lDght1ofLambda;   // dghter1 = proton
+                    } 
+                    // V0 otherwise - Case 3
+                    else continue;
+
+                    // - Check the emission of particle stays within the acceptance of the detector
+                    if (fApplyAccCut) {
+                         if( lDghtBarV0->Theta() < TMath::Pi()/4.0  ||  lDghtBarV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
+                         if( lDghtMesV0->Theta() < TMath::Pi()/4.0  ||  lDghtMesV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
+                         if( lDghtBarV0->Pt() < 0.250 ) continue;
+                         if( lDghtMesV0->Pt() < 0.150 ) continue;
+                    }
+
+                    lambdaTheta    = lLambda->Theta();
+                    bacTheta       = lBach->Theta();
+                    dghtBarV0Theta = lDghtBarV0->Theta();
+                    dghtMesV0Theta = lDghtMesV0->Theta();
+                    bacPt          = lBach->Pt();
+                    dghtBarV0Pt    = lDghtBarV0->Pt();
+                    dghtMesV0Pt    = lDghtMesV0->Pt();
+               }
+
+               //---------------------------------------
+               // - Filling histos for findable cascades
+               // - Fill theta histos 
+               lHistThetaLambda->Fill( lRadToDeg * lambdaTheta );
+               lHistThetaBach->Fill( lRadToDeg * bacTheta );
+               lHistThetaBarDghter->Fill( lRadToDeg * dghtBarV0Theta );
+               lHistThetaMesDghter->Fill( lRadToDeg * dghtMesV0Theta );
+               // - Fill pt histos
+               lHistPtBach             ->Fill( bacPt );
+               lHistPtBarDghter        ->Fill( dghtBarV0Pt );
+               lHistPtMesDghter        ->Fill( dghtMesV0Pt );
+               l2dHistGenPtVsGenYFdbl  ->Fill( partPt, lRapXiMC );
+
+               ncascperev++;                   
+                            
+         }// This is the end of the loop on primaries
+  
+         if (iCascType == 1) {
+              fHistnXiMinusPerEv->Fill(ncascperev);
+              fHistnXiMinusPerEvTot->Fill(ncascperevtot);
+         }
+         if (iCascType == 2) {
+              fHistnXiPlusPerEv->Fill(ncascperev);
+              fHistnXiPlusPerEvTot->Fill(ncascperevtot);
+         }
+         if (iCascType == 3) {
+              fHistnOmegaMinusPerEv->Fill(ncascperev);
+              fHistnOmegaMinusPerEvTot->Fill(ncascperevtot);
+         }
+         if (iCascType == 4) {
+              fHistnOmegaPlusPerEv->Fill(ncascperev);
+              fHistnOmegaPlusPerEvTot->Fill(ncascperevtot);
+         }
+
+         // - Re-initialisation of the local THF pointers
+         lHistEtaGenCasc         = 0x0;
+         lHistThetaGenCasc       = 0x0;
+         l2dHistGenPtVsGenYFdbl  = 0x0;
+         lHistThetaLambda        = 0x0;
+         lHistThetaBach          = 0x0;
+         lHistThetaBarDghter     = 0x0;
+         lHistThetaMesDghter     = 0x0;
+         lHistPtBach             = 0x0;
+         lHistPtBarDghter        = 0x0;
+         lHistPtMesDghter        = 0x0;        
+
+   } // end of loop over the different types of cascades (Xi-+, Omega-+)
+       
+   //----------------------------------------- 
+   // - Loop over the reconstructed candidates
+   //-----------------------------------------
+   Int_t nAssoXiMinus     = 0;
+   Int_t nAssoXiPlus      = 0;
+   Int_t nAssoOmegaMinus  = 0;
+   Int_t nAssoOmegaPlus   = 0;
+   Int_t lPosTPCClusters  = 0;
+   Int_t lNegTPCClusters  = 0;
+   Int_t lBachTPCClusters = 0;
+   Double_t lDcaXiDaughters            = -1. ;
+   Double_t lDcaBachToPrimVertexXi     = -1. ;
+   Double_t lXiCosineOfPointingAngle   = -1. ;
+   Double_t lPosXi[3]                  = { -1000.0, -1000.0, -1000.0 };
+   Double_t lXiRadius                  = -1000. ;
+   Double_t lInvMassLambdaAsCascDghter = 0.;
+   Double_t lDcaV0DaughtersXi          = -1.;
+   Double_t lV0CosineOfPointingAngleXi = -1.;
+   Double_t lV0CosineOfPointingAngle   = -1.;
+   Double_t lPosV0Xi[3]                = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
+   Double_t lV0RadiusXi                = -1000.;
+   Double_t lDcaV0ToPrimVertexXi       = -1.;
+   Double_t lDcaPosToPrimVertexXi      = -1.;
+   Double_t lDcaNegToPrimVertexXi      = -1.;
+   Double_t lChargeXi                  = -1.;
+   Double_t lV0mom                     = -1000.;
+   Double_t lmcPt                      = -1.;         
+   Double_t lmcRapCasc                 = -1.; 
+   Double_t lmcEta                     = -1000.;     
+   Double_t lmcTransvRadius            = -1000.; 
+   Double_t lrecoPt                    = -100.;     
+   Double_t lrecoTransvRadius          = -1000.; 
+   Double_t lDeltaPhiMcReco            = -1.;
+   Double_t lBachTransvMom             = 0.;
+   Double_t lpTrackTransvMom           = 0.;
+   Double_t lnTrackTransvMom           = 0.;
+   Double_t lmcPtPosV0Dghter           = -100.;
+   Double_t lmcPtNegV0Dghter           = -100.;
+   Double_t lrecoP                     = -100.;
+   Double_t lmcPtBach                  = -100.;
+   Double_t cascadeMass                = 0.;
+
+   // - Get the number of cascades
+   Int_t ncascades = 0;
+   if      ( fAnalysisType == "ESD" ) { ncascades = lESDevent->GetNumberOfCascades(); }
+   else if ( fAnalysisType == "AOD" ) { ncascades = lAODevent->GetNumberOfCascades(); }
+
+   //-------------------------------
+   // - Begining of the Cascade Loop
+   for (Int_t iXi = 0; iXi < ncascades; iXi++) {
+
+        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;
+
+        // - Combined PID
+        // Reasonable guess for the priors for the cascade track sample (e-, mu, pi, K, p)
+        Double_t lPriorsGuessXi[14]    = {0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+        Double_t lPriorsGuessOmega[14] = {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+        Double_t ppionBach = 0.0, pkaonBach = 0.0;
+        Bool_t   lIsBachelorMCPiMinus  = kFALSE;
+        Bool_t   lIsBachelorMCPiPlus   = kFALSE;
+        Bool_t   lIsBachelorMCKMinus   = kFALSE;
+        Bool_t   lIsBachelorMCKPlus    = kFALSE;
+        Double_t lInvMassXiMinus    = 0.;
+        Double_t lInvMassXiPlus     = 0.;
+        Double_t lInvMassOmegaMinus = 0.;
+        Double_t lInvMassOmegaPlus  = 0.;
+        Bool_t lAssoXiMinus    = kFALSE;
+        Bool_t lAssoXiPlus     = kFALSE;
+        Bool_t lAssoOmegaMinus = kFALSE;
+        Bool_t lAssoOmegaPlus  = kFALSE;
+       
+        Float_t  etaBach = 0.;
+        Float_t  etaPos  = 0.;
+        Float_t  etaNeg  = 0.;
+
+        if ( fAnalysisType == "ESD" ) {                
+
+             // - Load the cascade
+             AliESDcascade *xiESD = lESDevent->GetCascade(iXi);
+            if (!xiESD) continue;
+       
+            // - Connection to daughter tracks of the current cascade          
+             UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xiESD->GetPindex() );
+             UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xiESD->GetNindex() );
+             UInt_t lBachIdx  = (UInt_t) TMath::Abs( xiESD->GetBindex() );
+                   
+             // - 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 daughter tracks
+            AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );
+            AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );
+            AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx  );
+            if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
+                Printf("ERROR: Could not retrieve one of the 3 daughter tracks of the cascade ...");
+                continue;
+            }
+       
+             // Get the number of TPC clusters
+             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; }
+             }
+
+             etaPos  = pTrackXi->Eta();
+             etaNeg  = nTrackXi->Eta();
+             etaBach = bachTrackXi->Eta();
+       
+            // - Info over reconstructed cascades
+            Double_t lV0quality = 0.;
+            if( bachTrackXi->Charge() < 0 ) {
+                  //Calculate the effective mass of the Xi- candidate: Xi- hyp. (pdg code 3312
+                 lV0quality = 0.;
+                 xiESD->ChangeMassHypothesis(lV0quality , 3312);       
+                 lInvMassXiMinus = xiESD->GetEffMassXi();
+                  //Calculate the effective mass of the Xi- candidate: Omega- hyp. (pdg code 3334)
+                 lV0quality = 0.;
+                 xiESD->ChangeMassHypothesis(lV0quality , 3334);       
+                 lInvMassOmegaMinus = xiESD->GetEffMassXi();
+                  //Back to "default" hyp. (Xi-)       
+                 lV0quality = 0.;
+                 xiESD->ChangeMassHypothesis(lV0quality , 3312);
+            }
+            if( bachTrackXi->Charge() >  0 ){
+                  //Calculate the effective mass of the Xi- candidate: Xi+ hyp. (pdg code -3312)
+                 lV0quality = 0.;
+                 xiESD->ChangeMassHypothesis(lV0quality , -3312);      
+                 lInvMassXiPlus = xiESD->GetEffMassXi();
+                  //Calculate the effective mass of the Xi- candidate: Omega+ hyp. (pdg code -3334)
+                  lV0quality = 0.;
+                  xiESD->ChangeMassHypothesis(lV0quality , -3334);     
+                  lInvMassOmegaPlus = xiESD->GetEffMassXi();
+                 //Back to "default" hyp. (Xi-)
+                  lV0quality = 0.;
+                  xiESD->ChangeMassHypothesis(lV0quality , -3312);
+            }
+             lDcaXiDaughters          = xiESD->GetDcaXiDaughters();
+             lDcaBachToPrimVertexXi   = TMath::Abs( bachTrackXi->GetD(lBestPrimaryVtxPos[0],lBestPrimaryVtxPos[1],lMagneticField) );
+             lXiCosineOfPointingAngle = xiESD->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );
+             xiESD->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] );  
+             lInvMassLambdaAsCascDghter = xiESD->GetEffMass();
+             lDcaV0DaughtersXi          = xiESD->GetDcaV0Daughters();
+             lV0CosineOfPointingAngleXi = xiESD->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
+             lV0CosineOfPointingAngle   = xiESD->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2]); 
+             xiESD->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] );
+             lDcaV0ToPrimVertexXi       = xiESD->GetD( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );
+             lDcaPosToPrimVertexXi      = TMath::Abs( pTrackXi->GetD(lBestPrimaryVtxPos[0],lBestPrimaryVtxPos[1],lMagneticField) );
+             lDcaNegToPrimVertexXi      = TMath::Abs( nTrackXi->GetD(lBestPrimaryVtxPos[0],lBestPrimaryVtxPos[1],lMagneticField) );
+            lChargeXi = xiESD->Charge();
+       
+             //------------------
+            // - PID Information
+
+            // - Combined VO-positive-daughter PID
+            AliPID pPidXi;    pPidXi.SetPriors( lPriorsGuessXi );
+            AliPID pPidOmega; pPidOmega.SetPriors( lPriorsGuessOmega );                
+            if( pTrackXi->IsOn(AliESDtrack::kESDpid) ){  
+                 Double_t r[10] = {0.}; pTrackXi->GetESDpid(r);
+                 pPidXi.SetProbabilities(r);
+                 pPidOmega.SetProbabilities(r);                
+                 // Check if the V0 positive track is a proton (case for Xi-)
+                 Double_t pproton = pPidXi.GetProbability(AliPID::kProton);
+                 if (pproton > pPidXi.GetProbability(AliPID::kElectron) &&
+                     pproton > pPidXi.GetProbability(AliPID::kMuon)     &&
+                     pproton > pPidXi.GetProbability(AliPID::kPion)     &&
+                     pproton > pPidXi.GetProbability(AliPID::kKaon)        ) lIsPosInXiProton = kTRUE;
+                 // Check if the V0 positive track is a pi+ (case for Xi+)
+                 Double_t ppion = pPidXi.GetProbability(AliPID::kPion);
+                 if (ppion > pPidXi.GetProbability(AliPID::kElectron) &&
+                     ppion > pPidXi.GetProbability(AliPID::kMuon)     &&
+                     ppion > pPidXi.GetProbability(AliPID::kKaon)     &&
+                     ppion > pPidXi.GetProbability(AliPID::kProton)      ) lIsPosInXiPion = kTRUE;
+                 // Check if the V0 positive track is a proton (case for Omega-)
+                 pproton = 0.;
+                 pproton = pPidOmega.GetProbability(AliPID::kProton);
+                 if (pproton > pPidOmega.GetProbability(AliPID::kElectron) &&
+                     pproton > pPidOmega.GetProbability(AliPID::kMuon)     &&
+                     pproton > pPidOmega.GetProbability(AliPID::kPion)     &&
+                     pproton > pPidOmega.GetProbability(AliPID::kKaon)       ) lIsPosInOmegaProton = kTRUE;
+                 // Check if the V0 positive track is a pi+ (case for Omega+)
+                 ppion = 0.;
+                 ppion = pPidOmega.GetProbability(AliPID::kPion);
+                 if (ppion > pPidOmega.GetProbability(AliPID::kElectron) &&
+                     ppion > pPidOmega.GetProbability(AliPID::kMuon)     &&
+                     ppion > pPidOmega.GetProbability(AliPID::kKaon)     &&
+                     ppion > pPidOmega.GetProbability(AliPID::kProton)      ) lIsPosInOmegaPion = kTRUE;
+            }          
+            // - Combined VO-negative-daughter PID
+            AliPID nPidXi;    nPidXi.SetPriors( lPriorsGuessXi );
+            AliPID nPidOmega; nPidOmega.SetPriors( lPriorsGuessOmega );                
+            if( nTrackXi->IsOn(AliESDtrack::kESDpid) ) {  
+                 Double_t r[10] = {0.}; nTrackXi->GetESDpid(r);
+                 nPidXi.SetProbabilities(r);
+                 nPidOmega.SetProbabilities(r);
+                 // Check if the V0 negative track is a pi- (case for Xi-)
+                 Double_t ppion = nPidXi.GetProbability(AliPID::kPion);
+                 if (ppion > nPidXi.GetProbability(AliPID::kElectron) &&
+                     ppion > nPidXi.GetProbability(AliPID::kMuon)     &&
+                     ppion > nPidXi.GetProbability(AliPID::kKaon)     &&
+                     ppion > nPidXi.GetProbability(AliPID::kProton)      ) lIsNegInXiPion = kTRUE;
+                 // Check if the V0 negative track is an anti-proton (case for Xi+)
+                 Double_t pproton = nPidXi.GetProbability(AliPID::kProton);
+                 if (pproton > nPidXi.GetProbability(AliPID::kElectron) &&
+                     pproton > nPidXi.GetProbability(AliPID::kMuon)     &&
+                     pproton > nPidXi.GetProbability(AliPID::kPion)     &&
+                     pproton > nPidXi.GetProbability(AliPID::kKaon)       ) lIsNegInXiProton = kTRUE;
+                 // Check if the V0 negative track is a pi- (case for Omega-)
+                 ppion = 0.;
+                 ppion = nPidOmega.GetProbability(AliPID::kPion);
+                 if (ppion > nPidOmega.GetProbability(AliPID::kElectron) &&
+                     ppion > nPidOmega.GetProbability(AliPID::kMuon)     &&
+                     ppion > nPidOmega.GetProbability(AliPID::kKaon)     &&
+                     ppion > nPidOmega.GetProbability(AliPID::kProton)     ) lIsNegInOmegaPion = kTRUE;
+                 // Check if the V0 negative track is an anti-proton (case for Omega+)
+                 pproton = 0.;
+                 pproton = nPidOmega.GetProbability(AliPID::kProton);
+                 if (pproton > nPidOmega.GetProbability(AliPID::kElectron) &&
+                     pproton > nPidOmega.GetProbability(AliPID::kMuon)     &&
+                     pproton > nPidOmega.GetProbability(AliPID::kPion)     &&
+                     pproton > nPidOmega.GetProbability(AliPID::kKaon)       ) lIsNegInOmegaProton = kTRUE;
+            }
+            // - Combined bachelor PID
+            AliPID bachPidXi;    bachPidXi.SetPriors( lPriorsGuessXi );
+            AliPID bachPidOmega; bachPidOmega.SetPriors( lPriorsGuessOmega );
+            if ( bachTrackXi->IsOn(AliESDtrack::kESDpid) ) {  
+                  Double_t r[10] = {0.}; bachTrackXi->GetESDpid(r);
+                  bachPidXi.SetProbabilities(r);
+                  bachPidOmega.SetProbabilities(r);
+                  // Check if the bachelor track is a pion
+                  ppionBach = bachPidXi.GetProbability(AliPID::kPion);
+                  if (ppionBach > bachPidXi.GetProbability(AliPID::kElectron) &&
+                      ppionBach > bachPidXi.GetProbability(AliPID::kMuon)     &&
+                      ppionBach > bachPidXi.GetProbability(AliPID::kKaon)     &&
+                      ppionBach > bachPidXi.GetProbability(AliPID::kProton)     ) lIsBachelorPion = kTRUE;
+                  // Check if the bachelor track is a kaon
+                  pkaonBach = bachPidOmega.GetProbability(AliPID::kKaon);
+                  if (pkaonBach > bachPidOmega.GetProbability(AliPID::kElectron) &&
+                      pkaonBach > bachPidOmega.GetProbability(AliPID::kMuon)     &&
+                      pkaonBach > bachPidOmega.GetProbability(AliPID::kPion)     &&
+                      pkaonBach > bachPidOmega.GetProbability(AliPID::kProton)     ) lIsBachelorKaon = kTRUE;  
+            }
+            // - 4-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(); // Do not use GetTPCInnerWall
+             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;
+             }*/
+            // - PID proba Vs Pt(Bach)
+            Int_t      lblBachForPID = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
+            TParticle* mcBachForPID  = lMCstack->Particle( lblBachForPID );
+            lmcPtBach = mcBachForPID->Pt();
+            // - MC perfect PID
+            if( mcBachForPID->GetPdgCode() == -211) lIsBachelorMCPiMinus = kTRUE;
+            if( mcBachForPID->GetPdgCode() ==  211) lIsBachelorMCPiPlus  = kTRUE;
+            if( mcBachForPID->GetPdgCode() == -321) lIsBachelorMCKMinus  = kTRUE;
+            if( mcBachForPID->GetPdgCode() ==  321) lIsBachelorMCKPlus   = kTRUE;
+       
+       
+            //---------------------------------------------------------------
+            // -  MC association (care : lots of "continue;" below this line)
+            if(fDebug > 5) cout<< "MC EventNumber: "<<lMCevent->Header()->GetEvent()<<" / MC event Number in Run : "<<lMCevent->Header()->GetEventNrInRun()<<endl;
+            // - Level of the V0 daughters
+            Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() );  
+            Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() );                 
+            TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
+            TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
+            // - Level of the Xi daughters     
+            Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ; 
+            Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
+             if( lblMotherPosV0Dghter != lblMotherNegV0Dghter) continue; // same mother
+             if( lblMotherPosV0Dghter < 0 ) continue;                    // this particle is primary, no mother   
+             if( lblMotherNegV0Dghter < 0 ) continue;                    // this particle is primary, no mother
+                                                                                // mothers = Lambda candidate ... a priori
+            TParticle* mcMotherPosV0Dghter = lMCstack->Particle( lblMotherPosV0Dghter );
+            TParticle* mcMotherNegV0Dghter = lMCstack->Particle( lblMotherNegV0Dghter );  // MN: redundant?? already checked that labels are the same...-->same part from stack
+             Int_t lblBach = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
+            TParticle* mcBach = lMCstack->Particle( lblBach ); 
+            // - Level of Xi candidate
+            Int_t lblGdMotherPosV0Dghter = mcMotherPosV0Dghter->GetFirstMother() ;
+            Int_t lblGdMotherNegV0Dghter = mcMotherNegV0Dghter->GetFirstMother() ;
+             if( lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter ) continue;
+             if( lblGdMotherPosV0Dghter < 0 ) continue;                  // primary lambda ...   
+             if( lblGdMotherNegV0Dghter < 0 ) continue;                  // primary lambda ...                                 
+                                                                             // Gd mothers = Xi candidate ... a priori
+             TParticle* mcGdMotherPosV0Dghter = lMCstack->Particle( lblGdMotherPosV0Dghter );
+             TParticle* mcGdMotherNegV0Dghter = lMCstack->Particle( lblGdMotherNegV0Dghter );                          
+            Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetFirstMother()  );  
+             if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters
+            TParticle* mcMotherBach = lMCstack->Particle( lblMotherBach );
+            
+             // - Check if cascade is primary
+             if (!(lMCstack->IsPhysicalPrimary(lblMotherBach))) continue;  
+
+            // - Manage boolean for association
+            if     ( mcMotherBach          ->GetPdgCode() == 3312 &&
+                     mcGdMotherPosV0Dghter ->GetPdgCode() == 3312 &&
+                     mcGdMotherNegV0Dghter ->GetPdgCode() == 3312   ) {lAssoXiMinus = kTRUE;
+                                                                        cascadeMass = 1.321;
+                                                                         nAssoXiMinus++; }
+            else if( mcMotherBach           ->GetPdgCode() == -3312 &&
+                     mcGdMotherPosV0Dghter  ->GetPdgCode() == -3312 &&
+                     mcGdMotherNegV0Dghter  ->GetPdgCode() == -3312   ) {lAssoXiPlus = kTRUE;
+                                                                          cascadeMass = 1.321;
+                                                                          nAssoXiPlus++; }
+            else if( mcMotherBach           ->GetPdgCode() == 3334 &&
+                     mcGdMotherPosV0Dghter  ->GetPdgCode() == 3334 &&
+                     mcGdMotherNegV0Dghter  ->GetPdgCode() == 3334    ) {lAssoOmegaMinus = kTRUE;
+                                                                          cascadeMass = 1.672;
+                                                                          nAssoOmegaMinus++; }
+            else if( mcMotherBach           ->GetPdgCode() == -3334 &&
+                     mcGdMotherPosV0Dghter  ->GetPdgCode() == -3334 &&
+                     mcGdMotherNegV0Dghter  ->GetPdgCode() == -3334   ) {lAssoOmegaPlus = kTRUE;
+                                                                             cascadeMass = 1.672;
+                                                                             nAssoOmegaPlus++; }
+            // If a proper association  exists ...     
+            if(fDebug > 4){
+                     cout<<"XiMinus    = "<<lAssoXiMinus   <<endl;
+                     cout<<"XiPlus     = "<<lAssoXiPlus    <<endl;
+                     cout<<"OmegaMinus = "<<lAssoOmegaMinus<<endl;
+                     cout<<"OmegaPlus  = "<<lAssoOmegaPlus <<endl 
+                         <<"----"            <<endl;   
+            }
+            if(fDebug > 5){
+                        cout<<endl;
+                     cout<<"- V0 daughters - "<<endl;
+                     cout<<"     + V0 Pos. / Label : "<<lblPosV0Dghter<<" - Pdg Code : "<<mcPosV0Dghter->GetTitle()<<endl;
+                     cout<<"     - V0 Neg. / Label : "<<lblNegV0Dghter<<" - Pdg Code : "<<mcNegV0Dghter->GetTitle()<<endl;
+
+                     cout<<"- Xi daughters - "<<endl;
+                     cout<<"     + V0 Pos. mother / Label : "<<lblMotherPosV0Dghter<<" - Pdg Code : "<<mcMotherPosV0Dghter->GetTitle()<<endl;
+                     cout<<"     - V0 Neg. mother / Label : "<<lblMotherNegV0Dghter<<" - Pdg Code : "<<mcMotherNegV0Dghter->GetTitle()<<endl;
+               
+                     cout<<"     --  Bach. / Label :"<<lblBach<<" -  Pdg Code : "<<mcBach->GetTitle()<<endl;
+               
+                     cout<<"- Xi candidate -"<<endl;
+                     cout<<"    +  V0 Pos. Gd Mother / Label : "<<lblGdMotherPosV0Dghter<<" - Pdg Code : "<< mcGdMotherPosV0Dghter->GetTitle()<<endl;
+                     cout<<"    -  V0 Neg. Gd Mother / Label : "<<lblGdMotherNegV0Dghter<<" - Pdg Code : "<< mcGdMotherNegV0Dghter->GetTitle()<<endl;
+               
+                     cout<<"    --  Mother Bach. / Label : "<<lblMotherBach<<" - Pdg Code    : "<<mcMotherBach->GetTitle()<<endl;
+                     cout<<endl;
+            }
+       
+             lmcPt             = mcMotherBach->Pt();
+             lmcRapCasc        = 0.5*TMath::Log( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) );
+             lmcEta            = mcMotherBach->Eta();
+             lmcTransvRadius   = mcBach->R(); // to get the decay point of Xi, = the production vertex of Bachelor ...
+             TVector3 lmcTVect3Mom( mcMotherBach->Px(), mcMotherBach->Py(), mcMotherBach->Pz() );
+             lrecoPt           = xiESD->Pt();
+             lrecoTransvRadius = TMath::Sqrt( xiESD->Xv() * xiESD->Xv() + xiESD->Yv() * xiESD->Yv() );
+             TVector3 lrecoTVect3Mom( xiESD->Px(), xiESD->Py(), xiESD->Pz() );
+             lDeltaPhiMcReco   = lmcTVect3Mom.DeltaPhi( lrecoTVect3Mom ) * 180.0/TMath::Pi();
+             lmcPtPosV0Dghter  = mcPosV0Dghter->Pt() ;
+             lmcPtNegV0Dghter  = mcNegV0Dghter->Pt();
+             lrecoP            = xiESD->P();
+             Double_t nV0mom[3] = {0. ,0. ,0. };
+             Double_t pV0mom[3] = {0. ,0. ,0. };
+             xiESD->GetNPxPyPz(nV0mom[0],nV0mom[1],nV0mom[2]);    
+             xiESD->GetPPxPyPz(pV0mom[0],pV0mom[1],pV0mom[2]);
+             lV0mom = TMath::Sqrt(TMath::Power(nV0mom[0]+pV0mom[0],2)+TMath::Power(nV0mom[1]+pV0mom[1],2)+TMath::Power(nV0mom[2]+pV0mom[2],2));
+             Double_t lBachMomX = 0.; Double_t lBachMomY = 0.; Double_t lBachMomZ = 0.;
+             xiESD->GetBPxPyPz(  lBachMomX,  lBachMomY,  lBachMomZ );
+             lBachTransvMom   = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY );
+             lnTrackTransvMom = TMath::Sqrt( nV0mom[0]*nV0mom[0] + nV0mom[1]*nV0mom[1] );
+             lpTrackTransvMom = TMath::Sqrt( pV0mom[0]*pV0mom[0] + pV0mom[1]*pV0mom[1] );
+            
+        } else if ( fAnalysisType == "AOD" ) {
+
+             // - Load the cascade
+             const AliAODcascade *xiAOD = lAODevent->GetCascade(iXi);
+             if (!xiAOD) continue;
+
+             // - Connection to daughter tracks of the current cascade
+             AliAODTrack *pTrackXi    = dynamic_cast<AliAODTrack*>( xiAOD->GetDaughter(0) );
+             AliAODTrack *nTrackXi    = dynamic_cast<AliAODTrack*>( xiAOD->GetDaughter(1) );
+             AliAODTrack *bachTrackXi = dynamic_cast<AliAODTrack*>( xiAOD->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() );
+
+             // - 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;
+             }
+             lPosTPCClusters   = pTrackXi->GetTPCNcls();
+             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; }
+             }
+
+             etaPos  = pTrackXi->Eta();
+             etaNeg  = nTrackXi->Eta();
+             etaBach = bachTrackXi->Eta();
+
+             // - Info over reconstructed cascades
+             if( bachTrackXi->Charge() < 0 ) {
+                  lInvMassXiMinus = xiAOD->MassXi();
+                  lInvMassOmegaMinus = xiAOD->MassOmega();
+             }
+             if( bachTrackXi->Charge() >  0 ){
+                  lInvMassXiPlus = xiAOD->MassXi();
+                  lInvMassOmegaPlus = xiAOD->MassOmega();
+             }
+             lDcaXiDaughters            = xiAOD->DcaXiDaughters();
+             lDcaBachToPrimVertexXi     = xiAOD->DcaBachToPrimVertex();
+             lXiCosineOfPointingAngle   = xiAOD->CosPointingAngleXi( lBestPrimaryVtxPos[0], lBestPrimaryVtxPos[1], lBestPrimaryVtxPos[2] );
+             lPosXi[0]                  = xiAOD->DecayVertexXiX();
+             lPosXi[1]                  = xiAOD->DecayVertexXiY();
+             lPosXi[2]                  = xiAOD->DecayVertexXiZ();
+             lInvMassLambdaAsCascDghter = xiAOD->MassLambda();
+             lDcaV0DaughtersXi          = xiAOD->DcaV0Daughters();
+             lV0CosineOfPointingAngleXi = xiAOD->CosPointingAngle( lPosXi );
+             lV0CosineOfPointingAngle   = xiAOD->CosPointingAngle( lBestPrimaryVtxPos );
+             lPosV0Xi[0]                = xiAOD->DecayVertexV0X();
+             lPosV0Xi[1]                = xiAOD->DecayVertexV0Y();
+             lPosV0Xi[2]                = xiAOD->DecayVertexV0Z();
+             lDcaV0ToPrimVertexXi       = xiAOD->DcaV0ToPrimVertex();
+             lDcaPosToPrimVertexXi      = xiAOD->DcaPosToPrimVertex();
+             lDcaNegToPrimVertexXi      = xiAOD->DcaNegToPrimVertex();
+             lChargeXi                  = xiAOD->ChargeXi();
+
+             //------------------
+             // - PID Information
+             // Combined VO-positive-daughter PID
+             // Combined bachelor PID
+             /* 
+             AliPID bachPidXi;       bachPidXi.SetPriors(    lPriorsGuessXi    );
+             AliPID bachPidOmega;    bachPidOmega.SetPriors( lPriorsGuessOmega );
+
+             if ( bachTrackXi->IsOn(AliESDtrack::kESDpid) ) {  // Combined PID exists
+                  Double_t r[10] = {0.}; bachTrackXi->GetESDpid(r);
+                  bachPidXi.SetProbabilities(r);
+                  bachPidOmega.SetProbabilities(r);
+                  // Check if the bachelor track is a pion
+                  ppionBach = bachPidXi.GetProbability(AliPID::kPion);
+                  if (ppionBach > bachPidXi.GetProbability(AliPID::kElectron) &&
+                      ppionBach > bachPidXi.GetProbability(AliPID::kMuon)     &&
+                      ppionBach > bachPidXi.GetProbability(AliPID::kKaon)     &&
+                      ppionBach > bachPidXi.GetProbability(AliPID::kProton)   )     lIsBachelorPion = kTRUE;
+                  // Check if the bachelor track is a kaon
+                  pkaonBach = bachPidOmega.GetProbability(AliPID::kKaon);
+                  if (pkaonBach > bachPidOmega.GetProbability(AliPID::kElectron) &&
+                      pkaonBach > bachPidOmega.GetProbability(AliPID::kMuon)     &&
+                      pkaonBach > bachPidOmega.GetProbability(AliPID::kPion)     &&
+                      pkaonBach > bachPidOmega.GetProbability(AliPID::kProton)   )  lIsBachelorKaon = kTRUE;
+             }// end if bachelor track with existing combined PID
+             */
+
+             // - TPC PID: 4-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(); // Do not use GetTPCInnerWall
+             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;
+             }*/
+
+             // - PID proba Vs Pt(Bach)
+             Int_t lblBachForPID = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
+             AliAODMCParticle* mcBachForPID   = (AliAODMCParticle*) arrayMC->At( lblBachForPID );
+             lmcPtBach = mcBachForPID->Pt();
+
+             // - MC perfect PID
+             if( mcBachForPID->PdgCode() == -211) lIsBachelorMCPiMinus = kTRUE;
+             if( mcBachForPID->PdgCode() ==  211) lIsBachelorMCPiPlus  = kTRUE;
+             if( mcBachForPID->PdgCode() == -321) lIsBachelorMCKMinus  = kTRUE;
+             if( mcBachForPID->PdgCode() ==  321) lIsBachelorMCKPlus   = kTRUE;
+
+             //--------------------------------------------------------------
+             // - MC association (care : lots of "continue;" below this line)
+             if(fDebug > 5) cout<<"MC EventNumber : "<<lMCevent->Header()->GetEvent()<<" / MC event Number in Run : "<<lMCevent->Header()->GetEventNrInRun()<<endl;
+             // - Level of the V0 daughters
+             Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() );
+             Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() );
+             AliAODMCParticle* mcPosV0Dghter = (AliAODMCParticle*) arrayMC->At( lblPosV0Dghter );
+             AliAODMCParticle* mcNegV0Dghter = (AliAODMCParticle*) arrayMC->At( lblNegV0Dghter );
+             // - Level of the Xi daughters
+             Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetMother();   
+             Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetMother();
+             if( lblMotherPosV0Dghter != lblMotherNegV0Dghter) continue; // same mother
+             if( lblMotherPosV0Dghter < 0 ) continue;                    // this particle is primary, no mother
+             if( lblMotherNegV0Dghter < 0 ) continue;                    // this particle is primary, no mother
+                                                                         // mothers = Lambda candidate ... a priori
+             AliAODMCParticle* mcMotherPosV0Dghter = (AliAODMCParticle*) arrayMC->At( lblMotherPosV0Dghter );
+             AliAODMCParticle* mcMotherNegV0Dghter = (AliAODMCParticle*) arrayMC->At( lblMotherNegV0Dghter );  
+             Int_t      lblBach  = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
+             AliAODMCParticle* mcBach   = (AliAODMCParticle*) arrayMC->At( lblBach );
+             // - Level of Xi candidate
+             Int_t lblGdMotherPosV0Dghter =   mcMotherPosV0Dghter->GetMother() ;
+             Int_t lblGdMotherNegV0Dghter =   mcMotherNegV0Dghter->GetMother() ;
+             if( lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter ) continue;
+             if( lblGdMotherPosV0Dghter < 0 ) continue;                    // primary lambda ...
+             if( lblGdMotherNegV0Dghter < 0 ) continue;                    // primary lambda ...
+                                                                           // Gd mothers = Xi candidate ... a priori
+             AliAODMCParticle* mcGdMotherPosV0Dghter = (AliAODMCParticle*) arrayMC->At( lblGdMotherPosV0Dghter );
+             AliAODMCParticle* mcGdMotherNegV0Dghter = (AliAODMCParticle*) arrayMC->At( lblGdMotherNegV0Dghter );
+             Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetMother() );
+             if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters
+             AliAODMCParticle* mcMotherBach = (AliAODMCParticle*) arrayMC->At( lblMotherBach );
+
+             // - Check if cascade is primary
+             if (!(mcMotherBach->IsPhysicalPrimary())) continue;
+
+             // - Manage boolean for association
+             if     ( mcMotherBach          ->GetPdgCode() == 3312 &&
+                      mcGdMotherPosV0Dghter ->GetPdgCode() == 3312 &&
+                      mcGdMotherNegV0Dghter ->GetPdgCode() == 3312   ) {lAssoXiMinus = kTRUE;
+                                                                        cascadeMass = 1.321;
+                                                                        nAssoXiMinus++; }
+             else if( mcMotherBach           ->GetPdgCode() == -3312 &&
+                      mcGdMotherPosV0Dghter  ->GetPdgCode() == -3312 &&
+                      mcGdMotherNegV0Dghter  ->GetPdgCode() == -3312   ) {lAssoXiPlus = kTRUE;
+                                                                          cascadeMass = 1.321;
+                                                                          nAssoXiPlus++; }
+             else if( mcMotherBach           ->GetPdgCode() == 3334 &&
+                      mcGdMotherPosV0Dghter  ->GetPdgCode() == 3334 &&
+                      mcGdMotherNegV0Dghter  ->GetPdgCode() == 3334   ) {lAssoOmegaMinus = kTRUE;
+                                                                         cascadeMass = 1.672;
+                                                                         nAssoOmegaMinus++; }
+             else if( mcMotherBach           ->GetPdgCode() == -3334 &&
+                      mcGdMotherPosV0Dghter  ->GetPdgCode() == -3334 &&
+                      mcGdMotherNegV0Dghter  ->GetPdgCode() == -3334   ) {lAssoOmegaPlus = kTRUE;
+                                                                          cascadeMass = 1.672;
+                                                                          nAssoOmegaPlus++; }
+
+             lmcPt              = mcMotherBach->Pt();
+             lmcRapCasc         = 0.5*TMath::Log( (mcMotherBach->E() + mcMotherBach->Pz()) / (mcMotherBach->E() - mcMotherBach->Pz() +1.e-13) );
+             lmcEta             = mcMotherBach->Eta();
+             Float_t decayCascX = mcBach->Xv();
+             Float_t decayCascY = mcBach->Yv();
+             lmcTransvRadius    = TMath::Sqrt(decayCascX*decayCascX+decayCascY*decayCascY); // decay point of Xi, = the production vertex of Bachelor ...
+             TVector3 lmcTVect3Mom( mcMotherBach->Px(), mcMotherBach->Py(), mcMotherBach->Pz() );
+             Double_t xiMomX    = xiAOD->MomXiX();
+             Double_t xiMomY    = xiAOD->MomXiY();
+             Double_t xiMomZ    = xiAOD->MomXiZ();
+             lrecoPt            = TMath::Sqrt( xiMomX*xiMomX   + xiMomY*xiMomY ); 
+             lrecoTransvRadius  = TMath::Sqrt( xiAOD->DecayVertexXiX() * xiAOD->DecayVertexXiX() + xiAOD->DecayVertexXiY() * xiAOD->DecayVertexXiY() );
+             TVector3 lrecoTVect3Mom( xiMomX, xiMomY, xiMomZ );
+             lDeltaPhiMcReco    = lmcTVect3Mom.DeltaPhi( lrecoTVect3Mom ) * 180.0/TMath::Pi();
+             lmcPtPosV0Dghter   = mcPosV0Dghter->Pt() ;
+             lmcPtNegV0Dghter   = mcNegV0Dghter->Pt();
+             lrecoP             = TMath::Sqrt( xiMomX*xiMomX   + xiMomY*xiMomY   + xiMomZ*xiMomZ );;
+             Double_t lV0momX   = xiAOD->MomV0X();
+             Double_t lV0momY   = xiAOD->MomV0Y();
+             Double_t lV0momZ   = xiAOD->MomV0Z();
+             lV0mom             = TMath::Sqrt(TMath::Power(lV0momX,2)+TMath::Power(lV0momY,2)+TMath::Power(lV0momZ,2));
+             Double_t lBachMomX = xiAOD->MomBachX();
+             Double_t lBachMomY = xiAOD->MomBachY();
+             lBachTransvMom  = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY );
+             Double_t lV0NMomX = xiAOD->MomNegX();
+             Double_t lV0NMomY = xiAOD->MomNegY();
+             Double_t lV0PMomX = xiAOD->MomPosX();
+             Double_t lV0PMomY = xiAOD->MomPosY();
+             lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );
+             lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );
+            
+        }
+
+        lXiRadius   = TMath::Sqrt( lPosXi[0]*lPosXi[0]  +  lPosXi[1]*lPosXi[1] );
+        lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0]  +  lPosV0Xi[1]*lPosV0Xi[1] ); 
+
+        // - 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;
+       
+        // - Extra-selection for cascade candidates
+        if (fkExtraSelections) {
+                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 (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
+        }
+
+        //-------------------------
+        // - Fill combined PID TH1s
+        if( lChargeXi < 0 && lIsBachelorPion )    fHistMassWithCombPIDXiMinus    ->Fill( lInvMassXiMinus    );
+        if( lChargeXi > 0 && lIsBachelorPion )    fHistMassWithCombPIDXiPlus     ->Fill( lInvMassXiPlus     );
+        if( lChargeXi < 0 && lIsBachelorKaon )    fHistMassWithCombPIDOmegaMinus ->Fill( lInvMassOmegaMinus );
+        if( lChargeXi > 0 && lIsBachelorKaon )    fHistMassWithCombPIDOmegaPlus  ->Fill( lInvMassOmegaPlus  );
+        if( lChargeXi < 0 )   fHistMassXiMinus    ->Fill( lInvMassXiMinus );
+        if( lChargeXi > 0 )   fHistMassXiPlus     ->Fill( lInvMassXiPlus );
+        if( lChargeXi < 0 )   fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus );
+        if( lChargeXi > 0 )   fHistMassOmegaPlus  ->Fill( lInvMassOmegaPlus );
+        if(lIsBachelorPion)   f2dHistPIDprobaPionVsMCPtBach->Fill( lmcPtBach, ppionBach );
+        if(lIsBachelorKaon)   f2dHistPIDprobaKaonVsMCPtBach->Fill( lmcPtBach, pkaonBach );
+        if( lChargeXi < 0 && lIsBachelorMCPiMinus )    fHistMassWithMcPIDXiMinus     ->Fill( lInvMassXiMinus );
+        if( lChargeXi > 0 && lIsBachelorMCPiPlus  )    fHistMassWithMcPIDXiPlus      ->Fill( lInvMassXiPlus );
+        if( lChargeXi < 0 && lIsBachelorMCKMinus  )    fHistMassWithMcPIDOmegaMinus  ->Fill( lInvMassOmegaMinus );
+        if( lChargeXi > 0 && lIsBachelorMCKPlus   )    fHistMassWithMcPIDOmegaPlus   ->Fill( lInvMassOmegaPlus );
+
+
+        // - No association, skip the rest of the code
+        if(!lAssoXiMinus && !lAssoXiPlus && !lAssoOmegaMinus && !lAssoOmegaPlus) continue; 
+
+        //--------------
+        // - Proper time         
+        // For cascade (reconstructed)   
+        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 (lrecoP!=0) lctau = lctau*cascadeMass/lrecoP;   
+        else lctau = -1.;
+        // 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 (lV0mom!=0) lctauV0 = distV0Xi*lambdaMass/lV0mom; 
+        // Distance
+        Float_t distTV0Xi = TMath::Sqrt(TMath::Power((lPosV0Xi[0]-lPosXi[0]),2)+TMath::Power((lPosV0Xi[1]-lPosXi[1]),2));
+       
+        //------------------------------------------------------------
+        // - Fill histos for the cascade candidates associated with MC
+        if( lChargeXi < 0 && lAssoXiMinus){    
+                fHistAsMCMassXiMinus         ->Fill( lInvMassXiMinus  );
+               if(lIsBachelorPion)     f2dHistAsMCandCombPIDGenPtVsGenYXiMinus->Fill( lmcPt, lmcRapCasc );
+               f2dHistAsMCGenPtVsGenYXiMinus ->Fill( lmcPt, lmcRapCasc);
+               fHistAsMCGenEtaXiMinus        ->Fill( lmcEta           );
+               f2dHistAsMCResPtXiMinus       ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );
+               f2dHistAsMCResRXiMinus        ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );
+                f2dHistAsMCResPhiXiMinus      ->Fill( lmcPt, lDeltaPhiMcReco );
+                f2dHistAsMCptProtonMCptXiMinus->Fill(lmcPt,lmcPtPosV0Dghter);
+                fHistV0CosineOfPointingAnglevsPtXi->Fill(lmcPt,lV0CosineOfPointingAngle);
+        }      
+        else if( lChargeXi > 0 && lAssoXiPlus){        
+               fHistAsMCMassXiPlus           ->Fill( lInvMassXiPlus   );
+               if(lIsBachelorPion)     f2dHistAsMCandCombPIDGenPtVsGenYXiPlus->Fill( lmcPt, lmcRapCasc );
+               f2dHistAsMCGenPtVsGenYXiPlus  ->Fill( lmcPt, lmcRapCasc);
+               fHistAsMCGenEtaXiPlus         ->Fill( lmcEta           );
+               f2dHistAsMCResPtXiPlus        ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );
+               f2dHistAsMCResRXiPlus         ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );
+                f2dHistAsMCResPhiXiPlus       ->Fill( lmcPt, lDeltaPhiMcReco );
+                f2dHistAsMCptAntiprotonMCptXiPlus->Fill(lmcPt,lmcPtNegV0Dghter);
+                fHistV0CosineOfPointingAnglevsPtXi->Fill(lmcPt,lV0CosineOfPointingAngle);
+        }
+        else if( lChargeXi < 0 && lAssoOmegaMinus){    
+               fHistAsMCMassOmegaMinus          ->Fill( lInvMassOmegaMinus );
+               if(lIsBachelorKaon)     f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus->Fill( lmcPt, lmcRapCasc );
+               f2dHistAsMCGenPtVsGenYOmegaMinus ->Fill( lmcPt, lmcRapCasc  );
+               fHistAsMCGenEtaOmegaMinus        ->Fill( lmcEta             );
+               f2dHistAsMCResPtOmegaMinus       ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );
+               f2dHistAsMCResROmegaMinus        ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );
+                f2dHistAsMCResPhiOmegaMinus      ->Fill( lmcPt, lDeltaPhiMcReco );
+                f2dHistAsMCptProtonMCptOmegaMinus->Fill(lmcPt,lmcPtPosV0Dghter);
+                fHistV0CosineOfPointingAnglevsPtOmega->Fill(lmcPt,lV0CosineOfPointingAngle);
+        }      
+        else if( lChargeXi > 0 && lAssoOmegaPlus){     
+               fHistAsMCMassOmegaPlus           ->Fill( lInvMassOmegaPlus );
+               if(lIsBachelorKaon)     f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus->Fill( lmcPt, lmcRapCasc );
+               f2dHistAsMCGenPtVsGenYOmegaPlus  ->Fill( lmcPt, lmcRapCasc   );
+               fHistAsMCGenEtaOmegaPlus         ->Fill( lmcEta            );
+               f2dHistAsMCResPtOmegaPlus        ->Fill( lmcPt,           (lrecoPt - lmcPt)/ lmcPt );
+               f2dHistAsMCResROmegaPlus         ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius    );
+                f2dHistAsMCResPhiOmegaPlus       ->Fill( lmcPt, lDeltaPhiMcReco );
+                f2dHistAsMCptAntiprotonMCptOmegaPlus->Fill(lmcPt,lmcPtNegV0Dghter);
+                fHistV0CosineOfPointingAnglevsPtOmega->Fill(lmcPt,lV0CosineOfPointingAngle);
+        }
+        fHistV0toXiCosineOfPointingAngle->Fill(lV0CosineOfPointingAngleXi);
+
+        //------------------         
+        // - Fill containers
+       
+        // - Filling the AliCFContainer (optimisation of topological selections + systematics)
+        Double_t lContainerCutVars[19] = {0.0};
+        lContainerCutVars[0]  = lDcaXiDaughters;
+        lContainerCutVars[1]  = lDcaBachToPrimVertexXi;
+        lContainerCutVars[2]  = lXiCosineOfPointingAngle;
+        lContainerCutVars[3]  = lXiRadius;
+        lContainerCutVars[4]  = lInvMassLambdaAsCascDghter;
+        lContainerCutVars[5]  = lDcaV0DaughtersXi;
+        lContainerCutVars[6]  = lV0CosineOfPointingAngleXi;
+        lContainerCutVars[7]  = lV0RadiusXi;
+        lContainerCutVars[8]  = lDcaV0ToPrimVertexXi;  
+        lContainerCutVars[9]  = lDcaPosToPrimVertexXi;
+        lContainerCutVars[10] = lDcaNegToPrimVertexXi;
+        lContainerCutVars[13] = lmcPt;
+        lContainerCutVars[16] = lctau;
+        lContainerCutVars[17] = lctauV0;
+        lContainerCutVars[18] = distTV0Xi;
+        // All cases should be covered below
+        if( lChargeXi < 0 && lAssoXiMinus    ) {
+                     lContainerCutVars[11] = lInvMassXiMinus;
+                     lContainerCutVars[12] = lInvMassOmegaMinus;//1.63;
+                     lContainerCutVars[14] = lmcRapCasc;
+                     lContainerCutVars[15] = -1.;
+                     if ( lIsBachelorPionForTPC   && lIsPosProtonForTPC    && lIsNegPionForTPC )    
+                       fCFContAsCascadeCuts->Fill(lContainerCutVars,0); // for Xi-
+        }
+        if( lChargeXi > 0 && lAssoXiPlus    ) {
+                     lContainerCutVars[11] = lInvMassXiPlus;
+                     lContainerCutVars[12] = lInvMassOmegaPlus;//1.26;
+                     lContainerCutVars[14] = lmcRapCasc;
+                     lContainerCutVars[15] = -1.; 
+                     if ( lIsBachelorPionForTPC   && lIsNegProtonForTPC    && lIsPosPionForTPC )    
+                       fCFContAsCascadeCuts->Fill(lContainerCutVars,1); // for Xi+
+        }
+        if( lChargeXi < 0 && lAssoOmegaMinus ) {
+                     lContainerCutVars[11] = lInvMassXiMinus;//1.63;
+                     lContainerCutVars[12] = lInvMassOmegaMinus;
+                     lContainerCutVars[14] = -1.;
+                     lContainerCutVars[15] = lmcRapCasc;
+                     if ( lIsBachelorKaonForTPC   && lIsPosProtonForTPC    && lIsNegPionForTPC )    
+                       fCFContAsCascadeCuts->Fill(lContainerCutVars,2); // for Omega-
+        }
+        if( lChargeXi > 0 && lAssoOmegaPlus  ) {
+                     lContainerCutVars[11] = lInvMassXiPlus;//1.26;
+                     lContainerCutVars[12] = lInvMassOmegaPlus;
+                     lContainerCutVars[14] = -1.;
+                     lContainerCutVars[15] = lmcRapCasc;
+                     if ( lIsBachelorKaonForTPC   && lIsNegProtonForTPC    && lIsPosPionForTPC )    
+                       fCFContAsCascadeCuts->Fill(lContainerCutVars,3); // for Omega+
+        }
+        
+        // - Filling the AliCFContainers related to PID
+        Double_t lContainerPIDVars[3] = {0.0};
+       
+        // Xi Minus            
+        if( lChargeXi < 0 && lAssoXiMinus ) {
+               lContainerPIDVars[0] = lmcPt;
+               lContainerPIDVars[1] = lInvMassXiMinus;
+               lContainerPIDVars[2] = lmcRapCasc;
+               // No PID
+               fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 0); // No PID
+               // TPC PID
+               if( lIsBachelorPionForTPC ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
+               if( lIsBachelorPionForTPC && lIsPosProtonForTPC ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks   
+               if( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+               // Combined PID
+               if( lIsBachelorPion ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
+               if( lIsBachelorPion && lIsPosInXiProton ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+               if( lIsBachelorPion && lIsPosInXiProton && lIsNegInXiPion ) fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+        }      
+        lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; 
+       
+        // Xi Plus             
+        if( lChargeXi > 0 && lAssoXiPlus ) {
+               lContainerPIDVars[0] = lmcPt;
+               lContainerPIDVars[1] = lInvMassXiPlus;
+              lContainerPIDVars[2] = lmcRapCasc;
+              // No PID
+              fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 0); // No PID
+              // TPC PID
+              if( lIsBachelorPionForTPC ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
+              if( lIsBachelorPionForTPC && lIsNegProtonForTPC ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
+              if( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+              // Combined PID
+              if( lIsBachelorPion ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
+              if( lIsBachelorPion && lIsNegInXiProton ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+              if( lIsBachelorPion && lIsNegInXiProton && lIsPosInXiPion ) fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+        }      
+        lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; 
+       
+        // Omega Minus         
+        if( lChargeXi < 0 && lAssoOmegaMinus ) {
+              lContainerPIDVars[0] = lmcPt;
+              lContainerPIDVars[1] = lInvMassOmegaMinus;
+              lContainerPIDVars[2] = lmcRapCasc;               
+              // No PID
+              fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 0); // No PID
+              // TPC PID
+              if( lIsBachelorKaonForTPC ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
+              if( lIsBachelorKaonForTPC && lIsPosProtonForTPC ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
+              if( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+              // Combined PID
+              if( lIsBachelorKaon ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
+              if( lIsBachelorKaon && lIsPosInOmegaProton ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+              if( lIsBachelorKaon && lIsPosInOmegaProton && lIsNegInOmegaPion ) fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+        }      
+        lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; 
+       
+        // Omega Plus          
+        if( lChargeXi > 0 && lAssoOmegaPlus) {
+              lContainerPIDVars[0] = lmcPt;
+              lContainerPIDVars[1] = lInvMassOmegaPlus;
+              lContainerPIDVars[2] = lmcRapCasc;               
+              // No PID
+              fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 0); // No PID
+              // TPC PID
+              if( lIsBachelorKaonForTPC ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
+                    if( lIsBachelorKaonForTPC && lIsNegProtonForTPC ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
+                    if( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
+                    // Combined PID
+                    if( lIsBachelorKaon ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
+                    if( lIsBachelorKaon && lIsNegInOmegaProton ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
+                    if( lIsBachelorKaon && lIsNegInOmegaProton && lIsPosInOmegaPion ) fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
+        }      
+       
+   }// End of loop over reconstructed cascades
+   fHistnAssoXiMinus->Fill(nAssoXiMinus);
+   fHistnAssoXiPlus->Fill(nAssoXiPlus);
+   fHistnAssoOmegaMinus->Fill(nAssoOmegaMinus);
+   fHistnAssoOmegaPlus->Fill(nAssoOmegaPlus);  
+   // Post output data.
+   PostData(1, fListHistCascade);
+   PostData(2, fCFContCascadePIDAsXiMinus);
+   PostData(3, fCFContCascadePIDAsXiPlus);
+   PostData(4, fCFContCascadePIDAsOmegaMinus);
+   PostData(5, fCFContCascadePIDAsOmegaPlus);
+   PostData(6, fCFContAsCascadeCuts);
+
+}      
+
+
+//________________________________________________________________________
+void AliAnalysisTaskCheckPerformanceCascadepp276::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) {
+       Printf("ERROR - AliAnalysisTaskCheckPerformanceCascadepp276 : ouput data container list not available\n");
+       return;
+  }    
+       
+  fHistTrackMultiplicityBeforeAnySel = dynamic_cast<TH1F*> (  cRetrievedList->FindObject("fHistTrackMultiplicityBeforeAnySel")  );
+  if (!fHistTrackMultiplicityBeforeAnySel) {
+    Printf("ERROR - AliAnalysisTaskCheckPerformanceCascadepp276 : fHistTrackMultiplicityBeforeAnySel not available");
+    return;
+  }
+  
+   
+  TCanvas *canCheckPerformanceCascade = new TCanvas("AliAnalysisTaskCheckPerformanceCascadepp276","Multiplicity",10,10,510,510);
+  canCheckPerformanceCascade->cd(1)->SetLogy();
+
+  fHistTrackMultiplicityBeforeAnySel->SetMarkerStyle(22);
+  fHistTrackMultiplicityBeforeAnySel->DrawCopy("E");
+ */
+}