Skip to content

Commit cf03ef2

Browse files
committed
Add MC histograms with centrality information
1 parent 38c40a7 commit cf03ef2

File tree

1 file changed

+107
-16
lines changed

1 file changed

+107
-16
lines changed

PWGHF/D2H/Tasks/taskOmegac0ToOmegapi.cxx

Lines changed: 107 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "PWGHF/Core/HfHelper.h"
1919
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
2020
#include "PWGHF/DataModel/CandidateSelectionTables.h"
21+
#include "PWGLF/DataModel/mcCentrality.h"
2122

2223
#include "Common/Core/RecoDecay.h"
2324
#include "Common/DataModel/Centrality.h"
@@ -74,7 +75,7 @@ struct HfTaskOmegac0ToOmegapi {
7475
HfHelper hfHelper;
7576
SliceCache cache;
7677

77-
using TracksMc = soa::Join<aod::Tracks, aod::TracksIU, aod::McTrackLabels>;
78+
// using TracksMc = soa::Join<aod::Tracks, aod::TracksIU, aod::McTrackLabels>;
7879

7980
using Omegac0Cands = soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfSelToOmegaPi>>;
8081
using Omegac0CandsKF = soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfSelToOmegaPi, aod::HfOmegacKf>>;
@@ -90,6 +91,8 @@ struct HfTaskOmegac0ToOmegapi {
9091
using CollisionsWithFT0M = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>;
9192
using CollisionsWithMcLabels = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels>;
9293

94+
using McCollisionsWithFT0M = soa::Join<aod::McCollisions, aod::McCentFT0Ms>;
95+
9396
Filter filterOmegaCToOmegaPiFlag = (aod::hf_track_index::hfflag & static_cast<uint8_t>(BIT(aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi))) != static_cast<uint8_t>(0);
9497
Filter filterOmegaCMatchedRec = nabs(aod::hf_cand_xic0_omegac0::flagMcMatchRec) == static_cast<int8_t>(BIT(aod::hf_cand_xic0_omegac0::DecayType::OmegaczeroToOmegaPi));
9598
Filter filterOmegaCMatchedGen = nabs(aod::hf_cand_xic0_omegac0::flagMcMatchGen) == static_cast<int8_t>(BIT(aod::hf_cand_xic0_omegac0::DecayType::OmegaczeroToOmegaPi));
@@ -113,8 +116,9 @@ struct HfTaskOmegac0ToOmegapi {
113116

114117
void init(InitContext&)
115118
{
116-
std::array<bool, 8> doprocess{doprocessDataKFParticle, doprocessDataKFParticleMl, doprocessDataKFParticleFT0C, doprocessDataKFParticleMlFT0C,
117-
doprocessDataKFParticleFT0M, doprocessDataKFParticleMlFT0M, doprocessMcKFParticle, doprocessMcKFParticleMl};
119+
std::array<bool, 10> doprocess{doprocessDataKFParticle, doprocessDataKFParticleMl, doprocessDataKFParticleFT0C, doprocessDataKFParticleMlFT0C,
120+
doprocessDataKFParticleFT0M, doprocessDataKFParticleMlFT0M, doprocessMcKFParticle, doprocessMcKFParticleMl,
121+
doprocessMcKFParticleFT0M, doprocessMcKFParticleMlFT0M};
118122
if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) {
119123
LOGP(fatal, "One and only one process function should be enabled at a time.");
120124
}
@@ -132,27 +136,34 @@ struct HfTaskOmegac0ToOmegapi {
132136
const AxisSpec thnAxisCent{thnConfigAxisCent, "Centrality"};
133137

134138
std::vector<AxisSpec> axes = {thnAxisMass, thnAxisPt, thnAxisY};
139+
std::vector<AxisSpec> axesMcGen = {thnAxisGenPtD, thnAxisGenPtB, thnAxisY, thnAxisOrigin};
135140

136-
if (doprocessDataKFParticleFT0C || doprocessDataKFParticleMlFT0C || doprocessDataKFParticleFT0M || doprocessDataKFParticleMlFT0M) {
141+
if (doprocessDataKFParticleFT0C || doprocessDataKFParticleMlFT0C || doprocessDataKFParticleFT0M || doprocessDataKFParticleMlFT0M || doprocessMcKFParticleFT0M || doprocessMcKFParticleMlFT0M) {
137142
axes.push_back(thnAxisCent);
138143
axes.push_back(thnConfigAxisNumPvContr);
144+
axesMcGen.push_back(thnAxisCent);
145+
axesMcGen.push_back(thnConfigAxisNumPvContr);
139146
}
140147

141-
if (doprocessMcKFParticle || doprocessMcKFParticleMl) {
142-
std::vector<AxisSpec> axesMcGen = {thnAxisGenPtD, thnAxisGenPtB, thnAxisY, thnAxisOrigin, thnAxisNumPvContr};
143-
registry.add("hMcGen", "Thn for generated #Omega_{c}^{0} from charm and beauty", HistType::kTHnSparseD, axesMcGen);
148+
if (doprocessMcKFParticle || doprocessMcKFParticleMl || doprocessMcKFParticleFT0M || doprocessMcKFParticleMlFT0M) {
149+
registry.add("hMcGen", "Gen. #Omega_{c}^{0} from charm and beauty", HistType::kTHnSparseD, axesMcGen);
144150
registry.get<THnSparse>(HIST("hMcGen"))->Sumw2();
145151

152+
if (doprocessMcKFParticleFT0M || doprocessMcKFParticleMlFT0M) {
153+
registry.add("hMcGenWithRecoColl", "Gen. #Omega_{c}^{0} from charm and beauty (associated to a reco collision)", HistType::kTHnSparseD, axesMcGen);
154+
registry.get<THnSparse>(HIST("hMcGenWithRecoColl"))->Sumw2();
155+
}
156+
146157
axes.push_back(thnAxisPtB);
147158
axes.push_back(thnAxisOrigin);
148159
axes.push_back(thnAxisMatchFlag);
149160
}
150161

151-
if (doprocessDataKFParticleMl || doprocessDataKFParticleMlFT0C || doprocessDataKFParticleMlFT0M || doprocessMcKFParticleMl) {
162+
if (doprocessDataKFParticleMl || doprocessDataKFParticleMlFT0C || doprocessDataKFParticleMlFT0M || doprocessMcKFParticleMl || doprocessMcKFParticleMlFT0M) {
152163
axes.push_back(thnAxisPromptScore);
153164
}
154165

155-
registry.add("hReco", "Thn for reco. #Omega_{c}^{0} candidates", HistType::kTHnSparseD, axes);
166+
registry.add("hReco", "Reco. #Omega_{c}^{0} candidates", HistType::kTHnSparseD, axes);
156167
registry.get<THnSparse>(HIST("hReco"))->Sumw2();
157168
}
158169

@@ -256,45 +267,107 @@ struct HfTaskOmegac0ToOmegapi {
256267
}
257268
}
258269

270+
template <bool applyMl, typename CandType, typename McCollisionWithCents>
271+
void processMcCent(const CandType& candidates, Omegac0Gen const& mcParticles,
272+
CollisionsWithMcLabels const& collisions, McCollisionWithCents const&)
273+
{
274+
// MC rec.
275+
for (const auto& candidate : candidates) {
276+
if (!(candidate.resultSelections() == true || (candidate.resultSelections() == false && !selectionFlagOmegac0))) {
277+
continue;
278+
}
279+
if (yCandRecoMax >= 0. && std::abs(candidate.kfRapOmegac()) > yCandRecoMax) {
280+
continue;
281+
}
282+
283+
auto collision = candidate.template collision_as<CollisionsWithMcLabels>();
284+
uint16_t numPvContributors = collision.numContrib();
285+
float mcCent = evaluateCentralityColl(collision.template mcCollision_as<McCollisionWithCents>());
286+
287+
if constexpr (applyMl) {
288+
registry.fill(HIST("hReco"), candidate.invMassCharmBaryon(), candidate.ptCharmBaryon(), candidate.kfRapOmegac(), mcCent, numPvContributors, candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec(), candidate.mlProbOmegac()[0]);
289+
290+
} else {
291+
registry.fill(HIST("hReco"), candidate.invMassCharmBaryon(), candidate.ptCharmBaryon(), candidate.kfRapOmegac(), mcCent, numPvContributors, candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec());
292+
}
293+
}
294+
295+
// MC gen.
296+
for (const auto& particle : mcParticles) {
297+
if (yCandGenMax >= 0. && std::abs(particle.rapidityCharmBaryonGen()) > yCandGenMax) {
298+
continue;
299+
}
300+
301+
auto ptGen = particle.pt();
302+
auto yGen = particle.rapidityCharmBaryonGen();
303+
auto mcCollision = particle.template mcCollision_as<McCollisionWithCents>();
304+
305+
int maxNumContrib = 0;
306+
const auto& recoCollsPerMcColl = collisions.sliceBy(colPerMcCollision, mcCollision.globalIndex());
307+
for (const auto& recCol : recoCollsPerMcColl) {
308+
maxNumContrib = recCol.numContrib() > maxNumContrib ? recCol.numContrib() : maxNumContrib;
309+
}
310+
311+
float mcCent = evaluateCentralityColl(mcCollision);
312+
313+
if (particle.originMcGen() == RecoDecay::OriginType::Prompt) {
314+
registry.fill(HIST("hMcGen"), ptGen, -1., yGen, RecoDecay::OriginType::Prompt, mcCent, maxNumContrib);
315+
} else {
316+
float ptGenB = mcParticles.rawIteratorAt(particle.idxBhadMotherPart()).pt();
317+
registry.fill(HIST("hMcGen"), ptGen, ptGenB, yGen, RecoDecay::OriginType::NonPrompt, mcCent, maxNumContrib);
318+
}
319+
320+
// fill sparse only for gen particles associated to a reconstructed collision
321+
if (recoCollsPerMcColl.size() >= 1) {
322+
if (particle.originMcGen() == RecoDecay::OriginType::Prompt) {
323+
registry.fill(HIST("hMcGenWithRecoColl"), ptGen, -1., yGen, RecoDecay::OriginType::Prompt, mcCent, maxNumContrib);
324+
} else {
325+
float ptGenB = mcParticles.rawIteratorAt(particle.idxBhadMotherPart()).pt();
326+
registry.fill(HIST("hMcGenWithRecoColl"), ptGen, ptGenB, yGen, RecoDecay::OriginType::NonPrompt, mcCent, maxNumContrib);
327+
}
328+
}
329+
}
330+
}
331+
259332
void processDataKFParticle(Omegac0CandsKF const& candidates)
260333
{
261334
processData<false>(candidates);
262335
}
263-
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticle, "process HfTaskOmegac0ToOmegapi with KFParticle", false);
336+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticle, "process data with KFParticle", false);
264337

265338
void processDataKFParticleMl(Omegac0CandsMlKF const& candidates)
266339
{
267340
processData<true>(candidates);
268341
}
269-
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleMl, "process HfTaskOmegac0ToOmegapi with KFParticle and ML selections", false);
342+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleMl, "process data with KFParticle, ML selections", false);
270343

271344
void processDataKFParticleFT0C(Omegac0CandsKF const& candidates,
272345
CollisionsWithFT0C const& collisions)
273346
{
274347
processDataCent<false>(candidates, collisions);
275348
}
276-
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleFT0C, "process HfTaskOmegac0ToOmegapi with KFParticle and with FT0C centrality", false);
349+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleFT0C, "process data with KFParticle, FT0C centrality", false);
277350

