@@ -80,7 +80,9 @@ DECLARE_SOA_TABLE(EyeFlucCharmD0Cands, "AOD", "EYEFCD0CAND",
8080 eyefluc::MassD0bar,
8181 eyefluc::OmegaCharm,
8282 eyefluc::OmegaAntiCharm,
83- eyefluc::OmegaBkg);
83+ eyefluc::OmegaBkg,
84+ aod::hf_cand_mc_flag::FlagMcMatchRec,
85+ aod::hf_cand_mc_flag::OriginMcRec);
8486
8587DECLARE_SOA_TABLE (EyeFlucCharmD0Events, " AOD" , " EYEFCD0EVT" ,
8688 eyefluc::EventId,
@@ -100,7 +102,9 @@ DECLARE_SOA_TABLE(EyeFlucCharmDplusCands, "AOD", "EYEFCDPCAND",
100102 eyefluc::MassDplus,
101103 eyefluc::OmegaCharm,
102104 eyefluc::OmegaAntiCharm,
103- eyefluc::OmegaBkg);
105+ eyefluc::OmegaBkg,
106+ aod::hf_cand_mc_flag::FlagMcMatchRec,
107+ aod::hf_cand_mc_flag::OriginMcRec);
104108
105109DECLARE_SOA_TABLE (EyeFlucCharmDplusEvents, " AOD" , " EYEFCDPEVT" ,
106110 eyefluc::EventId,
@@ -126,7 +130,9 @@ enum EventQa : uint8_t {
126130};
127131
128132using CandD0Data = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfCand2Prong0PidPi, aod::HfCand2Prong1PidPi, aod::HfCand2Prong0PidKa, aod::HfCand2Prong1PidKa, aod::HfCand2ProngKF, aod::HfSelD0>>;
133+ using CandD0McRec = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfCand2Prong0PidPi, aod::HfCand2Prong1PidPi, aod::HfCand2Prong0PidKa, aod::HfCand2Prong1PidKa, aod::HfCand2ProngKF, aod::HfSelD0, aod::HfCand2ProngMcRec>>;
129134using CandDplusData = soa::Filtered<soa::Join<aod::HfCand3Prong, aod::HfCand3Prong0PidPi, aod::HfCand3Prong1PidPi, aod::HfCand3Prong2PidPi, aod::HfCand3Prong0PidKa, aod::HfCand3Prong1PidKa, aod::HfCand3Prong2PidKa, aod::HfSelDplusToPiKPi>>;
135+ using CandDplusMcRec = soa::Filtered<soa::Join<aod::HfCand3Prong, aod::HfCand3Prong0PidPi, aod::HfCand3Prong1PidPi, aod::HfCand3Prong2PidPi, aod::HfCand3Prong0PidKa, aod::HfCand3Prong1PidKa, aod::HfCand3Prong2PidKa, aod::HfSelDplusToPiKPi, aod::HfCand3ProngMcRec>>;
130136using CollData = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::CentFT0Ms, aod::CentFT0As>;
131137
132138struct HfTaskNetCharmFluctuations {
@@ -149,6 +155,8 @@ struct HfTaskNetCharmFluctuations {
149155 Filter filterSelectDplusCandidates = aod::hf_sel_candidate_dplus::isSelDplusToPiKPi >= selectionFlagDplus;
150156 Partition<CandD0Data> selectedD0ToPiK = aod::hf_sel_candidate_d0::isSelD0 >= selectionFlagD0;
151157 Partition<CandD0Data> selectedD0ToKPi = aod::hf_sel_candidate_d0::isSelD0bar >= selectionFlagD0bar;
158+ Partition<CandD0McRec> selectedD0McToPiK = aod::hf_sel_candidate_d0::isSelD0 >= selectionFlagD0;
159+ Partition<CandD0McRec> selectedD0McToKPi = aod::hf_sel_candidate_d0::isSelD0bar >= selectionFlagD0bar;
152160
153161 HistogramRegistry registry{" registry" };
154162
@@ -164,11 +172,13 @@ struct HfTaskNetCharmFluctuations {
164172 float omegaCharm = 0 .f;
165173 float omegaAntiCharm = 0 .f;
166174 float omegaBkg = 1 .f;
175+ int8_t flagMcMatchRec = -1 ;
176+ int8_t originMcRec = -1 ;
167177 };
168178
169179 void init (InitContext const &)
170180 {
171- std::array<int , 2 > processes = {doprocessD0, doprocessDplus};
181+ std::array<int , 4 > processes = {doprocessD0, doprocessMcD0, doprocessDplus, doprocessMcDplus };
172182 const int nProcesses = std::accumulate (processes.begin (), processes.end (), 0 );
173183 if (nProcesses > 1 ) {
174184 LOGP (fatal, " Only one process function should be enabled at a time, please check your configuration" );
@@ -232,6 +242,15 @@ struct HfTaskNetCharmFluctuations {
232242 }
233243 }
234244
245+ template <bool IsMc, typename TCandidate>
246+ void setMcInfo (HfCandInfo& info, TCandidate const & cand) const
247+ {
248+ if constexpr (IsMc) {
249+ info.flagMcMatchRec = cand.flagMcMatchRec ();
250+ info.originMcRec = cand.originMcRec ();
251+ }
252+ }
253+
235254 bool passEventSelection (CollData::iterator const & collision)
236255 {
237256 registry.fill (HIST (" hEventQa" ), 1 + EventQa::All);
@@ -278,7 +297,9 @@ struct HfTaskNetCharmFluctuations {
278297 cand.massD0bar ,
279298 cand.omegaCharm ,
280299 cand.omegaAntiCharm ,
281- cand.omegaBkg );
300+ cand.omegaBkg ,
301+ cand.flagMcMatchRec ,
302+ cand.originMcRec );
282303 }
283304
284305 outD0Evt (eventId, timeStamp, centrality, wCharm, wAntiCharm, wBkg);
@@ -317,14 +338,16 @@ struct HfTaskNetCharmFluctuations {
317338 cand.massDplus ,
318339 cand.omegaCharm ,
319340 cand.omegaAntiCharm ,
320- cand.omegaBkg );
341+ cand.omegaBkg ,
342+ cand.flagMcMatchRec ,
343+ cand.originMcRec );
321344 }
322345
323346 outDplusEvt (eventId, timeStamp, centrality, wCharm, wAntiCharm, wBkg);
324347 registry.fill (HIST (" hEventQa" ), 1 + EventQa::EventWritten);
325348 }
326349
327- template <int8_t Sign, typename TCandidates>
350+ template <int8_t Sign, bool IsMc = false , typename TCandidates>
328351 void addD0Candidates (TCandidates const & candidates, std::vector<HfCandInfo>& acceptedCands)
329352 {
330353 for (const auto & cand : candidates) {
@@ -339,6 +362,7 @@ struct HfTaskNetCharmFluctuations {
339362 info.massD0bar = massD0bar;
340363 info.pt = cand.pt ();
341364 info.rapidity = HfHelper::yD0 (cand);
365+ setMcInfo<IsMc>(info, cand);
342366 setOmegaRaw (info);
343367 acceptedCands.push_back (info);
344368
@@ -370,10 +394,26 @@ struct HfTaskNetCharmFluctuations {
370394 }
371395 PROCESS_SWITCH (HfTaskNetCharmFluctuations, processD0, " Process D0 and D0bar candidates" , false );
372396
373- void processDplus (CollData::iterator const & collision,
374- aod::BCsWithTimestamps const &,
375- CandDplusData const & candidatesDplus,
376- aod::Tracks const &)
397+ void processMcD0 (CollData::iterator const & collision,
398+ aod::BCsWithTimestamps const &,
399+ CandD0McRec const &)
400+ {
401+ if (!passEventSelection (collision)) {
402+ return ;
403+ }
404+
405+ auto candsD0ToPiK = selectedD0McToPiK->sliceByCached (aod::hf_cand::collisionId, collision.globalIndex (), cache);
406+ auto candsD0ToKPi = selectedD0McToKPi->sliceByCached (aod::hf_cand::collisionId, collision.globalIndex (), cache);
407+
408+ std::vector<HfCandInfo> acceptedCands;
409+ addD0Candidates<+1 , true >(candsD0ToPiK, acceptedCands);
410+ addD0Candidates<-1 , true >(candsD0ToKPi, acceptedCands);
411+ fillD0OutputTables (collision, acceptedCands);
412+ }
413+ PROCESS_SWITCH (HfTaskNetCharmFluctuations, processMcD0, " Process MC D0 and D0bar candidates" , false );
414+
415+ template <bool IsMc, typename TCandidates>
416+ void runDplus (CollData::iterator const & collision, TCandidates const & candidatesDplus)
377417 {
378418 if (!passEventSelection (collision)) {
379419 return ;
@@ -392,6 +432,7 @@ struct HfTaskNetCharmFluctuations {
392432 info.massDplus = massDplus;
393433 info.pt = cand.pt ();
394434 info.rapidity = HfHelper::yDplus (cand);
435+ setMcInfo<IsMc>(info, cand);
395436 setOmegaRaw (info);
396437 acceptedCands.push_back (info);
397438 registry.fill (HIST (" hMassVsPtDplus" ), massDplus, cand.pt ());
@@ -400,7 +441,24 @@ struct HfTaskNetCharmFluctuations {
400441
401442 fillDplusOutputTables (collision, acceptedCands);
402443 }
444+
445+ void processDplus (CollData::iterator const & collision,
446+ aod::BCsWithTimestamps const &,
447+ CandDplusData const & candidatesDplus,
448+ aod::Tracks const &)
449+ {
450+ runDplus<false >(collision, candidatesDplus);
451+ }
403452 PROCESS_SWITCH (HfTaskNetCharmFluctuations, processDplus, " Process Dplus and Dminus candidates" , true );
453+
454+ void processMcDplus (CollData::iterator const & collision,
455+ aod::BCsWithTimestamps const &,
456+ CandDplusMcRec const & candidatesDplus,
457+ aod::Tracks const &)
458+ {
459+ runDplus<true >(collision, candidatesDplus);
460+ }
461+ PROCESS_SWITCH (HfTaskNetCharmFluctuations, processMcDplus, " Process MC Dplus and Dminus candidates" , false );
404462};
405463
406464WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments