13 #include "AliMCEvent.h"
14 #include "AliMCParticle.h"
15 #include "AliESDtrackCuts.h"
16 #include "AliESDInputHandler.h"
17 #include "AliESDpid.h"
18 #include "AliCentrality.h"
19 #include "AliTracker.h"
20 #include "AliAODInputHandler.h"
21 #include "AliAODEvent.h"
22 #include "AliAODTrack.h"
24 #include "AliAnalysisNetParticleDistribution.h"
28 // Task for NetParticle checks
29 // Author: Jochen Thaeder <jochen@thaeder.de>
31 ClassImp(AliAnalysisNetParticleDistribution)
34 * ---------------------------------------------------------------------------------
35 * Constructor / Destructor
36 * ---------------------------------------------------------------------------------
39 //________________________________________________________________________
40 AliAnalysisNetParticleDistribution::AliAnalysisNetParticleDistribution() :
56 fAODtrackCutBit(1024),
65 fHnTrackUnCorr(NULL) {
68 AliLog::SetClassDebugLevel("AliAnalysisNetParticleDistribution",10);
71 //________________________________________________________________________
72 AliAnalysisNetParticleDistribution::~AliAnalysisNetParticleDistribution() {
75 if (fNp) delete[] fNp;
77 for (Int_t ii = 0; ii < fNCorrNp; ++ii)
78 if (fCorrNp[ii]) delete[] fCorrNp[ii];
79 if (fCorrNp) delete[] fCorrNp;
81 for (Int_t ii = 0; ii < fNMCNp; ++ii)
82 if (fMCNp[ii]) delete[] fMCNp[ii];
83 if (fMCNp) delete[] fMCNp;
85 for (Int_t ii = 0; ii < fNControlMCNp; ++ii)
86 if (fControlMCNp[ii]) delete[] fControlMCNp[ii];
87 if (fControlMCNp) delete[] fControlMCNp;
93 * ---------------------------------------------------------------------------------
95 * ---------------------------------------------------------------------------------
98 //________________________________________________________________________
99 Int_t AliAnalysisNetParticleDistribution::Initialize(AliAnalysisNetParticleHelper* helper, AliESDtrackCuts* cuts, Bool_t isMC, Float_t *ptRange, Float_t etaMax, Int_t trackCutBit) {
103 fESDTrackCuts = cuts;
107 fAODtrackCutBit = trackCutBit;
109 // ------------------------------------------------------------------
110 // -- N particles / N anti-particles
111 // ------------------------------------------------------------------
112 // Np : arr[particle]
113 // CorrNp : arr[corrSet][particle]
114 // MCNp : arr[corrSet][particle] - MC
115 // ControlMCNp : arr[corrSet][particle] - Control MC
117 fNp = new Float_t[2];
119 fCorrNp = new Float_t*[fNCorrNp];
120 for (Int_t ii = 0 ; ii < fNCorrNp; ++ii)
121 fCorrNp[ii] = new Float_t[2];
123 fMCNp = new Float_t*[fNMCNp];
124 for (Int_t ii = 0 ; ii < fNMCNp; ++ii)
125 fMCNp[ii] = new Float_t[2];
127 fControlMCNp = new Float_t*[fNControlMCNp];
128 for (Int_t ii = 0 ; ii < fNControlMCNp; ++ii)
129 fControlMCNp[ii] = new Float_t[2];
136 //________________________________________________________________________
137 void AliAnalysisNetParticleDistribution::CreateHistograms(TList* outList) {
138 // -- Add histograms to outlist
142 // ------------------------------------------------------------------
143 // -- Create net particle histograms
144 // ------------------------------------------------------------------
146 AddHistSet("fHDist", "Uncorrected");
147 AddHistSet("fHDistCorr0", "Corrected [without cross section correction]");
148 AddHistSet("fHDistCorr1", "Corrected [with cross section correction]");
151 AddHistSet("fHMCrapidity", "MC primary in |y| < 0.5");
152 AddHistSet("fHMCptMin", "MC primary in |y| + #it{p}_{T} > 0.1");
153 AddHistSet("fHMCpt", Form("MC primary in |y| < 0.5 + #it{p}_{T} [%.1f,%.1f]", fPtRange[0], fPtRange[1]));
154 AddHistSet("fHMCeta", Form("MC primary in |y| < 0.5 + |#eta| < %.1f", fEtaMax));
155 AddHistSet("fHMCetapt", Form("MC primary in |y| < 0.5 + |#eta| < %.1f + #it{p}_{T} [%.1f,%.1f]", fEtaMax, fPtRange[0], fPtRange[1]));
157 AddHistSet("fHControlMCLambdarapidity", "Control MC Lambda primary in |y| < 0.5");
158 AddHistSet("fHControlMCLambdaptMin", "Control MC Lambda primary in |y| + #it{p}_{T} > 0.1");
159 AddHistSet("fHControlMCLambdapt", Form("Control MC primary in |y| < 0.5 + #it{p}_{T} [%.1f,%.1f]", fPtRange[0], fPtRange[1]));
160 AddHistSet("fHControlMCLambdaeta", Form("Control MC primary in |y| < 0.5 + |#eta| < %.1f", fEtaMax));
161 AddHistSet("fHControlMCLambdaetapt", Form("Control MC primary in |y| < 0.5 + |#eta| < %.1f + #it{p}_{T} [%.1f,%.1f]", fEtaMax, fPtRange[0], fPtRange[1]));
164 // ------------------------------------------------------------------
165 // -- Get Probe Particle Container
166 // ------------------------------------------------------------------
168 Double_t dCent[2] = {-0.5, 8.5};
171 Double_t dEta[2] = {-0.9, 0.9}; // -> 37 bins
172 Int_t iEta = Int_t((dEta[1]-dEta[0]) / 0.075) +1 ;
174 Double_t dRap[2] = {-0.5, 0.5};
175 Int_t iRap = Int_t((dRap[1]-dRap[0]) / 0.075) +1 ;
177 Double_t dPhi[2] = {0.0, TMath::TwoPi()};
180 Double_t dPt[2] = {0.1, 3.0};
181 Int_t iPt = Int_t((dPt[1]-dPt[0]) / 0.075);
183 Double_t dSign[2] = {-1.5, 1.5};
186 // cent: pt: sign: eta: phi: y
187 Int_t binShort[6] = { iCent, iPt, iSign, iEta, iPhi, iRap};
188 Double_t minShort[6] = {dCent[0], dPt[0], dSign[0], dEta[0], dPhi[0], dRap[0]};
189 Double_t maxShort[6] = {dCent[1], dPt[1], dSign[1], dEta[1], dPhi[1], dRap[1]};
192 fOutList->Add(new THnSparseF("fHnTrackUnCorr", "cent:pt:sign:eta:phi:y", 6, binShort, minShort, maxShort));
193 fHnTrackUnCorr = static_cast<THnSparseF*>(fOutList->Last());
194 fHnTrackUnCorr->GetAxis(0)->SetTitle("centrality");
195 fHnTrackUnCorr->GetAxis(1)->SetTitle("#it{p}_{T} (GeV/#it{c})");
196 fHnTrackUnCorr->GetAxis(2)->SetTitle("sign");
197 fHnTrackUnCorr->GetAxis(3)->SetTitle("#eta");
198 fHnTrackUnCorr->GetAxis(4)->SetTitle("#varphi");
199 fHnTrackUnCorr->GetAxis(5)->SetTitle("#it{y}");
201 fHelper->BinLogAxis(fHnTrackUnCorr, 1);
203 // ------------------------------------------------------------------
208 //________________________________________________________________________
209 Int_t AliAnalysisNetParticleDistribution::SetupEvent(AliESDInputHandler *esdHandler, AliAODInputHandler *aodHandler, AliMCEvent *mcEvent) {
214 // -- Get ESD objects
216 fESDHandler = esdHandler;
217 fPIDResponse = esdHandler->GetPIDResponse();
218 fESD = fESDHandler->GetEvent();
221 // -- Get AOD objects
223 fAODHandler = aodHandler;
224 fPIDResponse = aodHandler->GetPIDResponse();
225 fAOD = fAODHandler->GetEvent();
231 fStack = fMCEvent->Stack();
236 //________________________________________________________________________
237 void AliAnalysisNetParticleDistribution::ResetEvent() {
240 // -- Reset ESD Event
243 // -- Reset AOD Event
250 // -- Reset N particles/anti-particles
251 for (Int_t jj = 0; jj < 2; ++jj)
254 // -- Reset N corrected particles/anti-particles
255 for (Int_t ii = 0; ii < fNCorrNp; ++ii)
256 for (Int_t jj = 0; jj < 2; ++jj)
257 fCorrNp[ii][jj] = 0.;
259 // -- Reset N MC particles/anti-particles
260 for (Int_t ii = 0; ii < fNMCNp; ++ii)
261 for (Int_t jj = 0; jj < 2; ++jj)
264 // -- Reset N control MC particles/anti-particles
265 for (Int_t ii = 0; ii < fNControlMCNp; ++ii)
266 for (Int_t jj = 0; jj < 2; ++jj)
267 fControlMCNp[ii][jj] = 0.;
270 //________________________________________________________________________
271 Int_t AliAnalysisNetParticleDistribution::Process() {
272 // -- Process NetParticle Distributions
274 // -- Fill ESD tracks
275 if (fESD) ProcessESDTracks();
277 // -- Fill AOD tracks
278 else if (fAOD) ProcessAODTracks();
280 // -- Fill MC truth particles (missing for AOD XXX)
282 ProcessStackParticles();
283 ProcessStackControlParticles();
289 //________________________________________________________________________
290 Int_t AliAnalysisNetParticleDistribution::ProcessESDTracks() {
291 // -- Process ESD tracks and fill histograms
293 for (Int_t idxTrack = 0; idxTrack < fESD->GetNumberOfTracks(); ++idxTrack) {
294 AliESDtrack *track = fESD->GetTrack(idxTrack);
296 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
297 // -- Check track cuts
298 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
300 // -- Check if charged track is accepted for basic parameters
301 if (!fHelper->IsTrackAcceptedBasicCharged(track))
304 // -- Check if accepted
305 if (!fESDTrackCuts->AcceptTrack(track))
308 // -- Check if accepted in rapidity window
310 if (!fHelper->IsTrackAcceptedRapidity(track, yP))
313 // -- Check if accepted bt PID from TPC or TPC+TOF
315 if (!fHelper->IsTrackAcceptedPID(track, pid))
318 // -- Check if accepted with thighter DCA cuts
319 if (fHelper->IsTrackAcceptedDCA(track))
322 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
323 // -- Fill Probe Particle
324 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
326 Double_t aTrack[6] = {
327 Double_t(fHelper->GetCentralityBin()), // 0 centrality
329 track->GetSign(), // 2 sign
330 track->Eta(), // 3 eta
331 track->Phi(), // 4 phi
335 fHnTrackUnCorr->Fill(aTrack);
337 // -- Count particle / anti-particle
338 // ------------------------------------------------------------------
339 // idxPart = 0 -> anti particle
340 // idxPart = 1 -> particle
342 Int_t idxPart = (track->GetSign() < 0) ? 0 : 1;
345 for (Int_t ii = 0; ii < fNCorrNp; ++ii)
346 fCorrNp[ii][idxPart] += fHelper->GetTrackbyTrackCorrectionFactor(aTrack, ii);
348 } // for (Int_t idxTrack = 0; idxTrack < fESD->GetNumberOfTracks(); ++idxTrack) {
350 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
351 // -- Fill Particle Fluctuation Histograms
352 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
355 FillHistSet("fHDist", fNp);
358 for (Int_t ii = 0 ; ii < fNCorrNp; ++ii)
359 FillHistSet(Form("fHDistCorr%d", ii), fCorrNp[ii]);
364 //________________________________________________________________________
365 Int_t AliAnalysisNetParticleDistribution::ProcessAODTracks() {
366 // -- Process ESD tracks and fill histograms
368 for (Int_t idxTrack = 0; idxTrack < fAOD->GetNumberOfTracks(); ++idxTrack) {
369 AliAODTrack *track = (AliAODTrack*)fAOD->GetTrack(idxTrack);
371 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
372 // -- Check track cuts
373 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
375 // -- Check if charged track is accepted for basic parameters
376 if (!fHelper->IsTrackAcceptedBasicCharged(track))
379 // -- Check if accepted
380 if(!track->TestFilterBit(fAODtrackCutBit))
383 // -- Check if accepted in rapidity window
385 if (!fHelper->IsTrackAcceptedRapidity(track, yP))
388 // -- Check if accepted bt PID from TPC or TPC+TOF
390 if (!fHelper->IsTrackAcceptedPID(track, pid))
393 // -- Check if accepted with thighter DCA cuts XXX
394 // if (fHelper->IsTrackAcceptedDCA(track))
397 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
398 // -- Fill Probe Particle
399 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
401 Double_t aTrack[6] = {
402 Double_t(fHelper->GetCentralityBin()), // 0 centrality
404 track->Charge(), // 2 sign
405 track->Eta(), // 3 eta
406 track->Phi(), // 4 phi
410 fHnTrackUnCorr->Fill(aTrack);
412 // -- Count particle / anti-particle
413 // ------------------------------------------------------------------
414 // idxPart = 0 -> anti particle
415 // idxPart = 1 -> particle
417 Int_t idxPart = (track->Charge() < 0) ? 0 : 1;
420 for (Int_t ii = 0; ii < fNCorrNp; ++ii)
421 fCorrNp[ii][idxPart] += fHelper->GetTrackbyTrackCorrectionFactor(aTrack, ii);
423 } // for (Int_t idxTrack = 0; idxTrack < fESD->GetNumberOfTracks(); ++idxTrack) {
425 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
426 // -- Fill Particle Fluctuation Histograms
427 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
430 FillHistSet("fHDist", fNp);
433 for (Int_t ii = 0 ; ii < fNCorrNp; ++ii)
434 FillHistSet(Form("fHDistCorr%d", ii), fCorrNp[ii]);
439 //________________________________________________________________________
440 Int_t AliAnalysisNetParticleDistribution::ProcessStackParticles() {
441 // -- Process primary particles from the stack and fill histograms
443 Int_t pdgCode = AliPID::ParticleCode(fHelper->GetParticleSpecies());
445 for (Int_t idxMC = 0; idxMC < fStack->GetNprimary(); ++idxMC) {
446 TParticle* particle = fStack->Particle(idxMC);
450 // -- Check basic MC properties -> charged physical primary
451 if (!fHelper->IsParticleAcceptedBasicCharged(particle, idxMC))
454 // -- Check if particle / anti-particle
455 if (TMath::Abs(particle->GetPdgCode()) != pdgCode)
458 // -- Get particle : 0 anti-particle / 1 particle
459 Int_t idxPart = (particle->GetPdgCode() < 0) ? 0 : 1;
461 // >> NOW only anti-particle / particle
464 // -- Check rapidity window
466 if (!fHelper->IsParticleAcceptedRapidity(particle, yMC))
469 fMCNp[0][idxPart] += 1.; // -> MCrapidity
471 // -- Check acceptance
472 if (particle->Pt() > 0.1 )
473 fMCNp[1][idxPart] += 1.; // -> MCptMin
475 if (particle->Pt() > fPtRange[0] && particle->Pt() <= fPtRange[1])
476 fMCNp[2][idxPart] += 1.; // -> MCpt
478 if (TMath::Abs(particle->Eta()) <= fEtaMax)
479 fMCNp[3][idxPart] += 1.; // -> MCeta
481 if (particle->Pt() > fPtRange[0] && particle->Pt() > fPtRange[1] && TMath::Abs(particle->Eta()) <= fEtaMax)
482 fMCNp[4][idxPart] += 1.; // -> MCetapt
484 } // for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) {
486 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
487 // -- Fill Particle Fluctuation Histograms
488 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
490 FillHistSet("fHMCrapidity", fMCNp[0]);
491 FillHistSet("fHMCptMin", fMCNp[1]);
492 FillHistSet("fHMCpt", fMCNp[2]);
493 FillHistSet("fHMCeta", fMCNp[3]);
494 FillHistSet("fHMCetapt", fMCNp[4]);
499 //________________________________________________________________________
500 Int_t AliAnalysisNetParticleDistribution::ProcessStackControlParticles() {
501 // -- Process primary particles from the stack and fill histograms
503 Int_t pdgCode = fHelper->GetControlParticleCode();
504 Bool_t isNeutral = fHelper->IsControlParticleNeutral();
505 const Char_t* name = fHelper->GetControlParticleName().Data();
507 for (Int_t idxMC = 0; idxMC < fStack->GetNprimary(); ++idxMC) {
508 TParticle* particle = fStack->Particle(idxMC);
512 // -- Check basic MC properties -> neutral or charged physical primary
514 if (!fHelper->IsParticleAcceptedBasicNeutral(particle, idxMC))
518 if (!fHelper->IsParticleAcceptedBasicCharged(particle, idxMC))
522 // -- Check if particle / anti-particle
523 if (TMath::Abs(particle->GetPdgCode()) != pdgCode)
526 // -- Get particle : 0 anti-particle / 1 particle
527 Int_t idxPart = (particle->GetPdgCode() < 0) ? 0 : 1;
529 // >> NOW only anti-particle / particle
532 // -- Check rapidity window
534 if (!fHelper->IsParticleAcceptedRapidity(particle, yMC))
537 fControlMCNp[0][idxPart] += 1.; // -> ControlMCrapidity
539 // -- Check acceptance
540 if (particle->Pt() > 0.1 )
541 fControlMCNp[1][idxPart] += 1.; // -> ControlMCptMin
543 if (particle->Pt() > fPtRange[0] && particle->Pt() <= fPtRange[1])
544 fControlMCNp[2][idxPart] += 1.; // -> ControlMCpt
546 if (TMath::Abs(particle->Eta()) <= fEtaMax)
547 fControlMCNp[3][idxPart] += 1.; // -> ControlMCeta
549 if (particle->Pt() > fPtRange[0] && particle->Pt() > fPtRange[1] && TMath::Abs(particle->Eta()) <= fEtaMax)
550 fControlMCNp[4][idxPart] += 1.; // -> ControlMCetapt
551 } // for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) {
553 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
554 // -- Fill Particle Fluctuation Histograms
555 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
557 FillHistSet(Form("fHControlMC%srapidity", name), fControlMCNp[0], 0);
558 FillHistSet(Form("fHControlMC%sptMin", name), fControlMCNp[1], 1);
559 FillHistSet(Form("fHControlMC%spt", name), fControlMCNp[2], 2);
560 FillHistSet(Form("fHControlMC%seta", name), fControlMCNp[3], 3);
561 FillHistSet(Form("fHControlMC%setapt", name), fControlMCNp[4], 4);
566 ////////////////////////////////////////////////////////////////////////////////////////////
569 //________________________________________________________________________
570 void AliAnalysisNetParticleDistribution::AddHistSet(const Char_t *name, const Char_t *title) {
571 // -- Add histogram sets for particle and anti-particle
573 const Char_t* aPartNames[] = {"pbar", "p"};
574 const Char_t* aPartTitles[] = {"Anti-Proton", "Proton"};
575 const Char_t* aPartAxisTitles[] = {"#bar{p}", "p"};
577 const Char_t* aControlPartNames[] = {"lambdabar", "lambda"};
578 const Char_t* aControlPartTitles[] = {"Anti-Lambda", "Lambda"};
580 fOutList->Add(new TList);
581 TList *list = static_cast<TList*>(fOutList->Last());
582 list->SetName(name) ;
583 list->SetOwner(kTRUE);
587 TString sPtTitle("");
588 if (!sName.Contains("fHMC") || !sName.Contains("fHControlMC"))
589 sPtTitle += Form("#it{p}_{T} [%.1f,%.1f]", fPtRange[0], fPtRange[1]);
591 for (Int_t idxPart = 0; idxPart < 2; ++idxPart) {
592 list->Add(new TH2F(Form("%s%s", name, aPartNames[idxPart]),
593 Form("%s %s Dist %s;Centrality;N_{%s}", title, aPartTitles[idxPart], sPtTitle.Data(), aPartAxisTitles[idxPart]),
594 24, -0.5, 11.5, 501, -0.5, 500.49));
595 } // for (Int_t idxPart = 0; idxPart < 2; ++idxPart) {
597 list->Add(new TH2F(Form("%sNet%s", name, aPartNames[1]),
598 Form("%s Net %s Dist %s;Centrality;N_{p} - N_{#bar{p}}", title, aPartTitles[1], sPtTitle.Data()), 24, -0.5, 11.5, 201, -100.5, 100.49));
600 list->Add(new TProfile(Form("%sNet%sM", name, aPartNames[1]),
601 Form("%s Net %s Dist %s;Centrality;N_{p} - N_{#bar{p}}", title, aPartTitles[1], sPtTitle.Data()), 24, -0.5, 11.5));
602 list->Add(new TProfile(Form("%sNet%s2M", name, aPartNames[1]),
603 Form("%s (Net %s)^{2} Dist %s;Centrality;(N_{p} - N_{#bar{p}})^{2}", title, aPartTitles[1], sPtTitle.Data()), 24, -0.5, 11.5));
604 list->Add(new TProfile(Form("%sNet%s3M", name, aPartNames[1]),
605 Form("%s (Net %s)^{3} Dist %s;Centrality;(N_{p} - N_{#bar{p}})^{3}", title, aPartTitles[1], sPtTitle.Data()), 24, -0.5, 11.5));
606 list->Add(new TProfile(Form("%sNet%s4M", name, aPartNames[1]),
607 Form("%s (Net %s)^{4} Dist %s;Centrality;(N_{p} - N_{#bar{p}})^{4}", title, aPartTitles[1], sPtTitle.Data()), 24, -0.5, 11.5));
608 list->Add(new TProfile(Form("%sNet%s5M", name, aPartNames[1]),
609 Form("%s (Net %s)^{5} Dist %s;Centrality;(N_{p} - N_{#bar{p}})^{5}", title, aPartTitles[1], sPtTitle.Data()), 24, -0.5, 11.5));
610 list->Add(new TProfile(Form("%sNet%s6M", name, aPartNames[1]),
611 Form("%s (Net %s)^{6} Dist %s;Centrality;(N_{p} - N_{#bar{p}})^{6}", title, aPartTitles[1], sPtTitle.Data()), 24, -0.5, 11.5));
613 list->Add(new TH2F(Form("%sNet%sOverSum", name, aPartNames[1]),
614 Form("%s (Net %s)/ Sum Dist %s;Centrality;(N_{p} - N_{#bar{p}})/(N_{p} + N_{#bar{p}})", title, aPartTitles[1], sPtTitle.Data()),
615 24, -0.5, 11.5, 801, -50.5, 50.49));
617 if (sName.Contains("fHControlMC")) {
618 for (Int_t idxPart = 0; idxPart < 2; ++idxPart) {
619 list->Add(new TH2F(Form("%s%sOver%s", name, aPartNames[idxPart], aControlPartNames[idxPart]),
620 Form("%s %s / %s Dist %s;Centrality;N_{%s}/N_{Tracks}",
621 title, aPartTitles[idxPart], aControlPartTitles[idxPart], sPtTitle.Data(), aPartAxisTitles[idxPart]),
622 24, -0.5, 11.5, 101, 0., 1.));
623 } // for (Int_t idxPart = 0; idxPart < 2; ++idxPart) {
626 // if (sName.Contains("fHDist")) {
627 // list->Add(new TH3F(Form("%sNet%s_RecVsMC", name, aPartNames[1]),
628 // Form("%s Net %s Dist - Rec Vs MC - %s;Centrality;(N_{p} - N_{#bar{p}})_{rec};(N_{p} - N_{#bar{p}})_{MC}",
629 // title, aPartTitles[1], sPtTitle.Data()),
630 // 24, -0.5, 11.5, 201, -100.5, 100.49, 201, -100.5, 100.49));
636 //________________________________________________________________________
637 void AliAnalysisNetParticleDistribution::FillHistSet(const Char_t *name, Float_t *np, Int_t controlIdx) {
638 // -- Add histogram sets for particle and anti-particle
640 TList *list = static_cast<TList*>(fOutList->FindObject(name));
642 Float_t centralityBin = fHelper->GetCentralityBin();
644 (static_cast<TH2F*>(list->FindObject(Form("%spbar", name))))->Fill(centralityBin, np[0]);
645 (static_cast<TH2F*>(list->FindObject(Form("%sp", name))))->Fill(centralityBin, np[1]);
647 Float_t sumNp = np[1]+np[0];
648 Float_t deltaNp = np[1]-np[0];
649 Float_t deltaNp2 = deltaNp * deltaNp;
650 Float_t deltaNp3 = deltaNp2 * deltaNp;
652 (static_cast<TH2F*>(list->FindObject(Form("%sNetp", name))))->Fill(centralityBin, deltaNp);
654 (static_cast<TProfile*>(list->FindObject(Form("%sNetpM", name))))->Fill(centralityBin, deltaNp);
655 (static_cast<TProfile*>(list->FindObject(Form("%sNetp2M", name))))->Fill(centralityBin, deltaNp2);
656 (static_cast<TProfile*>(list->FindObject(Form("%sNetp3M", name))))->Fill(centralityBin, deltaNp2*deltaNp);
657 (static_cast<TProfile*>(list->FindObject(Form("%sNetp4M", name))))->Fill(centralityBin, deltaNp2*deltaNp2);
658 (static_cast<TProfile*>(list->FindObject(Form("%sNetp5M", name))))->Fill(centralityBin, deltaNp3*deltaNp2);
659 (static_cast<TProfile*>(list->FindObject(Form("%sNetp6M", name))))->Fill(centralityBin, deltaNp3*deltaNp3);
661 (static_cast<TH2F*>(list->FindObject(Form("%sNetpOverSum", name))))->Fill(centralityBin, deltaNp/sumNp);
664 if (sName.Contains("fHControlMC") && controlIdx >= 0) {
665 (static_cast<TH2F*>(list->FindObject(Form("%spbarOverlambdabar", name))))->Fill(centralityBin, np[0]/fControlMCNp[controlIdx][0]);
666 (static_cast<TH2F*>(list->FindObject(Form("%spOverlambda", name))))->Fill(centralityBin, np[1]/fControlMCNp[controlIdx][1]);
669 // if (sName.Contains("fHDist")) {
670 // Float_t deltaMCNp = fMCNp[controlIdx][1]-fMCNp[controldx][0];
671 // (static_cast<TH3F*>(list->FindObject(Form("%sNetp_RecVsMC", name))))->Fill(centralityBin, deltaNp, deltaMCNp);