Skip to content

Commit

Permalink
Factorize centrality table in Lc tree creator. (AliceO2Group#6573)
Browse files Browse the repository at this point in the history
Co-authored-by: Mattia Faggin <mfaggin@cern.ch>
  • Loading branch information
mfaggin and Mattia Faggin authored Jun 19, 2024
1 parent 28ac6f2 commit 64f4576
Showing 1 changed file with 119 additions and 20 deletions.
139 changes: 119 additions & 20 deletions PWGHF/TableProducer/treeCreatorLcToPKPi.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -271,18 +271,42 @@ struct HfTreeCreatorLcToPKPi {

void init(InitContext const&)
{
std::array<bool, 4> processes = {doprocessDataNoCentrality, doprocessDataWithCentrality, doprocessMcNoCentrality, doprocessMcWithCentrality};
if (std::accumulate(processes.begin(), processes.end(), 0) != 1) {
LOGP(fatal, "One and only one process function must be enabled at a time.");
}
}

void processMc(soa::Join<aod::Collisions, aod::McCollisionLabels, aod::PVMultZeqs, Cents> const& collisions,
aod::McCollisions const&,
soa::Join<aod::HfCand3Prong, aod::HfCand3ProngMcRec, aod::HfSelLc> const& candidates,
soa::Join<aod::McParticles, aod::HfCand3ProngMcGen> const& particles,
TracksWPid const&, aod::BCs const&)
/// \brief core function to fill tables in MC
/// \param collisions Collision table
/// \param mcCollisions MC collision table
/// \param candidates Lc->pKpi candidate table
/// \param particles Generated particle table
template <bool useCentrality, typename Colls>
void fillTablesMc(Colls const& collisions,
aod::McCollisions const&,
soa::Join<aod::HfCand3Prong, aod::HfCand3ProngMcRec, aod::HfSelLc> const& candidates,
soa::Join<aod::McParticles, aod::HfCand3ProngMcGen> const& particles,
TracksWPid const&, aod::BCs const&)
{

// Filling event properties
rowCandidateFullEvents.reserve(collisions.size());
for (const auto& collision : collisions) {

float centFT0A = -1.f;
float centFT0C = -1.f;
float centFT0M = -1.f;
float centFV0A = -1.f;
float centFDDM = -1.f;
if constexpr (useCentrality) {
centFT0A = collision.centFT0A();
centFT0C = collision.centFT0C();
centFT0M = collision.centFT0M();
centFV0A = collision.centFV0A();
centFDDM = collision.centFDDM();
}

rowCandidateFullEvents(
collision.globalIndex(),
collision.mcCollisionId(),
Expand All @@ -292,11 +316,11 @@ struct HfTreeCreatorLcToPKPi {
collision.posZ(),
0,
collision.bc().runNumber(),
collision.centFT0A(),
collision.centFT0C(),
collision.centFT0M(),
collision.centFV0A(),
collision.centFDDM(),
centFT0A,
centFT0C,
centFT0M,
centFV0A,
centFDDM,
collision.multZeqNTracksPV());
}

Expand Down Expand Up @@ -478,16 +502,66 @@ struct HfTreeCreatorLcToPKPi {
}
}
}
PROCESS_SWITCH(HfTreeCreatorLcToPKPi, processMc, "Process MC tree writer", true);

void processData(soa::Join<aod::Collisions, aod::PVMultZeqs, Cents> const& collisions,
soa::Join<aod::HfCand3Prong, aod::HfSelLc> const& candidates,
TracksWPid const&, aod::BCs const&)
/// \brief process function for MC w/o centrality
/// \param collisions Collision table w/o join of the centrality table
/// \param mcCollisions MC collision table
/// \param candidates Lc->pKpi candidate table
/// \param particles Generated particle table
/// \param tracks Track table
/// \param bcs Bunch-crossing table
void processMcNoCentrality(soa::Join<aod::Collisions, aod::McCollisionLabels, aod::PVMultZeqs> const& collisions,
aod::McCollisions const& mcCollisions,
soa::Join<aod::HfCand3Prong, aod::HfCand3ProngMcRec, aod::HfSelLc> const& candidates,
soa::Join<aod::McParticles, aod::HfCand3ProngMcGen> const& particles,
TracksWPid const& tracks, aod::BCs const& bcs)
{
fillTablesMc<false>(collisions, mcCollisions, candidates, particles, tracks, bcs);
}
PROCESS_SWITCH(HfTreeCreatorLcToPKPi, processMcNoCentrality, "Process MC tree writer w/o centrality", false);

/// \brief process function for MC with centrality
/// \param collisions Collision table with join of the centrality table
/// \param mcCollisions MC collision table
/// \param candidates Lc->pKpi candidate table
/// \param tracks Track table
/// \param bcs Bunch-crossing table
void processMcWithCentrality(soa::Join<aod::Collisions, aod::McCollisionLabels, aod::PVMultZeqs, Cents> const& collisions,
aod::McCollisions const& mcCollisions,
soa::Join<aod::HfCand3Prong, aod::HfCand3ProngMcRec, aod::HfSelLc> const& candidates,
soa::Join<aod::McParticles, aod::HfCand3ProngMcGen> const& particles,
TracksWPid const& tracks, aod::BCs const& bcs)
{
fillTablesMc<true>(collisions, mcCollisions, candidates, particles, tracks, bcs);
}
PROCESS_SWITCH(HfTreeCreatorLcToPKPi, processMcWithCentrality, "Process MC tree writer with centrality", false);

/// \brief core function to fill tables in data
/// \param collisions Collision table
/// \param candidates Lc->pKpi candidate table
template <bool useCentrality, typename Colls>
void fillTablesData(Colls const& collisions,
soa::Join<aod::HfCand3Prong, aod::HfSelLc> const& candidates,
TracksWPid const&, aod::BCs const&)
{

// Filling event properties
rowCandidateFullEvents.reserve(collisions.size());
for (const auto& collision : collisions) {

float centFT0A = -1.f;
float centFT0C = -1.f;
float centFT0M = -1.f;
float centFV0A = -1.f;
float centFDDM = -1.f;
if constexpr (useCentrality) {
centFT0A = collision.centFT0A();
centFT0C = collision.centFT0C();
centFT0M = collision.centFT0M();
centFV0A = collision.centFV0A();
centFDDM = collision.centFDDM();
}

rowCandidateFullEvents(
collision.globalIndex(),
-1,
Expand All @@ -497,11 +571,11 @@ struct HfTreeCreatorLcToPKPi {
collision.posZ(),
0,
collision.bc().runNumber(),
collision.centFT0A(),
collision.centFT0C(),
collision.centFT0M(),
collision.centFV0A(),
collision.centFDDM(),
centFT0A,
centFT0C,
centFT0M,
centFV0A,
centFDDM,
collision.multZeqNTracksPV());
}

Expand Down Expand Up @@ -666,7 +740,32 @@ struct HfTreeCreatorLcToPKPi {
fillTable(1, candidate.isSelLcToPiKP(), hfHelper.invMassLcToPiKP(candidate), hfHelper.ctLc(candidate), hfHelper.yLc(candidate), hfHelper.eLc(candidate));
}
}
PROCESS_SWITCH(HfTreeCreatorLcToPKPi, processData, "Process data tree writer", false);

/// \brief process function for data w/o centrality
/// \param collisions Collision table w/o join of the centrality table
/// \param candidates Lc->pKpi candidate table
/// \param tracks Track table
/// \param bcs Bunch-crossing table
void processDataNoCentrality(soa::Join<aod::Collisions, aod::PVMultZeqs> const& collisions,
soa::Join<aod::HfCand3Prong, aod::HfSelLc> const& candidates,
TracksWPid const& tracks, aod::BCs const& bcs)
{
fillTablesData<false>(collisions, candidates, tracks, bcs);
}
PROCESS_SWITCH(HfTreeCreatorLcToPKPi, processDataNoCentrality, "Process data tree writer w/o centrality", false);

/// \brief process function for data with centrality
/// \param collisions Collision table with join of the centrality table
/// \param candidates Lc->pKpi candidate table
/// \param tracks Track table
/// \param bcs Bunch-crossing table
void processDataWithCentrality(soa::Join<aod::Collisions, aod::PVMultZeqs, Cents> const& collisions,
soa::Join<aod::HfCand3Prong, aod::HfSelLc> const& candidates,
TracksWPid const& tracks, aod::BCs const& bcs)
{
fillTablesData<true>(collisions, candidates, tracks, bcs);
}
PROCESS_SWITCH(HfTreeCreatorLcToPKPi, processDataWithCentrality, "Process data tree writer with centrality", true);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down

0 comments on commit 64f4576

Please sign in to comment.