diff --git a/PWGCF/TableProducer/filterCorrelations.cxx b/PWGCF/TableProducer/filterCorrelations.cxx index 70a009346c4..0c44d086a3f 100644 --- a/PWGCF/TableProducer/filterCorrelations.cxx +++ b/PWGCF/TableProducer/filterCorrelations.cxx @@ -316,9 +316,9 @@ struct FilterCF { /// event selections /// \param tracks The collection of tracks, filtered by selection criteria /// \param bcs The collection of bunch crossings with timestamps - template + template void processMCT(aod::McCollisions const& mcCollisions, aod::McParticles const& allParticles, - soa::Join const& allCollisions, + C1 const& allCollisions, T1 const& tracks, aod::BCsWithTimestamps const&) { @@ -403,10 +403,24 @@ struct FilterCF { continue; } - auto bc = collision.bc_as(); + auto bc = collision.template bc_as(); // NOTE works only when we store all MC collisions (as we do here) outputCollisions(bc.runNumber(), collision.posZ(), collision.multiplicity(), bc.timestamp()); outputMcCollisionLabels(collision.mcCollisionId()); + + if constexpr (std::experimental::is_detected::value) { + multiplicities.clear(); + if (cfgEstimatorBitMask & aod::cfmultset::CentFT0C) + multiplicities.push_back(collision.centFT0C()); + if (cfgEstimatorBitMask & aod::cfmultset::MultFV0A) + multiplicities.push_back(collision.multFV0A()); + if (cfgEstimatorBitMask & aod::cfmultset::MultNTracksPV) + multiplicities.push_back(collision.multNTracksPV()); + if (cfgEstimatorBitMask & aod::cfmultset::MultNTracksGlobal) + multiplicities.push_back(collision.multNTracksGlobal()); + outputMultSets(multiplicities); + } + if (cfgTransientTables) outputCollRefs(collision.globalIndex()); @@ -451,6 +465,16 @@ struct FilterCF { } PROCESS_SWITCH(FilterCF, processMCPid, "Process MC with PID", false); + void processMCMults(aod::McCollisions const& mcCollisions, aod::McParticles const& allParticles, + soa::Join const& allCollisions, + soa::Filtered> const& tracks, + aod::BCsWithTimestamps const& bcs) + { + processMCT(mcCollisions, allParticles, allCollisions, tracks, bcs); + } + + PROCESS_SWITCH(FilterCF, processMCMults, "Process MC with multiplicity sets", false); + void processMCGen(aod::McCollisions::iterator const& mcCollision, aod::McParticles const& particles) { float multiplicity = 0.0f;