@@ -49,7 +49,8 @@ using PIDTracks = soa::Join<
4949 aod::Tracks, aod::TracksExtra, aod::TrackSelectionExtension, aod::TracksDCA, aod::TrackSelection,
5050 aod::pidTOFFullPi, aod::pidTOFFullPr, aod::pidTOFFullEl, aod::pidTOFbeta, aod::pidTPCPi, aod::pidTPCPr, aod::pidTPCEl>;
5151
52- using SelectedCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, o2::aod::BarrelMults>;
52+ using SelectedCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::TPCMults, aod::PVMults, aod::MultZeqs,
53+ aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, o2::aod::BarrelMults>;
5354using BCsRun3 = soa::Join<aod::BCsWithTimestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
5455
5556static constexpr int NCentHists{10 };
@@ -78,21 +79,35 @@ struct DedxPidAnalysis {
7879
7980 bool fillHist = false ;
8081
81- enum V0SelectionMode {
82+ enum MultSelectionMode : int {
83+ NoMultiplicity = 0 ,
84+ MultFV0A = 1 ,
85+ MultFT0M = 2 ,
86+ MultFDDM = 3 ,
87+ MultTracklets = 4 ,
88+ MultTPC = 5 ,
89+ MultNTracksPV = 6 ,
90+ MultNTracksPVeta1 = 7 ,
91+ CentralityFT0C = 8 ,
92+ CentralityFT0M = 9 ,
93+ CentralityFV0A = 10
94+ };
95+
96+ enum V0SelectionMode : int {
8297 V0TPC = 1 ,
8398 V0TOF = 2 ,
8499 V0TPCTOF = 3
85100
86101 };
87102
88- enum NINELSelectionMode {
103+ enum NINELSelectionMode : int {
89104 NoSelINEL = 1 ,
90105 SelINELgt0 = 2 ,
91106 SelINELgt1 = 3
92107
93108 };
94109
95- enum MomentumMode {
110+ enum MomentumMode : int {
96111 TpcInnerParam = 1 ,
97112 TotalMomentum = 2
98113 };
@@ -185,6 +200,7 @@ struct DedxPidAnalysis {
185200 Configurable<int > v0SelectionMode{" v0SelectionMode" , 3 , " V0 Selection base on TPC: 1, TOF:2 ,Both:3" };
186201 Configurable<int > momentumMode{" momentumMode" , 2 , " 1: TPC inner param, 2: Total momentum p" };
187202 Configurable<uint8_t > v0TypeSelection{" v0TypeSelection" , 1 , " select on a certain V0 type (leave negative if no selection desired)" };
203+ Configurable<int > multiplicityEstimator{" multiplicityEstimator" , 9 , " Flag to use a multiplicity estimator; No multiplicity: 0, MultFV0A: 1, MultFT0M: 2, MultFDDM: 3 ,MultTracklets: 4,MultTPC: 5,MultNTracksPV: 6 ,MultNTracksPVeta1: 7,CentralityFT0C: 8 ,CentralityFT0M: 9, CentralityFV0A: 10" };
188204 Configurable<double > lowParam1{" lowParam1" , 0.119297 , " First parameter for low phi cut" };
189205 Configurable<double > lowParam2{" lowParam2" , 0.000379693 , " Second parameter for low phi cut" };
190206 Configurable<double > highParam1{" highParam1" , 0.16685 , " First parameter for high phi cut" };
@@ -209,6 +225,7 @@ struct DedxPidAnalysis {
209225 Configurable<std::vector<float >> calibrationFactorNeg{" calibrationFactorNeg" , {50.4011 , 50.4764 , 50.186 , 49.2955 , 48.8222 , 49.4273 , 49.9292 , 50.0556 }, " negative calibration factors" };
210226 Configurable<std::vector<float >> calibrationFactorPos{" calibrationFactorPos" , {50.5157 , 50.6359 , 50.3198 , 49.3345 , 48.9197 , 49.4931 , 50.0188 , 50.1406 }, " positive calibration factors" };
211227 ConfigurableAxis binP{" binP" , {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 }, " " };
228+ ConfigurableAxis centBins{" centBins" , {100 , 0 , 100 }, " Binning for centralidad" };
212229
213230 // phi cut fits
214231 TF1* fphiCutHigh = nullptr ;
@@ -300,6 +317,55 @@ struct DedxPidAnalysis {
300317 AxisSpec etaAxis{8 , -0.8 , 0.8 , " #eta" };
301318 AxisSpec pAxis = {binP, " #it{p}/Z (GeV/c)" };
302319 AxisSpec pAxisTrack = {binP, " #it{p} (GeV/c)" };
320+ AxisSpec centAxis{centBins, " Undefined multiplicity estimator" };
321+ switch (multiplicityEstimator) {
322+ case MultSelectionMode::NoMultiplicity: // No multiplicity
323+ LOGF (info, " No multiplicity estimator applied" );
324+ break ;
325+ case MultSelectionMode::MultFV0A: // MultFV0A
326+ centAxis.title = " MultFV0A" ;
327+ LOGF (info, " MultFV0A estimator applied" );
328+ break ;
329+ case MultSelectionMode::MultFT0M: // MultFT0M
330+ centAxis.title = " MultFT0M" ;
331+ LOGF (info, " MultFT0M estimator applied" );
332+ break ;
333+ case MultSelectionMode::MultFDDM: // MultFDDM
334+ centAxis.title = " MultFDDM" ;
335+ LOGF (info, " MultFDDM estimator applied" );
336+ break ;
337+ case MultSelectionMode::MultTracklets: // MultTracklets
338+ centAxis.title = " MultTracklets" ;
339+ LOGF (info, " MultTracklets estimator applied" );
340+ break ;
341+ case MultSelectionMode::MultTPC: // MultTPC
342+ centAxis.title = " MultTPC" ;
343+ LOGF (info, " MultTPC estimator applied" );
344+ break ;
345+ case MultSelectionMode::MultNTracksPV: // MultNTracksPV
346+ centAxis.title = " MultNTracksPV" ;
347+ LOGF (info, " MultNTracksPV estimator applied" );
348+ break ;
349+ case MultSelectionMode::MultNTracksPVeta1: // MultNTracksPVeta1
350+ centAxis.title = " MultNTracksPVeta1" ;
351+ LOGF (info, " MultNTracksPVeta1 estimator applied" );
352+ break ;
353+ case MultSelectionMode::CentralityFT0C: // Centrality FT0C
354+ centAxis.title = " Centrality FT0C" ;
355+ LOGF (info, " Centrality FT0C estimator applied" );
356+ break ;
357+ case MultSelectionMode::CentralityFT0M: // Centrality FT0M
358+ centAxis.title = " Centrality FT0M" ;
359+ LOGF (info, " Centrality FT0M estimator applied" );
360+ break ;
361+ case MultSelectionMode::CentralityFV0A: // Centrality FV0A
362+ centAxis.title = " Centrality FV0A" ;
363+ LOGF (info, " Centrality FV0A estimator applied" );
364+ break ;
365+ default :
366+ LOG (fatal) << " Unrecognized option for multiplicity " << multiplicityEstimator;
367+ }
368+
303369 fphiCutLow = new TF1 (" StandardPhiCutLow" ,
304370 Form (" %f/x/x+pi/18.0-%f" , lowParam1.value , lowParam2.value ),
305371 0 , 50 );
@@ -555,7 +621,7 @@ struct DedxPidAnalysis {
555621 registryDeDx.add (" histRecVtxZData" , " collision z position" , HistType::kTH1F , {{100 , -20.0 , +20.0 , " z_{vtx} (cm)" }});
556622
557623 // Event Counter by centrality
558- registryDeDx.add (" histCentrality" , " collision centrality " , HistType::kTH1F , {{ 100 , 0.0 , 100 , " cent " } });
624+ registryDeDx.add (" histCentrality" , " Centrality " , HistType::kTH1F , {centAxis });
559625
560626 // Event Counter
561627 registryDeDx.add (" evsel" , " events selected" , HistType::kTH1F , {{6 , 0.5 , 6.5 , " " }});
@@ -1229,7 +1295,46 @@ struct DedxPidAnalysis {
12291295
12301296 return true ;
12311297 }
1232-
1298+ // Get Multiplicity
1299+ template <typename T>
1300+ float getMultiplicity (const T& collision)
1301+ {
1302+ switch (multiplicityEstimator) {
1303+ case MultSelectionMode::NoMultiplicity: // No multiplicity
1304+ return 50 .f ; // to check if its filled
1305+ break ;
1306+ case MultSelectionMode::MultFV0A: // MultFV0M
1307+ return collision.multZeqFV0A ();
1308+ break ;
1309+ case MultSelectionMode::MultFT0M:
1310+ return collision.multZeqFT0A () + collision.multZeqFT0C ();
1311+ break ;
1312+ case MultSelectionMode::MultFDDM: // MultFDDM
1313+ return collision.multZeqFDDA () + collision.multZeqFDDC ();
1314+ break ;
1315+ case MultSelectionMode::MultTracklets: // MultTracklets
1316+ return 0 .f ; // Undefined in Run3
1317+ break ;
1318+ case MultSelectionMode::MultTPC: // MultTPC
1319+ return collision.multTPC ();
1320+ break ;
1321+ case MultSelectionMode::MultNTracksPV: // MultNTracksPV
1322+ return collision.multZeqNTracksPV ();
1323+ break ;
1324+ case MultSelectionMode::MultNTracksPVeta1: // MultNTracksPVeta1
1325+ return collision.multNTracksPVeta1 ();
1326+ break ;
1327+ case MultSelectionMode::CentralityFT0C: // Centrality FT0C
1328+ return collision.centFT0C ();
1329+ break ;
1330+ case MultSelectionMode::CentralityFT0M: // Centrality FT0M
1331+ return collision.centFT0M ();
1332+ break ;
1333+ default :
1334+ LOG (fatal) << " Unknown multiplicity estimator: " << multiplicityEstimator;
1335+ return 0 .f ;
1336+ }
1337+ }
12331338 // Process Data
12341339 void process (SelectedCollisions::iterator const & collision, BCsRun3 const & /* */ ,
12351340 aod::V0Datas const & fullV0s, PIDTracks const & tracks)
@@ -1277,7 +1382,7 @@ struct DedxPidAnalysis {
12771382 const uint64_t timeStamp{foundBC.timestamp ()};
12781383 const int magField{getMagneticField (timeStamp)};
12791384
1280- float centrality = collision. centFT0C ( );
1385+ float centrality = getMultiplicity (collision );
12811386 if (centrality < CentClasses[0 ] || centrality > CentClasses[10 ])
12821387 return ;
12831388
0 commit comments