Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 32 additions & 19 deletions PWGHF/HFC/Tasks/taskCorrelationDsHadrons.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ struct HfTaskCorrelationDsHadrons {
Configurable<std::vector<int>> classMl{"classMl", {0, 1, 2}, "Indexes of ML scores to be stored. Three indexes max."};
Configurable<std::vector<double>> binsPtD{"binsPtD", std::vector<double>{o2::analysis::hf_cuts_ds_to_k_k_pi::vecBinsPt}, "pT bin limits for candidate mass plots and efficiency"};
Configurable<std::vector<double>> binsPtHadron{"binsPtHadron", std::vector<double>{0.3, 2., 4., 8., 12., 50.}, "pT bin limits for assoc particle efficiency"};
Configurable<std::vector<double>> mlOutputPrompt{"mlOutputPrompt", {0.5, 0.5, 0.5, 0.5}, "Machine learning scores for prompt"};
Configurable<std::vector<double>> mlOutputPromptMin{"mlOutputPromptMin", {0.5, 0.5, 0.5, 0.5}, "Machine learning scores for prompt"};
Configurable<std::vector<double>> mlOutputPromptMax{"mlOutputPromptMax", {1.0, 1.0, 1.0, 1.0}, "Machine learning scores for prompt"};
Configurable<std::vector<double>> mlOutputBkg{"mlOutputBkg", {0.5, 0.5, 0.5, 0.5}, "Machine learning scores for bkg"};
Configurable<std::vector<double>> binsPtEfficiencyD{"binsPtEfficiencyD", std::vector<double>{o2::analysis::hf_cuts_ds_to_k_k_pi::vecBinsPt}, "pT bin limits for D-meson efficiency"};
Configurable<std::vector<double>> binsPtEfficiencyHad{"binsPtEfficiencyHad", std::vector<double>{0.3, 2., 4., 8., 12., 50.}, "pT bin limits for associated particle efficiency"};
Expand Down Expand Up @@ -266,6 +267,12 @@ struct HfTaskCorrelationDsHadrons {
}
}

bool isSelectedCandidate(const int ptBinD, const float bdtScorePrompt, const float bdtScoreBkg)
{

return (ptBinD != -1 && bdtScorePrompt >= mlOutputPromptMin->at(ptBinD) && bdtScorePrompt <= mlOutputPromptMax->at(ptBinD) && bdtScoreBkg <= mlOutputBkg->at(ptBinD));
}

