]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/DPhi/AliLeadingV0Correlation.cxx
update from Sudipan
[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,nMCTracks};
510                         Double_t mcLa[3] = {mcMass,mcTrackPt,nMCTracks};
511                         Double_t mcAl[3] = {mcMass,mcTrackPt,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(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
1108         
1109         if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
1110         
1111         Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
1112         if (nCrossedRowsTPC < fTPCClusters) return kFALSE;
1113         
1114         Int_t findable=itrack->GetTPCNclsF();
1115         if (findable <= 0) return kFALSE;
1116         
1117         if (nCrossedRowsTPC/findable < fTPCfindratio) return kFALSE;
1118         return kTRUE;
1119 }
1120 //---------------------------------------------------------------------------------------
1121 Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
1122 {
1123         if (!aodV0) return kFALSE;
1124         
1125         // Offline reconstructed V0 only
1126     if (aodV0->GetOnFlyStatus()) return kFALSE;
1127         
1128     // Get daughters and check them
1129         myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1130         myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1131         
1132         if (!myTrackPos||!myTrackNeg) return kFALSE;
1133         // Unlike signs of daughters
1134     if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE;
1135         
1136         // Track cuts for daughers
1137     if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE;
1138         
1139         // Minimum pt of daughters
1140     Double_t lPtPos = myTrackPos->Pt();
1141     Double_t lPtNeg = myTrackNeg->Pt();
1142         
1143         if (lPtPos<fPtMin || lPtNeg<fPtMin) return kFALSE;
1144         
1145         return kTRUE;
1146 }
1147 //---------------------------------------------------------------------------------------
1148 Bool_t AliLeadingV0Correlation::IsAcseptedK0(Double_t v0rad,
1149                                                         Double_t dcaptp,
1150                                                         Double_t dcantp,
1151                                                         Double_t dcav0d,
1152                                                         Double_t cpa,
1153                                                         Double_t massLa,
1154                                                         Double_t massALa)
1155 {       
1156                         if(v0rad  >=fV0radius           &&
1157                            dcaptp >=fV0PostoPVz         &&
1158                            dcantp >=fV0NegtoPVz         &&
1159                            dcav0d <=fDCAV0Daughters     &&
1160                            cpa    >=fCPAK0                      &&
1161                            TMath::Abs(massLa  - 1.115683) > fRejectLamK0 &&
1162                            TMath::Abs(massALa - 1.115683) > fRejectLamK0 )return kTRUE;
1163         return kFALSE;
1164 }
1165 //---------------------------------------------------------------------------------------
1166 Bool_t AliLeadingV0Correlation::IsAcseptedLA(Double_t v0rad,
1167                                                         Double_t dcaptp,
1168                                                         Double_t dcantp,
1169                                                         Double_t dcav0d,
1170                                                         Double_t cpa,
1171                                                         Double_t massK0)
1172 {
1173         if(v0rad  >=fV0radius           &&
1174            dcaptp >=fV0PostoPVz         &&
1175            dcantp >=fV0NegtoPVz         &&
1176            dcav0d <=fDCAV0Daughters     &&
1177            cpa    >=fCPALam                     &&
1178            TMath::Abs(massK0  - 0.4976) > fRejectK0Lam &&
1179            TMath::Abs(massK0  - 0.4976) > fRejectK0Lam )return kTRUE;
1180         return kFALSE;
1181 }
1182 //---------------------------------------------------------------------------------------
1183 Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const 
1184 {
1185         const Float_t massK0            = 0.497; 
1186         
1187         return ((massK0-fMassCutK0)<=mass && mass<=(massK0 + fMassCutK0))?1:0;
1188 }
1189 //---------------------------------------------------------------------------------------
1190 Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const 
1191 {
1192         const Float_t massLambda        = 1.116; 
1193         
1194         return ((massLambda-fMassCutLa)<=mass && mass<=(massLambda + fMassCutLa))?1:0;
1195 }
1196 //---------------------------------------------------------------------------------------
1197 Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi)
1198 {
1199         if (DPhi < -TMath::Pi()/2)  DPhi += 2*TMath::Pi();
1200         if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();      
1201         return DPhi;    
1202 }
1203 //---------------------------------------------------------------------------------------
1204 Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
1205 {
1206         Int_t atrID = track->GetID();
1207
1208         for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
1209                 AliAODv0* aodV0 = fAODEvent->GetV0(i);
1210                 
1211                 AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1212         AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1213                         
1214                 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
1215                 //----------------------------------
1216                 Int_t negID = trackNeg->GetID();
1217                 Int_t posID = trackPos->GetID();
1218                 
1219                 if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1220                 if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1221                 //----------------------------------
1222         }
1223         return kFALSE;
1224 }
1225 //---------------------------------------------------------------------------------------
1226 void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
1227                                                                           TObjArray*triggerArray,
1228                                                                           TObjArray*selectedV0Array,
1229                                                                           TH3F*triggerHist,
1230                                                                           THnSparse*associateHist)
1231 {
1232         Double_t  binsv0CORR[8];
1233         Double_t  binsTrigSib[2];
1234         Int_t counterSibMCA=0;
1235         
1236     for(Int_t i=0;i<triggerArray->GetEntriesFast();i++)
1237         {
1238                 AliAODTrack* trigger = (AliAODTrack*)triggerArray->At(0);
1239                 if(!trigger)continue;
1240                 
1241                 if(fRemoveAutoCorr) 
1242                 if(IsTrackFromV0(trigger))continue;
1243                         
1244                 Double_t triggerPt  = trigger->Pt();
1245                 Double_t triggerPhi = trigger->Phi();
1246                 Double_t triggerEta = trigger->Eta();
1247                 
1248                 if(triggerPt<fTriglow||triggerPt>fTrighigh)continue;
1249                 counterSibMCA++;
1250                 
1251                 if(counterSibMCA==triggerArray->GetEntriesFast()){
1252                         
1253                         binsTrigSib[0]=triggerPt;
1254                         binsTrigSib[1]=MultipOrCent;
1255                         
1256                         if(triggerHist)triggerHist->Fill(binsTrigSib[0],triggerPhi,triggerEta);
1257                         
1258                         for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
1259                                 
1260                                 V0Correlationparticle* associate = (V0Correlationparticle*) selectedV0Array->At(j);
1261                                 if(!associate)continue;
1262                                 
1263                                 binsv0CORR[0]= associate->Pt();
1264                                 binsv0CORR[1]= associate->Phi();
1265                                 binsv0CORR[2]= associate->Eta();
1266                                 
1267                                 if(binsv0CORR[0]>triggerPt) continue;
1268                                 
1269                                 binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]);
1270                                 binsv0CORR[4]=triggerEta-binsv0CORR[2];
1271                                 binsv0CORR[5]= associate->WhichCandidate();
1272                                 binsv0CORR[6]= associate->DCAPostoP();
1273                                 binsv0CORR[7]= associate->DCANegtoP();
1274                                 
1275                                 associateHist->Fill(binsv0CORR);
1276                         }
1277                   }
1278                 }
1279 }
1280 //---------------------------------------------------------------------------------------
1281 void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
1282                                                                    Double_t pvxMix,
1283                                                                    Double_t poolmax,
1284                                                                    Double_t poolmin,
1285                                                                    TObjArray*triggerArray,
1286                                                                    TObjArray*selectedV0Array,
1287                                                                    TH1F*triggerHist,
1288                                                                    THnSparse*associateHist)
1289 {
1290         if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
1291         {
1292                 if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
1293                 return;
1294         }
1295         
1296         Double_t  binsv0CORRMix[8];
1297         Double_t  binsTrigMix[2];
1298         Double_t  counterMix=0;
1299         
1300         AliEventPool* pool = fPoolMgr->GetEventPool(MultipOrCentMix, pvxMix);
1301         if (!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", MultipOrCentMix, pvxMix));
1302         
1303     if (pool->IsReady() || pool->NTracksInPool() > fPoolMinNTracks  || pool->GetCurrentNEvents() > fMinEventsToMix)
1304         {
1305                 Int_t nMix = pool->GetCurrentNEvents();
1306                 for (Int_t jMix=0; jMix<nMix; jMix++){
1307                         
1308                         TObjArray* mixEvents = pool->GetEvent(jMix);
1309                         for (Int_t i=0; i<triggerArray->GetEntriesFast(); i++){
1310                                 
1311                                 AliAODTrack* trig = (AliAODTrack*)triggerArray->At(0);
1312                                 if(!trig)continue;
1313                                 
1314                                 if(fRemoveAutoCorr) 
1315                                 if(IsTrackFromV0(trig))continue;
1316                                 
1317                                 Double_t trigPhi  = trig->Phi();
1318                                 Double_t trigEta  = trig->Eta();
1319                                 Double_t trigPt   = trig->Pt();
1320                                 
1321                                 if(trigPt<fTriglow||trigPt>fTrighigh)continue;
1322                                 counterMix++;
1323                                 
1324                                 if(counterMix==triggerArray->GetEntriesFast()){
1325                                         
1326                                         binsTrigMix[0]=trigPt;
1327                                         binsTrigMix[1]=MultipOrCentMix;
1328                                         
1329                                         if(triggerHist)triggerHist->Fill(binsTrigMix[0]);
1330                                         
1331                                         for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
1332                                                 
1333                                                 V0Correlationparticle* associate = (V0Correlationparticle*) mixEvents->At(j);
1334                                                 if(!associate)continue;
1335                                                 
1336                                                 binsv0CORRMix[0]= associate->Pt();
1337                                                 binsv0CORRMix[1]= associate->Phi();
1338                                                 binsv0CORRMix[2]= associate->Eta();
1339                                                 
1340                                                 if(binsv0CORRMix[0]>trigPt) continue;
1341                                                 
1342                                                 binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]);
1343                                                 binsv0CORRMix[4]=trigEta-binsv0CORRMix[2];
1344                                                 binsv0CORRMix[5]=associate->WhichCandidate();
1345                                                 binsv0CORRMix[6]=associate->DCAPostoP();
1346                                                 binsv0CORRMix[7]=associate->DCANegtoP();
1347                                                 
1348                                                 associateHist->Fill(binsv0CORRMix);
1349                                                 }
1350                                         }
1351                                 }
1352                         }
1353                 }
1354         
1355         TObjArray* tracksClone = new TObjArray;
1356         tracksClone->SetOwner(kTRUE);
1357         
1358         for (Int_t i=0; i<selectedV0Array->GetEntriesFast(); i++)
1359         {
1360                 V0Correlationparticle* particle = (V0Correlationparticle*) selectedV0Array->At(i);
1361                 tracksClone->Add(new V0Correlationparticle(particle->Eta(), 
1362                                                                                           particle->Phi(), 
1363                                                                                           particle->Pt(),
1364                                                                                           particle->WhichCandidate(),
1365                                                                                           particle->DCAPostoP(),
1366                                                                                           particle->DCANegtoP()));
1367         };
1368         pool->UpdatePool(tracksClone);
1369 }
1370 //---------------------------------------------------------------------------------------                                                                                       
1371                                                                 
1372                                         
1373                                                                                                 
1374