Skip to content

Commit 7773874

Browse files
committed
Multiplicity set output from FilterCF
1 parent 5d78278 commit 7773874

2 files changed

Lines changed: 35 additions & 36 deletions

File tree

PWGCF/DataModel/CorrelationsDerived.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ namespace cfmultiplicityset
9191
{
9292
DECLARE_SOA_COLUMN(Multiplicities, multiplicities, std::vector<float>); //! List of auxiliary multiplicities
9393
}
94-
DECLARE_SOA_TABLE(CFMultiplicitySets, "AOD", "CFMULTSET", cfmultiplicityset::Multiplicities); //! Auxilary multiplicity set table
94+
DECLARE_SOA_TABLE(CFMultiplicitySets, "AOD", "CFMULTIPLICITYSET", cfmultiplicityset::Multiplicities); //! Auxilary multiplicity set table
9595

9696
using CFMultiplicitySet = CFMultiplicitySets::iterator;
9797

PWGCF/TableProducer/filterCorrelations.cxx

Lines changed: 34 additions & 35 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
@@ -548,43 +581,9 @@ struct MultiplicitySelector {
548581
PROCESS_SWITCH(MultiplicitySelector, processMCGen, "Select MC particle count as multiplicity", false);
549582
};
550583

551-
struct MultiplicitySetBuilder {
552-
Produces<aod::CFMultiplicitySets> output;
553-
std::vector<float> multiplicities{};
554-
555-
enum MultiplicityEstimators : uint8_t {
556-
kCentFT0C = BIT(0),
557-
kMultFV0A = BIT(1),
558-
kMultNTracksPV = BIT(2),
559-
kMultNTracksGlobal = BIT(3),
560-
};
561-
562-
O2_DEFINE_CONFIGURABLE(cfgEstimatorBitMask, uint16_t, 0, "BitMask for multiplicity estimators to be included in the CFMultiplicitySet tables.");
563-
564-
using CollisionWithCents = soa::Join<aod::Collisions, aod::CentFT0Cs, aod::PVMults, aod::FV0Mults, aod::MultsGlobal>;
565-
void processEstimators([[maybe_unused]] CollisionWithCents const& cents, aod::CFCollRefs const& cfcollisions)
566-
{
567-
for (const auto& cfcollision : cfcollisions) {
568-
const auto& collision = cfcollision.collision_as<CollisionWithCents>();
569-
multiplicities.clear();
570-
if (cfgEstimatorBitMask & kCentFT0C)
571-
multiplicities.push_back(collision.centFT0C());
572-
if (cfgEstimatorBitMask & kMultFV0A)
573-
multiplicities.push_back(collision.multFV0A());
574-
if (cfgEstimatorBitMask & kMultNTracksPV)
575-
multiplicities.push_back(collision.multNTracksPV());
576-
if (cfgEstimatorBitMask & kMultNTracksGlobal)
577-
multiplicities.push_back(collision.multNTracksGlobal());
578-
output(multiplicities);
579-
}
580-
}
581-
PROCESS_SWITCH(MultiplicitySetBuilder, processEstimators, "Process auxiliary multiplicity/centrality estimators", false);
582-
};
583-
584584
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
585585
{
586586
return WorkflowSpec{
587587
adaptAnalysisTask<FilterCF>(cfgc),
588-
adaptAnalysisTask<MultiplicitySelector>(cfgc),
589-
adaptAnalysisTask<MultiplicitySetBuilder>(cfgc)};
588+
adaptAnalysisTask<MultiplicitySelector>(cfgc)};
590589
}

0 commit comments

Comments
 (0)