]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/Correlations/DPhi/AliLeadingV0Correlation.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliLeadingV0Correlation.cxx
index af8cff890a4f7bbae896a84c5bb2c6b14283f1d5..ecbf1620830b6fc6d7629a9dac2aabb5ae55f7f2 100644 (file)
@@ -9,6 +9,8 @@
 #include <TFile.h>
 #include <TMath.h>
 #include <TH1.h>
+#include <TH2.h>
+#include <TH3.h>
 #include <TTree.h>
 #include <TRandom.h>
 #include <THnSparse.h>
@@ -38,8 +40,8 @@
 
 #include "AliLeadingV0Correlation.h"
 
-#define CorrBinsX 24
-#define CorrBinsY 26
+#define CorrBinsX 240
+#define CorrBinsY 260
 
 
 Double_t PI =TMath::Pi();
@@ -82,6 +84,8 @@ AliLeadingV0Correlation::AliLeadingV0Correlation()
        fMassCutLa                                      (0),
        fTriglow                                        (0),
        fTrighigh                                       (0),
+       fTPCClusters                            (0),                                    
+       fTPCfindratio                           (0),
        fUseChargeHadrons                       (kTRUE), 
        fPtMin                                          (0.15),
        fOutputList                                     (0),
@@ -101,16 +105,30 @@ AliLeadingV0Correlation::AliLeadingV0Correlation()
        fHistMCGenK0                            (0),
        fHistMCGenLAM                           (0),
        fHistMCGenALAM                          (0),
+       fHistMCGenLAMXIPLS                      (0),
+       fHistMCGenLAMXI                         (0),
        fHistReconstK0                          (0),
        fHistReconstLA                          (0),
        fHistReconstALA                         (0),
        fHistMCAssoK0                           (0),
        fHistMCAssoLA                           (0),
        fHistMCAssoALA                          (0),
+       fHistMCAssoLAXI                         (0),
+       fHistMCAssoALAXiPlus            (0),
        fHistReconstSib                         (0),
        fHistReconstMix                         (0),
+       fHistReconstSibGEN                      (0),
+       fHistReconstMixGEN                      (0),
+       fHistReconstSibASO                      (0),
+       fHistReconstMixASO                      (0),
+       fHistReconstSibFEED                     (0),
+       fHistReconstMixFEED                     (0),
        fHistTriggerSib                         (0),
