1 /* Leading Charged Track+V0 Correlation.(Works for Real,Monte Carlo Data)
3 * University of Houston
4 * sandun.pahula.hewage@cern.ch
5 *****************************************************************************************/
16 #include <THnSparse.h>
18 #include <TDatabasePDG.h>
21 #include "AliAnalysisManager.h"
22 #include "AliAODTrack.h"
23 #include "AliAODEvent.h"
25 #include "AliAODVertex.h"
26 #include "AliAODPid.h"
27 #include "AliPIDResponse.h"
28 #include "AliEventPoolManager.h"
29 #include "AliCentrality.h"
30 #include "AliAODHandler.h"
31 #include "AliAODInputHandler.h"
32 #include "AliAODMCParticle.h"
33 #include "AliInputEventHandler.h"
34 #include "AliVParticle.h"
35 #include "AliMultiplicity.h"
36 #include "AliAODMCHeader.h"
38 #include "AliExternalTrackParam.h"
39 #include "AliAnalyseLeadingTrackUE.h"
41 #include "AliLeadingV0Correlation.h"
47 Double_t PI =TMath::Pi();
49 ClassImp(AliLeadingV0Correlation)
50 ClassImp(V0Correlationparticle)
52 //---------------------------------------------------------------------------------------
53 AliLeadingV0Correlation::AliLeadingV0Correlation()
54 : AliAnalysisTaskSE(),
89 fUseChargeHadrons (kTRUE),
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),
100 fHistPVxAnalysis (0),
101 fHistPVyAnalysis (0),
102 fHistPVzAnalysis (0),
103 fHistEventViceGen (0),
104 fHistEventViceReconst (0),
108 fHistMCGenLAMXIPLS (0),
117 fHistMCAssoALAXiPlus (0),
120 fHistReconstSibGEN (0),
121 fHistReconstMixGEN (0),
122 fHistReconstSibASO (0),
123 fHistReconstMixASO (0),
124 fHistReconstSibFEED (0),
125 fHistReconstMixFEED (0),
128 fHistTriggerSibGEN (0),
129 fHistTriggerMixGEN (0),
130 fHistTriggerSibASO (0),
131 fHistTriggerMixASO (0)
134 for(Int_t iBin = 0; iBin < 100; iBin++){
135 fZvtxBins[iBin] = 0.;
136 fCentBins[iBin] = 0.;
139 //---------------------------------------------------------------------------------------
140 AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
141 : AliAnalysisTaskSE(name),
176 fUseChargeHadrons (kTRUE),
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),
187 fHistPVxAnalysis (0),
188 fHistPVyAnalysis (0),
189 fHistPVzAnalysis (0),
190 fHistEventViceGen (0),
191 fHistEventViceReconst (0),
195 fHistMCGenLAMXIPLS (0),
204 fHistMCAssoALAXiPlus (0),
207 fHistReconstSibGEN (0),
208 fHistReconstMixGEN (0),
209 fHistReconstSibASO (0),
210 fHistReconstMixASO (0),
211 fHistReconstSibFEED (0),
212 fHistReconstMixFEED (0),
215 fHistTriggerSibGEN (0),
216 fHistTriggerMixGEN (0),
217 fHistTriggerSibASO (0),
218 fHistTriggerMixASO (0)
222 for(Int_t iBin = 0; iBin < 100; iBin++){
223 fZvtxBins[iBin] = 0.;
224 fCentBins[iBin] = 0.;
226 DefineOutput(1, TList::Class());
229 //---------------------------------------------------------------------------------------
230 AliLeadingV0Correlation::~AliLeadingV0Correlation()
232 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
236 //---------------------------------------------------------------------------------------
237 void AliLeadingV0Correlation::UserCreateOutputObjects()
239 fAnalyseUE =new AliAnalyseLeadingTrackUE();
242 fAnalyseUE->SetParticleSelectionCriteria(fFilterBit,fUseChargeHadrons,fTrackEtaCut,fPtMin);
243 fAnalyseUE->DefineESDCuts(fFilterBit);
246 fOutputList = new TList();
247 fOutputList->SetOwner();
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);
250 fOutputList->Add(fHist_Mult_B4_Trg_Sel);
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);
253 fOutputList->Add(fHist_Mult_Af_Trg_Sel);
255 fHist_Mult_PVz_Cut = new TH2F("fHist_Mult_PVz_Cut","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);
256 fOutputList->Add(fHist_Mult_PVz_Cut);
258 fHist_Mult_SPD_PVz = new TH2F("fHist_Mult_SPD_PVz","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000);
259 fOutputList->Add(fHist_Mult_SPD_PVz);
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);
262 fOutputList->Add(fHist_Mult_SPD_PVz_Pileup);
264 fHistPVx = new TH1F("fHistPVx","PV x position;Nbr of Evts;x", 200, -0.5, 0.5);
265 fOutputList->Add(fHistPVx);
267 fHistPVy = new TH1F("fHistPVy","PV y position;Nbr of Evts;y",200, -0.5, 0.5);
268 fOutputList->Add(fHistPVy);
270 fHistPVz = new TH1F("fHistPVz","PV z position;Nbr of Evts;z",400, -20, 20);
271 fOutputList->Add(fHistPVz);
273 fHistPVxAnalysis = new TH1F("fHistPVxAnalysis","PV x position;Nbr of Evts;x", 200, -0.5, 0.5);
274 fOutputList->Add(fHistPVxAnalysis);
276 fHistPVyAnalysis = new TH1F("fHistPVyAnalysis","PV y position;Nbr of Evts;y",200, -0.5, 0.5);
277 fOutputList->Add(fHistPVyAnalysis);
279 fHistPVzAnalysis = new TH1F("fHistPVzAnalysis","PV z position;Nbr of Evts;z",400, -20, 20);
280 fOutputList->Add(fHistPVzAnalysis);
282 //---------------------------------------------- Events histograms -----------------------------------------------------//
284 fHistEventViceGen= new TH2F("fHistEventViceGen", "fHistEventViceGen", 200, -20, 20, 10,0,1000);
285 fOutputList->Add(fHistEventViceGen);
287 fHistEventViceReconst= new TH2F("fHistEventViceReconst", "fHistEventViceReconst", 200, -20, 20, 10,0,1000);
288 fOutputList->Add(fHistEventViceReconst);
290 fHistMCGenLAM = new TH2F("fHistMCGenLAM" , "fHistMCGenLAM" ,140,1.06,1.2, 120, 0, fTriglow);
291 fOutputList->Add(fHistMCGenLAM);
293 fHistMCGenALAM = new TH2F("fHistMCGenALAM", "fHistMCGenALAM",140,1.06,1.2, 120, 0, fTriglow);
294 fOutputList->Add(fHistMCGenALAM);
296 fHistMCGenK0 = new TH2F("fHistMCGenK0" , "fHistMCGenK0" ,200,0.4,0.6, 120, 0, fTriglow);
297 fOutputList->Add(fHistMCGenK0);
299 fHistMCGenLAMXIPLS = new TH2F("fHistMCGenLAMXIPLS", "fHistMCGenLAMXIPLS",140,1.06,1.2, 120, 0, fTriglow);
300 fOutputList->Add(fHistMCGenLAMXIPLS);
302 fHistMCGenLAMXI = new TH2F("fHistMCGenLAMXI" , "fHistMCGenLAMXI" ,140,1.06,1.2, 120, 0, fTriglow);
303 fOutputList->Add(fHistMCGenLAMXI);
305 //New dimension for feed down corection
307 const Int_t ndimsK0 = 4;
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};
312 const Int_t ndimsLA = 4;
313 Int_t binsLA[ndimsLA] = { 140, 120,500,1000};
314 Double_t xminLA[ndimsLA] = {1.06, 0, 0,0.99};
315 Double_t xmaxLA[ndimsLA] = { 1.2, fTriglow, 10, 1};
317 fHistReconstK0= new THnSparseD("fHistReconstK0" , "fHistReconstK0",ndimsK0,binsK0,xminK0,xmaxK0);
318 fHistReconstK0->Sumw2();
319 fOutputList->Add(fHistReconstK0);
321 fHistReconstLA= new THnSparseD("fHistReconstLA" , "fHistReconstLA",ndimsLA,binsLA,xminLA,xmaxLA);
322 fHistReconstLA->Sumw2();
323 fOutputList->Add(fHistReconstLA);
325 fHistReconstALA= new THnSparseD("fHistReconstALA", "fHistReconstALA",ndimsLA,binsLA,xminLA,xmaxLA);
326 fHistReconstALA->Sumw2();
327 fOutputList->Add(fHistReconstALA);
329 fHistMCAssoK0= new THnSparseD("fHistMCAssoK0" , "fHistMCAssoK0" ,ndimsK0,binsK0,xminK0,xmaxK0);
330 fHistMCAssoK0->Sumw2();
331 fOutputList->Add(fHistMCAssoK0);
333 fHistMCAssoLA= new THnSparseD("fHistMCAssoLA" , "fHistMCAssoLA" ,ndimsLA,binsLA,xminLA,xmaxLA);
334 fHistMCAssoLA->Sumw2();
335 fOutputList->Add(fHistMCAssoLA);
337 fHistMCAssoALA= new THnSparseD("fHistMCAssoALA" , "fHistMCAssoALA" , ndimsLA,binsLA,xminLA,xmaxLA);
338 fHistMCAssoALA->Sumw2();
339 fOutputList->Add(fHistMCAssoALA);
341 fHistMCAssoLAXI= new THnSparseD("fHistMCAssoLAXI" , "fHistMCAssoLAXI" , ndimsLA,binsLA,xminLA,xmaxLA);
342 fHistMCAssoLAXI->Sumw2();
343 fOutputList->Add(fHistMCAssoLAXI);
345 fHistMCAssoALAXiPlus= new THnSparseD("fHistMCAssoALAXiPlus" , "fHistMCAssoALAXiPlus" , ndimsLA,binsLA,xminLA,xmaxLA);
346 fHistMCAssoALAXiPlus->Sumw2();
347 fOutputList->Add(fHistMCAssoALAXiPlus);
349 //--------------------------------------------Correlation Histos -----------------------------------------------------//
351 //0-pTK0,1-PhiK0,2-EtaK0,3-DPhiK0,4-DEtaK0,5-TYPE,6-CutSet
352 const Int_t ndimsv0CORR = 8;
353 Int_t binsv0CORR[ndimsv0CORR] = {120, 200, 200,CorrBinsX, CorrBinsY,4,500,1000};
355 Double_t xminv0CORR[ndimsv0CORR] = { 0, 0,-fTrackEtaCut, -PI/2,-2*fTrackEtaCut,0, 0,0.99};
357 Double_t xmaxv0CORR[ndimsv0CORR] = { fTriglow,2*PI, fTrackEtaCut, 3*PI/2, 2*fTrackEtaCut,4, 10, 1};
359 fHistReconstSib= new THnSparseD("fHistReconstSib", "fHistReconstSib", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
360 fHistReconstSib->Sumw2();
361 fOutputList->Add(fHistReconstSib);
363 fHistReconstMix= new THnSparseD("fHistReconstMix", "fHistReconstMix", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
364 fHistReconstMix->Sumw2();
365 fOutputList->Add(fHistReconstMix);
367 fHistReconstSibGEN= new THnSparseD("fHistReconstSibGEN", "fHistReconstSibGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
368 fHistReconstSibGEN->Sumw2();
369 fOutputList->Add(fHistReconstSibGEN);
371 fHistReconstMixGEN= new THnSparseD("fHistReconstMixGEN", "fHistReconstMixGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
372 fHistReconstMixGEN->Sumw2();
373 fOutputList->Add(fHistReconstMixGEN);
375 fHistReconstSibASO= new THnSparseD("fHistReconstSibASO", "fHistReconstSibASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
376 fHistReconstSibASO->Sumw2();
377 fOutputList->Add(fHistReconstSibASO);
379 fHistReconstMixASO= new THnSparseD("fHistReconstMixASO", "fHistReconstMixASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
380 fHistReconstMixASO->Sumw2();
381 fOutputList->Add(fHistReconstMixASO);
383 fHistReconstSibFEED= new THnSparseD("fHistReconstSibFEED", "fHistReconstSibFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
384 fHistReconstSibFEED->Sumw2();
385 fOutputList->Add(fHistReconstSibFEED);
387 fHistReconstMixFEED= new THnSparseD("fHistReconstMixFEED", "fHistReconstMixFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
388 fHistReconstMixFEED->Sumw2();
389 fOutputList->Add(fHistReconstMixFEED);
392 fHistTriggerSib= new TH3F("fHistTriggerSib", "fHistTriggerSib", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
393 fHistTriggerSib->Sumw2();
394 fOutputList->Add(fHistTriggerSib);
396 fHistTriggerMix= new TH1F("fHistTriggerMix", "fHistTriggerMix", 100, fTriglow, fTrighigh);
397 fHistTriggerMix->Sumw2();
398 fOutputList->Add(fHistTriggerMix);
400 fHistTriggerSibGEN= new TH3F("fHistTriggerSibGEN", "fHistTriggerSibGEN", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
401 fHistTriggerSibGEN->Sumw2();
402 fOutputList->Add(fHistTriggerSibGEN);
404 fHistTriggerMixGEN= new TH1F("fHistTriggerMixGEN", "fHistTriggerMixGEN", 100, fTriglow, fTrighigh);
405 fHistTriggerMixGEN->Sumw2();
406 fOutputList->Add(fHistTriggerMixGEN);
408 fHistTriggerSibASO= new TH3F("fHistTriggerSibASO", "fHistTriggerSibASO", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut);
409 fHistTriggerSibASO->Sumw2();
410 fOutputList->Add(fHistTriggerSibASO);
412 fHistTriggerMixASO= new TH1F("fHistTriggerMixASO", "fHistTriggerMixASO", 100, fTriglow, fTrighigh);
413 fHistTriggerMixASO->Sumw2();
414 fOutputList->Add(fHistTriggerMixASO);
416 //----------------------------------------------Event Pool-----------------------------------------------------//
417 fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins);
418 if(!fPoolMgr) return;
420 PostData(1, fOutputList);
422 //---------------------------------------------------------------------------------------
423 void AliLeadingV0Correlation::UserExec(Option_t *)
426 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
427 AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler());
428 if (!inEvMain) return;
430 // Pointers to PID Response objects.
431 fPIDResponse = inEvMain->GetPIDResponse();
432 if(!fPIDResponse) return;
434 fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent());
435 if(!fAODEvent) return;
437 Int_t ltrackMultiplicity = 0;
438 Int_t lrefMultiplicity = 0;
440 //------------------------------------------------
441 // Before Physics Selection
442 //------------------------------------------------
443 ltrackMultiplicity = (InputEvent())->GetNumberOfTracks();
444 lrefMultiplicity =fAODEvent->GetHeader()->GetRefMultiplicity();
446 fHist_Mult_B4_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
448 Double_t * CentBins = fCentBins;
449 Double_t poolmin = CentBins[0];
450 Double_t poolmax = CentBins[fNCentBins];
452 //----------------------------------------------------------
453 // Efficency denomenator comes before the physics selection
454 //----------------------------------------------------------
456 Double_t dimEventviceMC[2];
457 if(fAnalysisMC) //Efficency denomenator comes before the physics selection
459 AliAODMCHeader *aodMCheader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName());
460 if(!aodMCheader) return;
461 Float_t mcZv = aodMCheader->GetVtxZ();
463 if (TMath::Abs(mcZv) >= fpvzcut) return;
465 dimEventviceMC[0]=aodMCheader->GetVtxZ();
467 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
470 Int_t nMCTracks = mcArray->GetEntriesFast();
472 dimEventviceMC[1]=nMCTracks;
473 fHistEventViceGen->Fill(dimEventviceMC[0],dimEventviceMC[1]);
475 TObjArray *selectedTracksLeadingMC=fAnalyseUE->FindLeadingObjects(mcArray);
476 if(!selectedTracksLeadingMC) return;
477 selectedTracksLeadingMC->SetOwner(kTRUE);
479 TObjArray * selectedV0sMC =new TObjArray;
480 selectedV0sMC->SetOwner(kTRUE);
482 TObjArray * selectedV0sMCXI =new TObjArray;
483 selectedV0sMCXI->SetOwner(kTRUE);
485 for (Int_t iMC = 0; iMC<nMCTracks; iMC++)
487 AliAODMCParticle *mcTrack = (AliAODMCParticle*)mcArray->At(iMC);
488 if (!mcTrack) continue;
489 // Charged track Generated level
490 Double_t mcTrackPt = mcTrack->Pt();
491 if ((mcTrackPt<fPtMin)||(mcTrackPt>fTriglow)) continue;
493 Double_t mcTrackEta = mcTrack->Eta();
494 Double_t mcTrackPhi = mcTrack->Phi();
495 Bool_t TrIsPrime = mcTrack->IsPhysicalPrimary();
496 Bool_t TrPtMin = mcTrackPt>fPtMin;
497 Bool_t TrCharge = (mcTrack->Charge())!=0;
499 if (!TrIsPrime && !TrPtMin && !TrCharge) continue; //Check Point 1
501 // V0 Generated level
502 Int_t mcPartPdg = mcTrack->GetPdgCode();
504 Double_t mcRapidity = mcTrack->Y();
505 Bool_t V0RapMax = TMath::Abs(mcRapidity)<fRapidityCut;
506 Bool_t V0EtaMax = TMath::Abs(mcTrackEta)<fTrackEtaCut;
507 Double_t mcMass = mcTrack->M();
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)};
513 Int_t myTrackMotherLabel = mcTrack->GetMother();
515 AliAODMCParticle *mcMother = (AliAODMCParticle*)mcArray->At(myTrackMotherLabel);
516 if (!mcMother) continue;
517 Int_t MotherPdg = mcMother->GetPdgCode();
518 Bool_t IsK0 = mcPartPdg==310;
519 Bool_t IsLambda = mcPartPdg==3122;
520 Bool_t IsAntiLambda = mcPartPdg==-3122;
522 Bool_t IsXImin =MotherPdg== 3312;
523 Bool_t IsXIPlus =MotherPdg==-3312;
524 Bool_t IsXizero =MotherPdg== 3322;
525 Bool_t IsOmega =MotherPdg== 3334;
532 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
533 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
538 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
539 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
544 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
545 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
548 if (IsLambda && (IsXizero || IsXImin))
550 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
551 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
554 if (IsLambda && IsOmega)
556 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
559 if (IsAntiLambda && IsXIPlus)
561 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
562 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
569 if (IsK0 && V0RapMax && TrIsPrime)
571 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
572 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
575 if (IsLambda && V0RapMax && TrIsPrime)
577 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
578 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
581 if (IsAntiLambda && V0RapMax && TrIsPrime)
583 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
584 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
587 if (IsLambda && V0RapMax && (IsXizero || IsXImin))
589 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
590 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
593 if (IsLambda && V0RapMax && IsOmega)
595 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
598 if (IsAntiLambda && V0RapMax && IsXIPlus)
600 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
601 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
608 if (IsK0 && V0EtaMax && TrIsPrime)
610 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
611 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
614 if (IsLambda && V0EtaMax && TrIsPrime)
616 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
617 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
620 if (IsAntiLambda && V0EtaMax && TrIsPrime)
622 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
623 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
626 if (IsLambda && V0EtaMax && (IsXizero || IsXImin))
628 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
629 fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
632 if (IsLambda && V0EtaMax && IsOmega)
634 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
637 if (IsAntiLambda && V0EtaMax && IsXIPlus)
639 selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
640 fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
645 AliInfo(Form("No case selected"));
650 FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerSibGEN,fHistReconstSibGEN);
651 FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerMixGEN,fHistReconstMixGEN);
653 FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstSibFEED);
654 FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstMixFEED);
657 // End Loop over MC condition
659 //------------------------------------------------
661 //------------------------------------------------
662 UInt_t maskIsSelected = inEvMain->IsEventSelected();
663 Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB);
664 if (!isSelected) return;
666 //------------------------------------------------
667 // After Trigger Selection
668 //------------------------------------------------
670 fHist_Mult_Af_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity);
672 //------------------------------------------------
673 // Getting: Primary Vertex + MagField Info
674 //------------------------------------------------
675 Double_t dimEventviceReal[3];
676 Double_t lBestPrimaryVtxPos[3];
677 Double_t tPrimaryVtxPosition[3];
678 Double_t lV0Position[3];
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);
688 const AliVVertex *primaryVtx = fAODEvent->GetPrimaryVertex();
689 if(!primaryVtx)return;
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] );
697 //------------------------------------------------
698 // Primary Vertex Z position: SKIP
699 //------------------------------------------------
701 Double_t lPVx = lBestPrimaryVtxPos[0];
702 Double_t lPVy = lBestPrimaryVtxPos[1];
703 Double_t lPVz = lBestPrimaryVtxPos[2];
705 if ((TMath::Abs(lPVz)) >= fpvzcut) return ;
706 if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return;
707 fHist_Mult_PVz_Cut->Fill(ltrackMultiplicity,lrefMultiplicity);
709 //------------------------------------------------
710 // Only look at events with well-established PV
711 //------------------------------------------------
713 const AliAODVertex *lPrimaryTrackingAODVtxCheck = fAODEvent->GetPrimaryVertex();
714 const AliAODVertex *lPrimarySPDVtx = fAODEvent->GetPrimaryVertexSPD();
715 if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtxCheck )return;
717 fHist_Mult_SPD_PVz->Fill(ltrackMultiplicity,lrefMultiplicity);
718 //------------------------------------------------
720 //------------------------------------------------
722 // FIXME : quality selection regarding pile-up rejection
723 if(fAODEvent->IsPileupFromSPD()) return;
724 fHist_Mult_SPD_PVz_Pileup->Fill(ltrackMultiplicity,lrefMultiplicity);
726 fHistPVxAnalysis->Fill(tPrimaryVtxPosition[0]);
727 fHistPVyAnalysis->Fill(tPrimaryVtxPosition[1]);
728 fHistPVzAnalysis->Fill(tPrimaryVtxPosition[2]);
730 dimEventviceReal[0]=tPrimaryVtxPosition[2];
731 dimEventviceReal[1]=ltrackMultiplicity;
733 fHistEventViceReconst->Fill(dimEventviceReal[0],dimEventviceReal[1]);
735 //---------------------------------------------------------------------------------------------
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;
740 Double_t lcTauK0s = 0;
741 Double_t lDCAV0PVz = 0;
743 Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
744 Double_t lPtV0s = 0; Double_t lPhiV0s = 0; Double_t lEtaV0s = 0;
745 Double_t lRapK0 = 0, lRapLambda = 0, lRapAntiLambda = 0;
749 TObjArray *selectedTracksLeading=0;
750 selectedTracksLeading=fAnalyseUE->FindLeadingObjects(fAODEvent);
751 if(!selectedTracksLeading) return;
752 selectedTracksLeading->SetOwner(kTRUE);
754 TObjArray * selectedV0s = new TObjArray;
755 selectedV0s->SetOwner(kTRUE);
757 TObjArray * selectedV0sAssoc = new TObjArray;
758 selectedV0sAssoc->SetOwner(kTRUE);
760 Int_t nV0s = fAODEvent->GetNumberOfV0s();
762 for (Int_t i = 0; i < nV0s; i++)
763 { // start of V0 slection loop
764 AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
765 if (!aodV0) continue;
767 if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>fTriglow)) continue;
770 AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
771 AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
773 if (!myTrackPos || !myTrackNeg) continue;
775 if (!IsAcseptedV0(aodV0,myTrackPos,myTrackNeg)) continue;
777 // VO's main characteristics to check the reconstruction cuts
778 lDcaV0Daughters = aodV0->DcaV0Daughters();
779 lV0cosPointAngle = aodV0->CosPointingAngle(lBestPrimaryVtxPos);
781 aodV0->GetXYZ(lV0Position);
783 lV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
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));
788 // DCA between daughter and Primary Vertex:
789 if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
790 if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();
791 lDCAV0PVz = aodV0->DcaV0ToPrimVertex();
793 // Quality tracks cuts:
794 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
797 lInvMassK0 = aodV0->MassK0Short();
798 lInvMassLambda = aodV0->MassLambda();
799 lInvMassAntiLambda = aodV0->MassAntiLambda();
801 lPtV0s = aodV0->Pt();
802 lPhiV0s= aodV0->Phi();
803 lEtaV0s= aodV0->Eta();
804 lPzV0s = aodV0->Pz();
807 lRapK0 = aodV0->RapK0Short();
808 lRapLambda = aodV0->RapLambda();
809 lRapAntiLambda = aodV0->Y(-3122);
811 if (lPtV0s==0) {continue;}
813 Float_t nSigmaPosPion = 0.;
814 Float_t nSigmaNegPion = 0.;
815 Float_t nSigmaPosProton = 0.;
816 Float_t nSigmaNegProton = 0.;
818 const AliAODPid *pPid = myTrackPos->GetDetPid();
819 const AliAODPid *nPid = myTrackNeg->GetDetPid();
823 Double_t pdMom = pPid->GetTPCmomentum();
824 if (pdMom<1.0 && (fcollidingSys=="PbPb"))
826 nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
827 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
830 if (fcollidingSys=="PP")
832 nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
833 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
839 Double_t ndMom = nPid->GetTPCmomentum();
840 if (ndMom<1.0 && (fcollidingSys=="PbPb"))
842 nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
843 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
846 if (fcollidingSys=="PP")
848 nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
849 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
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;
857 Bool_t cutK0Pid = (bpPion && bnPion) ;
858 Bool_t cutLambdaPid = (bpProton && bnPion) ;
859 Bool_t cutAntiLambdaPid = (bpPion && bnProton);
860 //--------------------------------------------------
862 lPV0s = TMath::Sqrt(lPzV0s*lPzV0s + lPtV0s*lPtV0s);
864 if(lPV0s > 0) lcTauLambda = (lV0DecayLength*lInvMassLambda)/lPV0s;
865 if(lPV0s > 0) lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPV0s;
866 if(lPV0s > 0) lcTauK0s = (lV0DecayLength*lInvMassK0)/lPV0s;
868 Bool_t k0ctcut = (lcTauK0s < fCutCTK0);
869 Bool_t lactcut = (lcTauLambda < fCutCTLa);
870 Bool_t alactcut= (lcTauAntiLambda < fCutCTLa);
872 Bool_t k0Rapcut = (TMath::Abs(lRapK0) < fRapidityCut);
873 Bool_t laRapcut = (TMath::Abs(lRapLambda) < fRapidityCut);
874 Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut);
876 Bool_t V0EtaMax= (TMath::Abs(lEtaV0s) < fTrackEtaCut);
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);
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};
888 fHistReconstK0->Fill(spK0);
889 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
891 fHistReconstLA->Fill(spLa);
892 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
894 fHistReconstALA->Fill(spAl);
895 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
900 if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid)
902 fHistReconstK0->Fill(spK0);
903 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
906 if (lactcut && laRapcut && lacutset && cutLambdaPid)
908 fHistReconstLA->Fill(spLa);
909 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
912 if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
914 fHistReconstALA->Fill(spAl);
915 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
921 if(k0ctcut && V0EtaMax && k0cutset && cutK0Pid)
923 fHistReconstK0->Fill(spK0);
924 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
927 if (lactcut && V0EtaMax && lacutset && cutLambdaPid)
929 fHistReconstLA->Fill(spLa);
930 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
933 if (alactcut && V0EtaMax && alacutset && cutAntiLambdaPid)
935 fHistReconstALA->Fill(spAl);
936 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
941 AliInfo(Form("No case selected"));
947 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
950 Int_t myTrackPosLabel = TMath::Abs(myTrackPos->GetLabel());
951 Int_t myTrackNegLabel = TMath::Abs(myTrackNeg->GetLabel());
953 AliAODMCParticle *mcPosTrack = (AliAODMCParticle*)mcArray->At(myTrackPosLabel);
954 if(!mcPosTrack)continue;
955 AliAODMCParticle *mcNegTrack = (AliAODMCParticle*)mcArray->At(myTrackNegLabel);
956 if(!mcNegTrack)continue;
958 Int_t PosDaughterPdg = mcPosTrack->GetPdgCode();
959 Int_t NegDaughterPdg = mcNegTrack->GetPdgCode();
961 Int_t myTrackPosMotherLabel = mcPosTrack->GetMother();
962 Int_t myTrackNegMotherLabel = mcNegTrack->GetMother();
964 if ((myTrackPosMotherLabel==-1)||(myTrackNegMotherLabel==-1)) continue;
965 if (myTrackPosMotherLabel!=myTrackNegMotherLabel) continue;
967 AliAODMCParticle *mcPosMother = (AliAODMCParticle*)mcArray->At(myTrackPosMotherLabel);
968 if(!mcPosMother)continue;
969 Int_t MotherPdg = mcPosMother->GetPdgCode();
970 Bool_t IsPrime = mcPosMother->IsPhysicalPrimary();
972 Int_t myGrandMotherLabel = mcPosMother->GetMother();
973 AliAODMCParticle *mcGrandMother = (AliAODMCParticle*)mcArray->At(myGrandMotherLabel);
974 Int_t GrandMotherPdg = mcGrandMother->GetPdgCode();
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};
982 fHistMCAssoK0->Fill(rcK0);
983 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
985 fHistMCAssoLA->Fill(rcLa);
986 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
988 fHistMCAssoALA->Fill(rcAl);
989 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
994 if ((k0ctcut && k0Rapcut && k0cutset)&&(MotherPdg == 310 &&
995 PosDaughterPdg== 211 &&
996 NegDaughterPdg== -211 &&
999 fHistMCAssoK0->Fill(rcK0);
1000 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
1003 if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 &&
1004 PosDaughterPdg== 2212 &&
1005 NegDaughterPdg== -211 &&
1008 fHistMCAssoLA->Fill(rcLa);
1009 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
1012 if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 &&
1013 PosDaughterPdg== 211 &&
1014 NegDaughterPdg== -2212 &&
1017 fHistMCAssoALA->Fill(rcAl);
1018 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
1021 if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 &&
1022 PosDaughterPdg== 2212 &&
1023 NegDaughterPdg== -211 &&
1024 (GrandMotherPdg==3322 ||GrandMotherPdg==3312)))
1026 fHistMCAssoLAXI->Fill(rcLa);
1029 if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 &&
1030 PosDaughterPdg== 211 &&
1031 NegDaughterPdg== -2212 &&
1032 GrandMotherPdg== -3312))
1034 fHistMCAssoALAXiPlus->Fill(rcAl);
1040 if ((k0ctcut && V0EtaMax && k0cutset)&&(MotherPdg == 310 &&
1041 PosDaughterPdg== 211 &&
1042 NegDaughterPdg== -211 &&
1045 fHistMCAssoK0->Fill(rcK0);
1046 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
1049 if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg == 3122 &&
1050 PosDaughterPdg== 2212 &&
1051 NegDaughterPdg== -211 &&
1054 fHistMCAssoLA->Fill(rcLa);
1055 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
1058 if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg == -3122 &&
1059 PosDaughterPdg== 211 &&
1060 NegDaughterPdg== -2212 &&
1063 fHistMCAssoALA->Fill(rcAl);
1064 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
1067 if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg == 3122 &&
1068 PosDaughterPdg== 2212 &&
1069 NegDaughterPdg== -211 &&
1070 (GrandMotherPdg==3322 ||GrandMotherPdg==3312)))
1072 fHistMCAssoLAXI->Fill(rcLa);
1075 if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg == -3122 &&
1076 PosDaughterPdg== 211 &&
1077 NegDaughterPdg== -2212 &&
1078 GrandMotherPdg== -3312))
1080 fHistMCAssoALAXiPlus->Fill(rcAl);
1085 AliInfo(Form("No case selected"));
1091 FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib);
1092 FillCorrelationMixing(ltrackMultiplicity,tPrimaryVtxPosition[2],poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix);
1094 FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0sAssoc,fHistTriggerSibASO,fHistReconstSibASO);
1095 FillCorrelationMixing(ltrackMultiplicity,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0sAssoc,fHistTriggerMixASO,fHistReconstMixASO);
1097 PostData(1,fOutputList);
1099 //---------------------------------------------------------------------------------------
1100 void AliLeadingV0Correlation::Terminate(Option_t *)
1102 //No need in the grid
1104 //---------------------------------------------------------------------------------------
1105 Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
1107 if(fCase==1 || fCase==2)
1108 if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
1110 if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
1112 Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
1113 if (nCrossedRowsTPC < fTPCClusters) return kFALSE;
1115 Int_t findable=itrack->GetTPCNclsF();
1116 if (findable <= 0) return kFALSE;
1118 if (nCrossedRowsTPC/findable < fTPCfindratio) return kFALSE;
1121 //---------------------------------------------------------------------------------------
1122 Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
1124 if (!aodV0) return kFALSE;
1126 // Offline reconstructed V0 only
1127 if (aodV0->GetOnFlyStatus()) return kFALSE;
1129 // Get daughters and check them
1130 myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1131 myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1133 if (!myTrackPos||!myTrackNeg) return kFALSE;
1134 // Unlike signs of daughters
1135 if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE;
1137 // Track cuts for daughers
1138 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE;
1140 // Minimum pt of daughters
1141 Double_t lPtPos = myTrackPos->Pt();
1142 Double_t lPtNeg = myTrackNeg->Pt();
1144 if (lPtPos<fPtMin || lPtNeg<fPtMin) return kFALSE;
1148 //---------------------------------------------------------------------------------------
1149 Bool_t AliLeadingV0Correlation::IsAcseptedK0(Double_t v0rad,
1157 if(v0rad >=fV0radius &&
1158 dcaptp >=fV0PostoPVz &&
1159 dcantp >=fV0NegtoPVz &&
1160 dcav0d <=fDCAV0Daughters &&
1162 TMath::Abs(massLa - 1.115683) > fRejectLamK0 &&
1163 TMath::Abs(massALa - 1.115683) > fRejectLamK0 )return kTRUE;
1166 //---------------------------------------------------------------------------------------
1167 Bool_t AliLeadingV0Correlation::IsAcseptedLA(Double_t v0rad,
1174 if(v0rad >=fV0radius &&
1175 dcaptp >=fV0PostoPVz &&
1176 dcantp >=fV0NegtoPVz &&
1177 dcav0d <=fDCAV0Daughters &&
1179 TMath::Abs(massK0 - 0.4976) > fRejectK0Lam &&
1180 TMath::Abs(massK0 - 0.4976) > fRejectK0Lam )return kTRUE;
1183 //---------------------------------------------------------------------------------------
1184 Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const
1186 const Float_t massK0 = 0.497;
1188 return ((massK0-fMassCutK0)<=mass && mass<=(massK0 + fMassCutK0))?1:0;
1190 //---------------------------------------------------------------------------------------
1191 Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const
1193 const Float_t massLambda = 1.116;
1195 return ((massLambda-fMassCutLa)<=mass && mass<=(massLambda + fMassCutLa))?1:0;
1197 //---------------------------------------------------------------------------------------
1198 Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi)
1200 if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi();
1201 if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();
1204 //---------------------------------------------------------------------------------------
1205 Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
1207 Int_t atrID = track->GetID();
1209 for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
1210 AliAODv0* aodV0 = fAODEvent->GetV0(i);
1212 AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1213 AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1215 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
1216 //----------------------------------
1217 Int_t negID = trackNeg->GetID();
1218 Int_t posID = trackPos->GetID();
1220 if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1221 if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1222 //----------------------------------
1226 //---------------------------------------------------------------------------------------
1227 void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
1228 TObjArray*triggerArray,
1229 TObjArray*selectedV0Array,
1231 THnSparse*associateHist)
1233 Double_t binsv0CORR[8];
1234 Double_t binsTrigSib[2];
1235 Int_t counterSibMCA=0;
1237 for(Int_t i=0;i<triggerArray->GetEntriesFast();i++)
1239 AliAODTrack* trigger = (AliAODTrack*)triggerArray->At(0);
1240 if(!trigger)continue;
1243 if(IsTrackFromV0(trigger))continue;
1245 Double_t triggerPt = trigger->Pt();
1246 Double_t triggerPhi = trigger->Phi();
1247 Double_t triggerEta = trigger->Eta();
1249 if(triggerPt<fTriglow||triggerPt>fTrighigh)continue;
1252 if(counterSibMCA==triggerArray->GetEntriesFast()){
1254 binsTrigSib[0]=triggerPt;
1255 binsTrigSib[1]=MultipOrCent;
1257 if(triggerHist)triggerHist->Fill(binsTrigSib[0],triggerPhi,triggerEta);
1259 for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
1261 V0Correlationparticle* associate = (V0Correlationparticle*) selectedV0Array->At(j);
1262 if(!associate)continue;
1264 binsv0CORR[0]= associate->Pt();
1265 binsv0CORR[1]= associate->Phi();
1266 binsv0CORR[2]= associate->Eta();
1268 if(binsv0CORR[0]>triggerPt) continue;
1270 binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]);
1271 binsv0CORR[4]=triggerEta-binsv0CORR[2];
1272 binsv0CORR[5]= associate->WhichCandidate();
1273 binsv0CORR[6]= associate->DCAPostoP();
1274 binsv0CORR[7]= associate->DCANegtoP();
1276 associateHist->Fill(binsv0CORR);
1281 //---------------------------------------------------------------------------------------
1282 void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
1286 TObjArray*triggerArray,
1287 TObjArray*selectedV0Array,
1289 THnSparse*associateHist)
1291 if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
1293 if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
1297 Double_t binsv0CORRMix[8];
1298 Double_t binsTrigMix[2];
1299 Double_t counterMix=0;
1301 AliEventPool* pool = fPoolMgr->GetEventPool(MultipOrCentMix, pvxMix);
1302 if (!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", MultipOrCentMix, pvxMix));
1304 if (pool->IsReady() || pool->NTracksInPool() > fPoolMinNTracks || pool->GetCurrentNEvents() > fMinEventsToMix)
1306 Int_t nMix = pool->GetCurrentNEvents();
1307 for (Int_t jMix=0; jMix<nMix; jMix++){
1309 TObjArray* mixEvents = pool->GetEvent(jMix);
1310 for (Int_t i=0; i<triggerArray->GetEntriesFast(); i++){
1312 AliAODTrack* trig = (AliAODTrack*)triggerArray->At(0);
1316 if(IsTrackFromV0(trig))continue;
1318 Double_t trigPhi = trig->Phi();
1319 Double_t trigEta = trig->Eta();
1320 Double_t trigPt = trig->Pt();
1322 if(trigPt<fTriglow||trigPt>fTrighigh)continue;
1325 if(counterMix==triggerArray->GetEntriesFast()){
1327 binsTrigMix[0]=trigPt;
1328 binsTrigMix[1]=MultipOrCentMix;
1330 if(triggerHist)triggerHist->Fill(binsTrigMix[0]);
1332 for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
1334 V0Correlationparticle* associate = (V0Correlationparticle*) mixEvents->At(j);
1335 if(!associate)continue;
1337 binsv0CORRMix[0]= associate->Pt();
1338 binsv0CORRMix[1]= associate->Phi();
1339 binsv0CORRMix[2]= associate->Eta();
1341 if(binsv0CORRMix[0]>trigPt) continue;
1343 binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]);
1344 binsv0CORRMix[4]=trigEta-binsv0CORRMix[2];
1345 binsv0CORRMix[5]=associate->WhichCandidate();
1346 binsv0CORRMix[6]=associate->DCAPostoP();
1347 binsv0CORRMix[7]=associate->DCANegtoP();
1349 associateHist->Fill(binsv0CORRMix);
1356 TObjArray* tracksClone = new TObjArray;
1357 tracksClone->SetOwner(kTRUE);
1359 for (Int_t i=0; i<selectedV0Array->GetEntriesFast(); i++)
1361 V0Correlationparticle* particle = (V0Correlationparticle*) selectedV0Array->At(i);
1362 tracksClone->Add(new V0Correlationparticle(particle->Eta(),
1365 particle->WhichCandidate(),
1366 particle->DCAPostoP(),
1367 particle->DCANegtoP()));
1369 pool->UpdatePool(tracksClone);
1371 //---------------------------------------------------------------------------------------