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