@@ -316,9 +316,9 @@ struct FilterCF {
316316 // / event selections
317317 // / \param tracks The collection of tracks, filtered by selection criteria
318318 // / \param bcs The collection of bunch crossings with timestamps
319- template <typename T1>
319+ template <typename C1, typename T1>
320320 void processMCT (aod::McCollisions const & mcCollisions, aod::McParticles const & allParticles,
321- soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities> const & allCollisions,
321+ C1 const & allCollisions,
322322 T1 const & tracks,
323323 aod::BCsWithTimestamps const &)
324324 {
@@ -403,10 +403,24 @@ struct FilterCF {
403403 continue ;
404404 }
405405
406- auto bc = collision.bc_as <aod::BCsWithTimestamps>();
406+ auto bc = collision.template bc_as <aod::BCsWithTimestamps>();
407407 // NOTE works only when we store all MC collisions (as we do here)
408408 outputCollisions (bc.runNumber (), collision.posZ (), collision.multiplicity (), bc.timestamp ());
409409 outputMcCollisionLabels (collision.mcCollisionId ());
410+
411+ if constexpr (std::experimental::is_detected<HasMultTables, C1>::value) {
412+ multiplicities.clear ();
413+ if (cfgEstimatorBitMask & aod::cfmultset::CentFT0C)
414+ multiplicities.push_back (collision.centFT0C ());
415+ if (cfgEstimatorBitMask & aod::cfmultset::MultFV0A)
416+ multiplicities.push_back (collision.multFV0A ());
417+ if (cfgEstimatorBitMask & aod::cfmultset::MultNTracksPV)
418+ multiplicities.push_back (collision.multNTracksPV ());
419+ if (cfgEstimatorBitMask & aod::cfmultset::MultNTracksGlobal)
420+ multiplicities.push_back (collision.multNTracksGlobal ());
421+ outputMultSets (multiplicities);
422+ }
423+
410424 if (cfgTransientTables)
411425 outputCollRefs (collision.globalIndex ());
412426
@@ -451,6 +465,16 @@ struct FilterCF {
451465 }
452466 PROCESS_SWITCH (FilterCF, processMCPid, " Process MC with PID" , false );
453467
468+ void processMCMults (aod::McCollisions const & mcCollisions, aod::McParticles const & allParticles,
469+ soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities, aod::CentFT0Cs, aod::PVMults, aod::FV0Mults, aod::MultsGlobal> const & allCollisions,
470+ soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels, aod::TrackSelection>> const & tracks,
471+ aod::BCsWithTimestamps const & bcs)
472+ {
473+ processMCT (mcCollisions, allParticles, allCollisions, tracks, bcs);
474+ }
475+
476+ PROCESS_SWITCH (FilterCF, processMCMults, " Process MC with multiplicity sets" , false );
477+
454478 void processMCGen (aod::McCollisions::iterator const & mcCollision, aod::McParticles const & particles)
455479 {
456480 float multiplicity = 0 .0f ;
0 commit comments