void processData(DsHadronPairWithMl const& pairEntries,
aod::DsCandRecoInfo const& candidates)
{
Expand All @@ -276,9 +283,10 @@ struct HfTaskCorrelationDsHadrons {
float bdtScoreBkg = candidate.mlScoreBkg();
int ptBinD = o2::analysis::findBin(binsPtD, ptD);

if (bdtScorePrompt < mlOutputPrompt->at(ptBinD) || bdtScoreBkg > mlOutputBkg->at(ptBinD)) {
if (!isSelectedCandidate(ptBinD, bdtScorePrompt, bdtScoreBkg)) {
continue;
}

double efficiencyWeightD = 1.;
if (applyEfficiency) {
efficiencyWeightD = 1. / efficiencyD->at(o2::analysis::findBin(binsPtEfficiencyD, ptD));
Expand Down Expand Up @@ -306,9 +314,10 @@ struct HfTaskCorrelationDsHadrons {
int poolBin = pairEntry.poolBin();
int ptBinD = o2::analysis::findBin(binsPtD, ptD);

if (bdtScorePrompt < mlOutputPrompt->at(ptBinD) || bdtScoreBkg > mlOutputBkg->at(ptBinD)) {
if (!isSelectedCandidate(ptBinD, bdtScorePrompt, bdtScoreBkg)) {
continue;
}

if (trackDcaXY > dcaXYTrackMax || trackDcaZ > dcaZTrackMax || trackTpcCrossedRows < nTpcCrossedRaws) {
continue;
}
Expand Down Expand Up @@ -354,9 +363,10 @@ struct HfTaskCorrelationDsHadrons {
int ptBinD = o2::analysis::findBin(binsPtD, ptD);
bool isDsPrompt = candidate.isPrompt();

if (bdtScorePrompt < mlOutputPrompt->at(ptBinD) || bdtScoreBkg > mlOutputBkg->at(ptBinD)) {
if (!isSelectedCandidate(ptBinD, bdtScorePrompt, bdtScoreBkg)) {
continue;
}

double efficiencyWeightD = 1.;
if (applyEfficiency) {
efficiencyWeightD = 1. / efficiencyD->at(o2::analysis::findBin(binsPtEfficiencyD, ptD));
Expand Down Expand Up @@ -393,9 +403,10 @@ struct HfTaskCorrelationDsHadrons {
int ptBinD = o2::analysis::findBin(binsPtD, ptD);
bool isPhysicalPrimary = pairEntry.isPhysicalPrimary();

if (bdtScorePrompt < mlOutputPrompt->at(ptBinD) || bdtScoreBkg > mlOutputBkg->at(ptBinD)) {
if (!isSelectedCandidate(ptBinD, bdtScorePrompt, bdtScoreBkg)) {
continue;
}

if (trackDcaXY > dcaXYTrackMax || trackDcaZ > dcaZTrackMax || trackTpcCrossedRows < nTpcCrossedRaws) {
continue;
}
Expand All @@ -415,9 +426,9 @@ struct HfTaskCorrelationDsHadrons {
registry.fill(HIST("hCorrel2DVsPtSignalRegionMcRec"), deltaPhi, deltaEta, ptD, ptHadron, statusDsPrompt, poolBin, efficiencyWeight);
if (isPhysicalPrimary) {
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, ptD, ptHadron, statusDsPrompt, poolBin, efficiencyWeight);
if (statusDsPrompt == 1 && statusPromptHadron == 1) {
if (statusDsPrompt == 1 && statusPromptHadron == RecoDecay::OriginType::Prompt) {
registry.fill(HIST("hCorrel2DVsPtSignalRegionPromptDsPromptHadronMcRec"), deltaPhi, deltaEta, ptD, ptHadron, poolBin, efficiencyWeight);
} else if (statusDsPrompt == 0 && statusPromptHadron == 2) {
} else if (statusDsPrompt == 0 && statusPromptHadron == RecoDecay::OriginType::NonPrompt) {
registry.fill(HIST("hCorrel2DVsPtSignalRegionNonPromptDsNonPromptHadronMcRec"), deltaPhi, deltaEta, ptD, ptHadron, poolBin, efficiencyWeight);
}
}
Expand Down Expand Up @@ -457,12 +468,12 @@ struct HfTaskCorrelationDsHadrons {
registry.fill(HIST("hDeltaPhiPtIntMcGen"), deltaPhi);
if (isDsPrompt) {
registry.fill(HIST("hCorrel2DVsPtMcGenPrompt"), deltaPhi, deltaEta, ptD, ptHadron, poolBin);
if (statusPromptHadron == 1) {
if (statusPromptHadron == RecoDecay::OriginType::Prompt) {
registry.fill(HIST("hCorrel2DVsPtMcGenPromptDsPromptHadron"), deltaPhi, deltaEta, ptD, ptHadron, poolBin);
}
} else {
registry.fill(HIST("hCorrel2DVsPtMcGenNonPrompt"), deltaPhi, deltaEta, ptD, ptHadron, poolBin);
if (statusPromptHadron == 2) {
if (statusPromptHadron == RecoDecay::OriginType::NonPrompt) {
registry.fill(HIST("hCorrel2DVsPtMcGenNonPromptDsNonPromptHadron"), deltaPhi, deltaEta, ptD, ptHadron, poolBin);
}
}
Expand All @@ -487,9 +498,10 @@ struct HfTaskCorrelationDsHadrons {
int poolBin = pairEntry.poolBin();
int ptBinD = o2::analysis::findBin(binsPtD, ptD);

if (bdtScorePrompt < mlOutputPrompt->at(ptBinD) || bdtScoreBkg > mlOutputBkg->at(ptBinD)) {
if (!isSelectedCandidate(ptBinD, bdtScorePrompt, bdtScoreBkg)) {
continue;
}

if (trackDcaXY > dcaXYTrackMax || trackDcaZ > dcaZTrackMax || trackTpcCrossedRows < nTpcCrossedRaws) {
continue;
}
Expand Down Expand Up @@ -586,9 +598,10 @@ struct HfTaskCorrelationDsHadrons {
int ptBinD = o2::analysis::findBin(binsPtD, ptD);
bool isPhysicalPrimary = pairEntry.isPhysicalPrimary();

if (bdtScorePrompt < mlOutputPrompt->at(ptBinD) || bdtScoreBkg > mlOutputBkg->at(ptBinD)) {
if (!isSelectedCandidate(ptBinD, bdtScorePrompt, bdtScoreBkg)) {
continue;
}

if (trackDcaXY > dcaXYTrackMax || trackDcaZ > dcaZTrackMax || trackTpcCrossedRows < nTpcCrossedRaws) {
continue;
}
Expand All @@ -608,9 +621,9 @@ struct HfTaskCorrelationDsHadrons {
registry.fill(HIST("hCorrel2DVsPtSignalRegionMcRec"), deltaPhi, deltaEta, ptD, ptHadron, statusDsPrompt, poolBin, efficiencyWeight);
if (isPhysicalPrimary) {
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, ptD, ptHadron, statusDsPrompt, poolBin, efficiencyWeight);
if (statusDsPrompt == 1 && statusPromptHadron == 1) {
if (statusDsPrompt == 1 && statusPromptHadron == RecoDecay::OriginType::Prompt) {
registry.fill(HIST("hCorrel2DVsPtSignalRegionPromptDsPromptHadronMcRec"), deltaPhi, deltaEta, ptD, ptHadron, poolBin, efficiencyWeight);
} else if (statusDsPrompt == 0 && statusPromptHadron == 2) {
} else if (statusDsPrompt == 0 && statusPromptHadron == RecoDecay::OriginType::NonPrompt) {
registry.fill(HIST("hCorrel2DVsPtSignalRegionNonPromptDsNonPromptHadronMcRec"), deltaPhi, deltaEta, ptD, ptHadron, poolBin, efficiencyWeight);
}
}
Expand Down Expand Up @@ -720,7 +733,7 @@ struct HfTaskCorrelationDsHadrons {
outputMl[iclass] = candidate.mlProbDsToPiKK()[classMl->at(iclass)];
}
}
if (outputMl[0] < mlOutputPrompt->at(o2::analysis::findBin(binsPtD, candidate.pt())) || outputMl[2] > mlOutputBkg->at(o2::analysis::findBin(binsPtD, candidate.pt()))) {
if (outputMl[0] < mlOutputPromptMin->at(o2::analysis::findBin(binsPtD, candidate.pt())) || outputMl[0] < mlOutputPromptMax->at(o2::analysis::findBin(binsPtD, candidate.pt())) || outputMl[2] > mlOutputBkg->at(o2::analysis::findBin(binsPtD, candidate.pt()))) {
continue;
}

Expand Down Expand Up @@ -802,7 +815,7 @@ struct HfTaskCorrelationDsHadrons {
outputMl[iclass] = candidate.mlProbDsToPiKK()[classMl->at(iclass)];
}
}
if (outputMl[0] < mlOutputPrompt->at(o2::analysis::findBin(binsPtD, candidate.pt())) || outputMl[2] > mlOutputBkg->at(o2::analysis::findBin(binsPtD, candidate.pt()))) {
if (outputMl[0] < mlOutputPromptMin->at(o2::analysis::findBin(binsPtD, candidate.pt())) || outputMl[0] < mlOutputPromptMax->at(o2::analysis::findBin(binsPtD, candidate.pt())) || outputMl[2] > mlOutputBkg->at(o2::analysis::findBin(binsPtD, candidate.pt()))) {
continue;
}
auto collision = candidate.template collision_as<soa::Join<aod::Collisions, aod::FT0Mults, aod::EvSels>>();
Expand Down Expand Up @@ -897,9 +910,9 @@ struct HfTaskCorrelationDsHadrons {
}
if (separateTrackOrigins) {
int trackOrigin = RecoDecay::getCharmHadronOrigin(mcParticles, mcParticle, true);
if (trackOrigin == 1) { // charm orgin
if (trackOrigin == RecoDecay::OriginType::Prompt) { // charm orgin
registry.fill(HIST("hPtPrmPromptPartMcGen"), mcParticle.pt());
} else if (trackOrigin == 2) { // beauty origin
} else if (trackOrigin == RecoDecay::OriginType::NonPrompt) { // beauty origin
registry.fill(HIST("hPtPrmNonPromptPartMcGen"), mcParticle.pt());
}
}
Expand Down Expand Up @@ -938,9 +951,9 @@ struct HfTaskCorrelationDsHadrons {
// check track origin
if (separateTrackOrigins) {
int trackOrigin = RecoDecay::getCharmHadronOrigin(mcParticles, mcParticle, true);
if (trackOrigin == 1) { // charm orgin
if (trackOrigin == RecoDecay::OriginType::Prompt) { // charm orgin
registry.fill(HIST("hPtPrmPromptPartMcRec"), track.pt());
} else if (trackOrigin == 2) { // beauty origin
} else if (trackOrigin == RecoDecay::OriginType::NonPrompt) { // beauty origin
registry.fill(HIST("hPtPrmNonPromptPartMcRec"), track.pt());
}
}
Expand Down
Loading