Skip to content

Commit 987576d

Browse files
prchakraalibuild
andauthored
[PWGCF] FemtoUniverse: Adding MC truth and reco info for PbPb (#10020)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 5925497 commit 987576d

File tree

2 files changed

+117
-24
lines changed

2 files changed

+117
-24
lines changed

PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ using FemtoFullCollisionCentRun2 =
7575
using FemtoFullCollisionCentRun3 =
7676
soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults>::iterator;
7777
using FemtoFullCollisionMC = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::McCollisionLabels>::iterator;
78+
using FemtoFullCollisionCentRun3MCs =
79+
soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults, aod::McCollisionLabels>;
7880
using FemtoFullCollisionCentRun3MC =
7981
soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults, aod::McCollisionLabels>::iterator;
8082
using FemtoFullTracks =
@@ -467,10 +469,10 @@ struct FemtoUniverseProducerTask {
467469

468470
void init(InitContext&)
469471
{
470-
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC) == false) {
472+
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC || doprocessTruthAndFullMCCentRun3) == false) {
471473
LOGF(fatal, "Neither processFullData nor processFullMC enabled. Please choose one.");
472474
}
473-
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC) == true) {
475+
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC || doprocessTruthAndFullMCCentRun3) == true) {
474476
LOGF(fatal,
475477
"Cannot enable process Data and process MC at the same time. "
476478
"Please choose one.");
@@ -925,6 +927,19 @@ struct FemtoUniverseProducerTask {
925927
}
926928
}
927929

930+
template <typename CollisionType>
931+
bool fillMCTruthCollisionsCentRun3(CollisionType const& col)
932+
{
933+
const auto vtxZ = col.posZ();
934+
935+
if (std::abs(vtxZ) > confEvtZvtx) {
936+
return false;
937+
} else {
938+
outputCollision(vtxZ, 0, 0, 2, mMagField);
939+
return true;
940+
}
941+
}
942+
928943
template <bool isMC, typename CollisionType>
929944
void fillCollisionsCentRun3ColExtra(CollisionType const& col, double irrate)
930945
{
@@ -2011,6 +2026,7 @@ struct FemtoUniverseProducerTask {
20112026

20122027
Preslice<aod::McParticles> perMCCollision = aod::mcparticle::mcCollisionId;
20132028
PresliceUnsorted<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::McCollisionLabels>> recoCollsPerMCColl = aod::mcparticle::mcCollisionId;
2029+
PresliceUnsorted<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::McCollisionLabels>> recoCollsPerMCCollCentPbPb = aod::mcparticle::mcCollisionId;
20142030
Preslice<soa::Join<aod::FemtoFullTracks, aod::McTrackLabels>> perCollisionTracks = aod::track::collisionId;
20152031
template <class StrangePartType>
20162032
void processTruthAndFullMC(
@@ -2052,6 +2068,47 @@ struct FemtoUniverseProducerTask {
20522068
}
20532069
}
20542070

2071+
void processTruthAndFullMCCentRun3(aod::McCollisions const& mccols,
2072+
aod::McParticles const& mcParticles,
2073+
aod::FemtoFullCollisionCentRun3MCs const& collisions,
2074+
soa::Filtered<soa::Join<aod::FemtoFullTracks, aod::McTrackLabels>> const& tracks,
2075+
aod::BCsWithTimestamps const&)
2076+
{
2077+
// recos
2078+
std::set<int> recoMcIds;
2079+
for (const auto& col : collisions) {
2080+
auto groupedTracks = tracks.sliceBy(perCollisionTracks, col.globalIndex());
2081+
auto bc = col.bc_as<aod::BCsWithTimestamps>();
2082+
getMagneticFieldTesla(bc);
2083+
const auto ir = mRateFetcher.fetch(ccdb.service, bc.timestamp(), mRunNumber, "ZNC hadronic") * 1.e-3; // fetch IR
2084+
2085+
// fill the tables
2086+
const auto colcheck = fillCollisionsCentRun3<true>(col);
2087+
if (colcheck) {
2088+
fillCollisionsCentRun3ColExtra<true>(col, ir);
2089+
fillTracks<true>(groupedTracks);
2090+
}
2091+
for (const auto& track : groupedTracks) {
2092+
if (trackCuts.isSelectedMinimal(track))
2093+
recoMcIds.insert(track.mcParticleId());
2094+
}
2095+
}
2096+
2097+
// truth
2098+
for (const auto& mccol : mccols) {
2099+
auto groupedCollisions = collisions.sliceBy(recoCollsPerMCCollCentPbPb, mccol.globalIndex());
2100+
for (const auto& col : groupedCollisions) {
2101+
const auto colcheck = fillMCTruthCollisionsCentRun3(col); // fills the reco collisions for mc collision
2102+
if (colcheck) {
2103+
auto groupedMCParticles = mcParticles.sliceBy(perMCCollision, mccol.globalIndex());
2104+
outputCollExtra(1.0, 1.0);
2105+
fillParticles<decltype(groupedMCParticles), true, true>(groupedMCParticles, recoMcIds); // fills mc particles
2106+
}
2107+
}
2108+
}
2109+
}
2110+
PROCESS_SWITCH(FemtoUniverseProducerTask, processTruthAndFullMCCentRun3, "Provide both MC truth and reco for tracks in Pb-Pb", false);
2111+
20552112
Preslice<soa::Join<o2::aod::V0Datas, aod::McV0Labels>> perCollisionV0s = aod::track::collisionId;
20562113
void processTruthAndFullMCV0(
20572114
aod::McCollisions const& mccols,

0 commit comments

Comments
 (0)