Skip to content

Commit c6fec91

Browse files
authored
[PWGCF] Add CFMultiplicitySet to support multiple auxilary multiplicities/centralities (#12425)
1 parent 42e3d72 commit c6fec91

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

PWGCF/DataModel/CorrelationsDerived.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ using CFTrackWithLabel = CFTracksWithLabel::iterator;
8686
//------transient CF-filter to CF-2prong-filter
8787
DECLARE_SOA_TABLE(CFCollRefs, "AOD", "CFCOLLREF", o2::soa::Index<>, track::CollisionId); //! Transient cf collision index table
8888

89+
//------multiplicity set
90+
namespace cfmultiplicityset
91+
{
92+
DECLARE_SOA_COLUMN(Multiplicities, multiplicities, std::vector<float>); //! List of auxiliary multiplicities
93+
}
94+
DECLARE_SOA_TABLE(CFMultiplicitySets, "AOD", "CFMULTIPLICITYSET", cfmultiplicityset::Multiplicities); //! Auxilary multiplicity set table
95+
96+
using CFMultiplicitySet = CFMultiplicitySets::iterator;
97+
8998
// Reco
9099

91100
using CFCollRef = CFCollRefs::iterator;

PWGCF/TableProducer/filterCorrelations.cxx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ struct FilterCF {
6464
kPIDProton = BIT(1)
6565
};
6666

67+
enum MultiplicityEstimators : uint8_t {
68+
kCentFT0C = BIT(0),
69+
kMultFV0A = BIT(1),
70+
kMultNTracksPV = BIT(2),
71+
kMultNTracksGlobal = BIT(3),
72+
};
73+
6774
// Configuration
6875
O2_DEFINE_CONFIGURABLE(cfgCutVertex, float, 7.0f, "Accepted z-vertex range")
6976
O2_DEFINE_CONFIGURABLE(cfgCutPt, float, 0.5f, "Minimal pT for tracks")
@@ -90,6 +97,7 @@ struct FilterCF {
9097
O2_DEFINE_CONFIGURABLE(tpcnclusters, int, 50, "minimum number of TPC clusters found")
9198
O2_DEFINE_CONFIGURABLE(chi2pertpccluster, float, 2.5, "maximum Chi2 / cluster for the TPC track segment")
9299
O2_DEFINE_CONFIGURABLE(chi2peritscluster, float, 36, "maximum Chi2 / cluster for the ITS track segment")
100+
O2_DEFINE_CONFIGURABLE(cfgEstimatorBitMask, uint16_t, 0, "BitMask for multiplicity estimators to be included in the CFMultiplicitySet tables.");
93101

94102
// Filters and input definitions
95103
Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgCutVertex;
@@ -117,6 +125,9 @@ struct FilterCF {
117125
Produces<aod::CFTrackRefs> outputTrackRefs;
118126
Produces<aod::CFMcParticleRefs> outputMcParticleRefs;
119127

128+
Produces<aod::CFMultiplicitySets> outputMultSets;
129+
std::vector<float> multiplicities{};
130+
120131
// persistent caches
121132
std::vector<bool> mcReconstructedCache;
122133
std::vector<int> mcParticleLabelsCache;
@@ -238,6 +249,9 @@ struct FilterCF {
238249
return 0;
239250
}
240251

252+
template <class T>
253+
using HasMultTables = decltype(std::declval<T&>().multNTracksPV());
254+
241255
/// \brief Templetized process data for a given collision and its associated tracks
242256
/// \param collision The collision object containing information about the collision
243257
/// \param tracks The collection of tracks associated with the collision
@@ -255,6 +269,19 @@ struct FilterCF {
255269
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
256270
outputCollisions(bc.runNumber(), collision.posZ(), collision.multiplicity(), bc.timestamp());
257271

272+
if constexpr (std::experimental::is_detected<HasMultTables, typename T1::iterator>::value) {
273+
multiplicities.clear();
274+
if (cfgEstimatorBitMask & kCentFT0C)
275+
multiplicities.push_back(collision.centFT0C());
276+
if (cfgEstimatorBitMask & kMultFV0A)
277+
multiplicities.push_back(collision.multFV0A());
278+
if (cfgEstimatorBitMask & kMultNTracksPV)
279+
multiplicities.push_back(collision.multNTracksPV());
280+
if (cfgEstimatorBitMask & kMultNTracksGlobal)
281+
multiplicities.push_back(collision.multNTracksGlobal());
282+
outputMultSets(multiplicities);
283+
}
284+
258285
if (cfgTransientTables)
259286
outputCollRefs(collision.globalIndex());
260287
for (auto& track : tracks) {
@@ -283,6 +310,12 @@ struct FilterCF {
283310
}
284311
PROCESS_SWITCH(FilterCF, processDataPid, "Process data with PID", false);
285312

313+
void processDataMults(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CFMultiplicities, aod::CentFT0Cs, aod::PVMults, aod::FV0Mults, aod::MultsGlobal>>::iterator const& collision, aod::BCsWithTimestamps const&, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA>> const& tracks)
314+
{
315+
processDataT(collision, tracks);
316+
}
317+
PROCESS_SWITCH(FilterCF, processDataMults, "Process data with multiplicity sets", false);
318+
286319
/// \brief Process MC data for a given set of MC collisions and associated particles and tracks
287320
/// \param mcCollisions The collection of MC collisions
288321
/// \param allParticles The collection of all MC particles

0 commit comments

Comments
 (0)