10 #include "AliMCEvent.h"
11 #include "AliMCParticle.h"
12 #include "AliESDtrackCuts.h"
13 #include "AliESDInputHandler.h"
14 #include "AliESDpid.h"
15 #include "AliAODInputHandler.h"
16 #include "AliAODEvent.h"
17 #include "AliAODMCParticle.h"
18 #include "AliCentrality.h"
19 #include "AliTracker.h"
21 #include "AliAnalysisNetParticleHelper.h"
26 * Class for for NetParticle Distributions
27 * -- Helper class for net particle istributions
28 * Authors: Jochen Thaeder <jochen@thaeder.de>
29 * Michael Weber <m.weber@cern.ch>
32 ClassImp(AliAnalysisNetParticleHelper)
35 * ---------------------------------------------------------------------------------
37 * ---------------------------------------------------------------------------------
40 // MW make fgk ... static const
41 const Char_t* aPartNames[AliPID::kSPECIES][2] = {
49 const Char_t* aPartTitles[AliPID::kSPECIES][2] = {
50 {"Electron", "Positron"},
51 {"Anti-Muon", "Muon"},
52 {"Anti-Pion", "Proton"},
53 {"Anti-Kaon", "Kaon"},
54 {"Anti-Proton", "Proton"}
57 const Char_t* aPartTitlesLatex[AliPID::kSPECIES][2] = {
59 {"#mu^{-}", "#mu^{+}" },
60 {"#pi^{-}", "#pi^{+}" },
66 * ---------------------------------------------------------------------------------
67 * Constructor / Destructor
68 * ---------------------------------------------------------------------------------
71 //________________________________________________________________________
72 AliAnalysisNetParticleHelper::AliAnalysisNetParticleHelper() :
75 fInputEventHandler(NULL),
83 fCentralityPercentile(-1.),
89 fPhiMax(TMath::TwoPi()),
90 fMinTrackLengthMC(70.),
94 fParticleSpecies(AliPID::kProton),
99 fMinPtForTOFRequired(0.8),
108 fHCentralityStat(NULL),
109 fNCentralityBins(10),
114 AliLog::SetClassDebugLevel("AliAnalysisNetParticleHelper",10);
117 const Float_t AliAnalysisNetParticleHelper::fgkfHistBinWitdthRap = 0.075;
118 const Float_t AliAnalysisNetParticleHelper::fgkfHistBinWitdthPt = 0.15; // 150 MeV
120 const Float_t AliAnalysisNetParticleHelper::fgkfHistRangeCent[] = {-0.5, 8.5};
121 const Int_t AliAnalysisNetParticleHelper::fgkfHistNBinsCent = 9 ;
123 const Float_t AliAnalysisNetParticleHelper::fgkfHistRangeEta[] = {-0.9, 0.9};
124 const Int_t AliAnalysisNetParticleHelper::fgkfHistNBinsEta = Int_t((AliAnalysisNetParticleHelper::fgkfHistRangeEta[1] -
125 AliAnalysisNetParticleHelper::fgkfHistRangeEta[0]) /
126 AliAnalysisNetParticleHelper::fgkfHistBinWitdthRap) +1;
128 const Float_t AliAnalysisNetParticleHelper::fgkfHistRangeRap[] = {-0.5, 0.5};
129 const Int_t AliAnalysisNetParticleHelper::fgkfHistNBinsRap = Int_t((AliAnalysisNetParticleHelper::fgkfHistRangeRap[1] -
130 AliAnalysisNetParticleHelper::fgkfHistRangeRap[0]) /
131 AliAnalysisNetParticleHelper::fgkfHistBinWitdthRap) +1;
133 const Float_t AliAnalysisNetParticleHelper::fgkfHistRangePhi[] = {0.0, static_cast<Float_t>(TMath::TwoPi())};
134 const Int_t AliAnalysisNetParticleHelper::fgkfHistNBinsPhi = 42 ;
136 const Float_t AliAnalysisNetParticleHelper::fgkfHistRangePt[] = {0.1, 3.0};
137 const Int_t AliAnalysisNetParticleHelper::fgkfHistNBinsPt = Int_t((AliAnalysisNetParticleHelper::fgkfHistRangePt[1] -
138 AliAnalysisNetParticleHelper::fgkfHistRangePt[0]) /
139 AliAnalysisNetParticleHelper::fgkfHistBinWitdthPt);
141 const Float_t AliAnalysisNetParticleHelper::fgkfHistRangeSign[] = {-1.5, 1.5};
142 const Int_t AliAnalysisNetParticleHelper::fgkfHistNBinsSign = 3;
144 const Char_t* AliAnalysisNetParticleHelper::fgkEventNames[] = {"All", "IsTriggered", "HasVertex", "Vz<Vz_{Max}", "Centrality [0,90]%"};
145 const Char_t* AliAnalysisNetParticleHelper::fgkCentralityMaxNames[] = {"5", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100"};
146 const Char_t* AliAnalysisNetParticleHelper::fgkTriggerNames[] = {"kMB", "kCentral", "kSemiCentral", "kEMCEJE", "kEMCEGA" };
147 const Char_t* AliAnalysisNetParticleHelper::fgkCentralityNames[] = {"0-5%", "5-10%", "10-20%", "20-30%", "30-40%", "40-50%",
148 "50-60%", "60-70%", "70-80%", "80-90%", "90-100%"};
150 //________________________________________________________________________
151 AliAnalysisNetParticleHelper::~AliAnalysisNetParticleHelper() {
158 * ---------------------------------------------------------------------------------
160 * ---------------------------------------------------------------------------------
163 //________________________________________________________________________
164 void AliAnalysisNetParticleHelper::SetPhiRange(Float_t f1, Float_t f2) {
165 // -- Set phi range and adopt to phi-histogram
168 fPhiMax = (f1 < f2) ? f2 : f2+TMath::TwoPi();
171 Float_t binWidth = (AliAnalysisNetParticleHelper::fgkfHistRangePhi[1] - AliAnalysisNetParticleHelper::fgkfHistRangePhi[0]) /
172 Float_t(AliAnalysisNetParticleHelper::fgkfHistNBinsPhi);
174 Float_t lowEdge = AliAnalysisNetParticleHelper::fgkfHistRangePhi[0] - binWidth;
175 Float_t highEdge = AliAnalysisNetParticleHelper::fgkfHistRangePhi[0];
177 for (Int_t ii = 1; ii <= AliAnalysisNetParticleHelper::fgkfHistNBinsPhi; ++ii) {
179 highEdge += binWidth;
181 if (fPhiMin >= lowEdge && fPhiMin < highEdge )
183 if (fPhiMax > lowEdge && fPhiMax <= highEdge )
190 //________________________________________________________________________
191 void AliAnalysisNetParticleHelper::SetParticleSpecies(AliPID::EParticleType pid) {
192 // -- Set particle species (ID, Name, Title, Title LATEX)
194 if ( Int_t(pid) < 0 || Int_t(pid) >= AliPID::kSPECIES) {
195 AliWarning("Particle ID not in AliPID::kSPECIES --> Set to protons");
196 pid = AliPID::kProton;
199 fParticleSpecies = pid;
201 for (Int_t idxPart = 0; idxPart < 2; ++idxPart) {
202 fPartName[idxPart] = aPartNames[fParticleSpecies][idxPart];
203 fPartTitle[idxPart] = aPartTitles[fParticleSpecies][idxPart];
204 fPartTitleLatex[idxPart] = aPartTitlesLatex[fParticleSpecies][idxPart];
208 //________________________________________________________________________
209 void AliAnalysisNetParticleHelper::SetUsePID(Bool_t usePID) {
210 // -- Set usage of PID
211 // > if turn off, set charge types (ID, Name, Title, Title LATEX)
216 fParticleSpecies = AliPID::kUnknown;
218 fPartName[0] = "neg";
219 fPartName[1] = "pos";
220 fPartTitle[0] = "Negative";
221 fPartTitle[1] = "Positive";
222 fPartTitleLatex[0] = "Negative";
223 fPartTitleLatex[1] = "Positive";
228 * ---------------------------------------------------------------------------------
230 * ---------------------------------------------------------------------------------
233 //________________________________________________________________________
234 TString AliAnalysisNetParticleHelper::GetParticleName(Int_t idxPart) {
235 // -- Get particle Name
237 if( idxPart != 0 && idxPart != 1){
238 AliWarning("Particle type not known --> Set to antiparticles");
242 return fPartName[idxPart];
245 //________________________________________________________________________
246 TString AliAnalysisNetParticleHelper::GetParticleTitle(Int_t idxPart) {
247 // -- Get particle Title
249 if( idxPart != 0 && idxPart != 1){
250 AliWarning("Particle type not known --> Set to antiparticles");
254 return fPartTitle[idxPart];
257 //________________________________________________________________________
258 TString AliAnalysisNetParticleHelper::GetParticleTitleLatex(Int_t idxPart) {
259 // -- Get particle Title LATEX
261 if( idxPart != 0 && idxPart != 1){
262 AliWarning("Particle type not known --> Set to antiparticles");
266 return fPartTitleLatex[idxPart];
270 * ---------------------------------------------------------------------------------
272 * ---------------------------------------------------------------------------------
275 //________________________________________________________________________
276 Int_t AliAnalysisNetParticleHelper::Initialize(Bool_t isMC, Int_t modeDistCreation) {
277 // -- Initialize helper
280 fModeDistCreation = modeDistCreation;
282 // -- Setup event cut statistics
283 InitializeEventStats();
285 // -- Setup trigger statistics
286 InitializeTriggerStats();
288 // -- Setup centrality statistics
289 InitializeCentralityStats();
291 // -- Load Eta correction function
292 iResult = InitializeEtaCorrection(isMC);
297 //________________________________________________________________________
298 Int_t AliAnalysisNetParticleHelper::SetupEvent(AliESDInputHandler *esdHandler, AliAODInputHandler *aodHandler, AliMCEvent *mcEvent) {
301 // -- Get ESD objects
303 fInputEventHandler = static_cast<AliInputEventHandler*>(esdHandler);
304 fESD = dynamic_cast<AliESDEvent*>(fInputEventHandler->GetEvent());
306 AliError("ESD event handler not available");
311 // -- Get AOD objects
313 fInputEventHandler = static_cast<AliInputEventHandler*>(aodHandler);
314 fAOD = dynamic_cast<AliAODEvent*>(fInputEventHandler->GetEvent());
316 AliError("AOD event handler not available");
321 // -- Get Common objects
322 fPIDResponse = fInputEventHandler->GetPIDResponse();
327 fStack = fMCEvent->Stack();
329 // -- Get event centrality
330 // > 0-5|5-10|10-20|20-30|30-40|40-50|50-60|60-70|70-80|80-90 --> 10 bins
331 // > 0 1 2 3 4 5 6 7 8 9
333 AliCentrality *centrality = NULL;
336 centrality = fESD->GetCentrality();
338 centrality = fAOD->GetHeader()->GetCentralityP();
341 AliError("Centrality not available");
345 Int_t centBin = centrality->GetCentralityClass10("V0M");
347 fCentralityBin = centrality->GetCentralityClass5("V0M");
348 else if (centBin == 10 || centBin == -1.)
350 else if (centBin > 0 && centBin < fNCentralityBins)
351 fCentralityBin = centBin + 1;
355 // -- Stay within the max centrality bin
356 if (fCentralityBin >= fCentralityBinMax)
359 fCentralityPercentile = centrality->GetCentralityPercentile("V0M");
361 // -- Update TPC pid with eta correction (only for ESDs!!)
363 UpdateEtaCorrectedTPCPid();
369 * ---------------------------------------------------------------------------------
370 * Event / Trigger Statistics
371 * ---------------------------------------------------------------------------------
374 //________________________________________________________________________
375 Bool_t AliAnalysisNetParticleHelper::IsEventTriggered() {
376 // -- Check if Event is triggered and fill Trigger Histogram
378 Bool_t *aTriggerFired = new Bool_t[fNTriggers];
379 for (Int_t ii = 0; ii < fNTriggers; ++ii)
380 aTriggerFired[ii] = kFALSE;
382 if ((fInputEventHandler->IsEventSelected() & AliVEvent::kMB)) aTriggerFired[0] = kTRUE;
383 if ((fInputEventHandler->IsEventSelected() & AliVEvent::kCentral)) aTriggerFired[1] = kTRUE;
384 if ((fInputEventHandler->IsEventSelected() & AliVEvent::kSemiCentral)) aTriggerFired[2] = kTRUE;
385 if ((fInputEventHandler->IsEventSelected() & AliVEvent::kEMCEJE)) aTriggerFired[3] = kTRUE;
386 if ((fInputEventHandler->IsEventSelected() & AliVEvent::kEMCEGA)) aTriggerFired[4] = kTRUE;
388 Bool_t isTriggered = kFALSE;
390 for (Int_t ii=0; ii<fNTriggers; ++ii) {
391 if(aTriggerFired[ii]) {
393 fHTriggerStat->Fill(ii);
397 delete[] aTriggerFired;
402 //________________________________________________________________________
403 Bool_t AliAnalysisNetParticleHelper::IsEventRejected() {
404 // -- Evaluate event statistics histograms
406 Int_t *aEventCuts = new Int_t[fHEventStatMax];
407 // set aEventCuts[ii] to 1 in case of reject
409 for (Int_t ii=0;ii<fHEventStatMax; ++ii)
414 // -- 0 - Before Physics Selection
415 aEventCuts[iCut] = 0;
417 // -- 1 - No Trigger fired
419 if (!IsEventTriggered())
420 aEventCuts[iCut] = 1;
424 const AliESDVertex* vtxESD = NULL;
425 const AliAODVertex* vtxAOD = NULL;
427 vtxESD = fESD->GetPrimaryVertexTracks();
429 aEventCuts[iCut] = 1;
432 vtxAOD = fAOD->GetPrimaryVertex();
434 aEventCuts[iCut] = 1;
437 // -- 3 - Vertex z outside cut window
440 if(TMath::Abs(vtxESD->GetZv()) > fVertexZMax)
441 aEventCuts[iCut] = 1;
444 if(TMath::Abs(vtxAOD->GetZ()) > fVertexZMax)
445 aEventCuts[iCut] = 1;
448 aEventCuts[iCut] = 1;
450 // -- 4 - Centrality = -1 (no centrality or not hadronic)
452 if(fCentralityBin == -1.)
453 aEventCuts[iCut] = 1;
455 // -- 5 - Centrality < fCentralityMax
457 if(fCentralityBin == -2.)
458 aEventCuts[iCut] = 1;
460 // -- Fill statistics / reject event
461 Bool_t isRejected = FillEventStats(aEventCuts);
470 * ---------------------------------------------------------------------------------
471 * Accept Particle Methods - private
472 * ---------------------------------------------------------------------------------
475 //________________________________________________________________________
476 Bool_t AliAnalysisNetParticleHelper::IsParticleAcceptedBasicCharged(AliVParticle *particle, Int_t idxMC) {
477 // -- Check if MC particle is accepted for basic parameters
482 // -- check if charged
483 if (particle->Charge() == 0.0)
486 // -- check if physical primary - ESD
488 if(!fStack->IsPhysicalPrimary(idxMC))
491 // -- check if physical primary - AOD
493 if(!(static_cast<AliAODMCParticle*>(particle))->IsPhysicalPrimary())
500 //________________________________________________________________________
501 Bool_t AliAnalysisNetParticleHelper::IsParticleAcceptedBasicNeutral(AliVParticle *particle, Int_t idxMC) {
502 // -- Check if MC particle is accepted for basic parameters
507 // -- check if charged
508 if (particle->Charge() != 0.0)
511 // -- check if physical primary - ESD
513 if(!fStack->IsPhysicalPrimary(idxMC))
516 // -- check if physical primary - AOD
518 if(!(static_cast<AliAODMCParticle*>(particle))->IsPhysicalPrimary())
525 //________________________________________________________________________
526 Bool_t AliAnalysisNetParticleHelper::IsParticleAcceptedRapidity(AliVParticle *particle, Double_t &yP) {
527 // -- Check if particle is accepted
529 // > if no pid : return kTRUE, yP = eta
530 // > return 0 if not accepted
533 yP = particle->Eta();
537 Double_t mP = AliPID::ParticleMass(fParticleSpecies);
539 // -- Calculate rapidities and kinematics
540 Double_t p = particle->P();
541 Double_t pz = particle->Pz();
543 Double_t eP = TMath::Sqrt(p*p + mP*mP);
544 yP = 0.5 * TMath::Log((eP + pz) / (eP - pz));
546 // -- Check Rapidity window
547 if (TMath::Abs(yP) > fRapidityMax)
553 //________________________________________________________________________
554 Bool_t AliAnalysisNetParticleHelper::IsParticleAcceptedPhi(AliVParticle *particle) {
555 // -- Check if particle is accepted
557 // > return 0 if not accepted
559 if (particle->Phi() > fPhiMin && particle->Phi() <= fPhiMax)
561 else if (particle->Phi() < fPhiMin && (particle->Phi() + TMath::TwoPi()) <= fPhiMax)
567 //_____________________________________________________________________________
568 Bool_t AliAnalysisNetParticleHelper::IsParticleFindable(Int_t label) {
569 // -- Check if MC particle is findable tracks
571 AliMCParticle *mcParticle = static_cast<AliMCParticle*>(fMCEvent->GetTrack(label));
576 Float_t tpcTrackLength = mcParticle->GetTPCTrackLength(AliTracker::GetBz(), 0.05, counter, 3.0);
578 return (tpcTrackLength > fMinTrackLengthMC);
582 * ---------------------------------------------------------------------------------
583 * Accept Track Methods - public
584 * ---------------------------------------------------------------------------------
587 //________________________________________________________________________
588 Bool_t AliAnalysisNetParticleHelper::IsTrackAcceptedBasicCharged(AliVTrack* track) {
589 // -- Check if track is accepted
590 // > for basic parameters
595 if (track->Charge() == 0)
601 //________________________________________________________________________
602 Bool_t AliAnalysisNetParticleHelper::IsTrackAcceptedRapidity(AliVTrack *track, Double_t &yP) {
603 // -- Check if track is accepted
605 // > if no pid : return kTRUE
606 // > return 0 if not accepted
613 Double_t mP = AliPID::ParticleMass(fParticleSpecies);
615 // -- Calculate rapidities and kinematics
617 track->GetPxPyPz(pvec);
619 Double_t p = track->P();
620 Double_t eP = TMath::Sqrt(p*p + mP*mP);
621 yP = 0.5 * TMath::Log((eP + pvec[2]) / (eP - pvec[2]));
623 // -- Check Rapidity window
624 if (TMath::Abs(yP) > fRapidityMax)
630 //________________________________________________________________________
631 Bool_t AliAnalysisNetParticleHelper::IsTrackAcceptedDCA(AliVTrack *vTrack) {
632 // -- Check if track is accepted - ONLY FOR ESDs so far
633 // > for DCA, if both SPD layers have hits
634 // > For now only Implemented for ESDs
636 Bool_t isAccepted = kTRUE;
641 AliESDtrack* track = dynamic_cast<AliESDtrack*>(vTrack);
646 if (track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1)) {
648 // -- Get DCA nSigmas
649 Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
650 track->GetImpactParameters(dca,cov);
652 Float_t nSigmaCdd = (cov[0] != 0.) ? dca[0]/TMath::Sqrt(cov[0]) : -9.99;
653 Float_t nSigmaCzz = (cov[2] != 0.) ? dca[1]/TMath::Sqrt(cov[2]) : -9.99;
655 if (fNSigmaMaxCdd != 0.) {
656 if (TMath::Abs(nSigmaCdd) > fNSigmaMaxCdd)
660 if (fNSigmaMaxCzz != 0.) {
661 if (TMath::Abs(nSigmaCzz) > fNSigmaMaxCzz)
669 //________________________________________________________________________
670 Bool_t AliAnalysisNetParticleHelper::IsTrackAcceptedPID(AliVTrack *track, Double_t* pid) {
671 // -- Check if track is accepted
672 // > provides TPC and TOF nSigmas to the argument
674 Bool_t isAcceptedTPC = kFALSE;
675 Bool_t isAcceptedTOF = kTRUE;
677 // -- In case not PID is used
685 pid[0] = fPIDResponse->NumberOfSigmasTPC(track, fParticleSpecies);
686 pid[1] = fPIDResponse->NumberOfSigmasTOF(track, fParticleSpecies);
688 // -- Check PID with TPC
689 if (TMath::Abs(pid[0]) < fNSigmaMaxTPC)
690 isAcceptedTPC = kTRUE;
692 // -- Check PID with TOF
695 // Has TOF PID availible
696 if (fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF, track) == AliPIDResponse::kDetPidOk) {
697 if (TMath::Abs(pid[1]) < fNSigmaMaxTOF)
698 isAcceptedTOF = kTRUE;
700 isAcceptedTOF = kFALSE;
703 // Has no TOF PID availible
705 if (track->Pt() >= fMinPtForTOFRequired)
706 isAcceptedTOF = kFALSE;
708 isAcceptedTOF = kTRUE;
710 } // if (isAcceptedTPC) {
712 return (isAcceptedTPC && isAcceptedTOF);
715 //________________________________________________________________________
716 Bool_t AliAnalysisNetParticleHelper::IsTrackAcceptedPhi(AliVTrack *track) {
717 // -- Check if track is accepted
719 // > return 0 if not accepted
721 if (track->Phi() > fPhiMin && track->Phi() <= fPhiMax)
723 else if (track->Phi() < fPhiMin && (track->Phi() + TMath::TwoPi()) <= fPhiMax)
730 * ---------------------------------------------------------------------------------
732 * ---------------------------------------------------------------------------------
735 //________________________________________________________________________
736 void AliAnalysisNetParticleHelper::UpdateEtaCorrectedTPCPid() {
737 // -- Update eta corrected TPC pid
742 for (Int_t idxTrack = 0; idxTrack < fESD->GetNumberOfTracks(); ++idxTrack) {
743 AliESDtrack *track = fESD->GetTrack(idxTrack);
745 // -- Check if charged track is accepted for basic parameters
746 if (!IsTrackAcceptedBasicCharged(track))
749 Double_t newTPCSignal = track->GetTPCsignal() / fEtaCorrFunc->Eval(track->Eta());
750 track->SetTPCsignal(newTPCSignal, track->GetTPCsignalSigma(), track->GetTPCsignalN());
754 //________________________________________________________________________
755 void AliAnalysisNetParticleHelper::BinLogAxis(const THnBase *hn, Int_t axisNumber) {
756 // -- Method for the correct logarithmic binning of histograms
757 // -- and update fMinPtForTOFRequired using the logarithmic scale
759 // -- Make logarithmic binning
760 TAxis *axis = hn->GetAxis(axisNumber);
761 Int_t nBins = axis->GetNbins();
763 Double_t from = axis->GetXmin();
764 Double_t to = axis->GetXmax();
765 Double_t *newBins = new Double_t[nBins + 1];
768 Double_t factor = TMath::Power(to/from, 1./nBins);
770 for (int ii = 1; ii <= nBins; ii++)
771 newBins[ii] = factor * newBins[ii-1];
773 axis->Set(nBins, newBins);
777 // -- Update MinPtForTOFRequired
778 for (Int_t ii = 1; ii <= nBins; ++ii)
779 if (axis->GetBinLowEdge(ii) <= fMinPtForTOFRequired && axis->GetBinLowEdge(ii) + axis->GetBinWidth(ii) > fMinPtForTOFRequired)
780 fMinPtForTOFRequired = axis->GetBinLowEdge(ii) + axis->GetBinWidth(ii);
783 ///////////////////////////////////////////////////////////////////////////////////
786 * ---------------------------------------------------------------------------------
787 * Initialize - Private
788 * ---------------------------------------------------------------------------------
791 //________________________________________________________________________
792 void AliAnalysisNetParticleHelper::InitializeEventStats() {
793 // -- Initialize event statistics histograms
795 fHEventStat0 = new TH1F("fHEventStat0","Event cut statistics 0;Event Cuts;Events", fHEventStatMax,-0.5,fHEventStatMax-0.5);
796 fHEventStat1 = new TH1F("fHEventStat1","Event cut statistics 1;Event Cuts;Events", fHEventStatMax,-0.5,fHEventStatMax-0.5);
798 for ( Int_t ii=0; ii < fHEventStatMax-1; ii++ ) {
799 fHEventStat0->GetXaxis()->SetBinLabel(ii+1, AliAnalysisNetParticleHelper::fgkEventNames[ii]);
800 fHEventStat1->GetXaxis()->SetBinLabel(ii+1, AliAnalysisNetParticleHelper::fgkEventNames[ii]);
803 fHEventStat0->GetXaxis()->SetBinLabel(fHEventStatMax, Form("Centrality [0-%s]%%", AliAnalysisNetParticleHelper::fgkCentralityMaxNames[fCentralityBinMax-1]));
804 fHEventStat1->GetXaxis()->SetBinLabel(fHEventStatMax, Form("Centrality [0-%s]%%", AliAnalysisNetParticleHelper::fgkCentralityMaxNames[fCentralityBinMax-1]));
807 //________________________________________________________________________
808 void AliAnalysisNetParticleHelper::InitializeTriggerStats() {
809 // -- Initialize trigger statistics histograms
811 fHTriggerStat = new TH1F("fHTriggerStat","Trigger statistics;Trigger;Events", fNTriggers,-0.5,fNTriggers-0.5);
813 for ( Int_t ii=0; ii < fNTriggers; ii++ )
814 fHTriggerStat->GetXaxis()->SetBinLabel(ii+1, AliAnalysisNetParticleHelper::fgkTriggerNames[ii]);
817 //________________________________________________________________________
818 void AliAnalysisNetParticleHelper::InitializeCentralityStats() {
819 // -- Initialize trigger statistics histograms
821 fHCentralityStat = new TH1F("fHCentralityStat","Centrality statistics;Centrality Bins;Events",
822 fNCentralityBins,-0.5,fNCentralityBins-0.5);
824 for ( Int_t ii=0; ii < fNCentralityBins; ii++ )
825 fHCentralityStat->GetXaxis()->SetBinLabel(ii+1, AliAnalysisNetParticleHelper::fgkCentralityNames[ii]);
828 //________________________________________________________________________
829 Int_t AliAnalysisNetParticleHelper::InitializeEtaCorrection(Bool_t isMC) {
830 // -- Initialize eta correction maps for TPC pid
832 TFile fileEtaCorrMaps("${ALICE_ROOT}/PWGDQ/dielectron/files/EtaCorrMaps.root");
833 if (!fileEtaCorrMaps.IsOpen())
836 TList *keyList = fileEtaCorrMaps.GetListOfKeys();
839 sList = (isMC) ? "LHC11a10" : "LHC10h.pass2";
841 for (Int_t idx = 0; idx < keyList->GetEntries(); ++idx) {
842 TString keyName = keyList->At(idx)->GetName();
843 TPRegexp reg(keyName);
844 if (reg.MatchB(sList)){
845 AliInfo(Form("Using Eta Correction Function: %s",keyName.Data()));
846 fEtaCorrFunc = static_cast<TF1*>(fileEtaCorrMaps.Get(keyName.Data()));
855 * ---------------------------------------------------------------------------------
856 * Event / Trigger Statistics - private
857 * ---------------------------------------------------------------------------------
860 //________________________________________________________________________
861 Bool_t AliAnalysisNetParticleHelper::FillEventStats(Int_t *aEventCuts) {
862 // -- Fill event / centrality statistics
864 Bool_t isRejected = kFALSE;
866 // -- Fill event statistics
867 for (Int_t idx = 0; idx < fHEventStatMax ; ++idx) {
872 fHEventStat0->Fill(idx);
875 for (Int_t idx = 0; idx < fHEventStatMax; ++idx) {
878 fHEventStat1->Fill(idx);
881 // -- Fill centrality statistics of accepted events
883 fHCentralityStat->Fill(fCentralityBin);