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
314405WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments