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(),
87 fUseChargeHadrons (kTRUE),
90 fHist_Mult_B4_Trg_Sel (0),
91 fHist_Mult_Af_Trg_Sel (0),
92 fHist_Mult_PVz_Cut (0),
93 fHist_Mult_SPD_PVz (0),
94 fHist_Mult_SPD_PVz_Pileup (0),
100 fHistPVzAnalysis (0),
101 fHistEventViceGen (0),
102 fHistEventViceReconst (0),
114 fHistReconstSibGEN (0),
115 fHistReconstMixGEN (0),
116 fHistReconstSibASO (0),
117 fHistReconstMixASO (0),
120 fHistTriggerSibGEN (0),
121 fHistTriggerMixGEN (0),
122 fHistTriggerSibASO (0),
123 fHistTriggerMixASO (0)
126 for(Int_t iBin = 0; iBin < 100; iBin++){
127 fZvtxBins[iBin] = 0.;
128 fCentBins[iBin] = 0.;
131 //---------------------------------------------------------------------------------------
132 AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
133 : AliAnalysisTaskSE(name),
166 fUseChargeHadrons (kTRUE),
169 fHist_Mult_B4_Trg_Sel (0),
170 fHist_Mult_Af_Trg_Sel (0),
171 fHist_Mult_PVz_Cut (0),
172 fHist_Mult_SPD_PVz (0),
173 fHist_Mult_SPD_PVz_Pileup (0),
177 fHistPVxAnalysis (0),
178 fHistPVyAnalysis (0),
179 fHistPVzAnalysis (0),
180 fHistEventViceGen (0),
181 fHistEventViceReconst (0),
193 fHistReconstSibGEN (0),
194 fHistReconstMixGEN (0),
195 fHistReconstSibASO (0),
196 fHistReconstMixASO (0),
199 fHistTriggerSibGEN (0),
200 fHistTriggerMixGEN (0),
201 fHistTriggerSibASO (0),
202 fHistTriggerMixASO (0)
205 for(Int_t iBin = 0; iBin < 100; iBin++){
206 fZvtxBins[iBin] = 0.;
207 fCentBins[iBin] = 0.;
209 DefineOutput(1, TList::Class());
212 //---------------------------------------------------------------------------------------
213 AliLeadingV0Correlation::~AliLeadingV0Correlation()
215 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
219 //---------------------------------------------------------------------------------------
220 void AliLeadingV0Correlation::UserCreateOutputObjects()
222 fAnalyseUE =new AliAnalyseLeadingTrackUE();
225 fAnalyseUE->SetParticleSelectionCriteria(fFilterBit,fUseChargeHadrons,fTrackEtaCut,fPtMin);
226 fAnalyseUE->DefineESDCuts(fFilterBit);
229 fOutputList = new TList();
230 fOutputList->SetOwner();
232 fHist_Mult_B4_Trg_Sel = new TH1F("fHist_Mult_B4_Trg_Sel","Tracks per event;Nbr of Tracks;Events", 1000, 0, 10000);
233 fOutputList->Add(fHist_Mult_B4_Trg_Sel);
235 fHist_Mult_Af_Trg_Sel = new TH1F("fHist_Mult_Af_Trg_Sel","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);
236 fOutputList->Add(fHist_Mult_Af_Trg_Sel);
238 fHist_Mult_PVz_Cut = new TH1F("fHist_Mult_PVz_Cut","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);
239 fOutputList->Add(fHist_Mult_PVz_Cut);
241 fHist_Mult_SPD_PVz = new TH1F("fHist_Mult_SPD_PVz","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);
242 fOutputList->Add(fHist_Mult_SPD_PVz);
244 fHist_Mult_SPD_PVz_Pileup = new TH1F("fHist_Mult_SPD_PVz_Pileup","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000);
245 fOutputList->Add(fHist_Mult_SPD_PVz_Pileup);
247 fHistPVx = new TH1F("fHistPVx","PV x position;Nbr of Evts;x", 200, -0.5, 0.5);
248 fOutputList->Add(fHistPVx);
250 fHistPVy = new TH1F("fHistPVy","PV y position;Nbr of Evts;y",200, -0.5, 0.5);
251 fOutputList->Add(fHistPVy);
253 fHistPVz = new TH1F("fHistPVz","PV z position;Nbr of Evts;z",400, -20, 20);
254 fOutputList->Add(fHistPVz);
256 fHistPVxAnalysis = new TH1F("fHistPVxAnalysis","PV x position;Nbr of Evts;x", 200, -0.5, 0.5);
257 fOutputList->Add(fHistPVxAnalysis);
259 fHistPVyAnalysis = new TH1F("fHistPVyAnalysis","PV y position;Nbr of Evts;y",200, -0.5, 0.5);
260 fOutputList->Add(fHistPVyAnalysis);
262 fHistPVzAnalysis = new TH1F("fHistPVzAnalysis","PV z position;Nbr of Evts;z",400, -20, 20);
263 fOutputList->Add(fHistPVzAnalysis);
265 //---------------------------------------------- Events histograms -----------------------------------------------------//
267 fHistEventViceGen= new TH2F("fHistEventViceGen", "fHistEventViceGen", 200, -20, 20, 100,0,300);
268 fOutputList->Add(fHistEventViceGen);
270 fHistEventViceReconst= new TH2F("fHistEventViceReconst", "fHistEventViceReconst", 200, -20, 20, 100,0,300);
271 fOutputList->Add(fHistEventViceReconst);
273 fHistMCGenLAM = new TH2F("fHistMCGenLAM" , "fHistMCGenLAM" , 120, 0, 6, 140,1.06,1.2);
274 fOutputList->Add(fHistMCGenLAM);
276 fHistMCGenALAM = new TH2F("fHistMCGenALAM", "fHistMCGenALAM", 120, 0, 6, 140,1.06,1.2);
277 fOutputList->Add(fHistMCGenALAM);
279 fHistMCGenK0 = new TH2F("fHistMCGenK0" , "fHistMCGenK0" , 120, 0, 6, 200,0.4,0.6);
280 fOutputList->Add(fHistMCGenK0);
282 fHistReconstK0= new TH2F("fHistReconstK0" , "fHistReconstK0", 120, 0, 6, 200,0.4,0.6);
283 fHistReconstK0->Sumw2();
284 fOutputList->Add(fHistReconstK0);
286 fHistReconstLA= new TH2F("fHistReconstLA" , "fHistReconstLA", 120, 0, 6, 140,1.06,1.2);
287 fHistReconstLA->Sumw2();
288 fOutputList->Add(fHistReconstLA);
290 fHistReconstALA= new TH2F("fHistReconstALA", "fHistReconstALA", 120, 0, 6, 140,1.06,1.2);
291 fHistReconstALA->Sumw2();
292 fOutputList->Add(fHistReconstALA);
294 fHistMCAssoK0= new TH2F("fHistMCAssoK0" , "fHistMCAssoK0" , 120, 0, 6, 200,0.4,0.6);
295 fHistMCAssoK0->Sumw2();
296 fOutputList->Add(fHistMCAssoK0);
298 fHistMCAssoLA= new TH2F("fHistMCAssoLA" , "fHistMCAssoLA" , 120, 0, 6, 140,1.06,1.2);
299 fHistMCAssoLA->Sumw2();
300 fOutputList->Add(fHistMCAssoLA);
302 fHistMCAssoALA= new TH2F("fHistMCAssoALA" , "fHistMCAssoALA" , 120, 0, 6, 140,1.06,1.2);
303 fHistMCAssoALA->Sumw2();
304 fOutputList->Add(fHistMCAssoALA);
306 //--------------------------------------------Correlation Histos -----------------------------------------------------//
308 //0-pTK0,1-PhiK0,2-EtaK0,3-DPhiK0,4-DEtaK0,5-TYPE,6-CutSet
309 const Int_t ndimsv0CORR = 8;
310 Int_t binsv0CORR[ndimsv0CORR] = {120, 200, 200,CorrBinsX, CorrBinsY,4,500,500};
312 Double_t xminv0CORR[ndimsv0CORR] = { 0, 0,-fTrackEtaCut, -PI/2,-2*fTrackEtaCut,0, 0, 0};
314 Double_t xmaxv0CORR[ndimsv0CORR] = { 6,2*PI, fTrackEtaCut, 3*PI/2, 2*fTrackEtaCut,4, 10, 10};
316 fHistReconstSib= new THnSparseD("fHistReconstSib", "fHistReconstSib", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
317 fHistReconstSib->Sumw2();
318 fOutputList->Add(fHistReconstSib);
320 fHistReconstMix= new THnSparseD("fHistReconstMix", "fHistReconstMix", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
321 fHistReconstMix->Sumw2();
322 fOutputList->Add(fHistReconstMix);
324 fHistReconstSibGEN= new THnSparseD("fHistReconstSibGEN", "fHistReconstSibGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
325 fHistReconstSibGEN->Sumw2();
326 fOutputList->Add(fHistReconstSibGEN);
328 fHistReconstMixGEN= new THnSparseD("fHistReconstMixGEN", "fHistReconstMixGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
329 fHistReconstMixGEN->Sumw2();
330 fOutputList->Add(fHistReconstMixGEN);
332 fHistReconstSibASO= new THnSparseD("fHistReconstSibASO", "fHistReconstSibASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
333 fHistReconstSibASO->Sumw2();
334 fOutputList->Add(fHistReconstSibASO);
336 fHistReconstMixASO= new THnSparseD("fHistReconstMixASO", "fHistReconstMixASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
337 fHistReconstMixASO->Sumw2();
338 fOutputList->Add(fHistReconstMixASO);
341 fHistTriggerSib= new TH1F("fHistTriggerSib", "fHistTriggerSib", 100, fTriglow, fTrighigh);
342 fHistTriggerSib->Sumw2();
343 fOutputList->Add(fHistTriggerSib);
345 fHistTriggerMix= new TH1F("fHistTriggerMix", "fHistTriggerMix", 100, fTriglow, fTrighigh);
346 fHistTriggerMix->Sumw2();
347 fOutputList->Add(fHistTriggerMix);
349 fHistTriggerSibGEN= new TH1F("fHistTriggerSibGEN", "fHistTriggerSibGEN", 100, fTriglow, fTrighigh);
350 fHistTriggerSibGEN->Sumw2();
351 fOutputList->Add(fHistTriggerSibGEN);
353 fHistTriggerMixGEN= new TH1F("fHistTriggerMixGEN", "fHistTriggerMixGEN", 100, fTriglow, fTrighigh);
354 fHistTriggerMixGEN->Sumw2();
355 fOutputList->Add(fHistTriggerMixGEN);
357 fHistTriggerSibASO= new TH1F("fHistTriggerSibASO", "fHistTriggerSibASO", 100, fTriglow, fTrighigh);
358 fHistTriggerSibASO->Sumw2();
359 fOutputList->Add(fHistTriggerSibASO);
361 fHistTriggerMixASO= new TH1F("fHistTriggerMixASO", "fHistTriggerMixASO", 100, fTriglow, fTrighigh);
362 fHistTriggerMixASO->Sumw2();
363 fOutputList->Add(fHistTriggerMixASO);
365 //----------------------------------------------Event Pool-----------------------------------------------------//
366 fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins);
367 if(!fPoolMgr) return;
369 PostData(1, fOutputList);
371 //---------------------------------------------------------------------------------------
372 void AliLeadingV0Correlation::UserExec(Option_t *)
375 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
376 AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler());
377 if (!inEvMain) return;
379 // Pointers to PID Response objects.
380 fPIDResponse = inEvMain->GetPIDResponse();
381 if(!fPIDResponse) return;
383 fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent());
384 if(!fAODEvent) return;
386 Int_t multiplicity = -1;
387 Int_t multiplicityMC = -1;
388 Double_t MultipOrCent = -1;
389 Double_t CentPecentMC = -1;
390 Double_t CentPecentAfterPhySel = -1;
391 Int_t nTrackMultiplicity = -1;
392 Float_t lPrimaryTrackMultiplicity = 0;
394 nTrackMultiplicity = (InputEvent())->GetNumberOfTracks();
395 for (Int_t itrack = 0; itrack<nTrackMultiplicity; itrack++) {
396 AliAODTrack* track = fAODEvent->GetTrack(itrack);
397 if(!fAnalysisMC) if (track->TestFilterBit(fFilterBit)) lPrimaryTrackMultiplicity++;
398 lPrimaryTrackMultiplicity++;
401 fHist_Mult_B4_Trg_Sel->Fill(lPrimaryTrackMultiplicity);
403 if(fcollidingSys=="PbPb"){
404 AliCentrality *centralityObjMC = fAODEvent->GetHeader()->GetCentralityP();
405 CentPecentMC = centralityObjMC->GetCentralityPercentileUnchecked("V0M");
406 if ((CentPecentMC < 0.)||(CentPecentMC > 90)) return;
409 Double_t * CentBins = fCentBins;
410 Double_t poolmin = CentBins[0];
411 Double_t poolmax = CentBins[fNCentBins];
413 //----------------------------------------------------------
414 // Efficency denomenator comes before the physics selection
415 //----------------------------------------------------------
417 Double_t dimEventviceMC[3];
418 if(fAnalysisMC) //Efficency denomenator comes before the physics selection
420 AliAODMCHeader *aodMCheader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName());
421 Float_t mcZv = aodMCheader->GetVtxZ();
423 if (TMath::Abs(mcZv) >= fpvzcut) return;
425 dimEventviceMC[0]=aodMCheader->GetVtxZ();
427 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
430 Int_t nMCTracks = mcArray->GetEntriesFast();
432 if(fcollidingSys=="PbPb") multiplicityMC=CentPecentMC;
433 if(fcollidingSys=="PP") multiplicityMC=nMCTracks;
435 dimEventviceMC[1]=nMCTracks;
436 dimEventviceMC[2]=CentPecentMC;
437 fHistEventViceGen->Fill(dimEventviceMC[0],dimEventviceMC[1]);
439 TObjArray *selectedTracksLeadingMC=fAnalyseUE->FindLeadingObjects(mcArray);
440 if(!selectedTracksLeadingMC) return;
441 selectedTracksLeadingMC->SetOwner(kTRUE);
443 TObjArray * selectedV0sMC =new TObjArray;
444 selectedV0sMC->SetOwner(kTRUE);
446 for (Int_t iMC = 0; iMC<nMCTracks; iMC++)
448 AliAODMCParticle *mcTrack = (AliAODMCParticle*)mcArray->At(iMC);
449 if (!mcTrack) continue;
450 // Charged track Generated level
451 Double_t mcTrackPt = mcTrack->Pt();
452 if ((mcTrackPt<fPtMin)||(mcTrackPt>6.0)) continue;
454 Double_t mcTrackEta = mcTrack->Eta();
455 Double_t mcTrackPhi = mcTrack->Phi();
456 Bool_t TrIsPrime = mcTrack->IsPhysicalPrimary();
457 Bool_t TrPtMin = mcTrackPt>fPtMin;
458 Bool_t TrCharge = (mcTrack->Charge())!=0;
460 if (!TrIsPrime && !TrPtMin && !TrCharge) continue; //Check Point 1
462 // V0 Generated level
463 Int_t mcPartPdg = mcTrack->GetPdgCode();
465 Double_t mcRapidity = mcTrack->Y();
466 Bool_t V0RapMax = TMath::Abs(mcRapidity)<fRapidityCut;
467 Double_t mcMass = mcTrack->M();
469 Double_t mcK0[3] = {mcTrackPt,mcMass,multiplicityMC};
470 Double_t mcLa[3] = {mcTrackPt,mcMass,multiplicityMC};
471 Double_t mcAl[3] = {mcTrackPt,mcMass,multiplicityMC};
474 Bool_t IsK0 = mcPartPdg==310;
475 if (IsK0 && V0RapMax && TrIsPrime)
477 fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
478 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
481 Bool_t IsLambda = mcPartPdg==3122;
482 if (IsLambda && V0RapMax && TrIsPrime)
484 fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
485 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
488 Bool_t IsAntiLambda = mcPartPdg==-3122;
489 if (IsAntiLambda && V0RapMax && TrIsPrime)
491 fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
492 selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
496 FillCorrelationSibling(multiplicityMC,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerSibGEN,fHistReconstSibGEN);
497 FillCorrelationMixing(multiplicityMC,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerMixGEN,fHistReconstMixGEN);
500 // End Loop over MC condition
502 //------------------------------------------------
504 //------------------------------------------------
505 UInt_t maskIsSelected = inEvMain->IsEventSelected();
506 Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB
507 || (maskIsSelected & AliVEvent::kCentral)== AliVEvent::kCentral
508 || (maskIsSelected & AliVEvent::kSemiCentral)== AliVEvent::kSemiCentral);
509 if (!isSelected) return;
511 //------------------------------------------------
512 // After Trigger Selection
513 //------------------------------------------------
515 fHist_Mult_Af_Trg_Sel->Fill(lPrimaryTrackMultiplicity);
517 //------------------------------------------------
518 // Getting: Primary Vertex + MagField Info
519 //------------------------------------------------
520 Double_t dimEventviceReal[3];
521 Double_t lBestPrimaryVtxPos[3];
522 Double_t tPrimaryVtxPosition[3];
523 Double_t lV0Position[3];
526 if(fcollidingSys=="PbPb"){ //
527 AliCentrality *centralityObj = fAODEvent->GetHeader()->GetCentralityP();
528 CentPecentAfterPhySel = centralityObj->GetCentralityPercentileUnchecked("V0M");
529 if ((CentPecentAfterPhySel < 0.)||(CentPecentAfterPhySel > 90)) return;
532 AliAODVertex *lPrimaryBestAODVtx = fAODEvent->GetPrimaryVertex();
533 if (!lPrimaryBestAODVtx) return;
534 // get the best primary vertex available for the event
535 // As done in AliCascadeVertexer, we keep the one which is the best one available.
536 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
537 // This one will be used for next calculations (DCA essentially)
538 lPrimaryBestAODVtx->GetXYZ(lBestPrimaryVtxPos);
540 const AliVVertex *primaryVtx = fAODEvent->GetPrimaryVertex();
541 tPrimaryVtxPosition[0] = primaryVtx->GetX();
542 tPrimaryVtxPosition[1] = primaryVtx->GetY();
543 tPrimaryVtxPosition[2] = primaryVtx->GetZ();
544 fHistPVx->Fill( tPrimaryVtxPosition[0] );
545 fHistPVy->Fill( tPrimaryVtxPosition[1] );
546 fHistPVz->Fill( tPrimaryVtxPosition[2] );
548 //------------------------------------------------
549 // Primary Vertex Z position: SKIP
550 //------------------------------------------------
552 Double_t lPVx = lBestPrimaryVtxPos[0];
553 Double_t lPVy = lBestPrimaryVtxPos[1];
554 Double_t lPVz = lBestPrimaryVtxPos[2];
556 if ((TMath::Abs(lPVz)) >= fpvzcut) return ;
557 if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return;
558 fHist_Mult_PVz_Cut->Fill(lPrimaryTrackMultiplicity);
560 //------------------------------------------------
561 // Only look at events with well-established PV
562 //------------------------------------------------
564 const AliAODVertex *lPrimaryTrackingAODVtxCheck = fAODEvent->GetPrimaryVertex();
565 const AliAODVertex *lPrimarySPDVtx = fAODEvent->GetPrimaryVertexSPD();
566 if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtxCheck )return;
568 fHist_Mult_SPD_PVz->Fill(lPrimaryTrackMultiplicity);
571 //------------------------------------------------
573 //------------------------------------------------
575 // FIXME : quality selection regarding pile-up rejection
576 if(fAODEvent->IsPileupFromSPD()) return;
577 fHist_Mult_SPD_PVz_Pileup->Fill(lPrimaryTrackMultiplicity);
579 fHistPVxAnalysis->Fill(tPrimaryVtxPosition[0]);
580 fHistPVyAnalysis->Fill(tPrimaryVtxPosition[1]);
581 fHistPVzAnalysis->Fill(tPrimaryVtxPosition[2]);
583 dimEventviceReal[0]=tPrimaryVtxPosition[2];
584 multiplicity = fAODEvent->GetNTracks();
586 dimEventviceReal[1]=multiplicity;
587 dimEventviceReal[2]=CentPecentAfterPhySel;
589 fHistEventViceReconst->Fill(dimEventviceReal[0],dimEventviceReal[1]);
591 if(fcollidingSys=="PP")MultipOrCent=multiplicity;
592 if(fcollidingSys=="PbPb")MultipOrCent=CentPecentAfterPhySel;
594 //---------------------------------------------------------------------------------------------
596 Double_t lDcaPosToPrimVertex = 0;Double_t lDcaNegToPrimVertex = 0;Double_t lDcaV0Daughters = 0;
597 Double_t lV0cosPointAngle = 0;Double_t lV0DecayLength = 0;Double_t lV0Radius = 0;
598 Double_t lcTauLambda = 0;Double_t lcTauAntiLambda = 0;
599 Double_t lcTauK0s = 0;
601 Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
602 Double_t lPtV0s = 0; Double_t lPhiV0s = 0; Double_t lEtaV0s = 0;
603 Double_t lRapK0s = 0, lRapLambda = 0, lRapAntiLambda = 0;
604 Double_t lPzV0s = 0; Double_t lAlphaV0 = 0, lPtArmV0 = 0;
607 TObjArray *selectedTracksLeading=0;
608 selectedTracksLeading=fAnalyseUE->FindLeadingObjects(fAODEvent);
609 if(!selectedTracksLeading) return;
610 selectedTracksLeading->SetOwner(kTRUE);
612 TObjArray * selectedV0s = new TObjArray;
613 selectedV0s->SetOwner(kTRUE);
615 TObjArray * selectedV0sAssoc = new TObjArray;
616 selectedV0sAssoc->SetOwner(kTRUE);
618 Int_t nV0s = fAODEvent->GetNumberOfV0s();
620 for (Int_t i = 0; i < nV0s; i++)
621 { // start of V0 slection loop
622 AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
623 if (!aodV0) continue;
625 if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>6.0)) continue;
628 AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
629 AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
631 if (!myTrackPos || !myTrackNeg) {Printf("ERROR: Could not retreive one of the daughter track");continue;}
633 if (!IsAcseptedV0(aodV0,myTrackPos,myTrackNeg)) continue;
635 // VO's main characteristics to check the reconstruction cuts
636 lDcaV0Daughters = aodV0->DcaV0Daughters();
637 lV0cosPointAngle = aodV0->CosPointingAngle(lBestPrimaryVtxPos);
639 aodV0->GetXYZ(lV0Position);
641 lV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
642 lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - tPrimaryVtxPosition[0],2) +
643 TMath::Power(lV0Position[1] - tPrimaryVtxPosition[1],2) +
644 TMath::Power(lV0Position[2] - tPrimaryVtxPosition[2],2));
646 // DCA between daughter and Primary Vertex:
647 if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
648 if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();
650 // Quality tracks cuts:
651 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
653 // Armenteros variables:
654 lAlphaV0 = aodV0->AlphaV0();
655 lPtArmV0 = aodV0->PtArmV0();
658 lInvMassK0 = aodV0->MassK0Short();
659 lInvMassLambda = aodV0->MassLambda();
660 lInvMassAntiLambda = aodV0->MassAntiLambda();
662 lPtV0s = aodV0->Pt();
663 lPhiV0s= aodV0->Phi();
664 lEtaV0s= aodV0->Eta();
665 lPzV0s = aodV0->Pz();
668 lRapK0s = aodV0->RapK0Short();
669 lRapLambda = aodV0->RapLambda();
670 lRapAntiLambda = aodV0->Y(-3122);
672 if (lPtV0s==0) {continue;}
674 Float_t nSigmaPosPion = 0.;
675 Float_t nSigmaNegPion = 0.;
676 Float_t nSigmaPosProton = 0.;
677 Float_t nSigmaNegProton = 0.;
679 const AliAODPid *pPid = myTrackPos->GetDetPid();
680 const AliAODPid *nPid = myTrackNeg->GetDetPid();
684 Double_t pdMom = pPid->GetTPCmomentum();
685 if (pdMom<1.0 && (fcollidingSys=="PbPb"))
687 nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
688 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
691 if (fcollidingSys=="PP")
693 nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion);
694 nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton);
700 Double_t ndMom = nPid->GetTPCmomentum();
701 if (ndMom<1.0 && (fcollidingSys=="PbPb"))
703 nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
704 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
707 if (fcollidingSys=="PP")
709 nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion);
710 nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton);
713 Bool_t bpPion = TMath::Abs(nSigmaPosPion) <= fSigmaPID;
714 Bool_t bpProton = TMath::Abs(nSigmaPosProton) <= fSigmaPID;
715 Bool_t bnPion = TMath::Abs(nSigmaNegPion) <= fSigmaPID;
716 Bool_t bnProton = TMath::Abs(nSigmaNegProton) <= fSigmaPID;
718 Bool_t cutK0Pid = (bpPion && bnPion) ;
719 Bool_t cutLambdaPid = (bpProton && bnPion) ;
720 Bool_t cutAntiLambdaPid = (bpPion && bnProton);
721 //--------------------------------------------------
723 lPV0s = TMath::Sqrt(lPzV0s*lPzV0s + lPtV0s*lPtV0s);
725 if(lPV0s > 0) lcTauLambda = (lV0DecayLength*lInvMassLambda)/lPV0s;
726 if(lPV0s > 0) lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPV0s;
727 if(lPV0s > 0) lcTauK0s = (lV0DecayLength*lInvMassK0)/lPV0s;
729 Bool_t k0ctcut = (lcTauK0s < fCutCTK0);
730 Bool_t lactcut = (lcTauLambda < fCutCTLa);
731 Bool_t alactcut= (lcTauAntiLambda < fCutCTLa);
733 Bool_t k0APcut = (lPtArmV0>(TMath::Abs(0.2*lAlphaV0)));
735 Bool_t k0Rapcut = (TMath::Abs(lRapK0s) < fRapidityCut);
736 Bool_t laRapcut = (TMath::Abs(lRapLambda) < fRapidityCut);
737 Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut);
739 if(fcollidingSys=="PbPb")if(lV0Radius>=100) continue;
741 Bool_t k0cutset = IsAcseptedK0(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassLambda,lInvMassAntiLambda);
742 Bool_t lacutset = IsAcseptedLA(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
743 Bool_t alacutset= IsAcseptedLA(lV0Radius,lDcaNegToPrimVertex,lDcaPosToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
745 Double_t spK0[3] = {lPtV0s,lInvMassK0,MultipOrCent};
746 Double_t spLa[3] = {lPtV0s,lInvMassLambda,MultipOrCent};
747 Double_t spAl[3] = {lPtV0s,lInvMassAntiLambda,MultipOrCent};
751 fHistReconstK0->Fill(spK0[0],spK0[1]);
752 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
754 fHistReconstLA->Fill(spLa[0],spLa[1]);
755 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
757 fHistReconstALA->Fill(spAl[0],spAl[1]);
758 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
763 if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid)
765 fHistReconstK0->Fill(spK0[0],spK0[1]);
766 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
769 if (lactcut && laRapcut && lacutset && cutLambdaPid)
771 fHistReconstLA->Fill(spLa[0],spLa[1]);
772 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
775 if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
777 fHistReconstALA->Fill(spAl[0],spAl[1]);
778 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
784 if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid && k0APcut)
786 fHistReconstK0->Fill(spK0[0],spK0[1]);
787 if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
790 if (lactcut && laRapcut && lacutset && cutLambdaPid)
792 fHistReconstLA->Fill(spLa[0],spLa[1]);
793 if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
796 if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
798 fHistReconstALA->Fill(spAl[0],spAl[1]);
799 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDcaPosToPrimVertex,lDcaNegToPrimVertex));
804 AliInfo(Form("No case selected"));
810 TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName());
813 Int_t myTrackPosLabel = TMath::Abs(myTrackPos->GetLabel());
814 Int_t myTrackNegLabel = TMath::Abs(myTrackNeg->GetLabel());
816 AliAODMCParticle *mcPosTrack = (AliAODMCParticle*)mcArray->At(myTrackPosLabel);
817 AliAODMCParticle *mcNegTrack = (AliAODMCParticle*)mcArray->At(myTrackNegLabel);
819 Int_t PosDaughterPdg = mcPosTrack->GetPdgCode();
820 Int_t NegDaughterPdg = mcNegTrack->GetPdgCode();
822 Int_t myTrackPosMotherLabel = mcPosTrack->GetMother();
823 Int_t myTrackNegMotherLabel = mcNegTrack->GetMother();
825 if ((myTrackPosMotherLabel==-1)||(myTrackNegMotherLabel==-1)) continue;
826 if (myTrackPosMotherLabel!=myTrackNegMotherLabel) continue;
828 AliAODMCParticle *mcPosMother = (AliAODMCParticle*)mcArray->At(myTrackPosMotherLabel);
829 Int_t MotherPdg = mcPosMother->GetPdgCode();
830 Bool_t IsPrime = mcPosMother->IsPhysicalPrimary();
832 Double_t rcK0[3] = {lPtV0s,lInvMassK0,MultipOrCent};
833 Double_t rcLa[3] = {lPtV0s,lInvMassLambda,MultipOrCent};
834 Double_t rcAl[3] = {lPtV0s,lInvMassAntiLambda,MultipOrCent};
838 fHistMCAssoK0->Fill(rcK0[0],rcK0[1]);
839 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,0,0));
841 fHistMCAssoLA->Fill(rcLa[0],rcLa[1]);
842 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,0,0));
844 fHistMCAssoALA->Fill(rcAl[0],rcAl[1]);
845 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,0,0));
850 if ((k0ctcut && k0Rapcut && k0cutset)&&(MotherPdg == 310 &&
851 PosDaughterPdg== 211 &&
852 NegDaughterPdg== -211 &&
855 fHistMCAssoK0->Fill(rcK0[0],rcK0[1]);
856 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,0,0));
859 if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 &&
860 PosDaughterPdg== 2212 &&
861 NegDaughterPdg== -211 &&
864 fHistMCAssoLA->Fill(rcLa[0],rcLa[1]);
865 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,0,0));
868 if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 &&
869 PosDaughterPdg== 211 &&
870 NegDaughterPdg== -2212 &&
873 fHistMCAssoALA->Fill(rcAl[0],rcAl[1]);
874 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,0,0));
880 if ((k0ctcut && k0Rapcut && k0cutset && k0APcut)&&(MotherPdg == 310 &&
881 PosDaughterPdg== 211 &&
882 NegDaughterPdg== -211 &&
885 fHistMCAssoK0->Fill(rcK0[0],rcK0[1]);
886 if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,0,0));
889 if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 &&
890 PosDaughterPdg== 2212 &&
891 NegDaughterPdg== -211 &&
894 fHistMCAssoLA->Fill(rcLa[0],rcLa[1]);
895 if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,0,0));
898 if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 &&
899 PosDaughterPdg== 211 &&
900 NegDaughterPdg== -2212 &&
903 fHistMCAssoALA->Fill(rcAl[0],rcAl[1]);
904 if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,0,0));
909 AliInfo(Form("No case selected"));
915 FillCorrelationSibling(MultipOrCent,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib);
916 FillCorrelationMixing(MultipOrCent,tPrimaryVtxPosition[2],poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix);
918 FillCorrelationSibling(MultipOrCent,selectedTracksLeading,selectedV0sAssoc,fHistTriggerSibASO,fHistReconstSibASO);
919 FillCorrelationMixing(MultipOrCent,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0sAssoc,fHistTriggerMixASO,fHistReconstMixASO);
921 PostData(1,fOutputList);
923 //---------------------------------------------------------------------------------------
924 void AliLeadingV0Correlation::Terminate(Option_t *)
926 //No need in the grid
928 //---------------------------------------------------------------------------------------
929 Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
931 if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
933 if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
935 Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
936 if (nCrossedRowsTPC < 70) return kFALSE;
938 Int_t findable=itrack->GetTPCNclsF();
939 if (findable <= 0) return kFALSE;
941 if (nCrossedRowsTPC/findable < 0.8) return kFALSE;
944 //---------------------------------------------------------------------------------------
945 Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
947 if (!aodV0) return kFALSE;
949 // Offline reconstructed V0 only
950 if (aodV0->GetOnFlyStatus()) return kFALSE;
952 // Get daughters and check them
953 myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
954 myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
956 if (!myTrackPos||!myTrackNeg) return kFALSE;
957 // Unlike signs of daughters
958 if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE;
960 // Track cuts for daughers
961 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE;
963 // Minimum pt of daughters
964 Double_t lPtPos = myTrackPos->Pt();
965 Double_t lPtNeg = myTrackNeg->Pt();
967 if (lPtPos<fPtMin || lPtNeg<fPtMin) return kFALSE;
971 //---------------------------------------------------------------------------------------
972 Bool_t AliLeadingV0Correlation::IsAcseptedK0(Double_t v0rad,
980 if(v0rad >=fV0radius &&
981 dcaptp >=fV0PostoPVz &&
982 dcantp >=fV0NegtoPVz &&
983 dcav0d <=fDCAV0Daughters &&
985 TMath::Abs(massLa - 1.115683) > fRejectLamK0 &&
986 TMath::Abs(massALa - 1.115683) > fRejectLamK0 )return kTRUE;
989 //---------------------------------------------------------------------------------------
990 Bool_t AliLeadingV0Correlation::IsAcseptedLA(Double_t v0rad,
997 if(v0rad >=fV0radius &&
998 dcaptp >=fV0PostoPVz &&
999 dcantp >=fV0NegtoPVz &&
1000 dcav0d <=fDCAV0Daughters &&
1002 TMath::Abs(massK0 - 0.4976) > fRejectK0Lam &&
1003 TMath::Abs(massK0 - 0.4976) > fRejectK0Lam )return kTRUE;
1006 //---------------------------------------------------------------------------------------
1007 Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const
1009 const Float_t massK0 = 0.497;
1011 return ((massK0-fMassCutK0)<=mass && mass<=(massK0 + fMassCutK0))?1:0;
1013 //---------------------------------------------------------------------------------------
1014 Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const
1016 const Float_t massLambda = 1.116;
1018 return ((massLambda-fMassCutLa)<=mass && mass<=(massLambda + fMassCutLa))?1:0;
1020 //---------------------------------------------------------------------------------------
1021 Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi)
1023 if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi();
1024 if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();
1027 //---------------------------------------------------------------------------------------
1028 Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
1030 Int_t atrID = track->GetID();
1032 for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
1033 AliAODv0* aodV0 = fAODEvent->GetV0(i);
1035 AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1036 AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1038 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
1039 //----------------------------------
1040 Int_t negID = trackNeg->GetID();
1041 Int_t posID = trackPos->GetID();
1043 if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1044 if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kTRUE;}
1045 //----------------------------------
1049 //---------------------------------------------------------------------------------------
1050 void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
1051 TObjArray*triggerArray,
1052 TObjArray*selectedV0Array,
1054 THnSparse*associateHist)
1056 Double_t binsv0CORR[8];
1057 Double_t binsTrigSib[2];
1058 Int_t counterSibMCA=0;
1060 for(Int_t i=0;i<triggerArray->GetEntriesFast();i++)
1062 AliAODTrack* trigger = (AliAODTrack*)triggerArray->At(0);
1063 if(!trigger)continue;
1066 if(IsTrackFromV0(trigger))continue;
1068 Double_t triggerPt = trigger->Pt();
1069 Double_t triggerPhi = trigger->Phi();
1070 Double_t triggerEta = trigger->Eta();
1072 if(triggerPt<fTriglow||triggerPt>fTrighigh)continue;
1075 if(counterSibMCA==triggerArray->GetEntriesFast()){
1077 binsTrigSib[0]=triggerPt;
1078 binsTrigSib[1]=MultipOrCent;
1080 if(triggerHist)triggerHist->Fill(binsTrigSib[0]);
1082 for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
1084 V0Correlationparticle* associate = (V0Correlationparticle*) selectedV0Array->At(j);
1085 if(!associate)continue;
1087 binsv0CORR[0]= associate->Pt();
1088 binsv0CORR[1]= associate->Phi();
1089 binsv0CORR[2]= associate->Eta();
1091 if(binsv0CORR[0]>triggerPt) continue;
1093 binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]);
1094 binsv0CORR[4]=triggerEta-binsv0CORR[2];
1095 binsv0CORR[5]= associate->WhichCandidate();
1096 binsv0CORR[6]= associate->DCAPostoP();
1097 binsv0CORR[7]= associate->DCANegtoP();
1099 associateHist->Fill(binsv0CORR);
1104 //---------------------------------------------------------------------------------------
1105 void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
1109 TObjArray*triggerArray,
1110 TObjArray*selectedV0Array,
1112 THnSparse*associateHist)
1114 if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
1116 if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
1117 if(fcollidingSys=="PbPb") AliInfo(Form("PbPb Event with Zvertex = %.2f cm and centrality = %.1f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix));
1121 Double_t binsv0CORRMix[8];
1122 Double_t binsTrigMix[2];
1123 Double_t counterMix=0;
1125 AliEventPool* pool = fPoolMgr->GetEventPool(MultipOrCentMix, pvxMix);
1126 if (!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", MultipOrCentMix, pvxMix));
1128 if (pool->IsReady() || pool->NTracksInPool() > fPoolMinNTracks || pool->GetCurrentNEvents() > fMinEventsToMix)
1130 Int_t nMix = pool->GetCurrentNEvents();
1131 for (Int_t jMix=0; jMix<nMix; jMix++){
1133 TObjArray* mixEvents = pool->GetEvent(jMix);
1134 for (Int_t i=0; i<triggerArray->GetEntriesFast(); i++){
1136 AliAODTrack* trig = (AliAODTrack*)triggerArray->At(0);
1140 if(IsTrackFromV0(trig))continue;
1142 Double_t trigPhi = trig->Phi();
1143 Double_t trigEta = trig->Eta();
1144 Double_t trigPt = trig->Pt();
1146 if(trigPt<fTriglow||trigPt>fTrighigh)continue;
1149 if(counterMix==triggerArray->GetEntriesFast()){
1151 binsTrigMix[0]=trigPt;
1152 binsTrigMix[1]=MultipOrCentMix;
1154 if(triggerHist)triggerHist->Fill(binsTrigMix[0]);
1156 for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
1158 V0Correlationparticle* associate = (V0Correlationparticle*) mixEvents->At(j);
1159 if(!associate)continue;
1161 binsv0CORRMix[0]= associate->Pt();
1162 binsv0CORRMix[1]= associate->Phi();
1163 binsv0CORRMix[2]= associate->Eta();
1165 if(binsv0CORRMix[0]>trigPt) continue;
1167 binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]);
1168 binsv0CORRMix[4]=trigEta-binsv0CORRMix[2];
1169 binsv0CORRMix[5]=associate->WhichCandidate();
1170 binsv0CORRMix[6]=associate->DCAPostoP();
1171 binsv0CORRMix[7]=associate->DCANegtoP();
1173 associateHist->Fill(binsv0CORRMix);
1180 TObjArray* tracksClone = new TObjArray;
1181 tracksClone->SetOwner(kTRUE);
1183 for (Int_t i=0; i<selectedV0Array->GetEntriesFast(); i++)
1185 V0Correlationparticle* particle = (V0Correlationparticle*) selectedV0Array->At(i);
1186 tracksClone->Add(new V0Correlationparticle(particle->Eta(),
1189 particle->WhichCandidate(),
1190 particle->DCAPostoP(),
1191 particle->DCANegtoP()));
1193 pool->UpdatePool(tracksClone);
1195 //---------------------------------------------------------------------------------------