Skip to content

Commit 7cd7527

Browse files
committed
add centrality estimator
1 parent 446ad1a commit 7cd7527

1 file changed

Lines changed: 61 additions & 9 deletions

File tree

PWGCF/Flow/Tasks/pidFlowPtCorr.cxx

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)