278351
void processDataKFParticleMlFT0C(Omegac0CandsMlKF const& candidates,
279352
CollisionsWithFT0C const& collisions)
280353
{
281354
processDataCent<true>(candidates, collisions);
282355
}
283-
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleMlFT0C, "process HfTaskOmegac0ToOmegapi with KFParticle and ML selections and with FT0C centrality", false);
356+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleMlFT0C, "process data with KFParticle, ML selections, FT0C centrality", false);
284357

285358
void processDataKFParticleFT0M(Omegac0CandsKF const& candidates,
286359
CollisionsWithFT0M const& collisions)
287360
{
288361
processDataCent<false>(candidates, collisions);
289362
}
290-
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleFT0M, "process HfTaskOmegac0ToOmegapi with KFParticle and with FT0M centrality", false);
363+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleFT0M, "process data with KFParticle, FT0M centrality", false);
291364

292365
void processDataKFParticleMlFT0M(Omegac0CandsMlKF const& candidates,
293366
CollisionsWithFT0M const& collisions)
294367
{
295368
processDataCent<true>(candidates, collisions);
296369
}
297-
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleMlFT0M, "process HfTaskOmegac0ToOmegapi with KFParticle and ML selections and with FT0M centrality", false);
370+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processDataKFParticleMlFT0M, "process data with KFParticle, ML selections, FT0M centrality", false);
298371

