Skip to content

Commit 476f7dc

Browse files
EloviyoShirajum Monira
andauthored
added process function to output both truth and reco at one go (#7021)
Co-authored-by: Shirajum Monira <shirajum.monira@cernch>
1 parent f14a287 commit 476f7dc

1 file changed

Lines changed: 39 additions & 3 deletions

File tree

PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,10 +312,10 @@ struct femtoUniverseProducerTask {
312312

313313
void init(InitContext&)
314314
{
315-
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data || doprocessTrackV0CentRun3) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth) == false) {
315+
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data || doprocessTrackV0CentRun3) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTruthAndFullMC) == false) {
316316
LOGF(fatal, "Neither processFullData nor processFullMC enabled. Please choose one.");
317317
}
318-
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data || doprocessTrackV0CentRun3) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth) == true) {
318+
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data || doprocessTrackV0CentRun3) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTruthAndFullMC) == true) {
319319
LOGF(fatal,
320320
"Cannot enable process Data and process MC at the same time. "
321321
"Please choose one.");
@@ -999,7 +999,7 @@ struct femtoUniverseProducerTask {
999999
}
10001000
}
10011001

1002-
template <typename TrackType>
1002+
template <typename TrackType, bool transientLabels = false>
10031003
void fillParticles(TrackType const& tracks)
10041004
{
10051005
std::vector<int> childIDs = {0, 0}; // these IDs are necessary to keep track of the children
@@ -1058,6 +1058,12 @@ struct femtoUniverseProducerTask {
10581058
if (ConfIsDebug) {
10591059
fillDebugParticle<false, true>(particle);
10601060
}
1061+
1062+
// Workaround to keep the FDParticles and MC label tables
1063+
// aligned, so that they can be joined in the task.
1064+
if constexpr (transientLabels) {
1065+
outputPartsMCLabels(-1);
1066+
}
10611067
}
10621068
}
10631069

@@ -1211,6 +1217,36 @@ struct femtoUniverseProducerTask {
12111217
}
12121218
PROCESS_SWITCH(femtoUniverseProducerTask, processTrackMCTruth, "Provide MC data for MC truth track analysis", false);
12131219

1220+
Preslice<aod::McParticles> perMCCollision = aod::mcparticle::mcCollisionId;
1221+
PresliceUnsorted<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::McCollisionLabels>> recoCollsPerMCColl = aod::mcparticle::mcCollisionId;
1222+
Preslice<soa::Join<aod::FemtoFullTracks, aod::McTrackLabels>> perCollisionTracks = aod::track::collisionId;
1223+
Preslice<soa::Join<o2::aod::V0Datas, aod::McV0Labels>> perCollisionV0s = aod::track::collisionId;
1224+
void processTruthAndFullMC(
1225+
aod::McCollisions const& mccols,
1226+
aod::McParticles const& mcParticles,
1227+
soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::McCollisionLabels> const& collisions,
1228+
soa::Join<aod::FemtoFullTracks, aod::McTrackLabels> const& tracks,
1229+
soa::Join<o2::aod::V0Datas, aod::McV0Labels> const& fullV0s,
1230+
aod::BCsWithTimestamps const&)
1231+
{
1232+
// truth
1233+
for (auto& mccol : mccols) {
1234+
auto groupedMCParticles = mcParticles.sliceBy(perMCCollision, mccol.globalIndex());
1235+
auto groupedCollisions = collisions.sliceBy(recoCollsPerMCColl, mccol.globalIndex());
1236+
fillMCTruthCollisions(groupedCollisions, groupedMCParticles); // fills the reco collisions for mc collision
1237+
fillParticles<decltype(groupedMCParticles), true>(groupedMCParticles); // fills mc particles
1238+
}
1239+
1240+
// recos
1241+
for (auto& col : collisions) {
1242+
auto groupedTracks = tracks.sliceBy(perCollisionTracks, col.globalIndex());
1243+
auto groupedV0s = fullV0s.sliceBy(perCollisionV0s, col.globalIndex());
1244+
getMagneticFieldTesla(col.bc_as<aod::BCsWithTimestamps>());
1245+
fillCollisionsAndTracksAndV0AndPhi<true>(col, groupedTracks, groupedV0s);
1246+
}
1247+
}
1248+
PROCESS_SWITCH(femtoUniverseProducerTask, processTruthAndFullMC, "Provide both MC truth and reco for tracks and V0s", false);
1249+
12141250
void processTrackCentRun2Data(aod::FemtoFullCollisionCentRun2 const& col,
12151251
aod::BCsWithTimestamps const&,
12161252
aod::FemtoFullTracks const& tracks)

0 commit comments

Comments
 (0)