]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/DPhi/AliLeadingV0Correlation.cxx
Merge remote-tracking branch 'origin/master' into flatdev
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliLeadingV0Correlation.cxx
1 /* Leading Charged Track+V0 Correlation.(Works for Real,Monte Carlo Data)
2  *                            Sandun Jayarathna
3  *                          University of Houston
4  *                      sandun.pahula.hewage@cern.ch
5  *****************************************************************************************/
6 #include <TROOT.h>
7 #include <TList.h>
8 #include <TChain.h>
9 #include <TFile.h>
10 #include <TMath.h>
11 #include <TH1.h>
12 #include <TH2.h>
13 #include <TH3.h>
14 #include <TTree.h>
15 #include <TRandom.h>
16 #include <THnSparse.h>
17 #include <TPDGCode.h>
18 #include <TDatabasePDG.h>
19
20 #include "AliLog.h"
21 #include "AliAnalysisManager.h"
22 #include "AliAODTrack.h"
23 #include "AliAODEvent.h"
24 #include "AliAODv0.h"
25 #include "AliAODVertex.h"
26 #include "AliAODPid.h"
27 #include "AliPIDResponse.h"
28 #include "AliEventPoolManager.h"
29 #include "AliCentrality.h"
30 #include "AliAODHandler.h"
31 #include "AliAODInputHandler.h"
32 #include "AliAODMCParticle.h"
33 #include "AliInputEventHandler.h"
34 #include "AliVParticle.h"
35 #include "AliMultiplicity.h"
36 #include "AliAODMCHeader.h"
37 #include "AliPID.h"
38 #include "AliExternalTrackParam.h"
39 #include "AliAnalyseLeadingTrackUE.h"
40
41 #include "AliLeadingV0Correlation.h"
42
43 #define CorrBinsX 240
44 #define CorrBinsY 260
45
46
47 Double_t PI =TMath::Pi();
48
49 ClassImp(AliLeadingV0Correlation)
50 ClassImp(V0Correlationparticle)
51
52 //---------------------------------------------------------------------------------------
53 AliLeadingV0Correlation::AliLeadingV0Correlation()
54    : AliAnalysisTaskSE(),
55         fAODEvent                                       (0x0),
56         fPoolMgr                                        (0x0),
57         fPIDResponse                            (0x0),
58         fAnalyseUE                                      (0x0),
59         fPoolMaxNEvents                         (0), 
60         fPoolMinNTracks                         (0), 
61         fMinEventsToMix                         (0),
62         fNzVtxBins                                      (0), 
63         fNCentBins                                      (0),
64         fcollidingSys                           (""),
65         fpvzcut                                         (0),
66         fTrackEtaCut                            (0.9),
67         fFilterBit                                      (128),
68         fAnalysisMC                                     (0),
69         fCase                                           (0),
70         fRemoveAutoCorr                         (0),
71         fRapidityCut                            (0),
72         fV0radius                                       (0),
73         fV0PostoPVz                                     (0),
74         fV0NegtoPVz                                     (0),
75         fDCAV0Daughters                         (0),
76         fCPAK0                                          (0),
77         fCPALam                                         (0),
78         fRejectLamK0                            (0),
79         fRejectK0Lam                            (0),
80     fSigmaPID                                   (0),
81         fCutCTK0                                        (0),
82         fCutCTLa                                        (0),
83         fMassCutK0                                      (0),
84         fMassCutLa                                      (0),
85         fTriglow                                        (0),
86         fTrighigh                                       (0),
87         fTPCClusters                            (0),                                    
88         fTPCfindratio                           (0),
89         fUseChargeHadrons                       (kTRUE), 
90         fPtMin                                          (0.15),
91         fOutputList                                     (0),
92         fHist_Mult_B4_Trg_Sel           (0),
93         fHist_Mult_Af_Trg_Sel           (0),
94         fHist_Mult_PVz_Cut                      (0),
95         fHist_Mult_SPD_PVz                      (0),
96         fHist_Mult_SPD_PVz_Pileup       (0),
97         fHistPVx                                        (0),
98         fHistPVy                                        (0),
99         fHistPVz                                        (0),
100         fHistPVxAnalysis                        (0),
101         fHistPVyAnalysis                        (0),
102         fHistPVzAnalysis                        (0),
103         fHistEventViceGen                       (0),
104         fHistEventViceReconst           (0),
105         fHistMCGenK0                            (0),
106         fHistMCGenLAM                           (0),
107         fHistMCGenALAM                          (0),
108         fHistMCGenLAMXIPLS                      (0),
109         fHistMCGenLAMXI                         (0),
110         fHistReconstK0                          (0),
111         fHistReconstLA                          (0),
112         fHistReconstALA                         (0),
113         fHistMCAssoK0                           (0),
114         fHistMCAssoLA                           (0),
115         fHistMCAssoALA                          (0),
116         fHistMCAssoLAXI                         (0),
117         fHistMCAssoALAXiPlus            (0),
118         fHistReconstSib                         (0),
119         fHistReconstMix                         (0),
120         fHistReconstSibGEN                      (0),
121         fHistReconstMixGEN                      (0),
122         fHistReconstSibASO                      (0),
123         fHistReconstMixASO                      (0),
124         fHistReconstSibFEED                     (0),
125         fHistReconstMixFEED                     (0),
126         fHistTriggerSib                         (0),
127         fHistTriggerMix                         (0),
128         fHistTriggerSibGEN                      (0),
129         fHistTriggerMixGEN                      (0),
130         fHistTriggerSibASO                      (0),
131         fHistTriggerMixASO                      (0)                                     
132 {       
133
134   for(Int_t iBin = 0; iBin < 100; iBin++){
135     fZvtxBins[iBin] = 0.;
136     fCentBins[iBin] = 0.;
137   }
138 }
139 //---------------------------------------------------------------------------------------
140 AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
141    : AliAnalysisTaskSE(name),
142         fAODEvent                                       (0x0),
143         fPoolMgr                                        (0x0),
144     fPIDResponse                                (0x0),
145         fAnalyseUE                                      (0x0),
146         fPoolMaxNEvents                         (0), 
147         fPoolMinNTracks                         (0), 
148         fMinEventsToMix                         (0),
149         fNzVtxBins                                      (0), 
150         fNCentBins                                      (0),
151         fcollidingSys                           (""),
152         fpvzcut                                         (0),
153     fTrackEtaCut                                (0.9),
154     fFilterBit                                  (128),
155         fAnalysisMC                                     (0),
156         fCase                                           (0),
157         fRemoveAutoCorr                         (0),
158     fRapidityCut                                (0),
159         fV0radius                                       (0),
160         fV0PostoPVz                                     (0),
161         fV0NegtoPVz                                     (0),
162         fDCAV0Daughters                         (0),
163         fCPAK0                                          (0),
164         fCPALam                                         (0),
165         fRejectLamK0                            (0),
166         fRejectK0Lam                            (0),
167     fSigmaPID                                   (0),
168         fCutCTK0                                        (0),
169         fCutCTLa                                        (0),
170         fMassCutK0                                      (0),
171         fMassCutLa                                      (0),
172         fTriglow                                        (0),
173         fTrighigh                                       (0),
174         fTPCClusters                            (0),                                    
175         fTPCfindratio                           (0),
176         fUseChargeHadrons                       (kTRUE), 
177         fPtMin                                          (0.15),
178         fOutputList                                     (0),
179         fHist_Mult_B4_Trg_Sel           (0),
180         fHist_Mult_Af_Trg_Sel           (0),
181         fHist_Mult_PVz_Cut                      (0),
182         fHist_Mult_SPD_PVz                      (0),
183         fHist_Mult_SPD_PVz_Pileup       (0),
184         fHistPVx                                        (0),
185         fHistPVy                                        (0),
186         fHistPVz                                        (0),
187         fHistPVxAnalysis                        (0),
188         fHistPVyAnalysis                        (0),
189         fHistPVzAnalysis                        (0),
190         fHistEventViceGen                       (0),
191         fHistEventViceReconst           (0),
192         fHistMCGenK0                            (0),
193         fHistMCGenLAM                           (0),
194         fHistMCGenALAM                          (0),
195         fHistMCGenLAMXIPLS                      (0),
196         fHistMCGenLAMXI                         (0),
197         fHistReconstK0                          (0),
198         fHistReconstLA                          (0),
199         fHistReconstALA                         (0),
200         fHistMCAssoK0                           (0),
201         fHistMCAssoLA                           (0),
202         fHistMCAssoALA                          (0),
203         fHistMCAssoLAXI                         (0),
204         fHistMCAssoALAXiPlus            (0),
205         fHistReconstSib                         (0),
206         fHistReconstMix                         (0),
207         fHistReconstSibGEN                      (0),
208         fHistReconstMixGEN                      (0),
209         fHistReconstSibASO                      (0),
210         fHistReconstMixASO                      (0),
211         fHistReconstSibFEED                     (0),
212         fHistReconstMixFEED                     (0),
213         fHistTriggerSib                         (0),
214         fHistTriggerMix                         (0),
215         fHistTriggerSibGEN                      (0),
216         fHistTriggerMixGEN                      (0),
217         fHistTriggerSibASO                      (0),
218         fHistTriggerMixASO                      (0)
219
220
221 {       
222   for(Int_t iBin = 0; iBin < 100; iBin++){
223     fZvtxBins[iBin] = 0.;
224     fCentBins[iBin] = 0.;
225   }
226   DefineOutput(1, TList::Class());                                            
227 }
228
229 //---------------------------------------------------------------------------------------
230 AliLeadingV0Correlation::~AliLeadingV0Correlation()
231 {
232    if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
233       delete fOutputList;
234    }
235 }
236 //---------------------------------------------------------------------------------------
237 void AliLeadingV0Correlation::UserCreateOutputObjects()
238 {       
239         fAnalyseUE =new AliAnalyseLeadingTrackUE();
240         if(!fAnalysisMC)
241         {
242         fAnalyseUE->SetParticleSelectionCriteria(fFilterBit,fUseChargeHadrons,fTrackEtaCut,fPtMin);
243         fAnalyseUE->DefineESDCuts(fFilterBit);
244         }
245         
246         fOutputList = new TList();
247         fOutputList->SetOwner();
248         
249         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);              
250         fOutputList->Add(fHist_Mult_B4_Trg_Sel);
251         
252         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);               
253         fOutputList->Add(fHist_Mult_Af_Trg_Sel);
254         
255         fHist_Mult_PVz_Cut = new TH2F("fHist_Mult_PVz_Cut","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);             
256         fOutputList->Add(fHist_Mult_PVz_Cut);
257         
258         fHist_Mult_SPD_PVz = new TH2F("fHist_Mult_SPD_PVz","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);             
259         fOutputList->Add(fHist_Mult_SPD_PVz);
260         
261         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);               
262         fOutputList->Add(fHist_Mult_SPD_PVz_Pileup);
263         
264         fHistPVx = new TH1F("fHistPVx","PV x position;Nbr of Evts;x", 200, -0.5, 0.5);          
265         fOutputList->Add(fHistPVx);
266         
267         fHistPVy = new TH1F("fHistPVy","PV y position;Nbr of Evts;y",200, -0.5, 0.5);           
268         fOutputList->Add(fHistPVy);
269         
270         fHistPVz = new TH1F("fHistPVz","PV z position;Nbr of Evts;z",400, -20, 20);             
271         fOutputList->Add(fHistPVz);
272         
273         fHistPVxAnalysis = new TH1F("fHistPVxAnalysis","PV x position;Nbr of Evts;x", 200, -0.5, 0.5);          
274         fOutputList->Add(fHistPVxAnalysis);
275         
276         fHistPVyAnalysis = new TH1F("fHistPVyAnalysis","PV y position;Nbr of Evts;y",200, -0.5, 0.5);           
277         fOutputList->Add(fHistPVyAnalysis);
278         
279         fHistPVzAnalysis = new TH1F("fHistPVzAnalysis","PV z position;Nbr of Evts;z",400, -20, 20);             
280         fOutputList->Add(fHistPVzAnalysis);
281         
282         //---------------------------------------------- Events histograms -----------------------------------------------------//
283         
284         fHistEventViceGen= new TH2F("fHistEventViceGen", "fHistEventViceGen", 200, -20, 20, 10,0,1000);
285         fOutputList->Add(fHistEventViceGen);
286         
287         fHistEventViceReconst= new TH2F("fHistEventViceReconst", "fHistEventViceReconst", 200, -20, 20, 10,0,1000);
288         fOutputList->Add(fHistEventViceReconst);
289         
290         fHistMCGenLAM  = new TH2F("fHistMCGenLAM" , "fHistMCGenLAM" ,140,1.06,1.2, 120, 0, fTriglow);
291         fOutputList->Add(fHistMCGenLAM);
292         
293         fHistMCGenALAM = new TH2F("fHistMCGenALAM", "fHistMCGenALAM",140,1.06,1.2, 120, 0, fTriglow);
294         fOutputList->Add(fHistMCGenALAM);
295         
296         fHistMCGenK0   = new TH2F("fHistMCGenK0"  , "fHistMCGenK0"  ,200,0.4,0.6, 120, 0, fTriglow);
297         fOutputList->Add(fHistMCGenK0);
298         
299         fHistMCGenLAMXIPLS = new TH2F("fHistMCGenLAMXIPLS", "fHistMCGenLAMXIPLS",140,1.06,1.2, 120, 0, fTriglow);
300         fOutputList->Add(fHistMCGenLAMXIPLS);
301         
302         fHistMCGenLAMXI   = new TH2F("fHistMCGenLAMXI"  , "fHistMCGenLAMXI"  ,140,1.06,1.2, 120, 0, fTriglow);
303         fOutputList->Add(fHistMCGenLAMXI);
304         
305         //New dimension for feed down corection 
306         
307         const Int_t ndimsK0 = 4;       
308         Int_t    binsK0[ndimsK0] = {200, 120,500,1000};
309         Double_t xminK0[ndimsK0] = {0.4,   0,  0,0.99};
310         Double_t xmaxK0[ndimsK0] = {0.6,   fTriglow, 10,   1};
311         
312         const Int_t ndimsLA = 4;       
313         Int_t    binsLA[ndimsLA] = { 140, 120,500,1000};
314         Double_t xminLA[ndimsLA] = {1.06,   0,  0,0.99};
315         Double_t xmaxLA[ndimsLA] = { 1.2,   fTriglow, 10,   1};
316         
317         fHistReconstK0= new THnSparseD("fHistReconstK0"  , "fHistReconstK0",ndimsK0,binsK0,xminK0,xmaxK0);
318         fHistReconstK0->Sumw2();
319         fOutputList->Add(fHistReconstK0);
320         
321         fHistReconstLA= new THnSparseD("fHistReconstLA"  , "fHistReconstLA",ndimsLA,binsLA,xminLA,xmaxLA);
322         fHistReconstLA->Sumw2();
323         fOutputList->Add(fHistReconstLA);
324         
325         fHistReconstALA= new THnSparseD("fHistReconstALA", "fHistReconstALA",ndimsLA,binsLA,xminLA,xmaxLA);
326         fHistReconstALA->Sumw2();
327         fOutputList->Add(fHistReconstALA);
328         
329         fHistMCAssoK0= new THnSparseD("fHistMCAssoK0"   , "fHistMCAssoK0"   ,ndimsK0,binsK0,xminK0,xmaxK0);
330         fHistMCAssoK0->Sumw2();
331         fOutputList->Add(fHistMCAssoK0);
332         
333         fHistMCAssoLA= new THnSparseD("fHistMCAssoLA"   , "fHistMCAssoLA"   ,ndimsLA,binsLA,xminLA,xmaxLA);
334         fHistMCAssoLA->Sumw2();
335         fOutputList->Add(fHistMCAssoLA);
336         
337         fHistMCAssoALA= new THnSparseD("fHistMCAssoALA" , "fHistMCAssoALA" , ndimsLA,binsLA,xminLA,xmaxLA);
338         fHistMCAssoALA->Sumw2();
339         fOutputList->Add(fHistMCAssoALA);
340         
341         fHistMCAssoLAXI= new THnSparseD("fHistMCAssoLAXI" , "fHistMCAssoLAXI" , ndimsLA,binsLA,xminLA,xmaxLA);
342         fHistMCAssoLAXI->Sumw2();
343         fOutputList->Add(fHistMCAssoLAXI);
344         
345         fHistMCAssoALAXiPlus= new THnSparseD("fHistMCAssoALAXiPlus" , "fHistMCAssoALAXiPlus" , ndimsLA,binsLA,xminLA,xmaxLA);
346         fHistMCAssoALAXiPlus->Sumw2();
347         fOutputList->Add(fHistMCAssoALAXiPlus);
348         
349         //--------------------------------------------Correlation Histos -----------------------------------------------------//
350         
351         //0-pTK0,1-PhiK0,2-EtaK0,3-DPhiK0,4-DEtaK0,5-TYPE,6-CutSet
352         const Int_t ndimsv0CORR = 8;       
353         Int_t    binsv0CORR[ndimsv0CORR] = {120, 200,          200,CorrBinsX,      CorrBinsY,4,500,1000};
354         
355         Double_t xminv0CORR[ndimsv0CORR] = {  0,   0,-fTrackEtaCut,    -PI/2,-2*fTrackEtaCut,0,  0,0.99};
356         
357         Double_t xmaxv0CORR[ndimsv0CORR] = {  fTriglow,2*PI, fTrackEtaCut,   3*PI/2, 2*fTrackEtaCut,4, 10,   1};
358         
359         fHistReconstSib= new THnSparseD("fHistReconstSib", "fHistReconstSib", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
360         fHistReconstSib->Sumw2();
361         fOutputList->Add(fHistReconstSib);
362         
363         fHistReconstMix= new THnSparseD("fHistReconstMix", "fHistReconstMix", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
364         fHistReconstMix->Sumw2();
365         fOutputList->Add(fHistReconstMix);
366         
367         fHistReconstSibGEN= new THnSparseD("fHistReconstSibGEN", "fHistReconstSibGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
368         fHistReconstSibGEN->Sumw2();
369         fOutputList->Add(fHistReconstSibGEN);
370         
371         fHistReconstMixGEN= new THnSparseD("fHistReconstMixGEN", "fHistReconstMixGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
372         fHistReconstMixGEN->Sumw2();
373         fOutputList->Add(fHistReconstMixGEN);
374         
375         fHistReconstSibASO= new THnSparseD("fHistReconstSibASO", "fHistReconstSibASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
376         fHistReconstSibASO->Sumw2();
377         fOutputList->Add(fHistReconstSibASO);
378         
379         fHistReconstMixASO= new THnSparseD("fHistReconstMixASO", "fHistReconstMixASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
380         fHistReconstMixASO->Sumw2();
381         fOutputList->Add(fHistReconstMixASO);
382         
383         fHistReconstSibFEED= new THnSparseD("fHistReconstSibFEED", "fHistReconstSibFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
384         fHistReconstSibFEED->Sumw2();
385         fOutputList->Add(fHistReconstSibFEED);
386         
387         fHistReconstMixFEED= new THnSparseD("fHistReconstMixFEED", "fHistReconstMixFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
388         fHistReconstMixFEED->Sumw2();
389         fOutputList->Add(fHistReconstMixFEED);
390         
391         
392         fHistTriggerSib= new TH3F("fHistTriggerSib", "fHistTriggerSib", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
393         fHistTriggerSib->Sumw2();
394         fOutputList->Add(fHistTriggerSib);
395         
396         fHistTriggerMix= new TH1F("fHistTriggerMix", "fHistTriggerMix", 100, fTriglow, fTrighigh);
397         fHistTriggerMix->Sumw2();
398         fOutputList->Add(fHistTriggerMix);
399         
400         fHistTriggerSibGEN= new TH3F("fHistTriggerSibGEN", "fHistTriggerSibGEN", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
401         fHistTriggerSibGEN->Sumw2();
402         fOutputList->Add(fHistTriggerSibGEN);
403         
404         fHistTriggerMixGEN= new TH1F("fHistTriggerMixGEN", "fHistTriggerMixGEN", 100, fTriglow, fTrighigh);
405         fHistTriggerMixGEN->Sumw2();
406         fOutputList->Add(fHistTriggerMixGEN);
407         
408         fHistTriggerSibASO= new TH3F("fHistTriggerSibASO", "fHistTriggerSibASO", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
409         fHistTriggerSibASO->Sumw2();
410         fOutputList->Add(fHistTriggerSibASO);
411         
412         fHistTriggerMixASO= new TH1F("fHistTriggerMixASO", "fHistTriggerMixASO", 100, fTriglow, fTrighigh);
413         fHistTriggerMixASO->Sumw2();
414         fOutputList->Add(fHistTriggerMixASO);
415         
416         //----------------------------------------------Event Pool-----------------------------------------------------//
417         fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins);
418         if(!fPoolMgr) return;
419         
420         PostData(1, fOutputList);
421 }
422 //---------------------------------------------------------------------------------------
423 void AliLeadingV0Correlation::UserExec(Option_t *)
424 {
425         
426     AliAnalysisManager   *mgr      = AliAnalysisManager::GetAnalysisManager();
427     AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler());
428         if (!inEvMain) return;
429         
430         // Pointers to PID Response objects.    
431         fPIDResponse = inEvMain->GetPIDResponse();
432         if(!fPIDResponse) return;
433         
434     fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent());
435         if(!fAODEvent) return;
436         
437         Int_t  ltrackMultiplicity        = 0;
438         Int_t  lrefMultiplicity          = 0;
439
440         //------------------------------------------------
441         // Before Physics Selection
442         //------------------------------------------------ 
443         ltrackMultiplicity   = (InputEvent())->GetNumberOfTracks();
444         lrefMultiplicity     =fAODEvent->GetHeader()->GetRefMultiplicity();
445         
446         fHist_Mult_B4_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
447         
448         Double_t * CentBins = fCentBins;
449         Double_t poolmin    = CentBins[0];
450         Double_t poolmax    = CentBins[fNCentBins];
451         
452         //----------------------------------------------------------
453         // Efficency denomenator comes before the physics selection
454         //----------------------------------------------------------
455         
456         Double_t  dimEventviceMC[2];
457         if(fAnalysisMC)    //Efficency denomenator comes before the physics selection
458         {
459                 AliAODMCHeader *aodMCheader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName());
460                 if(!aodMCheader) return;
461                 Float_t mcZv = aodMCheader->GetVtxZ();
462                 
463                 if (TMath::Abs(mcZv) >= fpvzcut) return;
464                 
465                 dimEventviceMC[0]=aodMCheader->GetVtxZ();
466                 
467                 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
468                 if(!mcArray)return;
469                 
470                 Int_t nMCTracks = mcArray->GetEntriesFast();
471                 
472                 dimEventviceMC[1]=nMCTracks;
473                 fHistEventViceGen->Fill(dimEventviceMC[0],dimEventviceMC[1]);
474                 
475                 TObjArray *selectedTracksLeadingMC=fAnalyseUE->FindLeadingObjects(mcArray);
476                 if(!selectedTracksLeadingMC) return;
477                 selectedTracksLeadingMC->SetOwner(kTRUE);
478                 
479                 TObjArray * selectedV0sMC =new TObjArray;
480                 selectedV0sMC->SetOwner(kTRUE);
481                 
482                 TObjArray * selectedV0sMCXI =new TObjArray;
483                 selectedV0sMCXI->SetOwner(kTRUE);
484                 
485                 for (Int_t iMC = 0; iMC<nMCTracks; iMC++)
486                 {
487                         AliAODMCParticle *mcTrack = (AliAODMCParticle*)mcArray->At(iMC);
488                         if (!mcTrack) continue;
489                         // Charged track Generated level
490                         Double_t mcTrackPt  = mcTrack->Pt();
491                         if ((mcTrackPt<fPtMin)||(mcTrackPt>fTriglow)) continue;
492                         
493                         Double_t mcTrackEta = mcTrack->Eta();
494                         Double_t mcTrackPhi = mcTrack->Phi();
495                         Bool_t TrIsPrime    = mcTrack->IsPhysicalPrimary();
496                         Bool_t TrPtMin      = mcTrackPt>fPtMin;
497                         Bool_t TrCharge     = (mcTrack->Charge())!=0;
498                         
499                         if (!TrIsPrime  && !TrPtMin && !TrCharge) continue;  //Check Point 1
500                         
501                         // V0 Generated level
502                         Int_t mcPartPdg           = mcTrack->GetPdgCode();
503                         
504                         Double_t mcRapidity   = mcTrack->Y();
505                         Bool_t V0RapMax       = TMath::Abs(mcRapidity)<fRapidityCut;
506                         Bool_t V0EtaMax       = TMath::Abs(mcTrackEta)<fTrackEtaCut;
507                         Double_t mcMass       = mcTrack->M();
508                         
509                         Double_t mcK0[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
510                         Double_t mcLa[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
511                         Double_t mcAl[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
512                         
513                         Int_t myTrackMotherLabel = mcTrack->GetMother();
514                         
515                         AliAODMCParticle *mcMother = (AliAODMCParticle*)mcArray->At(myTrackMotherLabel);
516                         if (!mcMother) continue;
517                         Int_t MotherPdg            = mcMother->GetPdgCode();
518                         Bool_t IsK0         = mcPartPdg==310;
519                         Bool_t IsLambda     = mcPartPdg==3122;
520                         Bool_t IsAntiLambda = mcPartPdg==-3122;
521                         
522                         Bool_t IsXImin  =MotherPdg== 3312;
523                         Bool_t IsXIPlus =MotherPdg==-3312;
524                         Bool_t IsXizero =MotherPdg== 3322;
525                         Bool_t IsOmega  =MotherPdg== 3334;
526                         
527                         switch (fCase) {
528                                 case 1:
529                                         
530                                         if (IsK0) 
531                                         {
532                                                 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
533                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
534                                         } 
535                                         
536                                         if (IsLambda) 
537                                         {
538                                                 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
539                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
540                                         }
541                                         
542                                         if (IsAntiLambda) 
543                                         {       
544                                                 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
545                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
546                                         }
547                                         
548                                         if (IsLambda && (IsXizero || IsXImin)) 
549                                         {       
550                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
551                                                 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
552                                         }
553                                         
554                                         if (IsLambda && IsOmega) 
555                                         {       
556                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
557                                         }
558                                         
559                                         if (IsAntiLambda && IsXIPlus) 
560                                         {       
561                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
562                                                 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
563                                         }
564                                         
565                                         break;
566                                         
567                                 case 2:
568
569                                         if (IsK0 && V0RapMax && TrIsPrime) 
570                                         {
571                                                 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
572                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
573                                         } 
574                                         
575                                         if (IsLambda && V0RapMax && TrIsPrime) 
576                                         {
577                                                 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
578                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
579                                         }
580                                         
581                                         if (IsAntiLambda && V0RapMax && TrIsPrime) 
582                                         {       
583                                                 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
584                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
585                                         }
586                                         
587                                         if (IsLambda && V0RapMax && (IsXizero || IsXImin)) 
588                                         {       
589                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
590                                                 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
591                                         }
592                                         
593                                         if (IsLambda && V0RapMax && IsOmega) 
594                                         {       
595                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
596                                         }
597                                         
598                                         if (IsAntiLambda && V0RapMax && IsXIPlus) 
599                                         {       
600                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
601                                                 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
602                                         }
603                                         
604                                         break;
605                                         
606                                 case 3:
607
608                                         if (IsK0 && V0EtaMax && TrIsPrime) 
609                                         {
610                                                 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
611                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
612                                         } 
613                                         
614                                         if (IsLambda && V0EtaMax && TrIsPrime) 
615                                         {
616                                                 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
617                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
618                                         }
619                                         
620                                         if (IsAntiLambda && V0EtaMax && TrIsPrime) 
621                                         {       
622                                                 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
623                                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
624                                         }
625                                         
626                                         if (IsLambda && V0EtaMax && (IsXizero || IsXImin)) 
627                                         {       
628                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
629                                                 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
630                                         }
631                                         
632                                         if (IsLambda && V0EtaMax && IsOmega) 
633                                         {       
634                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
635                                         }
636                                         
637                                         if (IsAntiLambda && V0EtaMax && IsXIPlus) 
638                                         {       
639                                                 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
640                                                 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
641                                         }
642                                         break;
643                                         
644                                 default:
645                                         AliInfo(Form("No case selected"));
646                                         break;
647                         }
648                 }
649                 
650                 FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerSibGEN,fHistReconstSibGEN);
651                 FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerMixGEN,fHistReconstMixGEN);
652                 
653                 FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstSibFEED);
654                 FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstMixFEED);
655     }
656         
657         // End Loop over MC condition
658         
659         //------------------------------------------------
660         // Physics Selection
661         //------------------------------------------------ 
662         UInt_t maskIsSelected = inEvMain->IsEventSelected();
663         Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB);
664     if (!isSelected) return;
665         
666         //------------------------------------------------
667         // After Trigger Selection
668         //------------------------------------------------
669         
670         fHist_Mult_Af_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
671         
672         //------------------------------------------------
673         // Getting: Primary Vertex + MagField Info
674         //------------------------------------------------
675         Double_t  dimEventviceReal[3];
676         Double_t  lBestPrimaryVtxPos[3];
677         Double_t  tPrimaryVtxPosition[3];
678         Double_t  lV0Position[3];
679         
680         AliAODVertex *lPrimaryBestAODVtx = fAODEvent->GetPrimaryVertex();
681         if (!lPrimaryBestAODVtx) return;
682         // get the best primary vertex available for the event
683         // As done in AliCascadeVertexer, we keep the one which is the best one available.
684         // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
685         // This one will be used for next calculations (DCA essentially)
686         lPrimaryBestAODVtx->GetXYZ(lBestPrimaryVtxPos);
687         
688         const AliVVertex *primaryVtx = fAODEvent->GetPrimaryVertex();
689         if(!primaryVtx)return;
690         tPrimaryVtxPosition[0] = primaryVtx->GetX();
691         tPrimaryVtxPosition[1] = primaryVtx->GetY();
692         tPrimaryVtxPosition[2] = primaryVtx->GetZ();
693         fHistPVx->Fill( tPrimaryVtxPosition[0] );
694         fHistPVy->Fill( tPrimaryVtxPosition[1] );
695         fHistPVz->Fill( tPrimaryVtxPosition[2] );
696         
697         //------------------------------------------------
698         // Primary Vertex Z position: SKIP
699         //------------------------------------------------
700         
701         Double_t lPVx = lBestPrimaryVtxPos[0];
702         Double_t lPVy = lBestPrimaryVtxPos[1];
703         Double_t lPVz = lBestPrimaryVtxPos[2];
704         
705         if ((TMath::Abs(lPVz)) >= fpvzcut) return ;
706         if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return;
707         fHist_Mult_PVz_Cut->Fill(ltrackMultiplicity,lrefMultiplicity);
708         
709         //------------------------------------------------
710         // Only look at events with well-established PV
711         //------------------------------------------------
712         
713         const AliAODVertex *lPrimaryTrackingAODVtxCheck = fAODEvent->GetPrimaryVertex();
714         const AliAODVertex *lPrimarySPDVtx = fAODEvent->GetPrimaryVertexSPD();
715         if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtxCheck )return;
716         
717         fHist_Mult_SPD_PVz->Fill(ltrackMultiplicity,lrefMultiplicity);
718         //------------------------------------------------
719         // Pileup Rejection
720         //------------------------------------------------
721         
722         // FIXME : quality selection regarding pile-up rejection 
723         if(fAODEvent->IsPileupFromSPD()) return;
724         fHist_Mult_SPD_PVz_Pileup->Fill(ltrackMultiplicity,lrefMultiplicity);
725         
726         fHistPVxAnalysis->Fill(tPrimaryVtxPosition[0]);
727         fHistPVyAnalysis->Fill(tPrimaryVtxPosition[1]);
728         fHistPVzAnalysis->Fill(tPrimaryVtxPosition[2]);
729         
730     dimEventviceReal[0]=tPrimaryVtxPosition[2];
731         dimEventviceReal[1]=ltrackMultiplicity;
732         
733         fHistEventViceReconst->Fill(dimEventviceReal[0],dimEventviceReal[1]);
734
735         //---------------------------------------------------------------------------------------------
736         
737         Double_t lDcaPosToPrimVertex = 0;Double_t lDcaNegToPrimVertex = 0;Double_t lDcaV0Daughters     = 0;
738         Double_t lV0cosPointAngle    = 0;Double_t lV0DecayLength      = 0;Double_t lV0Radius           = 0;
739         Double_t lcTauLambda         = 0;Double_t lcTauAntiLambda     = 0;   
740         Double_t lcTauK0s            = 0; 
741         Double_t lDCAV0PVz           = 0; 
742         
743         Double_t lInvMassK0   = 0, lInvMassLambda    = 0, lInvMassAntiLambda = 0;
744         Double_t lPtV0s       = 0; Double_t lPhiV0s  = 0; Double_t lEtaV0s   = 0;
745         Double_t lRapK0       = 0, lRapLambda        = 0, lRapAntiLambda     = 0;
746         Double_t lPzV0s       = 0; 
747         Double_t lPV0s        = 0;
748         
749         TObjArray *selectedTracksLeading=0;
750         selectedTracksLeading=fAnalyseUE->FindLeadingObjects(fAODEvent);
751         if(!selectedTracksLeading) return;
752         selectedTracksLeading->SetOwner(kTRUE);
753         
754         TObjArray * selectedV0s = new TObjArray;
755         selectedV0s->SetOwner(kTRUE);
756         
757         TObjArray * selectedV0sAssoc = new TObjArray;
758         selectedV0sAssoc->SetOwner(kTRUE);
759         
760         Int_t nV0s = fAODEvent->GetNumberOfV0s();
761         
762         for (Int_t i = 0; i < nV0s; i++) 
763         { // start of V0 slection loop
764                 AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
765                 if (!aodV0) continue;
766                 
767                 if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>fTriglow)) continue;
768                 
769                 // get daughters
770             AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
771         AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
772                 
773                 if (!myTrackPos || !myTrackNeg) continue;
774                 
775         if (!IsAcseptedV0(aodV0,myTrackPos,myTrackNeg)) continue;
776                 
777                 // VO's main characteristics to check the reconstruction cuts
778                 lDcaV0Daughters    = aodV0->DcaV0Daughters();
779                 lV0cosPointAngle   = aodV0->CosPointingAngle(lBestPrimaryVtxPos);
780                 
781                 aodV0->GetXYZ(lV0Position);
782                 
783                 lV0Radius      = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
784                 lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - tPrimaryVtxPosition[0],2) +
785                                                                          TMath::Power(lV0Position[1] - tPrimaryVtxPosition[1],2) +
786                                                                          TMath::Power(lV0Position[2] - tPrimaryVtxPosition[2],2));
787                 
788                 // DCA between daughter and Primary Vertex:
789                 if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
790                 if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();   
791                 lDCAV0PVz   = aodV0->DcaV0ToPrimVertex(); 
792                 
793                 // Quality tracks cuts:
794                 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
795                 
796                 // Invariant mass
797                 lInvMassK0         = aodV0->MassK0Short();
798                 lInvMassLambda     = aodV0->MassLambda();
799                 lInvMassAntiLambda = aodV0->MassAntiLambda();
800                 
801                 lPtV0s = aodV0->Pt();
802                 lPhiV0s= aodV0->Phi();
803                 lEtaV0s= aodV0->Eta();
804                 lPzV0s = aodV0->Pz();
805                 
806                 // Rapidity:
807                 lRapK0     = aodV0->RapK0Short();
808                 lRapLambda = aodV0->RapLambda();
809                 lRapAntiLambda = aodV0->Y(-3122);
810                 
811                 if (lPtV0s==0) {continue;}
812                 
813         Float_t nSigmaPosPion   = 0.;
814         Float_t nSigmaNegPion   = 0.;
815         Float_t nSigmaPosProton = 0.;
816         Float_t nSigmaNegProton = 0.;
817                 
818         const AliAODPid *pPid = myTrackPos->GetDetPid();
819         const AliAODPid *nPid = myTrackNeg->GetDetPid();
820                 
821         if (pPid)
822         {
823             Double_t pdMom = pPid->GetTPCmomentum();
824             if (pdMom<1.0 && (fcollidingSys=="PbPb"))
825             {
826                 nSigmaPosPion   = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
827                 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
828             }
829                         
830                         if (fcollidingSys=="PP")
831             {
832                 nSigmaPosPion   = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
833                 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
834             }
835         }
836                 
837         if (nPid)
838         {
839             Double_t ndMom = nPid->GetTPCmomentum();
840             if (ndMom<1.0 && (fcollidingSys=="PbPb"))
841             {
842                 nSigmaNegPion   = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
843                 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
844             }
845                         
846                         if (fcollidingSys=="PP")
847             {
848                 nSigmaNegPion   = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
849                 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
850             }
851         }
852                 Bool_t bpPion   = TMath::Abs(nSigmaPosPion)   <= fSigmaPID;
853         Bool_t bpProton = TMath::Abs(nSigmaPosProton) <= fSigmaPID;
854         Bool_t bnPion   = TMath::Abs(nSigmaNegPion)   <= fSigmaPID;
855         Bool_t bnProton = TMath::Abs(nSigmaNegProton) <= fSigmaPID;
856                 
857         Bool_t cutK0Pid         = (bpPion   && bnPion)  ;
858         Bool_t cutLambdaPid     = (bpProton && bnPion)  ;
859         Bool_t cutAntiLambdaPid = (bpPion   && bnProton);
860         //--------------------------------------------------
861                 
862                 lPV0s = TMath::Sqrt(lPzV0s*lPzV0s + lPtV0s*lPtV0s);
863                 
864                 if(lPV0s > 0) lcTauLambda     = (lV0DecayLength*lInvMassLambda)/lPV0s;
865                 if(lPV0s > 0) lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPV0s; 
866                 if(lPV0s > 0) lcTauK0s        = (lV0DecayLength*lInvMassK0)/lPV0s;      
867                 
868                 Bool_t k0ctcut = (lcTauK0s        < fCutCTK0);
869                 Bool_t lactcut = (lcTauLambda     < fCutCTLa);
870                 Bool_t alactcut= (lcTauAntiLambda < fCutCTLa);
871                 
872                 Bool_t k0Rapcut = (TMath::Abs(lRapK0)         < fRapidityCut);
873                 Bool_t laRapcut = (TMath::Abs(lRapLambda)     < fRapidityCut);
874                 Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut);
875                 
876                 Bool_t V0EtaMax= (TMath::Abs(lEtaV0s) < fTrackEtaCut);
877                 
878                 Bool_t k0cutset = IsAcseptedK0(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassLambda,lInvMassAntiLambda);
879                 Bool_t lacutset = IsAcseptedLA(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
880                 Bool_t alacutset= IsAcseptedLA(lV0Radius,lDcaNegToPrimVertex,lDcaPosToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
881                 
882                 Double_t spK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
883                 Double_t spLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
884                 Double_t spAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
885         
886                 switch (fCase) {
887                         case 1:
888                                 fHistReconstK0->Fill(spK0); 
889                                 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
890                                 
891                                 fHistReconstLA->Fill(spLa); 
892                                 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
893                                 
894                                 fHistReconstALA->Fill(spAl);
895                                 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
896                                 
897                                 break;
898                                 
899                         case 2:
900                                 if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid)
901                                 {
902                                         fHistReconstK0->Fill(spK0); 
903                                         if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
904                                 }
905                                 
906                                 if (lactcut && laRapcut && lacutset && cutLambdaPid)
907                                 {
908                                         fHistReconstLA->Fill(spLa); 
909                                         if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
910                                 }
911                                 
912                                 if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
913                                 {
914                                         fHistReconstALA->Fill(spAl);
915                                         if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
916                                 }
917
918                                 break;
919                                 
920                         case 3:
921                                 if(k0ctcut && V0EtaMax && k0cutset && cutK0Pid)
922                                 {
923                                         fHistReconstK0->Fill(spK0); 
924                                         if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
925                                 }
926                                 
927                                 if (lactcut && V0EtaMax && lacutset && cutLambdaPid)
928                                 {
929                                         fHistReconstLA->Fill(spLa); 
930                                         if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
931                                 }
932                                 
933                                 if (alactcut && V0EtaMax && alacutset && cutAntiLambdaPid)
934                                 {
935                                         fHistReconstALA->Fill(spAl);
936                                         if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
937                                 }
938                                 break;
939                                 
940                         default:
941                                 AliInfo(Form("No case selected"));
942                                 break;
943                 }
944                 
945         if (fAnalysisMC)
946         {
947                 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
948                 if(!mcArray)return;
949                 
950                         Int_t myTrackPosLabel        = TMath::Abs(myTrackPos->GetLabel());
951                         Int_t myTrackNegLabel        = TMath::Abs(myTrackNeg->GetLabel());
952                         
953                         AliAODMCParticle *mcPosTrack = (AliAODMCParticle*)mcArray->At(myTrackPosLabel);
954                         if(!mcPosTrack)continue;
955                         AliAODMCParticle *mcNegTrack = (AliAODMCParticle*)mcArray->At(myTrackNegLabel);
956                         if(!mcNegTrack)continue;
957                         
958                         Int_t PosDaughterPdg = mcPosTrack->GetPdgCode();
959                         Int_t NegDaughterPdg = mcNegTrack->GetPdgCode();
960                         
961                         Int_t myTrackPosMotherLabel = mcPosTrack->GetMother();
962                         Int_t myTrackNegMotherLabel = mcNegTrack->GetMother();
963                         
964                         if ((myTrackPosMotherLabel==-1)||(myTrackNegMotherLabel==-1)) continue;
965                         if (myTrackPosMotherLabel!=myTrackNegMotherLabel) continue;
966                         
967                         AliAODMCParticle *mcPosMother = (AliAODMCParticle*)mcArray->At(myTrackPosMotherLabel);
968                         if(!mcPosMother)continue;
969                         Int_t MotherPdg  = mcPosMother->GetPdgCode();
970                         Bool_t IsPrime   = mcPosMother->IsPhysicalPrimary();
971                         
972                         Int_t myGrandMotherLabel = mcPosMother->GetMother();
973                         AliAODMCParticle *mcGrandMother = (AliAODMCParticle*)mcArray->At(myGrandMotherLabel);
974                         Int_t GrandMotherPdg     = mcGrandMother->GetPdgCode();
975                         
976                         Double_t rcK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
977                         Double_t rcLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
978                         Double_t rcAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
979                         
980                         switch (fCase) {
981                                 case 1:
982                                         fHistMCAssoK0->Fill(rcK0);
983                                         if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
984                                         
985                                         fHistMCAssoLA->Fill(rcLa);
986                                         if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
987                                         
988                                         fHistMCAssoALA->Fill(rcAl);
989                                         if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
990                                         
991                                         break;
992                                         
993                                 case 2:
994                                         if ((k0ctcut && k0Rapcut && k0cutset)&&(MotherPdg     ==  310 && 
995                                                                                                                         PosDaughterPdg==  211 && 
996                                                                                                                         NegDaughterPdg== -211 &&
997                                                                                                                         IsPrime))
998                                         {
999                                                 fHistMCAssoK0->Fill(rcK0);
1000                                                 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
1001                                         }
1002                                         
1003                                         if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
1004                                                                                                                         PosDaughterPdg== 2212 && 
1005                                                                                                                         NegDaughterPdg== -211 &&
1006                                                                                                                         IsPrime)) 
1007                                         {
1008                                                 fHistMCAssoLA->Fill(rcLa);
1009                                                 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
1010                                         }
1011                                         
1012                                         if ((alactcut && alaRapcut && alacutset)&&(MotherPdg     == -3122 && 
1013                                                                                                                            PosDaughterPdg==   211 && 
1014                                                                                                                            NegDaughterPdg== -2212 &&
1015                                                                                                                            IsPrime))
1016                                         {
1017                                                 fHistMCAssoALA->Fill(rcAl);
1018                                                 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
1019                                         }
1020                                         
1021                                         if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
1022                                                                                                                         PosDaughterPdg== 2212 && 
1023                                                                                                                         NegDaughterPdg== -211 &&
1024                                                                                                                         (GrandMotherPdg==3322 ||GrandMotherPdg==3312))) 
1025                                         {
1026                                                 fHistMCAssoLAXI->Fill(rcLa);
1027                                         }
1028                                         
1029                                         if ((alactcut && alaRapcut && alacutset)&&(MotherPdg      == -3122 && 
1030                                                                                                                            PosDaughterPdg==   211 && 
1031                                                                                                                            NegDaughterPdg== -2212 &&
1032                                                                                                                            GrandMotherPdg== -3312))
1033                                         {
1034                                                 fHistMCAssoALAXiPlus->Fill(rcAl);
1035                                         }
1036                                         
1037                                         break;
1038                                         
1039                                 case 3:
1040                                         if ((k0ctcut && V0EtaMax && k0cutset)&&(MotherPdg     ==  310 && 
1041                                                                                                                                            PosDaughterPdg==  211 && 
1042                                                                                                                                            NegDaughterPdg== -211 &&
1043                                                                                                                                            IsPrime))
1044                                         {
1045                                                 fHistMCAssoK0->Fill(rcK0); 
1046                                                 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
1047                                         }
1048                                         
1049                                         if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg     == 3122 && 
1050                                                                                                                         PosDaughterPdg== 2212 && 
1051                                                                                                                         NegDaughterPdg== -211 &&
1052                                                                                                                         IsPrime)) 
1053                                         {
1054                                                 fHistMCAssoLA->Fill(rcLa);
1055                                                 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
1056                                         }
1057                                         
1058                                         if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg     == -3122 && 
1059                                                                                                                            PosDaughterPdg==   211 && 
1060                                                                                                                            NegDaughterPdg== -2212 &&
1061                                                                                                                            IsPrime))
1062                                         {
1063                                                 fHistMCAssoALA->Fill(rcAl);
1064                                                 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
1065                                         }
1066                                         
1067                                         if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg     == 3122 && 
1068                                                                                                                         PosDaughterPdg== 2212 && 
1069                                                                                                                         NegDaughterPdg== -211 &&
1070                                                                                                                         (GrandMotherPdg==3322 ||GrandMotherPdg==3312))) 
1071                                         {
1072                                                 fHistMCAssoLAXI->Fill(rcLa);
1073                                         }
1074                                         
1075                                         if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg      == -3122 && 
1076                                                                                                                            PosDaughterPdg==   211 && 
1077                                                                                                                            NegDaughterPdg== -2212 &&
1078                                                                                                                            GrandMotherPdg== -3312))
1079                                         {
1080                                                 fHistMCAssoALAXiPlus->Fill(rcAl);
1081                                         }
1082                                         break;
1083                                         
1084                                 default:
1085                                         AliInfo(Form("No case selected"));
1086                                         break;
1087                         }       
1088         }
1089         }       
1090         
1091         FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib);
1092         FillCorrelationMixing(ltrackMultiplicity,tPrimaryVtxPosition[2],poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix);
1093         
1094         FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0sAssoc,fHistTriggerSibASO,fHistReconstSibASO);
1095         FillCorrelationMixing(ltrackMultiplicity,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0sAssoc,fHistTriggerMixASO,fHistReconstMixASO);
1096         
1097         PostData(1,fOutputList);
1098 }       
1099 //---------------------------------------------------------------------------------------
1100 void AliLeadingV0Correlation::Terminate(Option_t *)
1101 {
1102         //No need in the grid
1103 }
1104 //---------------------------------------------------------------------------------------
1105 Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
1106 {       
1107         if(fCase==1 || fCase==2)
1108         if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
1109         
1110         if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
1111         
1112         Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
1113         if (nCrossedRowsTPC < fTPCClusters) return kFALSE;
1114         
1115         Int_t findable=itrack->GetTPCNclsF();
1116         if (findable <= 0) return kFALSE;
1117         
1118         if (nCrossedRowsTPC/findable < fTPCfindratio) return kFALSE;
1119         return kTRUE;
1120 }
1121 //---------------------------------------------------------------------------------------
1122 Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
1123 {
1124         if (!aodV0) return kFALSE;
1125         
1126         // Offline reconstructed V0 only
1127     if (aodV0->GetOnFlyStatus()) return kFALSE;
1128         
1129     // Get daughters and check them
1130         myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1131         myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1132         
1133         if (!myTrackPos||!myTrackNeg) return kFALSE;
1134         // Unlike signs of daughters
1135     if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE;
1136         
1137         // Track cuts for daughers
1138     if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE;
1139         
1140         // Minimum pt of daughters
1141     Double_t lPtPos = myTrackPos->Pt();
1142     Double_t lPtNeg = myTrackNeg->Pt();
1143         
1144         if (lPtPos<fPtMin || lPtNeg<fPtMin) return kFALSE;
1145         
1146         return kTRUE;
1147 }
1148 //---------------------------------------------------------------------------------------
1149 Bool_t AliLeadingV0Correlation::IsAcseptedK0(Double_t v0rad,
1150                                                         Double_t dcaptp,
1151                                                         Double_t dcantp,
1152                                                         Double_t dcav0d,
1153                                                         Double_t cpa,
1154                                                         Double_t massLa,
1155                                                         Double_t massALa)
1156 {       
1157                         if(v0rad  >=fV0radius           &&
1158                            dcaptp >=fV0PostoPVz         &&
1159                            dcantp >=fV0NegtoPVz         &&
1160                            dcav0d <=fDCAV0Daughters     &&
1161                            cpa    >=fCPAK0                      &&
1162                            TMath::Abs(massLa  - 1.115683) > fRejectLamK0 &&
1163                            TMath::Abs(massALa - 1.115683) > fRejectLamK0 )return kTRUE;
1164         return kFALSE;
1165 }
1166 //---------------------------------------------------------------------------------------
1167 Bool_t AliLeadingV0Correlation::IsAcseptedLA(Double_t v0rad,
1168                                                         Double_t dcaptp,
1169                                                         Double_t dcantp,
1170                                                         Double_t dcav0d,
1171                                                         Double_t cpa,
1172                                                         Double_t massK0)
1173 {
1174         if(v0rad  >=fV0radius           &&
1175            dcaptp >=fV0PostoPVz         &&
1176            dcantp >=fV0NegtoPVz         &&
1177            dcav0d <=fDCAV0Daughters     &&
1178            cpa    >=fCPALam                     &&
1179            TMath::Abs(massK0  - 0.4976) > fRejectK0Lam &&
1180            TMath::Abs(massK0  - 0.4976) > fRejectK0Lam )return kTRUE;
1181         return kFALSE;
1182 }
1183 //---------------------------------------------------------------------------------------
1184 Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const 
1185 {
1186         const Float_t massK0            = 0.497; 
1187         
1188         return ((massK0-fMassCutK0)<=mass && mass<=(massK0 + fMassCutK0))?1:0;
1189 }
1190 //---------------------------------------------------------------------------------------
1191 Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const 
1192 {
1193         const Float_t massLambda        = 1.116; 
1194         
1195         return ((massLambda-fMassCutLa)<=mass && mass<=(massLambda + fMassCutLa))?1:0;
1196 }
1197 //---------------------------------------------------------------------------------------
1198 Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi)
1199 {
1200         if (DPhi < -TMath::Pi()/2)  DPhi += 2*TMath::Pi();
1201         if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();      
1202         return DPhi;    
1203 }
1204 //---------------------------------------------------------------------------------------
1205 Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
1206 {
1207         Int_t atrID = track->GetID();
1208
1209         for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
1210                 AliAODv0* aodV0 = fAODEvent->GetV0(i);
1211                 
1212                 AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1213         AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1214                         
1215                 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
1216                 //----------------------------------
1217                 Int_t negID = trackNeg->GetID();
1218                 Int_t posID = trackPos->GetID();
1219                 
1220                 if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1221                 if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1222                 //----------------------------------
1223         }
1224         return kFALSE;
1225 }
1226 //---------------------------------------------------------------------------------------
1227 void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
1228                                                                           TObjArray*triggerArray,
1229                                                                           TObjArray*selectedV0Array,
1230                                                                           TH3F*triggerHist,
1231                                                                           THnSparse*associateHist)
1232 {
1233         Double_t  binsv0CORR[8];
1234         Double_t  binsTrigSib[2];
1235         Int_t counterSibMCA=0;
1236         
1237     for(Int_t i=0;i<triggerArray->GetEntriesFast();i++)
1238         {
1239                 AliAODTrack* trigger = (AliAODTrack*)triggerArray->At(0);
1240                 if(!trigger)continue;
1241                 
1242                 if(fRemoveAutoCorr) 
1243                 if(IsTrackFromV0(trigger))continue;
1244                         
1245                 Double_t triggerPt  = trigger->Pt();
1246                 Double_t triggerPhi = trigger->Phi();
1247                 Double_t triggerEta = trigger->Eta();
1248                 
1249                 if(triggerPt<fTriglow||triggerPt>fTrighigh)continue;
1250                 counterSibMCA++;
1251                 
1252                 if(counterSibMCA==triggerArray->GetEntriesFast()){
1253                         
1254                         binsTrigSib[0]=triggerPt;
1255                         binsTrigSib[1]=MultipOrCent;
1256                         
1257                         if(triggerHist)triggerHist->Fill(binsTrigSib[0],triggerPhi,triggerEta);
1258                         
1259                         for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
1260                                 
1261                                 V0Correlationparticle* associate = (V0Correlationparticle*) selectedV0Array->At(j);
1262                                 if(!associate)continue;
1263                                 
1264                                 binsv0CORR[0]= associate->Pt();
1265                                 binsv0CORR[1]= associate->Phi();
1266                                 binsv0CORR[2]= associate->Eta();
1267                                 
1268                                 if(binsv0CORR[0]>triggerPt) continue;
1269                                 
1270                                 binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]);
1271                                 binsv0CORR[4]=triggerEta-binsv0CORR[2];
1272                                 binsv0CORR[5]= associate->WhichCandidate();
1273                                 binsv0CORR[6]= associate->DCAPostoP();
1274                                 binsv0CORR[7]= associate->DCANegtoP();
1275                                 
1276                                 associateHist->Fill(binsv0CORR);
1277                         }
1278                   }
1279                 }
1280 }
1281 //---------------------------------------------------------------------------------------
1282 void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
1283                                                                    Double_t pvxMix,
1284                                                                    Double_t poolmax,
1285                                                                    Double_t poolmin,
1286                                                                    TObjArray*triggerArray,
1287                                                                    TObjArray*selectedV0Array,
1288                                                                    TH1F*triggerHist,
1289                                                                    THnSparse*associateHist)
1290 {
1291         if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
1292         {
1293                 if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
1294                 return;
1295         }
1296         
1297         Double_t  binsv0CORRMix[8];
1298         Double_t  binsTrigMix[2];
1299         Double_t  counterMix=0;
1300         
1301         AliEventPool* pool = fPoolMgr->GetEventPool(MultipOrCentMix, pvxMix);
1302         if (!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", MultipOrCentMix, pvxMix));
1303         
1304     if (pool->IsReady() || pool->NTracksInPool() > fPoolMinNTracks  || pool->GetCurrentNEvents() > fMinEventsToMix)
1305         {
1306                 Int_t nMix = pool->GetCurrentNEvents();
1307                 for (Int_t jMix=0; jMix<nMix; jMix++){
1308                         
1309                         TObjArray* mixEvents = pool->GetEvent(jMix);
1310                         for (Int_t i=0; i<triggerArray->GetEntriesFast(); i++){
1311                                 
1312                                 AliAODTrack* trig = (AliAODTrack*)triggerArray->At(0);
1313                                 if(!trig)continue;
1314                                 
1315                                 if(fRemoveAutoCorr) 
1316                                 if(IsTrackFromV0(trig))continue;
1317                                 
1318                                 Double_t trigPhi  = trig->Phi();
1319                                 Double_t trigEta  = trig->Eta();
1320                                 Double_t trigPt   = trig->Pt();
1321                                 
1322                                 if(trigPt<fTriglow||trigPt>fTrighigh)continue;
1323                                 counterMix++;
1324                                 
1325                                 if(counterMix==triggerArray->GetEntriesFast()){
1326                                         
1327                                         binsTrigMix[0]=trigPt;
1328                                         binsTrigMix[1]=MultipOrCentMix;
1329                                         
1330                                         if(triggerHist)triggerHist->Fill(binsTrigMix[0]);
1331                                         
1332                                         for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
1333                                                 
1334                                                 V0Correlationparticle* associate = (V0Correlationparticle*) mixEvents->At(j);
1335                                                 if(!associate)continue;
1336                                                 
1337                                                 binsv0CORRMix[0]= associate->Pt();
1338                                                 binsv0CORRMix[1]= associate->Phi();
1339                                                 binsv0CORRMix[2]= associate->Eta();
1340                                                 
1341                                                 if(binsv0CORRMix[0]>trigPt) continue;
1342                                                 
1343                                                 binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]);
1344                                                 binsv0CORRMix[4]=trigEta-binsv0CORRMix[2];
1345                                                 binsv0CORRMix[5]=associate->WhichCandidate();
1346                                                 binsv0CORRMix[6]=associate->DCAPostoP();
1347                                                 binsv0CORRMix[7]=associate->DCANegtoP();
1348                                                 
1349                                                 associateHist->Fill(binsv0CORRMix);
1350                                                 }
1351                                         }
1352                                 }
1353                         }
1354                 }
1355         
1356         TObjArray* tracksClone = new TObjArray;
1357         tracksClone->SetOwner(kTRUE);
1358         
1359         for (Int_t i=0; i<selectedV0Array->GetEntriesFast(); i++)
1360         {
1361                 V0Correlationparticle* particle = (V0Correlationparticle*) selectedV0Array->At(i);
1362                 tracksClone->Add(new V0Correlationparticle(particle->Eta(), 
1363                                                                                           particle->Phi(), 
1364                                                                                           particle->Pt(),
1365                                                                                           particle->WhichCandidate(),
1366                                                                                           particle->DCAPostoP(),
1367                                                                                           particle->DCANegtoP()));
1368         };
1369         pool->UpdatePool(tracksClone);
1370 }
1371 //---------------------------------------------------------------------------------------                                                                                       
1372                                                                 
1373                                         
1374                                                                                                 
1375