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