-       fHistTriggerMix                         (0)
+       fHistTriggerMix                         (0),
+       fHistTriggerSibGEN                      (0),
+       fHistTriggerMixGEN                      (0),
+       fHistTriggerSibASO                      (0),
+       fHistTriggerMixASO                      (0)                                     
 {      
 
   for(Int_t iBin = 0; iBin < 100; iBin++){
@@ -153,6 +171,8 @@ AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
        fMassCutLa                                      (0),
        fTriglow                                        (0),
        fTrighigh                                       (0),
+       fTPCClusters                            (0),                                    
+       fTPCfindratio                           (0),
        fUseChargeHadrons                       (kTRUE), 
        fPtMin                                          (0.15),
        fOutputList                                     (0),
@@ -172,16 +192,31 @@ AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
        fHistMCGenK0                            (0),
        fHistMCGenLAM                           (0),
        fHistMCGenALAM                          (0),
+       fHistMCGenLAMXIPLS                      (0),
+       fHistMCGenLAMXI                         (0),
        fHistReconstK0                          (0),
        fHistReconstLA                          (0),
        fHistReconstALA                         (0),
        fHistMCAssoK0                           (0),
        fHistMCAssoLA                           (0),
        fHistMCAssoALA                          (0),
+       fHistMCAssoLAXI                         (0),
+       fHistMCAssoALAXiPlus            (0),
        fHistReconstSib                         (0),
        fHistReconstMix                         (0),
+       fHistReconstSibGEN                      (0),
+       fHistReconstMixGEN                      (0),
+       fHistReconstSibASO                      (0),
+       fHistReconstMixASO                      (0),
+       fHistReconstSibFEED                     (0),
+       fHistReconstMixFEED                     (0),
        fHistTriggerSib                         (0),
-       fHistTriggerMix                         (0)
+       fHistTriggerMix                         (0),
+       fHistTriggerSibGEN                      (0),
+       fHistTriggerMixGEN                      (0),
+       fHistTriggerSibASO                      (0),
+       fHistTriggerMixASO                      (0)
+
 
 {      
   for(Int_t iBin = 0; iBin < 100; iBin++){
@@ -211,19 +246,19 @@ void AliLeadingV0Correlation::UserCreateOutputObjects()
        fOutputList = new TList();
        fOutputList->SetOwner();
        
-       fHist_Mult_B4_Trg_Sel = new TH1F("fHist_Mult_B4_Trg_Sel","Tracks per event;Nbr of Tracks;Events", 1000, 0, 10000);              
+       fHist_Mult_B4_Trg_Sel = new TH2F("fHist_Mult_B4_Trg_Sel","Tracks per event;Nbr of Tracks;Events", 1000, 0, 10000, 1000, 0, 10000);              
        fOutputList->Add(fHist_Mult_B4_Trg_Sel);
        
-       fHist_Mult_Af_Trg_Sel = new TH1F("fHist_Mult_Af_Trg_Sel","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);               
+       fHist_Mult_Af_Trg_Sel = new TH2F("fHist_Mult_Af_Trg_Sel","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);               
        fOutputList->Add(fHist_Mult_Af_Trg_Sel);
        
-       fHist_Mult_PVz_Cut = new TH1F("fHist_Mult_PVz_Cut","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);             
+       fHist_Mult_PVz_Cut = new TH2F("fHist_Mult_PVz_Cut","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);             
        fOutputList->Add(fHist_Mult_PVz_Cut);
        
-       fHist_Mult_SPD_PVz = new TH1F("fHist_Mult_SPD_PVz","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);             
+       fHist_Mult_SPD_PVz = new TH2F("fHist_Mult_SPD_PVz","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);             
        fOutputList->Add(fHist_Mult_SPD_PVz);
        
-       fHist_Mult_SPD_PVz_Pileup = new TH1F("fHist_Mult_SPD_PVz_Pileup","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);               
+       fHist_Mult_SPD_PVz_Pileup = new TH2F("fHist_Mult_SPD_PVz_Pileup","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);               
        fOutputList->Add(fHist_Mult_SPD_PVz_Pileup);
        
        fHistPVx = new TH1F("fHistPVx","PV x position;Nbr of Evts;x", 200, -0.5, 0.5);          
@@ -245,80 +280,81 @@ void AliLeadingV0Correlation::UserCreateOutputObjects()
        fOutputList->Add(fHistPVzAnalysis);
        
        //---------------------------------------------- Events histograms -----------------------------------------------------//
-       //0-PVx,1-PVy,2-PVz,3-MULT,4-CENT
-       const Int_t ndimsEV = 3;
-       Int_t    binsEV[ndimsEV] = { 200,  100,100};
-       Double_t xminEV[ndimsEV] = {-20 ,    0,  0};
-       Double_t xmaxEV[ndimsEV] = { 20 ,  300,100};
        
-       fHistEventViceGen= new THnSparseD("fHistEventViceGen", "fHistEventViceGen", ndimsEV, binsEV, xminEV, xmaxEV);
+       fHistEventViceGen= new TH2F("fHistEventViceGen", "fHistEventViceGen", 200, -20, 20, 10,0,1000);
        fOutputList->Add(fHistEventViceGen);
        
-       fHistEventViceReconst= new THnSparseD("fHistEventViceReconst", "fHistEventViceReconst", ndimsEV, binsEV, xminEV, xmaxEV);
+       fHistEventViceReconst= new TH2F("fHistEventViceReconst", "fHistEventViceReconst", 200, -20, 20, 10,0,1000);
        fOutputList->Add(fHistEventViceReconst);
        
-       //0-YK0,1-Pt
-       const Int_t ndimsGenMC = 3;
-       Int_t    binsGenMCLA[ndimsGenMC] = {120, 140,100};
-       Double_t xminGenMCLA[ndimsGenMC] = {  0,1.06,  0};
-       Double_t xmaxGenMCLA[ndimsGenMC] = {  6, 1.2,100};  
-       
-       Int_t    binsGenMCK0[ndimsGenMC] = {120, 200,100};
-       Double_t xminGenMCK0[ndimsGenMC] = {  0, 0.4,  0};
-       Double_t xmaxGenMCK0[ndimsGenMC] = {  6, 0.6,100};
-       
-       fHistMCGenLAM  = new THnSparseD("fHistMCGenLAM" , "fHistMCGenLAM" , ndimsGenMC, binsGenMCLA, xminGenMCLA, xmaxGenMCLA);
+       fHistMCGenLAM  = new TH2F("fHistMCGenLAM" , "fHistMCGenLAM" ,140,1.06,1.2, 120, 0, fTriglow);
        fOutputList->Add(fHistMCGenLAM);
        
-       fHistMCGenALAM = new THnSparseD("fHistMCGenALAM", "fHistMCGenALAM", ndimsGenMC, binsGenMCLA, xminGenMCLA, xmaxGenMCLA);
+       fHistMCGenALAM = new TH2F("fHistMCGenALAM", "fHistMCGenALAM",140,1.06,1.2, 120, 0, fTriglow);
        fOutputList->Add(fHistMCGenALAM);
        
-       fHistMCGenK0   = new THnSparseD("fHistMCGenK0"  , "fHistMCGenK0"  , ndimsGenMC, binsGenMCK0, xminGenMCK0, xmaxGenMCK0);
+       fHistMCGenK0   = new TH2F("fHistMCGenK0"  , "fHistMCGenK0"  ,200,0.4,0.6, 120, 0, fTriglow);
        fOutputList->Add(fHistMCGenK0);
        
-       const Int_t ndims=3;    //MK0  mLA  MALA PT   cent
-       Int_t    binsK0[ndims] = {  200, 120  ,100};
-       Double_t xminK0[ndims] = {  0.4,   0  ,  0};
-       Double_t xmaxK0[ndims] = {  0.6,   6  ,100};
-        
-       Int_t    binsLA[ndims] = {  140, 120  ,100};
-       Double_t xminLA[ndims] = { 1.06,   0  ,  0};
-       Double_t xmaxLA[ndims] = {  1.2,   6  ,100};
+       fHistMCGenLAMXIPLS = new TH2F("fHistMCGenLAMXIPLS", "fHistMCGenLAMXIPLS",140,1.06,1.2, 120, 0, fTriglow);
+       fOutputList->Add(fHistMCGenLAMXIPLS);
+       
+       fHistMCGenLAMXI   = new TH2F("fHistMCGenLAMXI"  , "fHistMCGenLAMXI"  ,140,1.06,1.2, 120, 0, fTriglow);
+       fOutputList->Add(fHistMCGenLAMXI);
        
+       //New dimension for feed down corection 
        
-       fHistReconstK0= new THnSparseD("fHistReconstK0"  , "fHistReconstK0",  ndims, binsK0, xminK0, xmaxK0);
+       const Int_t ndimsK0 = 4;       
+       Int_t    binsK0[ndimsK0] = {200, 120,500,1000};
+       Double_t xminK0[ndimsK0] = {0.4,   0,  0,0.99};
+       Double_t xmaxK0[ndimsK0] = {0.6,   fTriglow, 10,   1};
+       
+       const Int_t ndimsLA = 4;       
+       Int_t    binsLA[ndimsLA] = { 140, 120,500,1000};
+       Double_t xminLA[ndimsLA] = {1.06,   0,  0,0.99};
+       Double_t xmaxLA[ndimsLA] = { 1.2,   fTriglow, 10,   1};
+       
+       fHistReconstK0= new THnSparseD("fHistReconstK0"  , "fHistReconstK0",ndimsK0,binsK0,xminK0,xmaxK0);
        fHistReconstK0->Sumw2();
        fOutputList->Add(fHistReconstK0);
        
-       fHistReconstLA= new THnSparseD("fHistReconstLA"  , "fHistReconstLA",  ndims, binsLA, xminLA, xmaxLA);
+       fHistReconstLA= new THnSparseD("fHistReconstLA"  , "fHistReconstLA",ndimsLA,binsLA,xminLA,xmaxLA);
        fHistReconstLA->Sumw2();
        fOutputList->Add(fHistReconstLA);
        
-       fHistReconstALA= new THnSparseD("fHistReconstALA", "fHistReconstALA", ndims, binsLA, xminLA, xmaxLA);
+       fHistReconstALA= new THnSparseD("fHistReconstALA", "fHistReconstALA",ndimsLA,binsLA,xminLA,xmaxLA);
        fHistReconstALA->Sumw2();
        fOutputList->Add(fHistReconstALA);
        
-       fHistMCAssoK0= new THnSparseD("fHistMCAssoK0"   , "fHistMCAssoK0"   , ndims, binsK0, xminK0, xmaxK0);
+       fHistMCAssoK0= new THnSparseD("fHistMCAssoK0"   , "fHistMCAssoK0"   ,ndimsK0,binsK0,xminK0,xmaxK0);
        fHistMCAssoK0->Sumw2();
        fOutputList->Add(fHistMCAssoK0);
        
-       fHistMCAssoLA= new THnSparseD("fHistMCAssoLA"   , "fHistMCAssoLA"   , ndims, binsLA, xminLA, xmaxLA);
+       fHistMCAssoLA= new THnSparseD("fHistMCAssoLA"   , "fHistMCAssoLA"   ,ndimsLA,binsLA,xminLA,xmaxLA);
        fHistMCAssoLA->Sumw2();
        fOutputList->Add(fHistMCAssoLA);
        
-       fHistMCAssoALA= new THnSparseD("fHistMCAssoALA" , "fHistMCAssoALA" ,  ndims, binsLA, xminLA, xmaxLA);
+       fHistMCAssoALA= new THnSparseD("fHistMCAssoALA" , "fHistMCAssoALA" , ndimsLA,binsLA,xminLA,xmaxLA);
        fHistMCAssoALA->Sumw2();
        fOutputList->Add(fHistMCAssoALA);
        
+       fHistMCAssoLAXI= new THnSparseD("fHistMCAssoLAXI" , "fHistMCAssoLAXI" , ndimsLA,binsLA,xminLA,xmaxLA);
+       fHistMCAssoLAXI->Sumw2();
+       fOutputList->Add(fHistMCAssoLAXI);
+       
+       fHistMCAssoALAXiPlus= new THnSparseD("fHistMCAssoALAXiPlus" , "fHistMCAssoALAXiPlus" , ndimsLA,binsLA,xminLA,xmaxLA);
+       fHistMCAssoALAXiPlus->Sumw2();
+       fOutputList->Add(fHistMCAssoALAXiPlus);
+       
        //--------------------------------------------Correlation Histos -----------------------------------------------------//
        
        //0-pTK0,1-PhiK0,2-EtaK0,3-DPhiK0,4-DEtaK0,5-TYPE,6-CutSet
-       const Int_t ndimsv0CORR = 7;       
-       Int_t    binsv0CORR[ndimsv0CORR] = {120, 200,          200,CorrBinsX,      CorrBinsY,4,100};
+       const Int_t ndimsv0CORR = 8;       
+       Int_t    binsv0CORR[ndimsv0CORR] = {120, 200,          200,CorrBinsX,      CorrBinsY,4,500,1000};
        
-       Double_t xminv0CORR[ndimsv0CORR] = {  0,   0,-fTrackEtaCut,    -PI/2,-2*fTrackEtaCut,0,0};
+       Double_t xminv0CORR[ndimsv0CORR] = {  0,   0,-fTrackEtaCut,    -PI/2,-2*fTrackEtaCut,0,  0,0.99};
        
-       Double_t xmaxv0CORR[ndimsv0CORR] = {  6,2*PI, fTrackEtaCut,   3*PI/2, 2*fTrackEtaCut,4,100};
+       Double_t xmaxv0CORR[ndimsv0CORR] = {  fTriglow,2*PI, fTrackEtaCut,   3*PI/2, 2*fTrackEtaCut,4, 10,   1};
        
        fHistReconstSib= new THnSparseD("fHistReconstSib", "fHistReconstSib", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
        fHistReconstSib->Sumw2();
@@ -328,20 +364,54 @@ void AliLeadingV0Correlation::UserCreateOutputObjects()
        fHistReconstMix->Sumw2();
        fOutputList->Add(fHistReconstMix);
        
-       //0-pt,1-PHI,2-Eta
-       const Int_t triggerdims       =2;
-       Int_t binsTrig[triggerdims]   ={       100, 100};
-       Double_t xminTrig[triggerdims]={  fTriglow,   0};
-       Double_t xmaxTrig[triggerdims]={ fTrighigh, 100};
+       fHistReconstSibGEN= new THnSparseD("fHistReconstSibGEN", "fHistReconstSibGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
+       fHistReconstSibGEN->Sumw2();
+       fOutputList->Add(fHistReconstSibGEN);
        
-       fHistTriggerSib= new THnSparseD("fHistTriggerSib", "fHistTriggerSib", triggerdims, binsTrig, xminTrig, xmaxTrig);
+       fHistReconstMixGEN= new THnSparseD("fHistReconstMixGEN", "fHistReconstMixGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
+       fHistReconstMixGEN->Sumw2();
+       fOutputList->Add(fHistReconstMixGEN);
+       
+       fHistReconstSibASO= new THnSparseD("fHistReconstSibASO", "fHistReconstSibASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
+       fHistReconstSibASO->Sumw2();
+       fOutputList->Add(fHistReconstSibASO);
+       
+       fHistReconstMixASO= new THnSparseD("fHistReconstMixASO", "fHistReconstMixASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
+       fHistReconstMixASO->Sumw2();
+       fOutputList->Add(fHistReconstMixASO);
+       
+       fHistReconstSibFEED= new THnSparseD("fHistReconstSibFEED", "fHistReconstSibFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
+       fHistReconstSibFEED->Sumw2();
+       fOutputList->Add(fHistReconstSibFEED);
+       
+       fHistReconstMixFEED= new THnSparseD("fHistReconstMixFEED", "fHistReconstMixFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
+       fHistReconstMixFEED->Sumw2();
+       fOutputList->Add(fHistReconstMixFEED);
+       
+       
+       fHistTriggerSib= new TH3F("fHistTriggerSib", "fHistTriggerSib", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
        fHistTriggerSib->Sumw2();
        fOutputList->Add(fHistTriggerSib);
        
-       fHistTriggerMix= new THnSparseD("fHistTriggerMix", "fHistTriggerMix", triggerdims, binsTrig, xminTrig, xmaxTrig);
+       fHistTriggerMix= new TH1F("fHistTriggerMix", "fHistTriggerMix", 100, fTriglow, fTrighigh);
        fHistTriggerMix->Sumw2();
        fOutputList->Add(fHistTriggerMix);
        
+       fHistTriggerSibGEN= new TH3F("fHistTriggerSibGEN", "fHistTriggerSibGEN", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
+       fHistTriggerSibGEN->Sumw2();
+       fOutputList->Add(fHistTriggerSibGEN);
+       
+       fHistTriggerMixGEN= new TH1F("fHistTriggerMixGEN", "fHistTriggerMixGEN", 100, fTriglow, fTrighigh);
+       fHistTriggerMixGEN->Sumw2();
+       fOutputList->Add(fHistTriggerMixGEN);
+       
+       fHistTriggerSibASO= new TH3F("fHistTriggerSibASO", "fHistTriggerSibASO", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
+       fHistTriggerSibASO->Sumw2();
+       fOutputList->Add(fHistTriggerSibASO);
+       
+       fHistTriggerMixASO= new TH1F("fHistTriggerMixASO", "fHistTriggerMixASO", 100, fTriglow, fTrighigh);
+       fHistTriggerMixASO->Sumw2();
+       fOutputList->Add(fHistTriggerMixASO);
        
        //----------------------------------------------Event Pool-----------------------------------------------------//
        fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins);
@@ -364,28 +434,18 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
     fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent());
        if(!fAODEvent) return;
        
-       Int_t multiplicity    = -1;
-       Int_t multiplicityMC  = -1;
-       Double_t MultipOrCent = -1; 
-       Double_t CentPecentMC = -1;
-       Double_t CentPecentAfterPhySel    = -1;
-       Int_t    nTrackMultiplicity       = -1;
-       Float_t lPrimaryTrackMultiplicity = 0;
-       
-       nTrackMultiplicity              = (InputEvent())->GetNumberOfTracks();
-    for (Int_t itrack = 0; itrack<nTrackMultiplicity; itrack++) {
-               AliAODTrack* track = fAODEvent->GetTrack(itrack);
-               if(!fAnalysisMC) if (track->TestFilterBit(fFilterBit)) lPrimaryTrackMultiplicity++;
-               lPrimaryTrackMultiplicity++;
-    }
+       Int_t  ltrackMultiplicity        = 0;
+       Int_t  lrefMultiplicity          = 0;
 
-       fHist_Mult_B4_Trg_Sel->Fill(lPrimaryTrackMultiplicity);
+       //------------------------------------------------
+       // Before Physics Selection
+       //------------------------------------------------ 
+       ltrackMultiplicity   = (InputEvent())->GetNumberOfTracks();
+        AliAODHeader * header = dynamic_cast<AliAODHeader*>(fAODEvent->GetHeader());
+        if(!header) AliFatal("Not a standard AOD");
+       lrefMultiplicity     = header->GetRefMultiplicity();
        
-       if(fcollidingSys=="PbPb"){   
-       AliCentrality *centralityObjMC = fAODEvent->GetHeader()->GetCentralityP();
-               CentPecentMC  = centralityObjMC->GetCentralityPercentileUnchecked("V0M");
-               if ((CentPecentMC < 0.)||(CentPecentMC > 90)) return;
-       }
+       fHist_Mult_B4_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
        
        Double_t * CentBins = fCentBins;
        Double_t poolmin    = CentBins[0];
@@ -395,10 +455,11 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        // Efficency denomenator comes before the physics selection
        //----------------------------------------------------------
        
-       Double_t  dimEventviceMC[3];
+       Double_t  dimEventviceMC[2];
        if(fAnalysisMC)    //Efficency denomenator comes before the physics selection
        {
                AliAODMCHeader *aodMCheader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName());
+               if(!aodMCheader) return;
                Float_t mcZv = aodMCheader->GetVtxZ();
                
                if (TMath::Abs(mcZv) >= fpvzcut) return;
@@ -410,12 +471,18 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                
                Int_t nMCTracks = mcArray->GetEntriesFast();
                
-               if(fcollidingSys=="PbPb") multiplicityMC=CentPecentMC;
-               if(fcollidingSys=="PP")   multiplicityMC=nMCTracks;
-               
                dimEventviceMC[1]=nMCTracks;
-               dimEventviceMC[2]=CentPecentMC;
-               fHistEventViceGen->Fill(dimEventviceMC);
+               fHistEventViceGen->Fill(dimEventviceMC[0],dimEventviceMC[1]);
+               
+               TObjArray *selectedTracksLeadingMC=fAnalyseUE->FindLeadingObjects(mcArray);
+               if(!selectedTracksLeadingMC) return;
+               selectedTracksLeadingMC->SetOwner(kTRUE);
+               
+               TObjArray * selectedV0sMC =new TObjArray;
+               selectedV0sMC->SetOwner(kTRUE);
+               
+               TObjArray * selectedV0sMCXI =new TObjArray;
+               selectedV0sMCXI->SetOwner(kTRUE);
                
                for (Int_t iMC = 0; iMC<nMCTracks; iMC++)
                {
@@ -423,8 +490,10 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        if (!mcTrack) continue;
                        // Charged track Generated level
                        Double_t mcTrackPt  = mcTrack->Pt();
-                       if ((mcTrackPt<fPtMin)||(mcTrackPt>6.0)) continue;
+                       if ((mcTrackPt<fPtMin)||(mcTrackPt>fTriglow)) continue;
                        
+                       Double_t mcTrackEta = mcTrack->Eta();
+                       Double_t mcTrackPhi = mcTrack->Phi();
                        Bool_t TrIsPrime    = mcTrack->IsPhysicalPrimary();
                        Bool_t TrPtMin      = mcTrackPt>fPtMin;
                        Bool_t TrCharge     = (mcTrack->Charge())!=0;
@@ -436,31 +505,155 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        
                        Double_t mcRapidity   = mcTrack->Y();
                        Bool_t V0RapMax       = TMath::Abs(mcRapidity)<fRapidityCut;
+                       Bool_t V0EtaMax       = TMath::Abs(mcTrackEta)<fTrackEtaCut;
                        Double_t mcMass       = mcTrack->M();
                        
-                       Double_t mcK0[3] = {mcTrackPt,mcMass,multiplicityMC};
-                       Double_t mcLa[3] = {mcTrackPt,mcMass,multiplicityMC};
-                       Double_t mcAl[3] = {mcTrackPt,mcMass,multiplicityMC};
+                       Double_t mcK0[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
+                       Double_t mcLa[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
+                       Double_t mcAl[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
                        
+                       Int_t myTrackMotherLabel = mcTrack->GetMother();
                        
-                       Bool_t IsK0 = mcPartPdg==310;
-                       if (IsK0 && V0RapMax && TrIsPrime) 
-                       {
-                               fHistMCGenK0->Fill(mcK0);
-                       } 
+                       AliAODMCParticle *mcMother = (AliAODMCParticle*)mcArray->At(myTrackMotherLabel);
+                       if (!mcMother) continue;
+                       Int_t MotherPdg            = mcMother->GetPdgCode();
+                       Bool_t IsK0         = mcPartPdg==310;
+                       Bool_t IsLambda     = mcPartPdg==3122;
+                       Bool_t IsAntiLambda = mcPartPdg==-3122;
                        
-                       Bool_t IsLambda = mcPartPdg==3122;
-                       if (IsLambda && V0RapMax && TrIsPrime) 
-                       {
-                               fHistMCGenLAM->Fill(mcLa);
-                       }
+                       Bool_t IsXImin  =MotherPdg== 3312;
+                       Bool_t IsXIPlus =MotherPdg==-3312;
+                       Bool_t IsXizero =MotherPdg== 3322;
+                       Bool_t IsOmega  =MotherPdg== 3334;
                        
-                       Bool_t IsAntiLambda = mcPartPdg==-3122;
-                       if (IsAntiLambda && V0RapMax && TrIsPrime) 
-                       {       
-                               fHistMCGenALAM->Fill(mcAl);
-                       }                       
+                       switch (fCase) {
+                               case 1:
+                                       
+                                       if (IsK0) 
+                                       {
+                                               fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
+                                       } 
+                                       
+                                       if (IsLambda) 
+                                       {
+                                               fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
+                                       }
+                                       
+                                       if (IsAntiLambda) 
+                                       {       
+                                               fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
+                                       }
+                                       
+                                       if (IsLambda && (IsXizero || IsXImin)) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
+                                               fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
+                                       }
+                                       
+                                       if (IsLambda && IsOmega) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
+                                       }
+                                       
+                                       if (IsAntiLambda && IsXIPlus) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
+                                               fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
+                                       }
+                                       
+                                       break;
+                                       
+                               case 2:
+
+                                       if (IsK0 && V0RapMax && TrIsPrime) 
+                                       {
+                                               fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
+                                       } 
+                                       
+                                       if (IsLambda && V0RapMax && TrIsPrime) 
+                                       {
+                                               fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
+                                       }
+                                       
+                                       if (IsAntiLambda && V0RapMax && TrIsPrime) 
+                                       {       
+                                               fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
+                                       }
+                                       
+                                       if (IsLambda && V0RapMax && (IsXizero || IsXImin)) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
+                                               fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
+                                       }
+                                       
+                                       if (IsLambda && V0RapMax && IsOmega) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
+                                       }
+                                       
+                                       if (IsAntiLambda && V0RapMax && IsXIPlus) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
+                                               fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
+                                       }
+                                       
+                                       break;
+                                       
+                               case 3:
+
+                                       if (IsK0 && V0EtaMax && TrIsPrime) 
+                                       {
+                                               fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
+                                       } 
+                                       
+                                       if (IsLambda && V0EtaMax && TrIsPrime) 
+                                       {
+                                               fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
+                                       }
+                                       
+                                       if (IsAntiLambda && V0EtaMax && TrIsPrime) 
+                                       {       
+                                               fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
+                                               selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
+                                       }
+                                       
+                                       if (IsLambda && V0EtaMax && (IsXizero || IsXImin)) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
+                                               fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
+                                       }
+                                       
+                                       if (IsLambda && V0EtaMax && IsOmega) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
+                                       }
+                                       
+                                       if (IsAntiLambda && V0EtaMax && IsXIPlus) 
+                                       {       
+                                               selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
+                                               fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
+                                       }
+                                       break;
+                                       
+                               default:
+                                       AliInfo(Form("No case selected"));
+                                       break;
+                       }
                }
+               
+               FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerSibGEN,fHistReconstSibGEN);
+               FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerMixGEN,fHistReconstMixGEN);
+               
+               FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstSibFEED);
+               FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstMixFEED);
     }
        
        // End Loop over MC condition
@@ -469,16 +662,14 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        // Physics Selection
        //------------------------------------------------ 
        UInt_t maskIsSelected = inEvMain->IsEventSelected();
-       Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB 
-                                         || (maskIsSelected & AliVEvent::kCentral)== AliVEvent::kCentral 
-                                         || (maskIsSelected & AliVEvent::kSemiCentral)== AliVEvent::kSemiCentral);
+       Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB);
     if (!isSelected) return;
        
        //------------------------------------------------
        // After Trigger Selection
        //------------------------------------------------
        
-       fHist_Mult_Af_Trg_Sel->Fill(lPrimaryTrackMultiplicity);
+       fHist_Mult_Af_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
        
        //------------------------------------------------
        // Getting: Primary Vertex + MagField Info
@@ -488,13 +679,6 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        Double_t  tPrimaryVtxPosition[3];
        Double_t  lV0Position[3];
        
-       
-       if(fcollidingSys=="PbPb"){  //
-       AliCentrality *centralityObj = fAODEvent->GetHeader()->GetCentralityP();
-               CentPecentAfterPhySel  = centralityObj->GetCentralityPercentileUnchecked("V0M");
-               if ((CentPecentAfterPhySel < 0.)||(CentPecentAfterPhySel > 90)) return;
-       } //
-       
        AliAODVertex *lPrimaryBestAODVtx = fAODEvent->GetPrimaryVertex();
        if (!lPrimaryBestAODVtx) return;
        // get the best primary vertex available for the event
@@ -504,6 +688,7 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        lPrimaryBestAODVtx->GetXYZ(lBestPrimaryVtxPos);
        
        const AliVVertex *primaryVtx = fAODEvent->GetPrimaryVertex();
+       if(!primaryVtx)return;
        tPrimaryVtxPosition[0] = primaryVtx->GetX();
        tPrimaryVtxPosition[1] = primaryVtx->GetY();
        tPrimaryVtxPosition[2] = primaryVtx->GetZ();
@@ -521,7 +706,7 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        
        if ((TMath::Abs(lPVz)) >= fpvzcut) return ;
        if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return;
-       fHist_Mult_PVz_Cut->Fill(lPrimaryTrackMultiplicity);
+       fHist_Mult_PVz_Cut->Fill(ltrackMultiplicity,lrefMultiplicity);
        
        //------------------------------------------------
        // Only look at events with well-established PV
@@ -531,43 +716,36 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        const AliAODVertex *lPrimarySPDVtx = fAODEvent->GetPrimaryVertexSPD();
        if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtxCheck )return;
        
-       fHist_Mult_SPD_PVz->Fill(lPrimaryTrackMultiplicity);
-
-       
+       fHist_Mult_SPD_PVz->Fill(ltrackMultiplicity,lrefMultiplicity);
        //------------------------------------------------
        // Pileup Rejection
        //------------------------------------------------
        
        // FIXME : quality selection regarding pile-up rejection 
        if(fAODEvent->IsPileupFromSPD()) return;
-       fHist_Mult_SPD_PVz_Pileup->Fill(lPrimaryTrackMultiplicity);
+       fHist_Mult_SPD_PVz_Pileup->Fill(ltrackMultiplicity,lrefMultiplicity);
        
        fHistPVxAnalysis->Fill(tPrimaryVtxPosition[0]);
        fHistPVyAnalysis->Fill(tPrimaryVtxPosition[1]);
        fHistPVzAnalysis->Fill(tPrimaryVtxPosition[2]);
        
     dimEventviceReal[0]=tPrimaryVtxPosition[2];
-       multiplicity       = fAODEvent->GetNTracks();
-       
-       dimEventviceReal[1]=multiplicity;
-       dimEventviceReal[2]=CentPecentAfterPhySel;
-       
-       fHistEventViceReconst->Fill(dimEventviceReal);
+       dimEventviceReal[1]=ltrackMultiplicity;
        
-       if(fcollidingSys=="PP")MultipOrCent=multiplicity;
-       if(fcollidingSys=="PbPb")MultipOrCent=CentPecentAfterPhySel;
+       fHistEventViceReconst->Fill(dimEventviceReal[0],dimEventviceReal[1]);
 
        //---------------------------------------------------------------------------------------------
        
        Double_t lDcaPosToPrimVertex = 0;Double_t lDcaNegToPrimVertex = 0;Double_t lDcaV0Daughters     = 0;
        Double_t lV0cosPointAngle    = 0;Double_t lV0DecayLength      = 0;Double_t lV0Radius           = 0;
        Double_t lcTauLambda         = 0;Double_t lcTauAntiLambda     = 0;   
-       Double_t lcTauK0s            = 0;   
+       Double_t lcTauK0s            = 0; 
+       Double_t lDCAV0PVz           = 0; 
        
        Double_t lInvMassK0   = 0, lInvMassLambda    = 0, lInvMassAntiLambda = 0;
        Double_t lPtV0s       = 0; Double_t lPhiV0s  = 0; Double_t lEtaV0s   = 0;
-       Double_t lRapK0s      = 0, lRapLambda        = 0, lRapAntiLambda     = 0;
-       Double_t lPzV0s       = 0; Double_t lAlphaV0 = 0, lPtArmV0           = 0;
+       Double_t lRapK0       = 0, lRapLambda        = 0, lRapAntiLambda     = 0;
+       Double_t lPzV0s       = 0; 
        Double_t lPV0s        = 0;
        
        TObjArray *selectedTracksLeading=0;
@@ -578,6 +756,9 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        TObjArray * selectedV0s = new TObjArray;
        selectedV0s->SetOwner(kTRUE);
        
+       TObjArray * selectedV0sAssoc = new TObjArray;
+       selectedV0sAssoc->SetOwner(kTRUE);
+       
        Int_t nV0s = fAODEvent->GetNumberOfV0s();
        
        for (Int_t i = 0; i < nV0s; i++) 
@@ -585,7 +766,7 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
                if (!aodV0) continue;
                
-               if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>6.0)) continue;
+               if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>fTriglow)) continue;
                
                // get daughters
            AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
@@ -608,15 +789,12 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                
                // DCA between daughter and Primary Vertex:
                if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
-               if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();      
+               if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();   
+               lDCAV0PVz   = aodV0->DcaV0ToPrimVertex(); 
                
                // Quality tracks cuts:
                if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
                
-               // Armenteros variables:
-               lAlphaV0      =  aodV0->AlphaV0();
-               lPtArmV0      =  aodV0->PtArmV0();
-               
                // Invariant mass
                lInvMassK0         = aodV0->MassK0Short();
                lInvMassLambda     = aodV0->MassLambda();
@@ -628,9 +806,9 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                lPzV0s = aodV0->Pz();
                
                // Rapidity:
-               lRapK0s    = aodV0->RapK0Short();
+               lRapK0     = aodV0->RapK0Short();
                lRapLambda = aodV0->RapLambda();
-               lRapAntiLambda = aodV0->Y(-3122);               
+               lRapAntiLambda = aodV0->Y(-3122);
                
                if (lPtV0s==0) {continue;}
                
@@ -692,33 +870,31 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                Bool_t k0ctcut = (lcTauK0s        < fCutCTK0);
                Bool_t lactcut = (lcTauLambda     < fCutCTLa);
                Bool_t alactcut= (lcTauAntiLambda < fCutCTLa);
-
-               Bool_t k0APcut = (lPtArmV0>(TMath::Abs(0.2*lAlphaV0)));
                
-               Bool_t k0Rapcut = (TMath::Abs(lRapK0s)        < fRapidityCut);
+               Bool_t k0Rapcut = (TMath::Abs(lRapK0        < fRapidityCut);
                Bool_t laRapcut = (TMath::Abs(lRapLambda)     < fRapidityCut);
                Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut);
                
-               if(fcollidingSys=="PbPb")if(lV0Radius>=100) continue;
+               Bool_t V0EtaMax= (TMath::Abs(lEtaV0s) < fTrackEtaCut);
                
                Bool_t k0cutset = IsAcseptedK0(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassLambda,lInvMassAntiLambda);
                Bool_t lacutset = IsAcseptedLA(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
                Bool_t alacutset= IsAcseptedLA(lV0Radius,lDcaNegToPrimVertex,lDcaPosToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
                
-               Double_t spK0[3] = {lInvMassK0, lPtV0s,MultipOrCent};
-               Double_t spLa[3] = {lInvMassLambda,lPtV0s,MultipOrCent};
-               Double_t spAl[3] = {lInvMassAntiLambda,lPtV0s,MultipOrCent};
+               Double_t spK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+               Double_t spLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+               Double_t spAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
        
                switch (fCase) {
                        case 1:
                                fHistReconstK0->Fill(spK0); 
-                               if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
+                               if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                
                                fHistReconstLA->Fill(spLa); 
-                               if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
+                               if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                
                                fHistReconstALA->Fill(spAl);
-                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
+                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                
                                break;
                                
@@ -726,40 +902,40 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                                if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid)
                                {
                                        fHistReconstK0->Fill(spK0); 
-                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
+                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
                                if (lactcut && laRapcut && lacutset && cutLambdaPid)
                                {
                                        fHistReconstLA->Fill(spLa); 
-                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
+                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
                                if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
                                {
                                        fHistReconstALA->Fill(spAl);
-                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
+                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                }
 
                                break;
                                
                        case 3:
-                               if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid && k0APcut)
+                               if(k0ctcut && V0EtaMax && k0cutset && cutK0Pid)
                                {
                                        fHistReconstK0->Fill(spK0); 
-                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
+                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
-                               if (lactcut && laRapcut && lacutset && cutLambdaPid)
+                               if (lactcut && V0EtaMax && lacutset && cutLambdaPid)
                                {
                                        fHistReconstLA->Fill(spLa); 
-                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
+                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
-                               if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
+                               if (alactcut && V0EtaMax && alacutset && cutAntiLambdaPid)
                                {
                                        fHistReconstALA->Fill(spAl);
-                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
+                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                }
                                break;
                                
@@ -777,7 +953,9 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        Int_t myTrackNegLabel        = TMath::Abs(myTrackNeg->GetLabel());
                        
                        AliAODMCParticle *mcPosTrack = (AliAODMCParticle*)mcArray->At(myTrackPosLabel);
+                       if(!mcPosTrack)continue;
                        AliAODMCParticle *mcNegTrack = (AliAODMCParticle*)mcArray->At(myTrackNegLabel);
+                       if(!mcNegTrack)continue;
                        
                        Int_t PosDaughterPdg = mcPosTrack->GetPdgCode();
                        Int_t NegDaughterPdg = mcNegTrack->GetPdgCode();
@@ -789,18 +967,28 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        if (myTrackPosMotherLabel!=myTrackNegMotherLabel) continue;
                        
                        AliAODMCParticle *mcPosMother = (AliAODMCParticle*)mcArray->At(myTrackPosMotherLabel);
+                       if(!mcPosMother)continue;
                        Int_t MotherPdg  = mcPosMother->GetPdgCode();
                        Bool_t IsPrime   = mcPosMother->IsPhysicalPrimary();
                        
-                       Double_t rcK0[3] = {lInvMassK0, lPtV0s,MultipOrCent};
-                       Double_t rcLa[3] = {lInvMassLambda,lPtV0s,MultipOrCent};
-                       Double_t rcAl[3] = {lInvMassAntiLambda,lPtV0s,MultipOrCent};
+                       Int_t myGrandMotherLabel = mcPosMother->GetMother();
+                       AliAODMCParticle *mcGrandMother = (AliAODMCParticle*)mcArray->At(myGrandMotherLabel);
+                       Int_t GrandMotherPdg     = mcGrandMother->GetPdgCode();
+                       
+                       Double_t rcK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+                       Double_t rcLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+                       Double_t rcAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
                        
                        switch (fCase) {
                                case 1:
-                                       fHistMCAssoK0->Fill(rcK0); 
+                                       fHistMCAssoK0->Fill(rcK0);
+                                       if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
+                                       
                                        fHistMCAssoLA->Fill(rcLa);
+                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
+                                       
                                        fHistMCAssoALA->Fill(rcAl);
+                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                        
                                        break;
                                        
@@ -810,7 +998,8 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                                                                                                                        NegDaughterPdg== -211 &&
                                                                                                                        IsPrime))
                                        {
-                                               fHistMCAssoK0->Fill(rcK0); 
+                                               fHistMCAssoK0->Fill(rcK0);
+                                               if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
                                        if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
@@ -819,6 +1008,7 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                                                                                                                        IsPrime)) 
                                        {
                                                fHistMCAssoLA->Fill(rcLa);
+                                               if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
                                        if ((alactcut && alaRapcut && alacutset)&&(MotherPdg     == -3122 && 
@@ -827,33 +1017,69 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                                                                                                                           IsPrime))
                                        {
                                                fHistMCAssoALA->Fill(rcAl);
+                                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
+                                       }
+                                       
+                                       if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
+                                                                                                                       PosDaughterPdg== 2212 && 
+                                                                                                                       NegDaughterPdg== -211 &&
+                                                                                                                       (GrandMotherPdg==3322 ||GrandMotherPdg==3312))) 
+                                       {
+                                               fHistMCAssoLAXI->Fill(rcLa);
+                                       }
+                                       
+                                       if ((alactcut && alaRapcut && alacutset)&&(MotherPdg      == -3122 && 
+                                                                                                                          PosDaughterPdg==   211 && 
+                                                                                                                          NegDaughterPdg== -2212 &&
+                                                                                                                          GrandMotherPdg== -3312))
+                                       {
+                                               fHistMCAssoALAXiPlus->Fill(rcAl);
                                        }
                                        
                                        break;
                                        
                                case 3:
-                                       if ((k0ctcut && k0Rapcut && k0cutset && k0APcut)&&(MotherPdg     ==  310 && 
+                                       if ((k0ctcut && V0EtaMax && k0cutset)&&(MotherPdg     ==  310 && 
                                                                                                                                           PosDaughterPdg==  211 && 
                                                                                                                                           NegDaughterPdg== -211 &&
                                                                                                                                           IsPrime))
                                        {
                                                fHistMCAssoK0->Fill(rcK0); 
+                                               if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
-                                       if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
+                                       if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg     == 3122 && 
                                                                                                                        PosDaughterPdg== 2212 && 
                                                                                                                        NegDaughterPdg== -211 &&
                                                                                                                        IsPrime)) 
                                        {
                                                fHistMCAssoLA->Fill(rcLa);
+                                               if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
-                                       if ((alactcut && alaRapcut && alacutset)&&(MotherPdg     == -3122 && 
+                                       if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg     == -3122 && 
                                                                                                                           PosDaughterPdg==   211 && 
                                                                                                                           NegDaughterPdg== -2212 &&
                                                                                                                           IsPrime))
                                        {
                                                fHistMCAssoALA->Fill(rcAl);
+                                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
+                                       }
+                                       
+                                       if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg     == 3122 && 
+                                                                                                                       PosDaughterPdg== 2212 && 
+                                                                                                                       NegDaughterPdg== -211 &&
+                                                                                                                       (GrandMotherPdg==3322 ||GrandMotherPdg==3312))) 
+                                       {
+                                               fHistMCAssoLAXI->Fill(rcLa);
+                                       }
+                                       
+                                       if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg      == -3122 && 
+                                                                                                                          PosDaughterPdg==   211 && 
+                                                                                                                          NegDaughterPdg== -2212 &&
+                                                                                                                          GrandMotherPdg== -3312))
+                                       {
+                                               fHistMCAssoALAXiPlus->Fill(rcAl);
                                        }
                                        break;
                                        
@@ -864,8 +1090,11 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        }
        }       
        
-       FillCorrelationSibling(MultipOrCent,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib);
-       FillCorrelationMixing(MultipOrCent,tPrimaryVtxPosition[2],poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix);
+       FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib);
+       FillCorrelationMixing(ltrackMultiplicity,tPrimaryVtxPosition[2],poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix);
+       
+       FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0sAssoc,fHistTriggerSibASO,fHistReconstSibASO);
+       FillCorrelationMixing(ltrackMultiplicity,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0sAssoc,fHistTriggerMixASO,fHistReconstMixASO);
        
        PostData(1,fOutputList);
 }      
