]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/Correlations/DPhi/AliLeadingV0Correlation.cxx
Merge branch 'TPCdev' of https://git.cern.ch/reps/AliRoot into TPCdev
[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();
444 lrefMultiplicity =fAODEvent->GetHeader()->GetRefMultiplicity();
ff0805a7 445
a8a50f30 446 fHist_Mult_B4_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
ff0805a7 447
da6ac661 448 Double_t * CentBins = fCentBins;
449 Double_t poolmin = CentBins[0];
450 Double_t poolmax = CentBins[fNCentBins];
ff0805a7 451
5b607771 452 //----------------------------------------------------------
453 // Efficency denomenator comes before the physics selection
454 //----------------------------------------------------------
ff0805a7 455
a8a50f30 456 Double_t dimEventviceMC[2];
da6ac661 457 if(fAnalysisMC) //Efficency denomenator comes before the physics selection
458 {
459 AliAODMCHeader *aodMCheader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName());
a8a50f30 460 if(!aodMCheader) return;
da6ac661 461 Float_t mcZv = aodMCheader->GetVtxZ();
462
463 if (TMath::Abs(mcZv) >= fpvzcut) return;
9bcef488 464
bf855ed5 465 dimEventviceMC[0]=aodMCheader->GetVtxZ();
ff0805a7 466
da6ac661 467 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
468 if(!mcArray)return;
ff0805a7 469
da6ac661 470 Int_t nMCTracks = mcArray->GetEntriesFast();
471
bf855ed5 472 dimEventviceMC[1]=nMCTracks;
33971f6b 473 fHistEventViceGen->Fill(dimEventviceMC[0],dimEventviceMC[1]);
474
475 TObjArray *selectedTracksLeadingMC=fAnalyseUE->FindLeadingObjects(mcArray);
476 if(!selectedTracksLeadingMC) return;
477 selectedTracksLeadingMC->SetOwner(kTRUE);
478
479 TObjArray * selectedV0sMC =new TObjArray;
480 selectedV0sMC->SetOwner(kTRUE);
ff0805a7 481
a8a50f30 482 TObjArray * selectedV0sMCXI =new TObjArray;
483 selectedV0sMCXI->SetOwner(kTRUE);
484
da6ac661 485 for (Int_t iMC = 0; iMC<nMCTracks; iMC++)
486 {
487 AliAODMCParticle *mcTrack = (AliAODMCParticle*)mcArray->At(iMC);
488 if (!mcTrack) continue;
489 // Charged track Generated level
490 Double_t mcTrackPt = mcTrack->Pt();
9dbaebd5 491 if ((mcTrackPt<fPtMin)||(mcTrackPt>fTriglow)) continue;
ff0805a7 492
33971f6b 493 Double_t mcTrackEta = mcTrack->Eta();
494 Double_t mcTrackPhi = mcTrack->Phi();
da6ac661 495 Bool_t TrIsPrime = mcTrack->IsPhysicalPrimary();
496 Bool_t TrPtMin = mcTrackPt>fPtMin;
497 Bool_t TrCharge = (mcTrack->Charge())!=0;
ff0805a7 498
da6ac661 499 if (!TrIsPrime && !TrPtMin && !TrCharge) continue; //Check Point 1
ff0805a7 500
da6ac661 501 // V0 Generated level
502 Int_t mcPartPdg = mcTrack->GetPdgCode();
ff0805a7 503
746a34ad 504 Double_t mcRapidity = mcTrack->Y();
505 Bool_t V0RapMax = TMath::Abs(mcRapidity)<fRapidityCut;
9dbaebd5 506 Bool_t V0EtaMax = TMath::Abs(mcTrackEta)<fTrackEtaCut;
da6ac661 507 Double_t mcMass = mcTrack->M();
ff0805a7 508
2942f542 509 Double_t mcK0[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
510 Double_t mcLa[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
511 Double_t mcAl[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)};
ff0805a7 512
a8a50f30 513 Int_t myTrackMotherLabel = mcTrack->GetMother();
514
515 AliAODMCParticle *mcMother = (AliAODMCParticle*)mcArray->At(myTrackMotherLabel);
516 if (!mcMother) continue;
517 Int_t MotherPdg = mcMother->GetPdgCode();
746a34ad 518 Bool_t IsK0 = mcPartPdg==310;
519 Bool_t IsLambda = mcPartPdg==3122;
da6ac661 520 Bool_t IsAntiLambda = mcPartPdg==-3122;
a8a50f30 521
522 Bool_t IsXImin =MotherPdg== 3312;
523 Bool_t IsXIPlus =MotherPdg==-3312;
9dbaebd5 524 Bool_t IsXizero =MotherPdg== 3322;
525 Bool_t IsOmega =MotherPdg== 3334;
a8a50f30 526
746a34ad 527 switch (fCase) {
528 case 1:
529
530 if (IsK0)
531 {
532 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
533 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
534 }
535
536 if (IsLambda)
537 {
538 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
539 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
540 }
541
542 if (IsAntiLambda)
543 {
544 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
545 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
546 }
547
548 if (IsLambda && (IsXizero || IsXImin))
549 {
550 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
551 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
552 }
553
554 if (IsLambda && IsOmega)
555 {
556 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
557 }
558
559 if (IsAntiLambda && IsXIPlus)
560 {
561 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
562 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
563 }
564
565 break;
566
567 case 2:
568
569 if (IsK0 && V0RapMax && TrIsPrime)
570 {
571 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
572 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
573 }
574
575 if (IsLambda && V0RapMax && TrIsPrime)
576 {
577 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
578 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
579 }
580
581 if (IsAntiLambda && V0RapMax && TrIsPrime)
582 {
583 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
584 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
585 }
586
587 if (IsLambda && V0RapMax && (IsXizero || IsXImin))
588 {
589 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
590 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
591 }
592
593 if (IsLambda && V0RapMax && IsOmega)
594 {
595 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
596 }
597
598 if (IsAntiLambda && V0RapMax && IsXIPlus)
599 {
600 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
601 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
602 }
603
604 break;
605
606 case 3:
607
608 if (IsK0 && V0EtaMax && TrIsPrime)
609 {
610 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
611 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
612 }
613
614 if (IsLambda && V0EtaMax && TrIsPrime)
615 {
616 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
617 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
618 }
619
620 if (IsAntiLambda && V0EtaMax && TrIsPrime)
621 {
622 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
623 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
624 }
625
626 if (IsLambda && V0EtaMax && (IsXizero || IsXImin))
627 {
628 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
629 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
630 }
631
632 if (IsLambda && V0EtaMax && IsOmega)
633 {
634 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
635 }
636
637 if (IsAntiLambda && V0EtaMax && IsXIPlus)
638 {
639 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
640 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
641 }
642 break;
643
644 default:
645 AliInfo(Form("No case selected"));
646 break;
a8a50f30 647 }
da6ac661 648 }
33971f6b 649
a8a50f30 650 FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerSibGEN,fHistReconstSibGEN);
651 FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerMixGEN,fHistReconstMixGEN);
652
653 FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstSibFEED);
654 FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstMixFEED);
da6ac661 655 }
ff0805a7 656
5b607771 657 // End Loop over MC condition
658
659 //------------------------------------------------
660 // Physics Selection
661 //------------------------------------------------
da6ac661 662 UInt_t maskIsSelected = inEvMain->IsEventSelected();
a8a50f30 663 Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB);
da6ac661 664 if (!isSelected) return;
665
5b607771 666 //------------------------------------------------
667 // After Trigger Selection
668 //------------------------------------------------
669
a8a50f30 670 fHist_Mult_Af_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
ff0805a7 671
5b607771 672 //------------------------------------------------
673 // Getting: Primary Vertex + MagField Info
674 //------------------------------------------------
bf855ed5 675 Double_t dimEventviceReal[3];
5b607771 676 Double_t lBestPrimaryVtxPos[3];
677 Double_t tPrimaryVtxPosition[3];
da6ac661 678 Double_t lV0Position[3];
679
5b607771 680 AliAODVertex *lPrimaryBestAODVtx = fAODEvent->GetPrimaryVertex();
681 if (!lPrimaryBestAODVtx) return;
682 // get the best primary vertex available for the event
683 // As done in AliCascadeVertexer, we keep the one which is the best one available.
684 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
685 // This one will be used for next calculations (DCA essentially)
686 lPrimaryBestAODVtx->GetXYZ(lBestPrimaryVtxPos);
687
688 const AliVVertex *primaryVtx = fAODEvent->GetPrimaryVertex();
a8a50f30 689 if(!primaryVtx)return;
5b607771 690 tPrimaryVtxPosition[0] = primaryVtx->GetX();
691 tPrimaryVtxPosition[1] = primaryVtx->GetY();
692 tPrimaryVtxPosition[2] = primaryVtx->GetZ();
693 fHistPVx->Fill( tPrimaryVtxPosition[0] );
694 fHistPVy->Fill( tPrimaryVtxPosition[1] );
695 fHistPVz->Fill( tPrimaryVtxPosition[2] );
696
697 //------------------------------------------------
698 // Primary Vertex Z position: SKIP
699 //------------------------------------------------
700
701 Double_t lPVx = lBestPrimaryVtxPos[0];
702 Double_t lPVy = lBestPrimaryVtxPos[1];
703 Double_t lPVz = lBestPrimaryVtxPos[2];
ff0805a7 704
da6ac661 705 if ((TMath::Abs(lPVz)) >= fpvzcut) return ;
ff0805a7 706 if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return;
a8a50f30 707 fHist_Mult_PVz_Cut->Fill(ltrackMultiplicity,lrefMultiplicity);
5b607771 708
709 //------------------------------------------------
710 // Only look at events with well-established PV
711 //------------------------------------------------
712
713 const AliAODVertex *lPrimaryTrackingAODVtxCheck = fAODEvent->GetPrimaryVertex();
714 const AliAODVertex *lPrimarySPDVtx = fAODEvent->GetPrimaryVertexSPD();
715 if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtxCheck )return;
716
a8a50f30 717 fHist_Mult_SPD_PVz->Fill(ltrackMultiplicity,lrefMultiplicity);
5b607771 718 //------------------------------------------------
719 // Pileup Rejection
720 //------------------------------------------------
721
722 // FIXME : quality selection regarding pile-up rejection
723 if(fAODEvent->IsPileupFromSPD()) return;
a8a50f30 724 fHist_Mult_SPD_PVz_Pileup->Fill(ltrackMultiplicity,lrefMultiplicity);
5b607771 725
726 fHistPVxAnalysis->Fill(tPrimaryVtxPosition[0]);
727 fHistPVyAnalysis->Fill(tPrimaryVtxPosition[1]);
728 fHistPVzAnalysis->Fill(tPrimaryVtxPosition[2]);
729
730 dimEventviceReal[0]=tPrimaryVtxPosition[2];
a8a50f30 731 dimEventviceReal[1]=ltrackMultiplicity;
ff0805a7 732
33971f6b 733 fHistEventViceReconst->Fill(dimEventviceReal[0],dimEventviceReal[1]);
da6ac661 734
735 //---------------------------------------------------------------------------------------------
ff0805a7 736
da6ac661 737 Double_t lDcaPosToPrimVertex = 0;Double_t lDcaNegToPrimVertex = 0;Double_t lDcaV0Daughters = 0;
738 Double_t lV0cosPointAngle = 0;Double_t lV0DecayLength = 0;Double_t lV0Radius = 0;
739 Double_t lcTauLambda = 0;Double_t lcTauAntiLambda = 0;
9dbaebd5 740 Double_t lcTauK0s = 0;
741 Double_t lDCAV0PVz = 0;
ff0805a7 742
da6ac661 743 Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
744 Double_t lPtV0s = 0; Double_t lPhiV0s = 0; Double_t lEtaV0s = 0;
746a34ad 745 Double_t lRapK0 = 0, lRapLambda = 0, lRapAntiLambda = 0;
746 Double_t lPzV0s = 0;
da6ac661 747 Double_t lPV0s = 0;
ff0805a7 748
bf855ed5 749 TObjArray *selectedTracksLeading=0;
5b607771 750 selectedTracksLeading=fAnalyseUE->FindLeadingObjects(fAODEvent);
da6ac661 751 if(!selectedTracksLeading) return;
752 selectedTracksLeading->SetOwner(kTRUE);
ff0805a7 753
da6ac661 754 TObjArray * selectedV0s = new TObjArray;
755 selectedV0s->SetOwner(kTRUE);
ff0805a7 756
33971f6b 757 TObjArray * selectedV0sAssoc = new TObjArray;
758 selectedV0sAssoc->SetOwner(kTRUE);
759
ff0805a7 760 Int_t nV0s = fAODEvent->GetNumberOfV0s();
5115718d 761
da6ac661 762 for (Int_t i = 0; i < nV0s; i++)
ff0805a7 763 { // start of V0 slection loop
764 AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
da6ac661 765 if (!aodV0) continue;
ff0805a7 766
9dbaebd5 767 if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>fTriglow)) continue;
ff0805a7 768
da6ac661 769 // get daughters
ff0805a7 770 AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
771 AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
772
a8a50f30 773 if (!myTrackPos || !myTrackNeg) continue;
da6ac661 774
775 if (!IsAcseptedV0(aodV0,myTrackPos,myTrackNeg)) continue;
ff0805a7 776
777 // VO's main characteristics to check the reconstruction cuts
ff0805a7 778 lDcaV0Daughters = aodV0->DcaV0Daughters();
5b607771 779 lV0cosPointAngle = aodV0->CosPointingAngle(lBestPrimaryVtxPos);
ff0805a7 780
781 aodV0->GetXYZ(lV0Position);
782
783 lV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
5b607771 784 lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - tPrimaryVtxPosition[0],2) +
785 TMath::Power(lV0Position[1] - tPrimaryVtxPosition[1],2) +
786 TMath::Power(lV0Position[2] - tPrimaryVtxPosition[2],2));
ff0805a7 787
788 // DCA between daughter and Primary Vertex:
789 if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
9dbaebd5 790 if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();
791 lDCAV0PVz = aodV0->DcaV0ToPrimVertex();
ff0805a7 792
793 // Quality tracks cuts:
794 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
795
da6ac661 796 // Invariant mass
797 lInvMassK0 = aodV0->MassK0Short();
798 lInvMassLambda = aodV0->MassLambda();
ff0805a7 799 lInvMassAntiLambda = aodV0->MassAntiLambda();
da6ac661 800
801 lPtV0s = aodV0->Pt();
802 lPhiV0s= aodV0->Phi();
803 lEtaV0s= aodV0->Eta();
804 lPzV0s = aodV0->Pz();
ff0805a7 805
746a34ad 806 // Rapidity:
807 lRapK0 = aodV0->RapK0Short();
808 lRapLambda = aodV0->RapLambda();
809 lRapAntiLambda = aodV0->Y(-3122);
810
da6ac661 811 if (lPtV0s==0) {continue;}
ff0805a7 812
da6ac661 813 Float_t nSigmaPosPion = 0.;
814 Float_t nSigmaNegPion = 0.;
815 Float_t nSigmaPosProton = 0.;
816 Float_t nSigmaNegProton = 0.;
ff0805a7 817
da6ac661 818 const AliAODPid *pPid = myTrackPos->GetDetPid();
819 const AliAODPid *nPid = myTrackNeg->GetDetPid();
820
821 if (pPid)
822 {
823 Double_t pdMom = pPid->GetTPCmomentum();
bf855ed5 824 if (pdMom<1.0 && (fcollidingSys=="PbPb"))
da6ac661 825 {
826 nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
827 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
828 }
ff0805a7 829
da6ac661 830 if (fcollidingSys=="PP")
831 {
832 nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
833 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
834 }
835 }
836
837 if (nPid)
838 {
839 Double_t ndMom = nPid->GetTPCmomentum();
bf855ed5 840 if (ndMom<1.0 && (fcollidingSys=="PbPb"))
da6ac661 841 {
842 nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
843 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
844 }
ff0805a7 845
da6ac661 846 if (fcollidingSys=="PP")
847 {
848 nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
849 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
850 }
851 }
852 Bool_t bpPion = TMath::Abs(nSigmaPosPion) <= fSigmaPID;
853 Bool_t bpProton = TMath::Abs(nSigmaPosProton) <= fSigmaPID;
854 Bool_t bnPion = TMath::Abs(nSigmaNegPion) <= fSigmaPID;
855 Bool_t bnProton = TMath::Abs(nSigmaNegProton) <= fSigmaPID;
856
857 Bool_t cutK0Pid = (bpPion && bnPion) ;
858 Bool_t cutLambdaPid = (bpProton && bnPion) ;
859 Bool_t cutAntiLambdaPid = (bpPion && bnProton);
860 //--------------------------------------------------
861
862 lPV0s = TMath::Sqrt(lPzV0s*lPzV0s + lPtV0s*lPtV0s);
863
864 if(lPV0s > 0) lcTauLambda = (lV0DecayLength*lInvMassLambda)/lPV0s;
865 if(lPV0s > 0) lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPV0s;
866 if(lPV0s > 0) lcTauK0s = (lV0DecayLength*lInvMassK0)/lPV0s;
867
868 Bool_t k0ctcut = (lcTauK0s < fCutCTK0);
869 Bool_t lactcut = (lcTauLambda < fCutCTLa);
870 Bool_t alactcut= (lcTauAntiLambda < fCutCTLa);
da6ac661 871
746a34ad 872 Bool_t k0Rapcut = (TMath::Abs(lRapK0) < fRapidityCut);
873 Bool_t laRapcut = (TMath::Abs(lRapLambda) < fRapidityCut);
874 Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut);
875
876 Bool_t V0EtaMax= (TMath::Abs(lEtaV0s) < fTrackEtaCut);
da6ac661 877
da6ac661 878 Bool_t k0cutset = IsAcseptedK0(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassLambda,lInvMassAntiLambda);
879 Bool_t lacutset = IsAcseptedLA(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
880 Bool_t alacutset= IsAcseptedLA(lV0Radius,lDcaNegToPrimVertex,lDcaPosToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
881
9dbaebd5 882 Double_t spK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
883 Double_t spLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
884 Double_t spAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
da6ac661 885
886 switch (fCase) {
887 case 1:
a8a50f30 888 fHistReconstK0->Fill(spK0);
9dbaebd5 889 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
ff0805a7 890
a8a50f30 891 fHistReconstLA->Fill(spLa);
9dbaebd5 892 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
da6ac661 893
a8a50f30 894 fHistReconstALA->Fill(spAl);
9dbaebd5 895 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
da6ac661 896
897 break;
898
899 case 2:
746a34ad 900 if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid)
da6ac661 901 {
a8a50f30 902 fHistReconstK0->Fill(spK0);
9dbaebd5 903 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
ff0805a7 904 }
ff0805a7 905
746a34ad 906 if (lactcut && laRapcut && lacutset && cutLambdaPid)
da6ac661 907 {
a8a50f30 908 fHistReconstLA->Fill(spLa);
9dbaebd5 909 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
da6ac661 910 }
911
746a34ad 912 if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
da6ac661 913 {
a8a50f30 914 fHistReconstALA->Fill(spAl);
9dbaebd5 915 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
da6ac661 916 }
917
918 break;
919
920 case 3:
746a34ad 921 if(k0ctcut && V0EtaMax && k0cutset && cutK0Pid)
da6ac661 922 {
a8a50f30 923 fHistReconstK0->Fill(spK0);
9dbaebd5 924 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
da6ac661 925 }
926
746a34ad 927 if (lactcut && V0EtaMax && lacutset && cutLambdaPid)
da6ac661 928 {
a8a50f30 929 fHistReconstLA->Fill(spLa);
9dbaebd5 930 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
da6ac661 931 }
932
746a34ad 933 if (alactcut && V0EtaMax && alacutset && cutAntiLambdaPid)
da6ac661 934 {
a8a50f30 935 fHistReconstALA->Fill(spAl);
9dbaebd5 936 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
da6ac661 937 }
938 break;
939
940 default:
2fdc3a7b 941 AliInfo(Form("No case selected"));
da6ac661 942 break;
ff0805a7 943 }
ff0805a7 944
da6ac661 945 if (fAnalysisMC)
946 {
947 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
948 if(!mcArray)return;
949
950 Int_t myTrackPosLabel = TMath::Abs(myTrackPos->GetLabel());
951 Int_t myTrackNegLabel = TMath::Abs(myTrackNeg->GetLabel());
952
953 AliAODMCParticle *mcPosTrack = (AliAODMCParticle*)mcArray->At(myTrackPosLabel);
a8a50f30 954 if(!mcPosTrack)continue;
da6ac661 955 AliAODMCParticle *mcNegTrack = (AliAODMCParticle*)mcArray->At(myTrackNegLabel);
a8a50f30 956 if(!mcNegTrack)continue;
da6ac661 957
958 Int_t PosDaughterPdg = mcPosTrack->GetPdgCode();
959 Int_t NegDaughterPdg = mcNegTrack->GetPdgCode();
960
961 Int_t myTrackPosMotherLabel = mcPosTrack->GetMother();
962 Int_t myTrackNegMotherLabel = mcNegTrack->GetMother();
963
964 if ((myTrackPosMotherLabel==-1)||(myTrackNegMotherLabel==-1)) continue;
965 if (myTrackPosMotherLabel!=myTrackNegMotherLabel) continue;
966
967 AliAODMCParticle *mcPosMother = (AliAODMCParticle*)mcArray->At(myTrackPosMotherLabel);
a8a50f30 968 if(!mcPosMother)continue;
da6ac661 969 Int_t MotherPdg = mcPosMother->GetPdgCode();
970 Bool_t IsPrime = mcPosMother->IsPhysicalPrimary();
971
9dbaebd5 972 Int_t myGrandMotherLabel = mcPosMother->GetMother();
973 AliAODMCParticle *mcGrandMother = (AliAODMCParticle*)mcArray->At(myGrandMotherLabel);
974 Int_t GrandMotherPdg = mcGrandMother->GetPdgCode();
975
976 Double_t rcK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
977 Double_t rcLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
978 Double_t rcAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
da6ac661 979
980 switch (fCase) {
981 case 1:
a8a50f30 982 fHistMCAssoK0->Fill(rcK0);
9dbaebd5 983 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
33971f6b 984
a8a50f30 985 fHistMCAssoLA->Fill(rcLa);
9dbaebd5 986 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
33971f6b 987
a8a50f30 988 fHistMCAssoALA->Fill(rcAl);
9dbaebd5 989 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
da6ac661 990
991 break;
992
993 case 2:
746a34ad 994 if ((k0ctcut && k0Rapcut && k0cutset)&&(MotherPdg == 310 &&
da6ac661 995 PosDaughterPdg== 211 &&
996 NegDaughterPdg== -211 &&
997 IsPrime))
998 {
a8a50f30 999 fHistMCAssoK0->Fill(rcK0);
9dbaebd5 1000 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
ff0805a7 1001 }
da6ac661 1002
746a34ad 1003 if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 &&
da6ac661 1004 PosDaughterPdg== 2212 &&
1005 NegDaughterPdg== -211 &&
1006 IsPrime))
1007 {
a8a50f30 1008 fHistMCAssoLA->Fill(rcLa);
9dbaebd5 1009 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
ff0805a7 1010 }
da6ac661 1011
746a34ad 1012 if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 &&
da6ac661 1013 PosDaughterPdg== 211 &&
1014 NegDaughterPdg== -2212 &&
1015 IsPrime))
1016 {
a8a50f30 1017 fHistMCAssoALA->Fill(rcAl);
9dbaebd5 1018 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
1019 }
1020
746a34ad 1021 if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 &&
9dbaebd5 1022 PosDaughterPdg== 2212 &&
1023 NegDaughterPdg== -211 &&
1024 (GrandMotherPdg==3322 ||GrandMotherPdg==3312)))
1025 {
1026 fHistMCAssoLAXI->Fill(rcLa);
1027 }
1028
746a34ad 1029 if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 &&
9dbaebd5 1030 PosDaughterPdg== 211 &&
1031 NegDaughterPdg== -2212 &&
1032 GrandMotherPdg== -3312))
1033 {
1034 fHistMCAssoALAXiPlus->Fill(rcAl);
ff0805a7 1035 }
da6ac661 1036
1037 break;
1038
1039 case 3:
746a34ad 1040 if ((k0ctcut && V0EtaMax && k0cutset)&&(MotherPdg == 310 &&
da6ac661 1041 PosDaughterPdg== 211 &&
1042 NegDaughterPdg== -211 &&
1043 IsPrime))
1044 {
a8a50f30 1045 fHistMCAssoK0->Fill(rcK0);
9dbaebd5 1046 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
ff0805a7 1047 }
da6ac661 1048
746a34ad 1049 if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg == 3122 &&
da6ac661 1050 PosDaughterPdg== 2212 &&
1051 NegDaughterPdg== -211 &&
1052 IsPrime))
1053 {
a8a50f30 1054 fHistMCAssoLA->Fill(rcLa);
9dbaebd5 1055 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
ff0805a7 1056 }
da6ac661 1057
746a34ad 1058 if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg == -3122 &&
da6ac661 1059 PosDaughterPdg== 211 &&
1060 NegDaughterPdg== -2212 &&
1061 IsPrime))
1062 {
a8a50f30 1063 fHistMCAssoALA->Fill(rcAl);
9dbaebd5 1064 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
ff0805a7 1065 }
746a34ad 1066
1067 if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg == 3122 &&
1068 PosDaughterPdg== 2212 &&
1069 NegDaughterPdg== -211 &&
1070 (GrandMotherPdg==3322 ||GrandMotherPdg==3312)))
1071 {
1072 fHistMCAssoLAXI->Fill(rcLa);
1073 }
1074
1075 if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg == -3122 &&
1076 PosDaughterPdg== 211 &&
1077 NegDaughterPdg== -2212 &&
1078 GrandMotherPdg== -3312))
1079 {
1080 fHistMCAssoALAXiPlus->Fill(rcAl);
1081 }
da6ac661 1082 break;
1083
1084 default:
2fdc3a7b 1085 AliInfo(Form("No case selected"));
da6ac661 1086 break;
1087 }
1088 }
1089 }
ff0805a7 1090
a8a50f30 1091 FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib);
1092 FillCorrelationMixing(ltrackMultiplicity,tPrimaryVtxPosition[2],poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix);
ff0805a7 1093
a8a50f30 1094 FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0sAssoc,fHistTriggerSibASO,fHistReconstSibASO);
1095 FillCorrelationMixing(ltrackMultiplicity,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0sAssoc,fHistTriggerMixASO,fHistReconstMixASO);
33971f6b 1096
da6ac661 1097 PostData(1,fOutputList);
1098}
ff0805a7 1099//---------------------------------------------------------------------------------------
da6ac661 1100void AliLeadingV0Correlation::Terminate(Option_t *)
ff0805a7 1101{
da6ac661 1102 //No need in the grid
ff0805a7 1103}
1104//---------------------------------------------------------------------------------------
1105Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
9dbaebd5 1106{
d803353d 1107 if(fCase==1 || fCase==2)
746a34ad 1108 if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
1109
ff0805a7 1110 if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
1111
1112 Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
a8a50f30 1113 if (nCrossedRowsTPC < fTPCClusters) return kFALSE;
ff0805a7 1114
1115 Int_t findable=itrack->GetTPCNclsF();
1116 if (findable <= 0) return kFALSE;
1117
a8a50f30 1118 if (nCrossedRowsTPC/findable < fTPCfindratio) return kFALSE;
ff0805a7 1119 return kTRUE;
1120}
1121//---------------------------------------------------------------------------------------
da6ac661 1122Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
ff0805a7 1123{
da6ac661 1124 if (!aodV0) return kFALSE;
ff0805a7 1125
da6ac661 1126 // Offline reconstructed V0 only
1127 if (aodV0->GetOnFlyStatus()) return kFALSE;
ff0805a7 1128
da6ac661 1129 // Get daughters and check them
1130 myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1131 myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
ff0805a7 1132
da6ac661 1133 if (!myTrackPos||!myTrackNeg) return kFALSE;
1134 // Unlike signs of daughters
1135 if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE;
ff0805a7 1136
da6ac661 1137 // Track cuts for daughers
1138 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE;
1139
1140 // Minimum pt of daughters
1141 Double_t lPtPos = myTrackPos->Pt();
1142 Double_t lPtNeg = myTrackNeg->Pt();
1143
1144 if (lPtPos<fPtMin || lPtNeg<fPtMin) return kFALSE;
ff0805a7 1145
da6ac661 1146 return kTRUE;
ff0805a7 1147}
1148//---------------------------------------------------------------------------------------
da6ac661 1149Bool_t AliLeadingV0Correlation::IsAcseptedK0(Double_t v0rad,
1150 Double_t dcaptp,
1151 Double_t dcantp,
1152 Double_t dcav0d,
1153 Double_t cpa,
1154 Double_t massLa,
1155 Double_t massALa)
1156{
1157 if(v0rad >=fV0radius &&
1158 dcaptp >=fV0PostoPVz &&
1159 dcantp >=fV0NegtoPVz &&
1160 dcav0d <=fDCAV0Daughters &&
1161 cpa >=fCPAK0 &&
1162 TMath::Abs(massLa - 1.115683) > fRejectLamK0 &&
1163 TMath::Abs(massALa - 1.115683) > fRejectLamK0 )return kTRUE;
1164 return kFALSE;
ff0805a7 1165}
1166//---------------------------------------------------------------------------------------
da6ac661 1167Bool_t AliLeadingV0Correlation::IsAcseptedLA(Double_t v0rad,
1168 Double_t dcaptp,
1169 Double_t dcantp,
1170 Double_t dcav0d,
1171 Double_t cpa,
1172 Double_t massK0)
1173{
1174 if(v0rad >=fV0radius &&
1175 dcaptp >=fV0PostoPVz &&
1176 dcantp >=fV0NegtoPVz &&
1177 dcav0d <=fDCAV0Daughters &&
1178 cpa >=fCPALam &&
1179 TMath::Abs(massK0 - 0.4976) > fRejectK0Lam &&
1180 TMath::Abs(massK0 - 0.4976) > fRejectK0Lam )return kTRUE;
1181 return kFALSE;
ff0805a7 1182}
1183//---------------------------------------------------------------------------------------
9bcef488 1184Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const
1185{
da6ac661 1186 const Float_t massK0 = 0.497;
ff0805a7 1187
da6ac661 1188 return ((massK0-fMassCutK0)<=mass && mass<=(massK0 + fMassCutK0))?1:0;
ff0805a7 1189}
1190//---------------------------------------------------------------------------------------
9bcef488 1191Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const
1192{
da6ac661 1193 const Float_t massLambda = 1.116;
ff0805a7 1194
da6ac661 1195 return ((massLambda-fMassCutLa)<=mass && mass<=(massLambda + fMassCutLa))?1:0;
1196}
1197//---------------------------------------------------------------------------------------
1198Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi)
1199{
1200 if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi();
1201 if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();
1202 return DPhi;
ff0805a7 1203}
1204//---------------------------------------------------------------------------------------
da6ac661 1205Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
9bcef488 1206{
1207 Int_t atrID = track->GetID();
1208
ff0805a7 1209 for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
1210 AliAODv0* aodV0 = fAODEvent->GetV0(i);
9bcef488 1211
1212 AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1213 AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
ff0805a7 1214
9bcef488 1215 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
1216 //----------------------------------
1217 Int_t negID = trackNeg->GetID();
1218 Int_t posID = trackPos->GetID();
1219
da6ac661 1220 if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1221 if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
9bcef488 1222 //----------------------------------
ff0805a7 1223 }
da6ac661 1224 return kFALSE;
ff0805a7 1225}
1226//---------------------------------------------------------------------------------------
da6ac661 1227void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
1228 TObjArray*triggerArray,
1229 TObjArray*selectedV0Array,
746a34ad 1230 TH3F*triggerHist,
da6ac661 1231 THnSparse*associateHist)
ff0805a7 1232{
33971f6b 1233 Double_t binsv0CORR[8];
9dbaebd5 1234 Double_t binsTrigSib[2];
da6ac661 1235 Int_t counterSibMCA=0;
ff0805a7 1236
da6ac661 1237 for(Int_t i=0;i<triggerArray->GetEntriesFast();i++)
1238 {
1239 AliAODTrack* trigger = (AliAODTrack*)triggerArray->At(0);
1240 if(!trigger)continue;
1241
1242 if(fRemoveAutoCorr)
1243 if(IsTrackFromV0(trigger))continue;
1244
1245 Double_t triggerPt = trigger->Pt();
1246 Double_t triggerPhi = trigger->Phi();
1247 Double_t triggerEta = trigger->Eta();
1248
5b607771 1249 if(triggerPt<fTriglow||triggerPt>fTrighigh)continue;
da6ac661 1250 counterSibMCA++;
5b607771 1251
da6ac661 1252 if(counterSibMCA==triggerArray->GetEntriesFast()){
1253
1254 binsTrigSib[0]=triggerPt;
9dbaebd5 1255 binsTrigSib[1]=MultipOrCent;
da6ac661 1256
746a34ad 1257 if(triggerHist)triggerHist->Fill(binsTrigSib[0],triggerPhi,triggerEta);
da6ac661 1258
bf855ed5 1259 for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
1260
1261 V0Correlationparticle* associate = (V0Correlationparticle*) selectedV0Array->At(j);
1262 if(!associate)continue;
1263
1264 binsv0CORR[0]= associate->Pt();
1265 binsv0CORR[1]= associate->Phi();
1266 binsv0CORR[2]= associate->Eta();
1267
1268 if(binsv0CORR[0]>triggerPt) continue;
1269
1270 binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]);
1271 binsv0CORR[4]=triggerEta-binsv0CORR[2];
1272 binsv0CORR[5]= associate->WhichCandidate();
33971f6b 1273 binsv0CORR[6]= associate->DCAPostoP();
1274 binsv0CORR[7]= associate->DCANegtoP();
bf855ed5 1275
1276 associateHist->Fill(binsv0CORR);
1277 }
1278 }
1279 }
da6ac661 1280}
1281//---------------------------------------------------------------------------------------
1282void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
1283 Double_t pvxMix,
1284 Double_t poolmax,
1285 Double_t poolmin,
1286 TObjArray*triggerArray,
1287 TObjArray*selectedV0Array,
9dbaebd5 1288 TH1F*triggerHist,
da6ac661 1289 THnSparse*associateHist)
1290{
1291 if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
1292 {
1293 if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
da6ac661 1294 return;
1295 }
ff0805a7 1296
33971f6b 1297 Double_t binsv0CORRMix[8];
5b607771 1298 Double_t binsTrigMix[2];
da6ac661 1299 Double_t counterMix=0;
ff0805a7 1300
da6ac661 1301 AliEventPool* pool = fPoolMgr->GetEventPool(MultipOrCentMix, pvxMix);
ff7f6628 1302 if (!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", MultipOrCentMix, pvxMix));
ff0805a7 1303
da6ac661 1304 if (pool->IsReady() || pool->NTracksInPool() > fPoolMinNTracks || pool->GetCurrentNEvents() > fMinEventsToMix)
1305 {
1306 Int_t nMix = pool->GetCurrentNEvents();
1307 for (Int_t jMix=0; jMix<nMix; jMix++){
1308
1309 TObjArray* mixEvents = pool->GetEvent(jMix);
1310 for (Int_t i=0; i<triggerArray->GetEntriesFast(); i++){
1311
1312 AliAODTrack* trig = (AliAODTrack*)triggerArray->At(0);
1313 if(!trig)continue;
1314
1315 if(fRemoveAutoCorr)
1316 if(IsTrackFromV0(trig))continue;
1317
1318 Double_t trigPhi = trig->Phi();
1319 Double_t trigEta = trig->Eta();
1320 Double_t trigPt = trig->Pt();
1321
5b607771 1322 if(trigPt<fTriglow||trigPt>fTrighigh)continue;
da6ac661 1323 counterMix++;
5b607771 1324
da6ac661 1325 if(counterMix==triggerArray->GetEntriesFast()){
1326
1327 binsTrigMix[0]=trigPt;
9dbaebd5 1328 binsTrigMix[1]=MultipOrCentMix;
bf855ed5 1329
9dbaebd5 1330 if(triggerHist)triggerHist->Fill(binsTrigMix[0]);
bf855ed5 1331
da6ac661 1332 for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
1333
1334 V0Correlationparticle* associate = (V0Correlationparticle*) mixEvents->At(j);
1335 if(!associate)continue;
1336
1337 binsv0CORRMix[0]= associate->Pt();
1338 binsv0CORRMix[1]= associate->Phi();
1339 binsv0CORRMix[2]= associate->Eta();
1340
1341 if(binsv0CORRMix[0]>trigPt) continue;
1342
1343 binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]);
1344 binsv0CORRMix[4]=trigEta-binsv0CORRMix[2];
1345 binsv0CORRMix[5]=associate->WhichCandidate();
33971f6b 1346 binsv0CORRMix[6]=associate->DCAPostoP();
1347 binsv0CORRMix[7]=associate->DCANegtoP();
da6ac661 1348
1349 associateHist->Fill(binsv0CORRMix);
5b607771 1350 }
da6ac661 1351 }
1352 }
1353 }
1354 }
ff0805a7 1355
da6ac661 1356 TObjArray* tracksClone = new TObjArray;
1357 tracksClone->SetOwner(kTRUE);
ff0805a7 1358
da6ac661 1359 for (Int_t i=0; i<selectedV0Array->GetEntriesFast(); i++)
1360 {
1361 V0Correlationparticle* particle = (V0Correlationparticle*) selectedV0Array->At(i);
1362 tracksClone->Add(new V0Correlationparticle(particle->Eta(),
1363 particle->Phi(),
1364 particle->Pt(),
33971f6b 1365 particle->WhichCandidate(),
1366 particle->DCAPostoP(),
1367 particle->DCANegtoP()));
da6ac661 1368 };
1369 pool->UpdatePool(tracksClone);
ff0805a7 1370}
da6ac661 1371//---------------------------------------------------------------------------------------
1372
1373
1374
5b607771 1375