]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/DPhi/AliLeadingV0Correlation.cxx
coverity fix (Jayarathna, Sandun Y <sypahula@Central.UH.EDU>)
[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 <TTree.h>
12 #include <TRandom.h>
13 #include <THnSparse.h>
14 #include <TPDGCode.h>
15 #include <TDatabasePDG.h>
16
17 #include "AliLog.h"
18 #include "AliAnalysisManager.h"
19 #include "AliAODTrack.h"
20 #include "AliAODEvent.h"
21 #include "AliAODv0.h"
22 #include "AliAODVertex.h"
23 #include "AliAODPid.h"
24 #include "AliPIDResponse.h"
25 #include "AliEventPoolManager.h"
26 #include "AliCentrality.h"
27 #include "AliAODHandler.h"
28 #include "AliAODInputHandler.h"
29 #include "AliAODMCParticle.h"
30 #include "AliInputEventHandler.h"
31 #include "AliVParticle.h"
32 #include "AliMultiplicity.h"
33 #include "AliAODMCHeader.h"
34 #include "AliPID.h"
35 #include "AliExternalTrackParam.h"
36 #include "AliAnalyseLeadingTrackUE.h"
37
38 #include "AliLeadingV0Correlation.h"
39
40 #define CorrBinsX 240
41 #define CorrBinsY 260
42
43 Double_t PI =TMath::Pi();
44
45 ClassImp(AliLeadingV0Correlation)
46 ClassImp(V0Correlationparticle)
47
48 //---------------------------------------------------------------------------------------
49 AliLeadingV0Correlation::AliLeadingV0Correlation()
50    : AliAnalysisTaskSE(),
51         fAODEvent(0x0),
52         fPoolMgr(0x0),
53         fPIDResponse(0x0),
54         fAnalyseUE(0x0),
55         fPoolMaxNEvents(0), 
56         fPoolMinNTracks(0), 
57         fMinEventsToMix(0),
58         fNzVtxBins(0), 
59         fNCentBins(0),
60         fcollidingSys(""),
61         fpvzcut(0),
62         fTrackEtaCut(0),
63         fFilterBit(128),
64         fAnalysisMC(0),
65         fCase(0),
66         fRemovePileUP(0),
67     fRemoveAutoCorr(0),
68         fRapidityCut(0),
69         fV0radius(0),
70         fV0PostoPVz(0),
71         fV0NegtoPVz(0),
72         fDCAV0Daughters(0),
73         fCPAK0(0),
74         fCPALam(0),
75         fRejectLamK0(0),
76         fRejectK0Lam(0),
77     fSigmaPID(0),
78         fCutCTK0(0),
79         fCutCTLa(0),
80         fMassCutK0(0),
81         fMassCutLa(0),
82         fUseChargeHadrons(kTRUE), 
83         fPtMin(0.15),
84         fOutputList(0),
85         fHistEventViceGen(0),
86         fHistEventViceReconst(0),
87         fHistMCGenK0(0),
88         fHistMCGenLAM(0),
89         fHistMCGenALAM(0),
90         fHistReconstK0(0),
91         fHistReconstLA(0),
92         fHistReconstALA(0),
93         fHistMCAssoK0(0),
94         fHistMCAssoLA(0),
95         fHistMCAssoALA(0),
96         fHistReconstSib(0),
97         fHistReconstMix(0),
98         fHistReconstSibMC(0),
99         fHistReconstMixMC(0),
100         fHistReconstSibMCAssoc(0),
101         fHistReconstMixMCAssoc(0),
102         fHistTriggerSib(0),
103         fHistTriggerMix(0),
104         fHistTriggerSibMC(0),
105         fHistTriggerMixMC(0)
106 {
107
108   for(Int_t iBin = 0; iBin < 100; iBin++){
109     fZvtxBins[iBin] = 0.;
110     fCentBins[iBin] = 0.;
111   }
112 }
113 //---------------------------------------------------------------------------------------
114 AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
115    : AliAnalysisTaskSE(name),
116         fAODEvent(0x0),
117         fPoolMgr(0x0),
118     fPIDResponse(0x0),
119         fAnalyseUE(0x0),
120         fPoolMaxNEvents(0), 
121         fPoolMinNTracks(0), 
122         fMinEventsToMix(0),
123         fNzVtxBins(0), 
124         fNCentBins(0),
125         fcollidingSys(""),
126         fpvzcut(0),
127     fTrackEtaCut(0),
128     fFilterBit(128),
129         fAnalysisMC(0),
130         fCase(0),
131         fRemovePileUP(0),
132         fRemoveAutoCorr(0),
133     fRapidityCut(0),
134         fV0radius(0),
135         fV0PostoPVz(0),
136         fV0NegtoPVz(0),
137         fDCAV0Daughters(0),
138         fCPAK0(0),
139         fCPALam(0),
140         fRejectLamK0(0),
141         fRejectK0Lam(0),
142     fSigmaPID(0),
143         fCutCTK0(0),
144         fCutCTLa(0),
145         fMassCutK0(0),
146         fMassCutLa(0),
147         fUseChargeHadrons(kTRUE), 
148         fPtMin(0.15),
149         fOutputList(0),
150         fHistEventViceGen(0),
151         fHistEventViceReconst(0),
152         fHistMCGenK0(0),
153         fHistMCGenLAM(0),
154         fHistMCGenALAM(0),
155         fHistReconstK0(0),
156         fHistReconstLA(0),
157         fHistReconstALA(0),
158         fHistMCAssoK0(0),
159         fHistMCAssoLA(0),
160         fHistMCAssoALA(0),
161         fHistReconstSib(0),
162         fHistReconstMix(0),
163         fHistReconstSibMC(0),
164         fHistReconstMixMC(0),
165         fHistReconstSibMCAssoc(0),
166         fHistReconstMixMCAssoc(0),
167         fHistTriggerSib(0),
168         fHistTriggerMix(0),
169         fHistTriggerSibMC(0),
170         fHistTriggerMixMC(0)
171
172 {       
173   for(Int_t iBin = 0; iBin < 100; iBin++){
174     fZvtxBins[iBin] = 0.;
175     fCentBins[iBin] = 0.;
176   }
177   DefineOutput(1, TList::Class());                                            
178 }
179
180 //---------------------------------------------------------------------------------------
181 AliLeadingV0Correlation::~AliLeadingV0Correlation()
182 {
183    if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
184       delete fOutputList;
185    }
186 }
187 //---------------------------------------------------------------------------------------
188 void AliLeadingV0Correlation::UserCreateOutputObjects()
189 {       
190         fAnalyseUE =new AliAnalyseLeadingTrackUE();
191         fAnalyseUE->SetParticleSelectionCriteria(fFilterBit,fUseChargeHadrons,fTrackEtaCut,fPtMin);
192         fAnalyseUE->DefineESDCuts(fFilterBit);
193         
194         fOutputList = new TList();
195         fOutputList->SetOwner();
196         
197         //---------------------------------------------- Events histograms -----------------------------------------------------//
198         //0-PVx,1-PVy,2-PVz,3-MULT,4-CENT
199         const Int_t ndimsEV = 5;
200         Int_t    binsEV[ndimsEV] = { 100,  100, 200, 1000,100};
201         Double_t xminEV[ndimsEV] = {-0.5, -0.5,-20 ,    0,  0};
202         Double_t xmaxEV[ndimsEV] = { 0.5,  0.5, 20 ,20000,100};
203         
204         fHistEventViceGen= new THnSparseD("fHistEventViceGen", "fHistEventViceGen", ndimsEV, binsEV, xminEV, xmaxEV);
205         fOutputList->Add(fHistEventViceGen);
206         
207         fHistEventViceReconst= new THnSparseD("fHistEventViceReconst", "fHistEventViceReconst", ndimsEV, binsEV, xminEV, xmaxEV);
208         fOutputList->Add(fHistEventViceReconst);
209         
210         //0-YK0,1-Pt
211         const Int_t ndimsGenMC = 4;
212         Int_t    binsGenMCLA[ndimsGenMC] = {160,240, 140,100};
213         Double_t xminGenMCLA[ndimsGenMC] = { -4,  0,1.06,  0};
214         Double_t xmaxGenMCLA[ndimsGenMC] = {  4, 12, 1.2,100};  
215         
216         Int_t    binsGenMCK0[ndimsGenMC] = {160,240, 200,100};
217         Double_t xminGenMCK0[ndimsGenMC] = { -4,  0, 0.4,  0};
218         Double_t xmaxGenMCK0[ndimsGenMC] = {  4, 12, 0.6,100};
219         
220         fHistMCGenLAM  = new THnSparseD("fHistMCGenLAM" , "fHistMCGenLAM" , ndimsGenMC, binsGenMCLA, xminGenMCLA, xmaxGenMCLA);
221         fOutputList->Add(fHistMCGenLAM);
222         
223         fHistMCGenALAM = new THnSparseD("fHistMCGenALAM", "fHistMCGenALAM", ndimsGenMC, binsGenMCLA, xminGenMCLA, xmaxGenMCLA);
224         fOutputList->Add(fHistMCGenALAM);
225         
226         fHistMCGenK0   = new THnSparseD("fHistMCGenK0"  , "fHistMCGenK0"  , ndimsGenMC, binsGenMCK0, xminGenMCK0, xmaxGenMCK0);
227         fOutputList->Add(fHistMCGenK0);
228         
229         const Int_t ndims=10;    //MK0  mLA  MALA DCAP DCAN  RV0 DVD   CPA  PT   cent
230         Int_t    bins[ndims] = {  200,  140,  140, 500, 500, 110,110,   200,240  ,100};
231         Double_t xmin[ndims] = {  0.4, 1.06, 1.06,   0,   0,   0,  0, 0.997,  0  ,  0};
232         Double_t xmax[ndims] = {  0.6,  1.2,  1.2,  10,  10, 110,1.1, 1.007, 12  ,100}; 
233         
234         
235         fHistReconstK0= new THnSparseD("fHistReconstK0"  , "fHistReconstK0",  ndims, bins, xmin, xmax);
236         fHistReconstK0->Sumw2();
237         fOutputList->Add(fHistReconstK0);
238         
239         fHistReconstLA= new THnSparseD("fHistReconstLA"  , "fHistReconstLA",  ndims, bins, xmin, xmax);
240         fHistReconstLA->Sumw2();
241         fOutputList->Add(fHistReconstLA);
242         
243         fHistReconstALA= new THnSparseD("fHistReconstALA", "fHistReconstALA", ndims, bins, xmin, xmax);
244         fHistReconstALA->Sumw2();
245         fOutputList->Add(fHistReconstALA);
246         
247         fHistMCAssoK0= new THnSparseD("fHistMCAssoK0"   , "fHistMCAssoK0"   , ndims, bins, xmin, xmax);
248         fHistMCAssoK0->Sumw2();
249         fOutputList->Add(fHistMCAssoK0);
250         
251         fHistMCAssoLA= new THnSparseD("fHistMCAssoLA"   , "fHistMCAssoLA"   , ndims, bins, xmin, xmax);
252         fHistMCAssoLA->Sumw2();
253         fOutputList->Add(fHistMCAssoLA);
254         
255         fHistMCAssoALA= new THnSparseD("fHistMCAssoALA" , "fHistMCAssoALA" ,  ndims, bins, xmin, xmax);
256         fHistMCAssoALA->Sumw2();
257         fOutputList->Add(fHistMCAssoALA);
258         
259         //--------------------------------------------Correlation Histos -----------------------------------------------------//
260         
261         //0-pTK0,1-PhiK0,2-EtaK0,3-DPhiK0,4-DEtaK0,5-TYPE,6-CutSet
262         const Int_t ndimsv0CORR = 7;       
263         Int_t    binsv0CORR[ndimsv0CORR] = {240, 200,          200,CorrBinsX,      CorrBinsY,4,100};
264         
265         Double_t xminv0CORR[ndimsv0CORR] = {  0,   0,-fTrackEtaCut,    -PI/2,-2*fTrackEtaCut,0,0};
266         
267         Double_t xmaxv0CORR[ndimsv0CORR] = { 12,2*PI, fTrackEtaCut,   3*PI/2, 2*fTrackEtaCut,4,100};
268         
269         fHistReconstSib= new THnSparseD("fHistReconstSib", "fHistReconstSib", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
270         fHistReconstSib->Sumw2();
271         fOutputList->Add(fHistReconstSib);
272         
273         fHistReconstMix= new THnSparseD("fHistReconstMix", "fHistReconstMix", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
274         fHistReconstMix->Sumw2();
275         fOutputList->Add(fHistReconstMix);
276         
277         fHistReconstSibMC= new THnSparseD("fHistReconstSibMC", "fHistReconstSibMC", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
278         fHistReconstSibMC->Sumw2();
279         fOutputList->Add(fHistReconstSibMC);
280         
281         fHistReconstMixMC= new THnSparseD("fHistReconstMixMC", "fHistReconstMixMC", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
282         fHistReconstMixMC->Sumw2();
283         fOutputList->Add(fHistReconstMixMC);
284         
285         fHistReconstSibMCAssoc= new THnSparseD("fHistReconstSibMCAssoc", "fHistReconstSibMCAssoc", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
286         fHistReconstSibMCAssoc->Sumw2();
287         fOutputList->Add(fHistReconstSibMCAssoc);
288         
289         fHistReconstMixMCAssoc= new THnSparseD("fHistReconstMixMCAssoc", "fHistReconstMixMCAssoc", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
290         fHistReconstMixMCAssoc->Sumw2();
291         fOutputList->Add(fHistReconstMixMCAssoc);
292         
293         //0-pt,1-PHI,2-Eta
294         const Int_t triggerdims       =4;
295         Int_t binsTrig[triggerdims]   ={240, 200,          200,100};
296         Double_t xminTrig[triggerdims]={  6,   0,-fTrackEtaCut,  0};
297         Double_t xmaxTrig[triggerdims]={ 12,2*PI, fTrackEtaCut,100};
298         
299         fHistTriggerSib= new THnSparseD("fHistTriggerSib", "fHistTriggerSib", triggerdims, binsTrig, xminTrig, xmaxTrig);
300         fHistTriggerSib->Sumw2();
301         fOutputList->Add(fHistTriggerSib);
302         
303         fHistTriggerMix= new THnSparseD("fHistTriggerMix", "fHistTriggerMix", triggerdims, binsTrig, xminTrig, xmaxTrig);
304         fHistTriggerMix->Sumw2();
305         fOutputList->Add(fHistTriggerMix);
306         
307         fHistTriggerSibMC= new THnSparseD("fHistTriggerSibMC", "fHistTriggerSibMC", triggerdims, binsTrig, xminTrig, xmaxTrig);
308         fHistTriggerSibMC->Sumw2();
309         fOutputList->Add(fHistTriggerSibMC);
310         
311         fHistTriggerMixMC= new THnSparseD("fHistTriggerMixMC", "fHistTriggerMixMC", triggerdims, binsTrig, xminTrig, xmaxTrig);
312         fHistTriggerMixMC->Sumw2();
313         fOutputList->Add(fHistTriggerMixMC);
314         
315         //----------------------------------------------Event Pool-----------------------------------------------------//
316         fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins);
317         if(!fPoolMgr) return;
318         
319         PostData(1, fOutputList);
320 }
321 //---------------------------------------------------------------------------------------
322 void AliLeadingV0Correlation::UserExec(Option_t *)
323 {
324         
325     AliAnalysisManager   *mgr      = AliAnalysisManager::GetAnalysisManager();
326     AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler());
327         if (!inEvMain) return;
328         
329         // Pointers to PID Response objects.    
330         fPIDResponse = inEvMain->GetPIDResponse();
331         if(!fPIDResponse) return;
332         
333     fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent());
334         if(!fAODEvent) return;
335         
336         Int_t multiplicity    = -1;
337         Int_t multiplicityMC  = -1;
338         Double_t MultipOrCent = -1; 
339         Double_t CentPecentMC = -1;
340         Double_t CentPecentAfterPhySel   = -1;
341         
342         if(fcollidingSys=="PbPb2010" || fcollidingSys=="PbPb2011"){   
343         AliCentrality *centralityObjMC = fAODEvent->GetHeader()->GetCentralityP();
344                 CentPecentMC  = centralityObjMC->GetCentralityPercentileUnchecked("V0M");
345                 if ((CentPecentMC < 0.)||(CentPecentMC > 90)) return;
346         }
347         
348         Double_t * CentBins = fCentBins;
349         Double_t poolmin    = CentBins[0];
350         Double_t poolmax    = CentBins[fNCentBins];
351         
352         
353         Double_t  dimEventviceMC[5];
354         if(fAnalysisMC)    //Efficency denomenator comes before the physics selection
355         {
356                 AliAODMCHeader *aodMCheader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName());
357                 Float_t mcZv = aodMCheader->GetVtxZ();
358                 
359                 if (TMath::Abs(mcZv) >= fpvzcut) return;
360                 
361                 dimEventviceMC[0]=aodMCheader->GetVtxX();;
362                 dimEventviceMC[1]=aodMCheader->GetVtxY();;
363                 dimEventviceMC[2]=aodMCheader->GetVtxZ();;
364                 
365                 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
366                 if(!mcArray)return;
367                 
368                 TObjArray *selectedTracksLeadingMC=fAnalyseUE->FindLeadingObjects(mcArray);
369                 if(!selectedTracksLeadingMC) return;
370                 selectedTracksLeadingMC->SetOwner(kTRUE);
371                 
372                 TObjArray * selectedV0sMC =new TObjArray;
373                 selectedV0sMC->SetOwner(kTRUE);
374                 
375                 Int_t nMCTracks = mcArray->GetEntriesFast();
376                 
377                 if(fcollidingSys=="PbPb2010" || fcollidingSys=="PbPb2011") multiplicityMC=CentPecentMC;
378                 if(fcollidingSys=="PP")   multiplicityMC=nMCTracks;
379                 
380                 dimEventviceMC[3]=nMCTracks;
381                 dimEventviceMC[4]=CentPecentMC;
382                 fHistEventViceGen->Fill(dimEventviceMC);
383                 
384                 for (Int_t iMC = 0; iMC<nMCTracks; iMC++)
385                 {
386                         AliAODMCParticle *mcTrack = (AliAODMCParticle*)mcArray->At(iMC);
387                         if (!mcTrack) continue;
388                         // Charged track Generated level
389                         Double_t mcTrackPt  = mcTrack->Pt();
390                         if ((mcTrackPt<fPtMin)||(mcTrackPt>6.0)) continue;
391                         
392                         Double_t mcTrackEta = mcTrack->Eta();
393                         Double_t mcTrackPhi = mcTrack->Phi();
394                         Bool_t TrIsPrime    = mcTrack->IsPhysicalPrimary();
395                         Bool_t TrPtMin      = mcTrackPt>fPtMin;
396                         Bool_t TrCharge     = (mcTrack->Charge())!=0;
397                         
398                         if (!TrIsPrime  && !TrPtMin && !TrCharge) continue;  //Check Point 1
399                         
400                         // V0 Generated level
401                         Int_t mcPartPdg           = mcTrack->GetPdgCode();
402                         
403                         Double_t mcRapidity   = mcTrack->Y();
404                         Bool_t V0RapMax       = TMath::Abs(mcRapidity)<fRapidityCut;
405                         Double_t mcMass       = mcTrack->M();
406                         
407                         Double_t mcK0[4] = {mcRapidity,mcTrackPt,mcMass,multiplicityMC};
408                         Double_t mcLa[4] = {mcRapidity,mcTrackPt,mcMass,multiplicityMC};
409                         Double_t mcAl[4] = {mcRapidity,mcTrackPt,mcMass,multiplicityMC};
410                         
411                         
412                         Bool_t IsK0 = mcPartPdg==310;
413                         if (IsK0 && V0RapMax && TrIsPrime) 
414                         {
415                                 fHistMCGenK0->Fill(mcK0);
416                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1));
417                         } 
418                         
419                         Bool_t IsLambda = mcPartPdg==3122;
420                         if (IsLambda && V0RapMax && TrIsPrime) 
421                         {
422                                 fHistMCGenLAM->Fill(mcLa);
423                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2));
424                         }
425                         
426                         Bool_t IsAntiLambda = mcPartPdg==-3122;
427                         if (IsAntiLambda && V0RapMax && TrIsPrime) 
428                         {       
429                                 fHistMCGenALAM->Fill(mcAl);
430                                 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3));
431                         }                       
432                 }
433                 FillCorrelationSibling(multiplicityMC,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerSibMC,fHistReconstSibMC);
434                 FillCorrelationMixing(multiplicityMC,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerMixMC,fHistReconstMixMC);
435     }
436         
437         // Physics selection  
438         UInt_t maskIsSelected = inEvMain->IsEventSelected();
439         Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB 
440                                           || (maskIsSelected & AliVEvent::kCentral)== AliVEvent::kCentral 
441                                           || (maskIsSelected & AliVEvent::kSemiCentral)== AliVEvent::kSemiCentral);
442     if (!isSelected) return;
443         
444         // Remove pile up
445         if(fRemovePileUP)
446         if(fAODEvent->IsPileupFromSPD()) return;
447         
448         Double_t  dimEventviceReal[5];
449         Double_t  lPrimaryVtxPosition[3];
450         Double_t  lV0Position[3];
451         
452         
453         if(fcollidingSys=="PbPb2010" || fcollidingSys=="PbPb2011"){  //
454         AliCentrality *centralityObj = fAODEvent->GetHeader()->GetCentralityP();
455                 CentPecentAfterPhySel  = centralityObj->GetCentralityPercentileUnchecked("V0M");
456                 if ((CentPecentAfterPhySel < 0.)||(CentPecentAfterPhySel > 90)) return;
457         } //
458         
459         AliAODVertex *myPrimVertex = fAODEvent->GetPrimaryVertex();
460         if (!myPrimVertex) return;
461         myPrimVertex->GetXYZ(lPrimaryVtxPosition);
462         
463         Double_t lPVx = lPrimaryVtxPosition[0];
464         Double_t lPVy = lPrimaryVtxPosition[1];
465         Double_t lPVz = lPrimaryVtxPosition[2];
466         
467         if ((TMath::Abs(lPVz)) >= fpvzcut) return ;
468         if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return;
469         
470         dimEventviceReal[0]=lPVx;
471     dimEventviceReal[1]=lPVy;
472     dimEventviceReal[2]=lPVz;
473         
474         multiplicity = fAODEvent->GetNTracks();
475         
476         dimEventviceReal[3]=multiplicity;
477         dimEventviceReal[4]=CentPecentAfterPhySel;
478         
479         fHistEventViceReconst->Fill(dimEventviceReal);
480         
481         if(fcollidingSys=="PP")MultipOrCent=multiplicity;
482         if(fcollidingSys=="PbPb2010" || fcollidingSys=="PbPb2011")MultipOrCent=CentPecentAfterPhySel;
483
484         //---------------------------------------------------------------------------------------------
485         
486         Double_t lDcaPosToPrimVertex = 0;Double_t lDcaNegToPrimVertex = 0;Double_t lDcaV0Daughters     = 0;
487         Double_t lV0cosPointAngle    = 0;Double_t lV0DecayLength      = 0;Double_t lV0Radius           = 0;
488         Double_t lcTauLambda         = 0;Double_t lcTauAntiLambda     = 0;   
489         Double_t lcTauK0s            = 0;   
490         
491         Double_t lInvMassK0   = 0, lInvMassLambda    = 0, lInvMassAntiLambda = 0;
492         Double_t lPtV0s       = 0; Double_t lPhiV0s  = 0; Double_t lEtaV0s   = 0;
493         Double_t lRapK0s      = 0, lRapLambda        = 0, lRapAntiLambda     = 0;
494         Double_t lPzV0s       = 0; Double_t lAlphaV0 = 0, lPtArmV0           = 0;
495         Double_t lPV0s        = 0;
496         
497         TObjArray *selectedTracksLeading=fAnalyseUE->FindLeadingObjects(fAODEvent);
498         if(!selectedTracksLeading) return;
499         selectedTracksLeading->SetOwner(kTRUE);
500         
501         TObjArray * selectedV0s = new TObjArray;
502         selectedV0s->SetOwner(kTRUE);
503         
504         TObjArray * selectedV0sAssoc = new TObjArray;
505         selectedV0sAssoc->SetOwner(kTRUE);
506         
507         Int_t nV0s = fAODEvent->GetNumberOfV0s();
508         
509         for (Int_t i = 0; i < nV0s; i++) 
510         { // start of V0 slection loop
511                 AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
512                 if (!aodV0) continue;
513                 
514                 if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>6.0)) continue;
515                 
516                 // get daughters
517             AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
518         AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
519                 
520                 if (!myTrackPos || !myTrackNeg) {Printf("ERROR: Could not retreive one of the daughter track");continue;}
521                 
522         if (!IsAcseptedV0(aodV0,myTrackPos,myTrackNeg)) continue;
523                 
524                 // VO's main characteristics to check the reconstruction cuts
525                 lDcaV0Daughters    = aodV0->DcaV0Daughters();
526                 lV0cosPointAngle   = aodV0->CosPointingAngle(lPrimaryVtxPosition);
527                 
528                 aodV0->GetXYZ(lV0Position);
529                 
530                 lV0Radius      = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
531                 lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - lPrimaryVtxPosition[0],2) +
532                                                                          TMath::Power(lV0Position[1] - lPrimaryVtxPosition[1],2) +
533                                                                          TMath::Power(lV0Position[2] - lPrimaryVtxPosition[2],2));
534                 
535                 // DCA between daughter and Primary Vertex:
536                 if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
537                 if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();      
538                 
539                 // Quality tracks cuts:
540                 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
541                 
542                 // Armenteros variables:
543                 lAlphaV0      =  aodV0->AlphaV0();
544                 lPtArmV0      =  aodV0->PtArmV0();
545                 
546                 // Invariant mass
547                 lInvMassK0         = aodV0->MassK0Short();
548                 lInvMassLambda     = aodV0->MassLambda();
549                 lInvMassAntiLambda = aodV0->MassAntiLambda();
550                 
551                 lPtV0s = aodV0->Pt();
552                 lPhiV0s= aodV0->Phi();
553                 lEtaV0s= aodV0->Eta();
554                 lPzV0s = aodV0->Pz();
555                 
556                 // Rapidity:
557                 lRapK0s    = aodV0->RapK0Short();
558                 lRapLambda = aodV0->RapLambda();
559                 lRapAntiLambda = aodV0->Y(-3122);               
560                 
561                 if (lPtV0s==0) {continue;}
562                 
563         Float_t nSigmaPosPion   = 0.;
564         Float_t nSigmaNegPion   = 0.;
565         Float_t nSigmaPosProton = 0.;
566         Float_t nSigmaNegProton = 0.;
567                 
568         const AliAODPid *pPid = myTrackPos->GetDetPid();
569         const AliAODPid *nPid = myTrackNeg->GetDetPid();
570                 
571         if (pPid)
572         {
573             Double_t pdMom = pPid->GetTPCmomentum();
574             if (pdMom<1.0 && (fcollidingSys=="PbPb2010"||fcollidingSys=="PbPb2011"))
575             {
576                 nSigmaPosPion   = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
577                 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
578             }
579                         
580                         if (fcollidingSys=="PP")
581             {
582                 nSigmaPosPion   = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
583                 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
584             }
585         }
586                 
587         if (nPid)
588         {
589             Double_t ndMom = nPid->GetTPCmomentum();
590             if (ndMom<1.0 && (fcollidingSys=="PbPb2010"||fcollidingSys=="PbPb2011"))
591             {
592                 nSigmaNegPion   = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
593                 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
594             }
595                         
596                         if (fcollidingSys=="PP")
597             {
598                 nSigmaNegPion   = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
599                 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
600             }
601         }
602                 Bool_t bpPion   = TMath::Abs(nSigmaPosPion)   <= fSigmaPID;
603         Bool_t bpProton = TMath::Abs(nSigmaPosProton) <= fSigmaPID;
604         Bool_t bnPion   = TMath::Abs(nSigmaNegPion)   <= fSigmaPID;
605         Bool_t bnProton = TMath::Abs(nSigmaNegProton) <= fSigmaPID;
606                 
607         Bool_t cutK0Pid         = (bpPion   && bnPion)  ;
608         Bool_t cutLambdaPid     = (bpProton && bnPion)  ;
609         Bool_t cutAntiLambdaPid = (bpPion   && bnProton);
610         //--------------------------------------------------
611                 
612                 lPV0s = TMath::Sqrt(lPzV0s*lPzV0s + lPtV0s*lPtV0s);
613                 
614                 if(lPV0s > 0) lcTauLambda     = (lV0DecayLength*lInvMassLambda)/lPV0s;
615                 if(lPV0s > 0) lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPV0s; 
616                 if(lPV0s > 0) lcTauK0s        = (lV0DecayLength*lInvMassK0)/lPV0s;      
617                 
618                 Bool_t k0ctcut = (lcTauK0s        < fCutCTK0);
619                 Bool_t lactcut = (lcTauLambda     < fCutCTLa);
620                 Bool_t alactcut= (lcTauAntiLambda < fCutCTLa);
621
622                 Bool_t k0APcut = (lPtArmV0>(TMath::Abs(0.2*lAlphaV0)));
623                 
624                 Bool_t k0Rapcut = (TMath::Abs(lRapK0s)        < fRapidityCut);
625                 Bool_t laRapcut = (TMath::Abs(lRapLambda)     < fRapidityCut);
626                 Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut);
627                 
628                 
629                 Bool_t k0cutset = IsAcseptedK0(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassLambda,lInvMassAntiLambda);
630                 Bool_t lacutset = IsAcseptedLA(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
631                 Bool_t alacutset= IsAcseptedLA(lV0Radius,lDcaNegToPrimVertex,lDcaPosToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
632                 
633                 Double_t spK0[10] = {lInvMassK0, lInvMassLambda,lInvMassAntiLambda,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lV0Radius,lDcaV0Daughters,lV0cosPointAngle,lPtV0s,MultipOrCent};
634                 Double_t spLa[10] = {lInvMassK0, lInvMassLambda,lInvMassAntiLambda,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lV0Radius,lDcaV0Daughters,lV0cosPointAngle,lPtV0s,MultipOrCent};
635                 Double_t spAl[10] = {lInvMassK0, lInvMassLambda,lInvMassAntiLambda,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lV0Radius,lDcaV0Daughters,lV0cosPointAngle,lPtV0s,MultipOrCent};
636         
637                 switch (fCase) {
638                         case 1:
639                                 fHistReconstK0->Fill(spK0); 
640                                 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
641                                 
642                                 fHistReconstLA->Fill(spLa); 
643                                 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
644                                 
645                                 fHistReconstALA->Fill(spAl);
646                                 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
647                                 
648                                 break;
649                                 
650                         case 2:
651                                 if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid)
652                                 {
653                                         fHistReconstK0->Fill(spK0); 
654                                         if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
655                                 }
656                                 
657                                 if (lactcut && laRapcut && lacutset && cutLambdaPid)
658                                 {
659                                         fHistReconstLA->Fill(spLa); 
660                                         if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
661                                 }
662                                 
663                                 if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
664                                 {
665                                         fHistReconstALA->Fill(spAl);
666                                         if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
667                                 }
668
669                                 break;
670                                 
671                         case 3:
672                                 if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid && k0APcut)
673                                 {
674                                         fHistReconstK0->Fill(spK0); 
675                                         if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
676                                 }
677                                 
678                                 if (lactcut && laRapcut && lacutset && cutLambdaPid)
679                                 {
680                                         fHistReconstLA->Fill(spLa); 
681                                         if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
682                                 }
683                                 
684                                 if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
685                                 {
686                                         fHistReconstALA->Fill(spAl);
687                                         if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
688                                 }
689                                 break;
690                                 
691                         default:
692                                 cout << "No case selected "<<endl;
693                                 break;
694                 }
695                 
696         if (fAnalysisMC)
697         {
698                 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
699                 if(!mcArray)return;
700                 
701                         Int_t myTrackPosLabel        = TMath::Abs(myTrackPos->GetLabel());
702                         Int_t myTrackNegLabel        = TMath::Abs(myTrackNeg->GetLabel());
703                         
704                         AliAODMCParticle *mcPosTrack = (AliAODMCParticle*)mcArray->At(myTrackPosLabel);
705                         AliAODMCParticle *mcNegTrack = (AliAODMCParticle*)mcArray->At(myTrackNegLabel);
706                         
707                         Int_t PosDaughterPdg = mcPosTrack->GetPdgCode();
708                         Int_t NegDaughterPdg = mcNegTrack->GetPdgCode();
709                         
710                         Int_t myTrackPosMotherLabel = mcPosTrack->GetMother();
711                         Int_t myTrackNegMotherLabel = mcNegTrack->GetMother();
712                         
713                         if ((myTrackPosMotherLabel==-1)||(myTrackNegMotherLabel==-1)) continue;
714                         if (myTrackPosMotherLabel!=myTrackNegMotherLabel) continue;
715                         
716                         AliAODMCParticle *mcPosMother = (AliAODMCParticle*)mcArray->At(myTrackPosMotherLabel);
717                         Int_t MotherPdg  = mcPosMother->GetPdgCode();
718                         Bool_t IsPrime   = mcPosMother->IsPhysicalPrimary();
719                         
720                         Double_t rcK0[10] = {lInvMassK0, lInvMassLambda,lInvMassAntiLambda,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lV0Radius,lDcaV0Daughters,lV0cosPointAngle,lPtV0s,MultipOrCent};
721                         Double_t rcLa[10] = {lInvMassK0, lInvMassLambda,lInvMassAntiLambda,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lV0Radius,lDcaV0Daughters,lV0cosPointAngle,lPtV0s,MultipOrCent};
722                         Double_t rcAl[10] = {lInvMassK0, lInvMassLambda,lInvMassAntiLambda,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lV0Radius,lDcaV0Daughters,lV0cosPointAngle,lPtV0s,MultipOrCent};
723                         
724                         switch (fCase) {
725                                 case 1:
726                                         fHistMCAssoK0->Fill(rcK0); 
727                                         if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
728                                         
729                                         fHistMCAssoLA->Fill(rcLa);
730                                         if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
731                                         
732                                         fHistMCAssoALA->Fill(rcAl);
733                                         if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
734                                         
735                                         break;
736                                         
737                                 case 2:
738                                         if ((k0ctcut && k0Rapcut && k0cutset)&&(MotherPdg     ==  310 && 
739                                                                                                                         PosDaughterPdg==  211 && 
740                                                                                                                         NegDaughterPdg== -211 &&
741                                                                                                                         IsPrime))
742                                         {
743                                                 fHistMCAssoK0->Fill(rcK0); 
744                                                 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
745                                         }
746                                         
747                                         if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
748                                                                                                                         PosDaughterPdg== 2212 && 
749                                                                                                                         NegDaughterPdg== -211 &&
750                                                                                                                         IsPrime)) 
751                                         {
752                                                 fHistMCAssoLA->Fill(rcLa);
753                                                 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
754                                         }
755                                         
756                                         if ((alactcut && alaRapcut && alacutset)&&(MotherPdg     == -3122 && 
757                                                                                                                            PosDaughterPdg==   211 && 
758                                                                                                                            NegDaughterPdg== -2212 &&
759                                                                                                                            IsPrime))
760                                         {
761                                                 fHistMCAssoALA->Fill(rcAl);
762                                                 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
763                                         }
764                                         
765                                         break;
766                                         
767                                 case 3:
768                                         if ((k0ctcut && k0Rapcut && k0cutset && k0APcut)&&(MotherPdg     ==  310 && 
769                                                                                                                                            PosDaughterPdg==  211 && 
770                                                                                                                                            NegDaughterPdg== -211 &&
771                                                                                                                                            IsPrime))
772                                         {
773                                                 fHistMCAssoK0->Fill(rcK0); 
774                                                 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1));
775                                         }
776                                         
777                                         if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
778                                                                                                                         PosDaughterPdg== 2212 && 
779                                                                                                                         NegDaughterPdg== -211 &&
780                                                                                                                         IsPrime)) 
781                                         {
782                                                 fHistMCAssoLA->Fill(rcLa);
783                                                 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2));
784                                         }
785                                         
786                                         if ((alactcut && alaRapcut && alacutset)&&(MotherPdg     == -3122 && 
787                                                                                                                            PosDaughterPdg==   211 && 
788                                                                                                                            NegDaughterPdg== -2212 &&
789                                                                                                                            IsPrime))
790                                         {
791                                                 fHistMCAssoALA->Fill(rcAl);
792                                                 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3));
793                                         }
794                                         break;
795                                         
796                                 default:
797                                         cout << "No case selected "<<endl;
798                                         break;
799                         }       
800         }
801         }       
802         
803         FillCorrelationSibling(MultipOrCent,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib);
804         FillCorrelationMixing(MultipOrCent,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix);
805         
806         FillCorrelationSibling(MultipOrCent,selectedTracksLeading,selectedV0sAssoc,0,fHistReconstSibMCAssoc);
807         FillCorrelationMixing(MultipOrCent,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0sAssoc,0,fHistReconstMixMCAssoc);
808         
809         PostData(1,fOutputList);
810 }       
811 //---------------------------------------------------------------------------------------
812 void AliLeadingV0Correlation::Terminate(Option_t *)
813 {
814         //No need in the grid
815 }
816 //---------------------------------------------------------------------------------------
817 Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
818 {
819         if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
820         
821         if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
822         
823         Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
824         if (nCrossedRowsTPC < 70) return kFALSE;
825         
826         Int_t findable=itrack->GetTPCNclsF();
827         if (findable <= 0) return kFALSE;
828         
829         if (nCrossedRowsTPC/findable < 0.8) return kFALSE;
830         return kTRUE;
831 }
832 //---------------------------------------------------------------------------------------
833 Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
834 {
835         if (!aodV0) return kFALSE;
836         
837         // Offline reconstructed V0 only
838     if (aodV0->GetOnFlyStatus()) return kFALSE;
839         
840     // Get daughters and check them
841         myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
842         myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
843         
844         if (!myTrackPos||!myTrackNeg) return kFALSE;
845         // Unlike signs of daughters
846     if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE;
847         
848         // Track cuts for daughers
849     if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE;
850         
851         // Minimum pt of daughters
852     Double_t lPtPos = myTrackPos->Pt();
853     Double_t lPtNeg = myTrackNeg->Pt();
854         
855         if (lPtPos<fPtMin || lPtNeg<fPtMin) return kFALSE;
856         
857         return kTRUE;
858 }
859 //---------------------------------------------------------------------------------------
860 Bool_t AliLeadingV0Correlation::IsAcseptedK0(Double_t v0rad,
861                                                         Double_t dcaptp,
862                                                         Double_t dcantp,
863                                                         Double_t dcav0d,
864                                                         Double_t cpa,
865                                                         Double_t massLa,
866                                                         Double_t massALa)
867 {       
868                         if(v0rad  >=fV0radius           &&
869                            dcaptp >=fV0PostoPVz         &&
870                            dcantp >=fV0NegtoPVz         &&
871                            dcav0d <=fDCAV0Daughters     &&
872                            cpa    >=fCPAK0                      &&
873                            TMath::Abs(massLa  - 1.115683) > fRejectLamK0 &&
874                            TMath::Abs(massALa - 1.115683) > fRejectLamK0 )return kTRUE;
875         return kFALSE;
876 }
877 //---------------------------------------------------------------------------------------
878 Bool_t AliLeadingV0Correlation::IsAcseptedLA(Double_t v0rad,
879                                                         Double_t dcaptp,
880                                                         Double_t dcantp,
881                                                         Double_t dcav0d,
882                                                         Double_t cpa,
883                                                         Double_t massK0)
884 {
885         if(v0rad  >=fV0radius           &&
886            dcaptp >=fV0PostoPVz         &&
887            dcantp >=fV0NegtoPVz         &&
888            dcav0d <=fDCAV0Daughters     &&
889            cpa    >=fCPALam                     &&
890            TMath::Abs(massK0  - 0.4976) > fRejectK0Lam &&
891            TMath::Abs(massK0  - 0.4976) > fRejectK0Lam )return kTRUE;
892         return kFALSE;
893 }
894 //---------------------------------------------------------------------------------------
895 Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const 
896 {
897         const Float_t massK0            = 0.497; 
898         
899         return ((massK0-fMassCutK0)<=mass && mass<=(massK0 + fMassCutK0))?1:0;
900 }
901 //---------------------------------------------------------------------------------------
902 Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const 
903 {
904         const Float_t massLambda        = 1.116; 
905         
906         return ((massLambda-fMassCutLa)<=mass && mass<=(massLambda + fMassCutLa))?1:0;
907 }
908 //---------------------------------------------------------------------------------------
909 Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi)
910 {
911         if (DPhi < -TMath::Pi()/2)  DPhi += 2*TMath::Pi();
912         if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();      
913         return DPhi;    
914 }
915 //---------------------------------------------------------------------------------------
916 Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
917 {
918         Int_t atrID = track->GetID();
919
920         for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
921                 AliAODv0* aodV0 = fAODEvent->GetV0(i);
922                 
923                 AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
924         AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
925                         
926                 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
927                 //----------------------------------
928                 Int_t negID = trackNeg->GetID();
929                 Int_t posID = trackPos->GetID();
930                 
931                 if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
932                 if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
933                 //----------------------------------
934         }
935         return kFALSE;
936 }
937 //---------------------------------------------------------------------------------------
938 void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
939                                                                           TObjArray*triggerArray,
940                                                                           TObjArray*selectedV0Array,
941                                                                           THnSparse*triggerHist,
942                                                                           THnSparse*associateHist)
943 {
944         Double_t  binsv0CORR[7];
945         Double_t  binsTrigSib[4];
946         Int_t counterSibMCA=0;
947         
948     for(Int_t i=0;i<triggerArray->GetEntriesFast();i++)
949         {
950                 AliAODTrack* trigger = (AliAODTrack*)triggerArray->At(0);
951                 if(!trigger)continue;
952                 
953                 if(fRemoveAutoCorr) 
954                 if(IsTrackFromV0(trigger))continue;
955                         
956                 Double_t triggerPt  = trigger->Pt();
957                 Double_t triggerPhi = trigger->Phi();
958                 Double_t triggerEta = trigger->Eta();
959                 
960                 if(triggerPt<6.0||triggerPt>12.0)continue;
961                 counterSibMCA++;
962                 if(counterSibMCA==triggerArray->GetEntriesFast()){
963                         
964                         binsTrigSib[0]=triggerPt;
965                         binsTrigSib[1]=triggerPhi;
966                         binsTrigSib[2]=triggerEta;
967                         binsTrigSib[3]=MultipOrCent;
968                         
969                         if(triggerHist)triggerHist->Fill(binsTrigSib);
970                         
971                         for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
972                                 
973                                 V0Correlationparticle* associate = (V0Correlationparticle*) selectedV0Array->At(j);
974                                 if(!associate)continue;
975                                 
976                                 binsv0CORR[0]= associate->Pt();
977                                 binsv0CORR[1]= associate->Phi();
978                                 binsv0CORR[2]= associate->Eta();
979                                 
980                                 if(binsv0CORR[0]>triggerPt) continue;
981                                 
982                                 binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]);
983                                 binsv0CORR[4]=triggerEta-binsv0CORR[2];
984                                 binsv0CORR[5]= associate->WhichCandidate();
985                                 binsv0CORR[6]= MultipOrCent;
986                                 
987                                 associateHist->Fill(binsv0CORR);
988                         }
989                 }
990         }
991 }
992 //---------------------------------------------------------------------------------------
993 void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
994                                                                    Double_t pvxMix,
995                                                                    Double_t poolmax,
996                                                                    Double_t poolmin,
997                                                                    TObjArray*triggerArray,
998                                                                    TObjArray*selectedV0Array,
999                                                                    THnSparse*triggerHist,
1000                                                                    THnSparse*associateHist)
1001 {
1002         if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
1003         {
1004                 if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
1005                 if(fcollidingSys=="PbPb2010" || fcollidingSys=="PbPb2011") AliInfo(Form("PbPb Event with Zvertex = %.2f cm and centrality = %.1f  out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
1006                 return;
1007         }
1008         
1009         Double_t  binsv0CORRMix[7];
1010         Double_t  binsTrigMix[4];
1011         Double_t  counterMix=0;
1012         
1013         AliEventPool* pool = fPoolMgr->GetEventPool(MultipOrCentMix, pvxMix);
1014         if (!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", MultipOrCentMix, pvxMix));
1015         
1016     if (pool->IsReady() || pool->NTracksInPool() > fPoolMinNTracks  || pool->GetCurrentNEvents() > fMinEventsToMix)
1017         {
1018                 Int_t nMix = pool->GetCurrentNEvents();
1019                 for (Int_t jMix=0; jMix<nMix; jMix++){
1020                         
1021                         TObjArray* mixEvents = pool->GetEvent(jMix);
1022                         for (Int_t i=0; i<triggerArray->GetEntriesFast(); i++){
1023                                 
1024                                 AliAODTrack* trig = (AliAODTrack*)triggerArray->At(0);
1025                                 if(!trig)continue;
1026                                 
1027                                 if(fRemoveAutoCorr) 
1028                                 if(IsTrackFromV0(trig))continue;
1029                                 
1030                                 Double_t trigPhi  = trig->Phi();
1031                                 Double_t trigEta  = trig->Eta();
1032                                 Double_t trigPt   = trig->Pt();
1033                                 
1034                                 if(trigPt<6.0||trigPt>12.0)continue;
1035                                 counterMix++;
1036                                 
1037                                 if(counterMix==triggerArray->GetEntriesFast()){
1038                                         
1039                                         binsTrigMix[0]=trigPt;
1040                                         binsTrigMix[1]=trigPhi;
1041                                         binsTrigMix[2]=trigEta;
1042                                         binsTrigMix[3]=MultipOrCentMix;
1043                                         
1044                                         if(triggerHist)triggerHist->Fill(binsTrigMix);
1045                                         
1046                                         for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
1047                                                 
1048                                                 V0Correlationparticle* associate = (V0Correlationparticle*) mixEvents->At(j);
1049                                                 if(!associate)continue;
1050                                                 
1051                                                 binsv0CORRMix[0]= associate->Pt();
1052                                                 binsv0CORRMix[1]= associate->Phi();
1053                                                 binsv0CORRMix[2]= associate->Eta();
1054                                                 
1055                                                 if(binsv0CORRMix[0]>trigPt) continue;
1056                                                 
1057                                                 binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]);
1058                                                 binsv0CORRMix[4]=trigEta-binsv0CORRMix[2];
1059                                                 binsv0CORRMix[5]=associate->WhichCandidate();
1060                                                 binsv0CORRMix[6]=MultipOrCentMix;
1061                                                 
1062                                                 associateHist->Fill(binsv0CORRMix);
1063                                         }
1064                                 }
1065                         }
1066                 }
1067         }
1068         
1069         TObjArray* tracksClone = new TObjArray;
1070         tracksClone->SetOwner(kTRUE);
1071         
1072         for (Int_t i=0; i<selectedV0Array->GetEntriesFast(); i++)
1073         {
1074                 V0Correlationparticle* particle = (V0Correlationparticle*) selectedV0Array->At(i);
1075                 tracksClone->Add(new V0Correlationparticle(particle->Eta(), 
1076                                                                                           particle->Phi(), 
1077                                                                                           particle->Pt(),
1078                                                                                           particle->WhichCandidate()));
1079         };
1080         pool->UpdatePool(tracksClone);
1081 }
1082 //---------------------------------------------------------------------------------------                                                                                       
1083                                                                 
1084                                         
1085                                                                                                 
1086