@@ -70,6 +70,7 @@ struct MultiplicityPt {
7070 static constexpr int RecMultBinMax = 100 ;
7171 static constexpr int ParticlesType = 4 ;
7272 static constexpr int ResponseMatrixTypes = 7 ;
73+ static constexpr int CentralityClasses = 10 ;
7374
7475 enum INELCutSelection : int {
7576 INEL = 0 ,
@@ -114,6 +115,11 @@ struct MultiplicityPt {
114115 Configurable<float > cfgCutNsigmaPi{" cfgCutNsigmaPi" , 3 .0f , " nsigma cut for pions" };
115116 Configurable<float > cfgCutNsigmaKa{" cfgCutNsigmaKa" , 2 .5f , " nsigma cut for kaons" };
116117 Configurable<float > cfgCutNsigmaPr{" cfgCutNsigmaPr" , 2 .5f , " nsigma cut for protons" };
118+ ConfigurableAxis ptBinning{" ptBinning" , {VARIABLE_WIDTH , 0.1 , 0.12 , 0.14 , 0.16 , 0.18 , 0.2 , 0.25 , 0.3 , 0.35 , 0.4 , 0.45 , 0.5 , 0.55 , 0.6 , 0.65 , 0.7 , 0.75 , 0.8 , 0.85 , 0.9 , 0.95 , 1.0 , 1.1 , 1.2 , 1.3 , 1.4 , 1.5 , 1.6 , 1.7 , 1.8 , 1.9 , 2.0 , 2.1 , 2.2 , 2.3 , 2.4 , 2.5 , 2.6 , 2.7 , 2.8 , 2.9 , 3.0 , 3.2 , 3.4 , 3.6 , 3.8 , 4.0 , 4.5 , 5.0 , 5.5 , 6.0 , 6.5 , 7.0 , 8.0 , 9.0 , 10.0 , 11.0 , 12.0 , 13.0 , 14.0 , 15.0 , 16.0 , 18.0 , 20.0 }, " pT bin limits" };
119+ ConfigurableAxis pFineBins{" pFineBins" , {1995 , 0.1 , 40 }, " Binning for momentum" };
120+ ConfigurableAxis dedxBins{" dedxBins" , {100 , 0 , 100 }, " Binning for dedx" };
121+
122+ std::vector<double > centBinningStd = {0 ., 1 ., 5 ., 10 ., 15 ., 20 ., 30 ., 40 ., 50 ., 70 ., 100 .};
117123 // Histogram names for V0s dE/dx analysis
118124 static constexpr std::string_view DedxvsMomentumPos[ParticlesType] = {" dEdx_vs_Momentum_all_Pos" , " dEdx_vs_Momentum_Pi_v0_Pos" , " dEdx_vs_Momentum_Pr_v0_Pos" , " dEdx_vs_Momentum_El_v0_Pos" };
119125 static constexpr std::string_view DedxvsMomentumNeg[ParticlesType] = {" dEdx_vs_Momentum_all_Neg" , " dEdx_vs_Momentum_Pi_v0_Neg" , " dEdx_vs_Momentum_Pr_v0_Neg" , " dEdx_vs_Momentum_El_v0_Neg" };
@@ -128,6 +134,12 @@ struct MultiplicityPt {
128134
129135 static constexpr std::string_view ParticleFractionsVsPtNeg[ParticlesType + 1 ] = {" hFractionVsPt_Pion_Neg" , " hFractionVsPt_Kaon_Neg" , " hFractionVsPt_Proton_Neg" , " hFractionVsPt_Electron_Neg" , " hFractionVsPt_Muon_Neg" };
130136
137+ // Fine binning
138+ static constexpr std::string_view CentpPos[CentralityClasses + 1 ] = {" p_vs_eta_Cent0_1_Pos" , " p_vs_eta_Cent1_5_Pos" , " p_vs_eta_Cent5_10_Pos" , " p_vs_eta_Cent10_15_Pos" , " p_vs_eta_Cent15_20_Pos" , " p_vs_eta_Cent20_30_Pos" , " p_vs_eta_Cent30_40_Pos" , " p_vs_eta_Cent40_50_Pos" , " p_vs_eta_Cent50_70_Pos" , " p_vs_eta_Cent70_100_Pos" , " p_vs_eta_MB_Pos" };
139+ static constexpr std::string_view CentpNeg[CentralityClasses + 1 ] = {" p_vs_eta_Cent0_1_Neg" , " p_vs_eta_Cent1_5_Neg" , " p_vs_eta_Cent5_10_Neg" , " p_vs_eta_Cent10_15_Neg" , " p_vs_eta_Cent15_20_Neg" , " p_vs_eta_Cent20_30_Neg" , " p_vs_eta_Cent30_40_Neg" , " p_vs_eta_Cent40_50_Neg" , " p_vs_eta_Cent50_70_Neg" , " p_vs_eta_Cent70_100_Neg" , " p_vs_eta_MB_Neg" };
140+ static constexpr std::string_view CentpTPos[CentralityClasses + 1 ] = {" pT_vs_eta_Cent0_1_Pos" , " pT_vs_eta_Cent1_5_Pos" , " pT_vs_eta_Cent5_10_Pos" , " pT_vs_eta_Cent10_15_Pos" , " pT_vs_eta_Cent15_20_Pos" , " pT_vs_eta_Cent20_30_Pos" , " pT_vs_eta_Cent30_40_Pos" , " pT_vs_eta_Cent40_50_Pos" , " pT_vs_eta_Cent50_70_Pos" , " pT_vs_eta_Cent70_100_Pos" , " pT_vs_eta_MB_Pos" };
141+ static constexpr std::string_view CentpTNeg[CentralityClasses + 1 ] = {" pT_vs_eta_Cent0_1_Neg" , " pT_vs_eta_Cent1_5_Neg" , " pT_vs_eta_Cent5_10_Neg" , " pT_vs_eta_Cent10_15_Neg" , " pT_vs_eta_Cent15_20_Neg" , " pT_vs_eta_Cent20_30_Neg" , " pT_vs_eta_Cent30_40_Neg" , " pT_vs_eta_Cent40_50_Neg" , " pT_vs_eta_Cent50_70_Neg" , " pT_vs_eta_Cent70_100_Neg" , " pT_vs_eta_MB_Neg" };
142+
131143 TrackSelection customTrackCuts;
132144 TF1 * fphiCutLow = nullptr ;
133145 TF1 * fphiCutHigh = nullptr ;
@@ -360,13 +372,12 @@ void MultiplicityPt::init(InitContext const&)
360372 }
361373
362374 // Axis definitions
363- ConfigurableAxis ptBinning{" ptBinning" , {VARIABLE_WIDTH , 0.1 , 0.12 , 0.14 , 0.16 , 0.18 , 0.2 , 0.25 , 0.3 , 0.35 , 0.4 , 0.45 , 0.5 , 0.55 , 0.6 , 0.65 , 0.7 , 0.75 , 0.8 , 0.85 , 0.9 , 0.95 , 1.0 , 1.1 , 1.2 , 1.3 , 1.4 , 1.5 , 1.6 , 1.7 , 1.8 , 1.9 , 2.0 , 2.1 , 2.2 , 2.3 , 2.4 , 2.5 , 2.6 , 2.7 , 2.8 , 2.9 , 3.0 , 3.2 , 3.4 , 3.6 , 3.8 , 4.0 , 4.5 , 5.0 , 5.5 , 6.0 , 6.5 , 7.0 , 8.0 , 9.0 , 10.0 , 11.0 , 12.0 , 13.0 , 14.0 , 15.0 , 16.0 , 18.0 , 20.0 }, " pT bin limits" };
364375 AxisSpec ptAxis = {ptBinning, " #it{p}_{T} (GeV/#it{c})" };
365- AxisSpec dedxAxis{ 100 , 0.0 , 100.0 , " dE/dx (a. u.)" };
376+ AxisSpec dedxAxis = {dedxBins , " dE/dx (a. u.)" };
366377 AxisSpec etaAxis{8 , -0.8 , 0.8 , " #eta" };
367378 AxisSpec pAxis = {ptBinning, " #it{p} (GeV/#it{c})" };
368-
369- std::vector< double > centBinningStd = { 0 ., 1 ., 5 ., 10 ., 15 ., 20 ., 30 ., 40 ., 50 ., 60 ., 70 ., 80 ., 90 ., 100 . };
379+ AxisSpec pFineAxis{pFineBins, " #it{p} (GeV/c) " };
380+ AxisSpec pTFineAxis{pFineBins, " #it{p}_{T} (GeV/c) " };
370381 AxisSpec centAxis = {centBinningStd, " FT0M Centrality (%)" };
371382
372383 std::vector<double > centBinningFine;
@@ -496,6 +507,13 @@ void MultiplicityPt::init(InitContext const&)
496507 {{etaAxis}, {ptAxis}, {pAxis}});
497508 }
498509
510+ for (int i = 0 ; i < CentralityClasses + 1 ; ++i) {
511+ ue.add ((" Binning/" + std::string (CentpPos[i])).c_str (), " p vs eta" , HistType::kTH2F , {{etaAxis}, {pFineAxis}});
512+ ue.add ((" Binning/" + std::string (CentpNeg[i])).c_str (), " p vs eta" , HistType::kTH2F , {{etaAxis}, {pFineAxis}});
513+ ue.add ((" Binning/" + std::string (CentpTPos[i])).c_str (), " pT vs eta" , HistType::kTH2F , {{etaAxis}, {pTFineAxis}});
514+ ue.add ((" Binning/" + std::string (CentpTNeg[i])).c_str (), " pT vs eta" , HistType::kTH2F , {{etaAxis}, {pTFineAxis}});
515+ }
516+
499517 // ===== Particle Fractions as function of p and pT =====
500518 ue.add (" ParticleFractions/hTotalCountsVsMomentumPos" , " Total counts vs momentum;#it{p} (GeV/#it{c});Counts" , HistType::kTH2D , {{etaAxis}, {pAxis}});
501519 ue.add (" ParticleFractions/hTotalCountsVsPtPos" , " Total counts vs pT;#it{p}_{T} (GeV/#it{c});Counts" , HistType::kTH2D , {{etaAxis}, {ptAxis}});
@@ -757,13 +775,116 @@ void MultiplicityPt::processMC(TrackTableMC const& tracks,
757775 float eta = track.eta ();
758776 int charge = track.sign ();
759777
778+ int centIndex = -1 ;
779+ for (int j = 0 ; j < CentralityClasses; ++j) {
780+ if (cent >= centBinningStd[j] && cent < centBinningStd[j + 1 ]) {
781+ centIndex = j;
782+ break ;
783+ }
784+ }
785+ if (centIndex == -1 )
786+ continue ;
787+
760788 // dedx for all particles
761789 if (charge > 0 ) {
762790 ue.fill (HIST (" DedxVsMomentum/dEdx_vs_Momentum_all_Pos" ), momentum, tpcSignal, eta);
763791 ue.fill (HIST (" ResponseMatrix/heta_vs_pt_vs_p_all_Pos" ), eta, track.pt (), momentum);
792+ // binning
793+ ue.fill (HIST (" Binning/p_vs_eta_MB_Pos" ), eta, momentum);
794+ ue.fill (HIST (" Binning/pT_vs_eta_MB_Pos" ), eta, track.pt ());
795+
796+ // For centrality
797+ switch (centIndex) {
798+ case 0 :
799+ ue.fill (HIST (" Binning/p_vs_eta_Cent0_1_Pos" ), eta, momentum);
800+ ue.fill (HIST (" Binning/pT_vs_eta_Cent0_1_Pos" ), eta, track.pt ());
801+ break ;
802+ case 1 :
803+ ue.fill (HIST (" Binning/p_vs_eta_Cent1_5_Pos" ), eta, momentum);
804+ ue.fill (HIST (" Binning/pT_vs_eta_Cent1_5_Pos" ), eta, track.pt ());
805+ break ;
806+ case 2 :
807+ ue.fill (HIST (" Binning/p_vs_eta_Cent5_10_Pos" ), eta, momentum);
808+ ue.fill (HIST (" Binning/pT_vs_eta_Cent5_10_Pos" ), eta, track.pt ());
809+ break ;
810+ case 3 :
811+ ue.fill (HIST (" Binning/p_vs_eta_Cent10_15_Pos" ), eta, momentum);
812+ ue.fill (HIST (" Binning/pT_vs_eta_Cent10_15_Pos" ), eta, track.pt ());
813+ break ;
814+ case 4 :
815+ ue.fill (HIST (" Binning/p_vs_eta_Cent15_20_Pos" ), eta, momentum);
816+ ue.fill (HIST (" Binning/pT_vs_eta_Cent15_20_Pos" ), eta, track.pt ());
817+ break ;
818+ case 5 :
819+ ue.fill (HIST (" Binning/p_vs_eta_Cent20_30_Pos" ), eta, momentum);
820+ ue.fill (HIST (" Binning/pT_vs_eta_Cent20_30_Pos" ), eta, track.pt ());
821+ break ;
822+ case 6 :
823+ ue.fill (HIST (" Binning/p_vs_eta_Cent30_40_Pos" ), eta, momentum);
824+ ue.fill (HIST (" Binning/pT_vs_eta_Cent30_40_Pos" ), eta, track.pt ());
825+ break ;
826+ case 7 :
827+ ue.fill (HIST (" Binning/p_vs_eta_Cent40_50_Pos" ), eta, momentum);
828+ ue.fill (HIST (" Binning/pT_vs_eta_Cent40_50_Pos" ), eta, track.pt ());
829+ break ;
830+ case 8 :
831+ ue.fill (HIST (" Binning/p_vs_eta_Cent50_70_Pos" ), eta, momentum);
832+ ue.fill (HIST (" Binning/pT_vs_eta_Cent50_70_Pos" ), eta, track.pt ());
833+ break ;
834+ case 9 :
835+ ue.fill (HIST (" Binning/p_vs_eta_Cent70_100_Pos" ), eta, momentum);
836+ ue.fill (HIST (" Binning/pT_vs_eta_Cent70_100_Pos" ), eta, track.pt ());
837+ break ;
838+ }
764839 } else {
765840 ue.fill (HIST (" DedxVsMomentum/dEdx_vs_Momentum_all_Neg" ), momentum, tpcSignal, eta);
766841 ue.fill (HIST (" ResponseMatrix/heta_vs_pt_vs_p_all_Neg" ), eta, track.pt (), momentum);
842+ // binning
843+ ue.fill (HIST (" Binning/p_vs_eta_MB_Neg" ), eta, momentum);
844+ ue.fill (HIST (" Binning/pT_vs_eta_MB_Neg" ), eta, track.pt ());
845+
846+ switch (centIndex) {
847+ case 0 :
848+ ue.fill (HIST (" Binning/p_vs_eta_Cent0_1_Neg" ), eta, momentum);
849+ ue.fill (HIST (" Binning/pT_vs_eta_Cent0_1_Neg" ), eta, track.pt ());
850+ break ;
851+ case 1 :
852+ ue.fill (HIST (" Binning/p_vs_eta_Cent1_5_Neg" ), eta, momentum);
853+ ue.fill (HIST (" Binning/pT_vs_eta_Cent1_5_Neg" ), eta, track.pt ());
854+ break ;
855+ case 2 :
856+ ue.fill (HIST (" Binning/p_vs_eta_Cent5_10_Neg" ), eta, momentum);
857+ ue.fill (HIST (" Binning/pT_vs_eta_Cent5_10_Neg" ), eta, track.pt ());
858+ break ;
859+ case 3 :
860+ ue.fill (HIST (" Binning/p_vs_eta_Cent10_15_Neg" ), eta, momentum);
861+ ue.fill (HIST (" Binning/pT_vs_eta_Cent10_15_Neg" ), eta, track.pt ());
862+ break ;
863+ case 4 :
864+ ue.fill (HIST (" Binning/p_vs_eta_Cent15_20_Neg" ), eta, momentum);
865+ ue.fill (HIST (" Binning/pT_vs_eta_Cent15_20_Neg" ), eta, track.pt ());
866+ break ;
867+ case 5 :
868+ ue.fill (HIST (" Binning/p_vs_eta_Cent20_30_Neg" ), eta, momentum);
869+ ue.fill (HIST (" Binning/pT_vs_eta_Cent20_30_Neg" ), eta, track.pt ());
870+ break ;
871+ case 6 :
872+ ue.fill (HIST (" Binning/p_vs_eta_Cent30_40_Neg" ), eta, momentum);
873+ ue.fill (HIST (" Binning/pT_vs_eta_Cent30_40_Neg" ), eta, track.pt ());
874+ break ;
875+ case 7 :
876+ ue.fill (HIST (" Binning/p_vs_eta_Cent40_50_Neg" ), eta, momentum);
877+ ue.fill (HIST (" Binning/pT_vs_eta_Cent40_50_Neg" ), eta, track.pt ());
878+ break ;
879+ case 8 :
880+ ue.fill (HIST (" Binning/p_vs_eta_Cent50_70_Neg" ), eta, momentum);
881+ ue.fill (HIST (" Binning/pT_vs_eta_Cent50_70_Neg" ), eta, track.pt ());
882+ break ;
883+ case 9 :
884+ ue.fill (HIST (" Binning/p_vs_eta_Cent70_100_Neg" ), eta, momentum);
885+ ue.fill (HIST (" Binning/pT_vs_eta_Cent70_100_Neg" ), eta, track.pt ());
886+ break ;
887+ }
767888 }
768889
769890 if (track.mcParticle ().isPhysicalPrimary ()) {
0 commit comments