@@ -876,18 +1105,19 @@ void AliLeadingV0Correlation::Terminate(Option_t *)
 }
 //---------------------------------------------------------------------------------------
 Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
-{
+{      
+       if(fCase==1 || fCase==2)
        if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
        
        if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
        
        Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
-       if (nCrossedRowsTPC < 70) return kFALSE;
+       if (nCrossedRowsTPC < fTPCClusters) return kFALSE;
        
        Int_t findable=itrack->GetTPCNclsF();
        if (findable <= 0) return kFALSE;
        
-       if (nCrossedRowsTPC/findable < 0.8) return kFALSE;
+       if (nCrossedRowsTPC/findable < fTPCfindratio) return kFALSE;
        return kTRUE;
 }
 //---------------------------------------------------------------------------------------
@@ -999,10 +1229,10 @@ Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
 void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
                                                                          TObjArray*triggerArray,
                                                                          TObjArray*selectedV0Array,
-                                                                         THnSparse*triggerHist,
+                                                                         TH3F*triggerHist,
                                                                          THnSparse*associateHist)
 {
-       Double_t  binsv0CORR[7];
+       Double_t  binsv0CORR[8];
        Double_t  binsTrigSib[2];
        Int_t counterSibMCA=0;
        
@@ -1026,7 +1256,7 @@ void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
                        binsTrigSib[0]=triggerPt;
                        binsTrigSib[1]=MultipOrCent;
                        
-                       if(triggerHist)triggerHist->Fill(binsTrigSib);
+                       if(triggerHist)triggerHist->Fill(binsTrigSib[0],triggerPhi,triggerEta);
                        
                        for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
                                
@@ -1042,7 +1272,8 @@ void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
                                binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]);
                                binsv0CORR[4]=triggerEta-binsv0CORR[2];
                                binsv0CORR[5]= associate->WhichCandidate();
