Skip to content

Commit a8630e5

Browse files
authored
[PWGCF] filterCorrelations: optional HepMC table subscription for MC (#18479)
1 parent a4323d8 commit a8630e5

1 file changed

Lines changed: 53 additions & 6 deletions

File tree

‎PWGCF/TableProducer/filterCorrelations.cxx‎

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,9 @@ struct FilterCF {
437437
template <class T>
438438
using HasMultTables = decltype(std::declval<T&>().multNTracksPV());
439439

440+
template <class T>
441+
using HasNMPI = decltype(std::declval<T&>().nMPI());
442+
440443
/// \brief Templetized process data for a given collision and its associated tracks
441444
/// \param collision The collision object containing information about the collision
442445
/// \param tracks The collection of tracks associated with the collision
@@ -634,7 +637,9 @@ struct FilterCF {
634637
}
635638
}
636639
outputMcCollisions(mcCollision.posZ(), multiplicity);
637-
outputMcCollisionExtras(mcCollision.nMPI());
640+
if constexpr (std::experimental::is_detected<HasNMPI, typename MCs::iterator>::value) {
641+
outputMcCollisionExtras(mcCollision.nMPI());
642+
}
638643
}
639644

640645
// PASS 2 on collisions: store collisions and tracks
@@ -707,7 +712,7 @@ struct FilterCF {
707712
Preslice<aod::McParticles> perMcCollision = aod::mcparticle::mcCollisionId;
708713
Preslice<aod::Tracks> perCollision = aod::track::collisionId;
709714
using McCollisionsWithHepMC = soa::Join<aod::McCollisions, aod::HepMCXSections>;
710-
void processMC(McCollisionsWithHepMC const& mcCollisions, aod::McParticles const& allParticles,
715+
void processMC(aod::McCollisions const& mcCollisions, aod::McParticles const& allParticles,
711716
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities> const& allCollisions,
712717
soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>> const& tracks,
713718
aod::BCsWithTimestamps const& bcs)
@@ -716,8 +721,17 @@ struct FilterCF {
716721
}
717722
PROCESS_SWITCH(FilterCF, processMC, "Process MC", false);
718723

724+
void processMCWithHepMC(McCollisionsWithHepMC const& mcCollisions, aod::McParticles const& allParticles,
725+
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities> const& allCollisions,
726+
soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>> const& tracks,
727+
aod::BCsWithTimestamps const& bcs)
728+
{
729+
processMCT(mcCollisions, allParticles, allCollisions, tracks, bcs);
730+
}
731+
PROCESS_SWITCH(FilterCF, processMCWithHepMC, "Process MC with HepMC cross-section (nMPI)", false);
732+
719733
// NOTE not filtering collisions here because in that case there can be tracks referring to MC particles which are not part of the selected MC collisions
720-
void processMCPid(McCollisionsWithHepMC const& mcCollisions, aod::McParticles const& allParticles,
734+
void processMCPid(aod::McCollisions const& mcCollisions, aod::McParticles const& allParticles,
721735
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities> const& allCollisions,
722736
soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels, aod::TrackSelection, aod::pidTPCPr, aod::pidTOFPr, aod::TracksDCA>> const& tracks,
723737
aod::BCsWithTimestamps const& bcs)
@@ -726,7 +740,16 @@ struct FilterCF {
726740
}
727741
PROCESS_SWITCH(FilterCF, processMCPid, "Process MC with PID", false);
728742

729-
void processMCMults(McCollisionsWithHepMC const& mcCollisions, aod::McParticles const& allParticles,
743+
void processMCPidWithHepMC(McCollisionsWithHepMC const& mcCollisions, aod::McParticles const& allParticles,
744+
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities> const& allCollisions,
745+
soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels, aod::TrackSelection, aod::pidTPCPr, aod::pidTOFPr, aod::TracksDCA>> const& tracks,
746+
aod::BCsWithTimestamps const& bcs)
747+
{
748+
processMCT(mcCollisions, allParticles, allCollisions, tracks, bcs);
749+
}
750+
PROCESS_SWITCH(FilterCF, processMCPidWithHepMC, "Process MC with PID and HepMC cross-section (nMPI)", false);
751+
752+
void processMCMults(aod::McCollisions const& mcCollisions, aod::McParticles const& allParticles,
730753
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities, aod::CentFT0Cs, aod::PVMults, aod::FV0Mults, aod::MultsGlobal> const& allCollisions,
731754
soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>> const& tracks,
732755
aod::BCsWithTimestamps const& bcs)
@@ -736,7 +759,18 @@ struct FilterCF {
736759

737760
PROCESS_SWITCH(FilterCF, processMCMults, "Process MC with multiplicity sets", false);
738761

739-
void processMCGen(McCollisionsWithHepMC::iterator const& mcCollision, aod::McParticles const& particles)
762+
void processMCMultsWithHepMC(McCollisionsWithHepMC const& mcCollisions, aod::McParticles const& allParticles,
763+
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities, aod::CentFT0Cs, aod::PVMults, aod::FV0Mults, aod::MultsGlobal> const& allCollisions,
764+
soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>> const& tracks,
765+
aod::BCsWithTimestamps const& bcs)
766+
{
767+
processMCT(mcCollisions, allParticles, allCollisions, tracks, bcs);
768+
}
769+
PROCESS_SWITCH(FilterCF, processMCMultsWithHepMC, "Process MC with multiplicity sets and HepMC cross-section (nMPI)", false);
770+
771+
/// \brief Templated MCGen processing; stores nMPI only when the MC collision carries the HepMC cross-section table
772+
template <typename TMC>
773+
void processMCGenT(const TMC& mcCollision, aod::McParticles const& particles)
740774
{
741775
float multiplicity = 0.0f;
742776
for (const auto& particle : particles) {
@@ -756,9 +790,22 @@ struct FilterCF {
756790
sign, particle.pdgCode(), particle.flags());
757791
}
758792
outputMcCollisions(mcCollision.posZ(), multiplicity);
759-
outputMcCollisionExtras(mcCollision.nMPI());
793+
if constexpr (std::experimental::is_detected<HasNMPI, TMC>::value) {
794+
outputMcCollisionExtras(mcCollision.nMPI());
795+
}
796+
}
797+
798+
void processMCGen(aod::McCollisions::iterator const& mcCollision, aod::McParticles const& particles)
799+
{
800+
processMCGenT(mcCollision, particles);
760801
}
761802
PROCESS_SWITCH(FilterCF, processMCGen, "Process MCGen", false);
803+
804+
void processMCGenWithHepMC(McCollisionsWithHepMC::iterator const& mcCollision, aod::McParticles const& particles)
805+
{
806+
processMCGenT(mcCollision, particles);
807+
}
808+
PROCESS_SWITCH(FilterCF, processMCGenWithHepMC, "Process MCGen with HepMC cross-section (nMPI)", false);
762809
};
763810

764811
struct MultiplicitySelector {

0 commit comments

Comments
 (0)