299372
void processMcKFParticle(OmegaC0CandsMcKF const& omegaC0CandidatesMcKF,
300373
Omegac0Gen const& mcParticles)
@@ -308,7 +381,25 @@ struct HfTaskOmegac0ToOmegapi {
308381
{
309382
processMc<true>(omegac0CandidatesMlMcKF, mcParticles);
310383
}
311-
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processMcKFParticleMl, "Process MC with KFParticle and ML selections", false);
384+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processMcKFParticleMl, "Process MC with KFParticle, ML selections", false);
385+
386+
void processMcKFParticleFT0M(OmegaC0CandsMcKF const& omegaC0CandidatesMcKF,
387+
Omegac0Gen const& mcParticles,
388+
CollisionsWithMcLabels const& collisions,
389+
McCollisionsWithFT0M const& mcCollisions)
390+
{
391+
processMcCent<false>(omegaC0CandidatesMcKF, mcParticles, collisions, mcCollisions);
392+
}
393+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processMcKFParticleFT0M, "Process MC with KFParticle, FT0M centrality (from MC)", false);
394+
395+
void processMcKFParticleMlFT0M(Omegac0CandsMlMcKF const& omegac0CandidatesMlMcKF,
396+
Omegac0Gen const& mcParticles,
397+
CollisionsWithMcLabels const& collisions,
398+
McCollisionsWithFT0M const& mcCollisions)
399+
{
400+
processMcCent<true>(omegac0CandidatesMlMcKF, mcParticles, collisions, mcCollisions);
401+
}
402+
PROCESS_SWITCH(HfTaskOmegac0ToOmegapi, processMcKFParticleMlFT0M, "Process MC with KFParticle, ML selections, FT0M centrality (from MC)", false);
312403
};
313404

314405
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)