-                               binsv0CORR[6]= MultipOrCent;
+                               binsv0CORR[6]= associate->DCAPostoP();
+                               binsv0CORR[7]= associate->DCANegtoP();
                                
                                associateHist->Fill(binsv0CORR);
                        }
@@ -1056,17 +1287,16 @@ void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
                                                                   Double_t poolmin,
                                                                   TObjArray*triggerArray,
                                                                   TObjArray*selectedV0Array,
-                                                                  THnSparse*triggerHist,
+                                                                  TH1F*triggerHist,
                                                                   THnSparse*associateHist)
 {
        if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
        {
                if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
-               if(fcollidingSys=="PbPb") AliInfo(Form("PbPb Event with Zvertex = %.2f cm and centrality = %.1f  out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
                return;
        }
        
-       Double_t  binsv0CORRMix[7];
+       Double_t  binsv0CORRMix[8];
        Double_t  binsTrigMix[2];
        Double_t  counterMix=0;
        
@@ -1099,7 +1329,7 @@ void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
                                        binsTrigMix[0]=trigPt;
                                        binsTrigMix[1]=MultipOrCentMix;
                                        
-                                       if(triggerHist)triggerHist->Fill(binsTrigMix);
+                                       if(triggerHist)triggerHist->Fill(binsTrigMix[0]);
                                        
                                        for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
                                                
@@ -1115,7 +1345,8 @@ void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
                                                binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]);
                                                binsv0CORRMix[4]=trigEta-binsv0CORRMix[2];
                                                binsv0CORRMix[5]=associate->WhichCandidate();
-                                               binsv0CORRMix[6]=MultipOrCentMix;
+                                               binsv0CORRMix[6]=associate->DCAPostoP();
+                                               binsv0CORRMix[7]=associate->DCANegtoP();
                                                
                                                associateHist->Fill(binsv0CORRMix);
                                                }
@@ -1133,7 +1364,9 @@ void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
                tracksClone->Add(new V0Correlationparticle(particle->Eta(), 
                                                                                          particle->Phi(), 
                                                                                          particle->Pt(),
-                                                                                         particle->WhichCandidate()));
+                                                                                         particle->WhichCandidate(),
+                                                                                         particle->DCAPostoP(),
+                                                                                         particle->DCANegtoP()));
        };
        pool->UpdatePool(tracksClone);
 }