Skip to content

Commit 69d4b88

Browse files
authored
[PWGHF] Add Lc->pKPi correlated background information to Ds task (#8245)
1 parent c4f3bed commit 69d4b88

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

PWGHF/D2H/Tasks/taskDs.cxx

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,10 @@ enum DataType { Data = 0,
4141
McDplusPrompt,
4242
McDplusNonPrompt,
4343
McDplusBkg,
44+
McLcBkg,
4445
McBkg,
4546
kDataTypes };
4647

47-
enum SpeciesAndDecay { DsToKKPi = 0,
48-
DplusToKKPi,
49-
DplusToPiKPi,
50-
kSpeciesAndDecay };
51-
5248
template <typename T>
5349
concept hasDsMlInfo = requires(T candidate)
5450
{
@@ -110,17 +106,18 @@ struct HfTaskDs {
110106

111107
HistogramRegistry registry{"registry", {}};
112108

113-
std::array<std::string, DataType::kDataTypes> folders = {"Data/", "MC/Ds/Prompt/", "MC/Ds/NonPrompt/", "MC/Dplus/Prompt/", "MC/Dplus/NonPrompt/", "MC/Dplus/Bkg/", "MC/Bkg/"};
109+
std::array<std::string, DataType::kDataTypes> folders = {"Data/", "MC/Ds/Prompt/", "MC/Ds/NonPrompt/", "MC/Dplus/Prompt/", "MC/Dplus/NonPrompt/", "MC/Dplus/Bkg/", "MC/Lc/", "MC/Bkg/"};
114110

115111
std::unordered_map<std::string, histTypes> dataHistograms = {};
116112
std::unordered_map<std::string, histTypes> mcDsPromptHistograms = {};
117113
std::unordered_map<std::string, histTypes> mcDsNonPromptHistograms = {};
118114
std::unordered_map<std::string, histTypes> mcDplusPromptHistograms = {};
119115
std::unordered_map<std::string, histTypes> mcDplusNonPromptHistograms = {};
120116
std::unordered_map<std::string, histTypes> mcDplusBkgHistograms = {};
117+
std::unordered_map<std::string, histTypes> mcLcBkgHistograms = {};
121118
std::unordered_map<std::string, histTypes> mcBkgHistograms = {};
122119

123-
std::array<std::unordered_map<std::string, histTypes>, DataType::kDataTypes> histosPtr = {dataHistograms, mcDsPromptHistograms, mcDsNonPromptHistograms, mcDplusPromptHistograms, mcDplusNonPromptHistograms, mcDplusBkgHistograms, mcBkgHistograms};
120+
std::array<std::unordered_map<std::string, histTypes>, DataType::kDataTypes> histosPtr = {dataHistograms, mcDsPromptHistograms, mcDsNonPromptHistograms, mcDplusPromptHistograms, mcDplusNonPromptHistograms, mcDplusBkgHistograms, mcLcBkgHistograms, mcBkgHistograms};
124121

125122
void init(InitContext&)
126123
{
@@ -188,7 +185,7 @@ struct HfTaskDs {
188185
doprocessMc || doprocessMcWithMl) { // processing MC
189186

190187
for (auto i = 0; i < DataType::kDataTypes; ++i) {
191-
if (i == DataType::McDsPrompt || i == DataType::McDsNonPrompt || i == DataType::McDplusPrompt || i == DataType::McDplusNonPrompt || i == DataType::McDplusBkg) {
188+
if (i == DataType::McDsPrompt || i == DataType::McDsNonPrompt || i == DataType::McDplusPrompt || i == DataType::McDplusNonPrompt || i == DataType::McDplusBkg || i == DataType::McLcBkg) {
192189

193190
histosPtr[i]["hEtaGen"] = registry.add<TH1>((folders[i] + "hEtaGen").c_str(), "3-prong candidates (matched);#eta;entries", {HistType::kTH1F, {{100, -2., 2.}}});
194191
histosPtr[i]["hPtGen"] = registry.add<TH1>((folders[i] + "hPtGen").c_str(), "MC particles (unmatched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {ptbins}});
@@ -231,6 +228,12 @@ struct HfTaskDs {
231228
return std::abs(candidate.flagMcMatchRec()) == static_cast<int8_t>(BIT(aod::hf_cand_3prong::DecayType::DplusToPiKPi));
232229
}
233230

231+
template <typename CandDs>
232+
bool isLcBkg(const CandDs& candidate)
233+
{
234+
return std::abs(candidate.flagMcMatchRec()) == static_cast<int8_t>(BIT(aod::hf_cand_3prong::DecayType::LcToPKPi));
235+
}
236+
234237
/// Checks whether the candidate is in the signal region of either the Ds or D+ decay
235238
/// \param candidate is the candidate
236239
/// \param isDs is true if we check for the Ds signal region, false for the D+ signal region
@@ -389,19 +392,21 @@ struct HfTaskDs {
389392
void fillHistoMCRec(const T1& candidate, const CandDsMcGen& mcParticles, DataType dataType)
390393
{
391394

392-
SpeciesAndDecay whichSpeciesDecay = SpeciesAndDecay::DsToKKPi;
393-
if (dataType == DataType::McDplusPrompt || dataType == DataType::McDplusNonPrompt) {
394-
whichSpeciesDecay = SpeciesAndDecay::DplusToKKPi;
395-
} else if (dataType == DataType::McDplusBkg) {
396-
whichSpeciesDecay = SpeciesAndDecay::DplusToPiKPi;
395+
int id = o2::constants::physics::Pdg::kDS;
396+
auto yCand = hfHelper.yDs(candidate);
397+
if (dataType == DataType::McDplusPrompt || dataType == DataType::McDplusNonPrompt || dataType == DataType::McDplusBkg) {
398+
id = o2::constants::physics::Pdg::kDPlus;
399+
yCand = hfHelper.yDplus(candidate);
400+
} else if (dataType == DataType::McLcBkg) {
401+
id = o2::constants::physics::Pdg::kLambdaCPlus;
402+
yCand = hfHelper.yLc(candidate);
397403
}
398404

399405
auto indexMother = RecoDecay::getMother(mcParticles,
400406
candidate.template prong0_as<aod::TracksWMc>().template mcParticle_as<CandDsMcGen>(),
401-
whichSpeciesDecay == SpeciesAndDecay::DsToKKPi ? o2::constants::physics::Pdg::kDS : o2::constants::physics::Pdg::kDPlus, true);
407+
id, true);
402408

403409
if (indexMother != -1) {
404-
auto yCand = whichSpeciesDecay == SpeciesAndDecay::DsToKKPi ? hfHelper.yDs(candidate) : hfHelper.yDplus(candidate);
405410
if (yCandRecoMax >= 0. && std::abs(yCand) > yCandRecoMax) {
406411
return;
407412
}
@@ -462,15 +467,16 @@ struct HfTaskDs {
462467
CandDsMcGen const& mcParticles)
463468
{
464469
// MC rec.
465-
std::array<MemberFunctionPointer<CandDs>, 5> isOfType = {// Contains the functions to check if the candidate is of a certain type
470+
std::array<MemberFunctionPointer<CandDs>, 6> isOfType = {// Contains the functions to check if the candidate is of a certain type
466471
&HfTaskDs::isDsPrompt<CandDs>,
467472
&HfTaskDs::isDsNonPrompt<CandDs>,
468473
&HfTaskDs::isDplusPrompt<CandDs>,
469474
&HfTaskDs::isDplusNonPrompt<CandDs>,
470-
&HfTaskDs::isDplusBkg<CandDs>};
475+
&HfTaskDs::isDplusBkg<CandDs>,
476+
&HfTaskDs::isLcBkg<CandDs>};
471477

472478
bool isBkg = true;
473-
for (int i = DataType::McDsPrompt; i <= DataType::McDplusBkg; i++) { // Check what type of MC signal candidate it is, and fill the corresponding histograms
479+
for (int i = DataType::McDsPrompt; i <= DataType::McLcBkg; i++) { // Check what type of MC signal candidate it is, and fill the corresponding histograms
474480
if ((this->*isOfType[i - DataType::McDsPrompt])(candidate)) {
475481
isBkg = false;
476482
fillHistoMCRec<Coll>(candidate, mcParticles, static_cast<DataType>(i));

0 commit comments

Comments
 (0)