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