@@ -76,6 +76,7 @@ struct PidFlowPtCorr {
7676 Configurable<float > cfgCutVertex{" cfgCutVertex" , 10 .0f , " Accepted z-vertex range" };
7777 Configurable<float > cfgCutChi2prTPCcls{" cfgCutChi2prTPCcls" , 2.5 , " Chi2 per TPC clusters" };
7878 Configurable<int > cfgDeltaPhiLocDen{" cfgDeltaPhiLocDen" , 3 , " Number of delta phi for local density, 200 bins in 2 pi" };
79+ Configurable<int > cfgCentEstimator{" cfgCentEstimator" , 0 , " 0:FT0C; 1:FT0CVariant1; 2:FT0M; 3:FV0A; 4:NTPV; 5:NGlobal; 6:MFT" };
7980
8081 struct : ConfigurableGroup {
8182 std::string prefix = " trkQualityOpts" ;
@@ -233,7 +234,7 @@ struct PidFlowPtCorr {
233234 // data tracks filter
234235 using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, o2::aod::TrackSelectionExtension, aod::TracksExtra, TracksPID, aod::TracksIU, aod::TracksDCA>>;
235236 // data collisions filter
236- using AodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::MultsRun3>>;
237+ using AodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::CentNTPVs, aod::CentNGlobals, aod::CentMFTs, aod:: MultsRun3>>;
237238
238239 // MC
239240 Filter mccollisionFilter = nabs(aod::mccollision::posZ) < cfgCutVertex;
@@ -286,6 +287,18 @@ struct PidFlowPtCorr {
286287 kNumberOfParticles
287288 };
288289
290+ enum CentEstimators {
291+ kCentFT0C = 0 ,
292+ kCentFT0CVariant1 ,
293+ kCentFT0M ,
294+ kCentFV0A ,
295+ kCentNTPV ,
296+ kCentNGlobal ,
297+ kCentMFT ,
298+ // Count the total number of enum
299+ kCount_CentEstimators
300+ };
301+
289302 enum OutputTH1Names {
290303 // here are TProfiles for vn-pt correlations that are not implemented in GFW
291304 hPhi = 0 ,
@@ -378,7 +391,8 @@ struct PidFlowPtCorr {
378391 registry.add (" hVtxZ" , " " , {HistType::kTH1D , {cfgaxisVertex}});
379392 registry.add (" hMult" , " " , {HistType::kTH1D , {cfgaxisNch}});
380393 registry.add (" hMultTPC" , " " , {HistType::kTH1D , {cfgaxisNch}});
381- registry.add (" hCent" , " " , {HistType::kTH1D , {{90 , 0 , 90 }}});
394+ std::string hCentTitle = " Centrality distribution, Estimator " + std::to_string (cfgCentEstimator);
395+ registry.add (" hCent" , hCentTitle.c_str (), {HistType::kTH1D , {{90 , 0 , 90 }}});
382396 registry.add (" hPt" , " " , {HistType::kTH1D , {cfgaxisPt}});
383397 registry.add (" hPtCorr" , " " , {HistType::kTH1D , {cfgaxisPt}});
384398 registry.add (" hPtPi" , " " , {HistType::kTH1D , {cfgaxisPt}});
@@ -1725,6 +1739,44 @@ struct PidFlowPtCorr {
17251739 }
17261740 }
17271741
1742+ /* *
1743+ * @brief get centrality from the configured estimator
1744+ * @note mirrors flowTask.cxx's getCentrality(), allowing this task to
1745+ * switch between different Run 3 centrality estimators via
1746+ * cfgCentEstimator instead of always using FT0C.
1747+ */
1748+ template <typename TCollision>
1749+ float getCentrality (TCollision const & collision)
1750+ {
1751+ float cent;
1752+ switch (cfgCentEstimator) {
1753+ case kCentFT0C :
1754+ cent = collision.centFT0C ();
1755+ break ;
1756+ case kCentFT0CVariant1 :
1757+ cent = collision.centFT0CVariant1 ();
1758+ break ;
1759+ case kCentFT0M :
1760+ cent = collision.centFT0M ();
1761+ break ;
1762+ case kCentFV0A :
1763+ cent = collision.centFV0A ();
1764+ break ;
1765+ case kCentNTPV :
1766+ cent = collision.centNTPV ();
1767+ break ;
1768+ case kCentNGlobal :
1769+ cent = collision.centNGlobal ();
1770+ break ;
1771+ case kCentMFT :
1772+ cent = collision.centMFT ();
1773+ break ;
1774+ default :
1775+ cent = collision.centFT0C ();
1776+ }
1777+ return cent;
1778+ }
1779+
17281780 /* *
17291781 * @brief collision selection
17301782 * @note include: 1. TRD triggered
@@ -1867,7 +1919,7 @@ struct PidFlowPtCorr {
18671919 return ;
18681920 }
18691921 fGFW ->Clear ();
1870- const auto cent = collision. centFT0C ( );
1922+ const auto cent = getCentrality (collision );
18711923 if (!collision.sel8 ()) {
18721924 return ;
18731925 }
@@ -2419,7 +2471,7 @@ struct PidFlowPtCorr {
24192471 return ;
24202472 }
24212473 fGFW ->Clear ();
2422- const auto cent = collision. centFT0C ( );
2474+ const auto cent = getCentrality (collision );
24232475 if (!collision.sel8 ()) {
24242476 return ;
24252477 }
@@ -2508,7 +2560,7 @@ struct PidFlowPtCorr {
25082560 return ;
25092561 }
25102562
2511- const auto cent = collision. centFT0C ( );
2563+ const auto cent = getCentrality (collision );
25122564 if (!collision.sel8 ()) {
25132565 return ;
25142566 }
@@ -2595,7 +2647,7 @@ struct PidFlowPtCorr {
25952647 return ;
25962648 }
25972649 fGFW ->Clear ();
2598- const auto cent = collision. centFT0C ( );
2650+ const auto cent = getCentrality (collision );
25992651 if (!collision.sel8 ()) {
26002652 return ;
26012653 }
@@ -2676,7 +2728,7 @@ struct PidFlowPtCorr {
26762728 }
26772729 registry.fill (HIST (" hEventCount/processReco" ), 1.5 );
26782730
2679- const auto cent = collision. centFT0C ( );
2731+ const auto cent = getCentrality (collision );
26802732 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
26812733 int runNumber = bc.runNumber ();
26822734 double interactionRate = rateFetcher.fetch (ccdb.service , bc.timestamp (), runNumber, " ZNC hadronic" ) * 1 .e -3 ;
@@ -2702,7 +2754,7 @@ struct PidFlowPtCorr {
27022754 if (track.has_mcParticle ()) {
27032755 auto mcParticle = track.mcParticle ();
27042756 // fill graph
2705- if (particleSelected (mcParticle)) {
2757+ if (particleSelected (mcParticle) && mcParticle. isPhysicalPrimary () ) {
27062758 // / @note global track, fill rec hist
27072759 if (track.hasITS () && track.hasTPC () && trackSelected4ITS (track) && trackSelected4TPC (track)) {
27082760 // graph for all particles
@@ -2759,7 +2811,7 @@ struct PidFlowPtCorr {
27592811 auto bc = oneColl.bc_as <aod::BCsWithTimestamps>();
27602812 int runNumber = bc.runNumber ();
27612813 double interactionRate = rateFetcher.fetch (ccdb.service , bc.timestamp (), runNumber, " ZNC hadronic" ) * 1 .e -3 ;
2762- double cent = oneColl. centFT0C ( );
2814+ double cent = getCentrality (oneColl );
27632815
27642816 auto groupedTracks = tracks.sliceBy (perCollision, oneColl.globalIndex ());
27652817 if (groupedTracks.size () <= 0 ) {
0 commit comments