Skip to content

Commit 025b366

Browse files
Add MC matching flags to charm fluctuation tasks
1 parent 10e1b54 commit 025b366

1 file changed

Lines changed: 68 additions & 10 deletions

File tree

PWGHF/D2H/Tasks/taskNetCharmFluctuations.cxx

Lines changed: 68 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

8587
DECLARE_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

105109
DECLARE_SOA_TABLE(EyeFlucCharmDplusEvents, "AOD", "EYEFCDPEVT",
106110
eyefluc::EventId,
@@ -126,7 +130,9 @@ enum EventQa : uint8_t {
126130
};
127131

128132
using 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>>;
129134
using 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>>;
130136
using CollData = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::CentFT0Ms, aod::CentFT0As>;
131137

132138
struct 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

406464
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)