From d8599cd3a143d428cd5bc0362acf57531478758d Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 29 Sep 2021 16:38:59 +0200 Subject: [PATCH 01/10] Separate prompt/nonprompt D+ and add different efficiency steps --- PWGHF/DataModel/HFCandidateSelectionTables.h | 8 +- .../HFDplusToPiKPiCandidateSelector.cxx | 14 +++- PWGHF/Tasks/taskDPlus.cxx | 74 +++++++++++++++++-- 3 files changed, 86 insertions(+), 10 deletions(-) diff --git a/PWGHF/DataModel/HFCandidateSelectionTables.h b/PWGHF/DataModel/HFCandidateSelectionTables.h index df3592c0495..c2242c16f72 100644 --- a/PWGHF/DataModel/HFCandidateSelectionTables.h +++ b/PWGHF/DataModel/HFCandidateSelectionTables.h @@ -64,9 +64,15 @@ DECLARE_SOA_TABLE(HFSelD0CandidateALICE3Forward, "AOD", "HFSELD0CANDA3F", //! namespace hf_selcandidate_dplus { DECLARE_SOA_COLUMN(IsSelDplusToPiKPi, isSelDplusToPiKPi, int); //! +DECLARE_SOA_COLUMN(IsRecoHFFlag, isRecoHFFlag, int); //! +DECLARE_SOA_COLUMN(IsRecoTopol, isRecoTopol, int); //! +DECLARE_SOA_COLUMN(IsRecoPID, isRecoPID, int); } // namespace hf_selcandidate_dplus DECLARE_SOA_TABLE(HFSelDplusToPiKPiCandidate, "AOD", "HFSELDPLUSCAND", //! - hf_selcandidate_dplus::IsSelDplusToPiKPi); + hf_selcandidate_dplus::IsSelDplusToPiKPi, + hf_selcandidate_dplus::IsRecoHFFlag, + hf_selcandidate_dplus::IsRecoTopol, + hf_selcandidate_dplus::IsRecoPID); namespace hf_selcandidate_lc { diff --git a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx index be8b8a11e11..2814411085a 100644 --- a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx +++ b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx @@ -121,11 +121,15 @@ struct HFDplusToPiKPiCandidateSelector { // final selection flag: 0 - rejected, 1 - accepted auto statusDplusToPiKPi = 0; + auto statusHFFlag = 0; + auto statusTopol = 0; + auto statusPID = 0; if (!(candidate.hfflag() & 1 << DecayType::DPlusToPiKPi)) { - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); continue; } + statusHFFlag = 1; auto trackPos1 = candidate.index0_as(); // positive daughter (negative for the antiparticles) auto trackNeg = candidate.index1_as(); // negative daughter (positive for the antiparticles) @@ -143,9 +147,10 @@ struct HFDplusToPiKPiCandidateSelector { // topological selection if (!selection(candidate, trackPos1, trackNeg, trackPos2)) { - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); continue; } + statusTopol = 1; // track-level PID selection int pidTrackPos1Pion = selectorPion.getStatusTrackPIDAll(trackPos1); @@ -155,12 +160,13 @@ struct HFDplusToPiKPiCandidateSelector { if (pidTrackPos1Pion == TrackSelectorPID::Status::PIDRejected || pidTrackNegKaon == TrackSelectorPID::Status::PIDRejected || pidTrackPos2Pion == TrackSelectorPID::Status::PIDRejected) { // exclude D± - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); continue; } + statusPID = 1; statusDplusToPiKPi = 1; - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); } } }; diff --git a/PWGHF/Tasks/taskDPlus.cxx b/PWGHF/Tasks/taskDPlus.cxx index f6d7a7cb25f..b75bdcc9dc9 100644 --- a/PWGHF/Tasks/taskDPlus.cxx +++ b/PWGHF/Tasks/taskDPlus.cxx @@ -24,6 +24,7 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; +using namespace o2::aod::hf_cand; using namespace o2::aod::hf_cand_prong3; void customize(std::vector& workflowOptions) @@ -113,19 +114,38 @@ struct TaskDPlusMC { HistogramRegistry registry{ "registry", {{"hPtRecSig", "3-prong candidates (matched);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, + {"hPtRecSigPrompt", "3-prong candidates (matched, prompt);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, + {"hPtRecSigNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, {"hPtRecBg", "3-prong candidates (unmatched);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, {"hPtGen", "MC particles (matched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, {"hPtGenSig", "3-prong candidates (matched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, + {"hPtGenSigPrompt", "3-prong candidates (matched, prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, + {"hPtGenSigNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, {"hCPARecSig", "3-prong candidates (matched);cosine of pointing angle;entries", {HistType::kTH1F, {{110, -1.1, 1.1}}}}, {"hCPARecBg", "3-prong candidates (unmatched);cosine of pointing angle;entries", {HistType::kTH1F, {{110, -1.1, 1.1}}}}, {"hEtaRecSig", "3-prong candidates (matched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}, {"hEtaRecBg", "3-prong candidates (unmatched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}, - {"hEtaGen", "MC particles (matched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}}}; + {"hEtaGen", "MC particles (matched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}, + {"hPtvsYRecSig_RecoPID", "2-prong candidates (RecoPID - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSigPrompt_RecoPID", "2-prong candidates (RecoPID - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSigNonPrompt_RecoPID", "2-prong candidates (RecoPID - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSig_RecoTopol", "2-prong candidates (RecoTopol - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSigPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSigNonPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSig_RecoHFFlag", "2-prong candidates (RecoHFFlag - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSigPrompt_RecoHFFlag", "2-prong candidates (RecoHFFlag - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYRecSigNonPrompt_RecoHFFlag", "2-prong candidates (RecoHFFlag - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYGen", "2-prong candidates (matched);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYGenPrompt", "2-prong candidates (matched, prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, + {"hPtvsYGenNonPrompt", "2-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}}}; Configurable d_selectionFlagDPlus{"d_selectionFlagDPlus", 1, "Selection Flag for DPlus"}; + Configurable d_selectionHFFlag{"d_selectionHFFlag", 1, "Selection Flag for HF flagged candidates"}; + Configurable d_selectionTopol{"d_selectionTopol", 1, "Selection Flag for topologically selected candidates"}; + Configurable d_selectionPID{"d_selectionPID", 1, "Selection Flag for reco PID candidates"}; Configurable cutYCandMax{"cutYCandMax", -1., "max. cand. rapidity"}; - Filter filterSelectCandidates = (aod::hf_selcandidate_dplus::isSelDplusToPiKPi >= d_selectionFlagDPlus); + Filter filterSelectCandidates = (aod::hf_selcandidate_dplus::isRecoHFFlag >= d_selectionHFFlag); void process(soa::Filtered> const& candidates, soa::Join const& particlesMC, aod::BigTracksMC const& tracks) @@ -145,7 +165,41 @@ struct TaskDPlusMC { auto indexMother = RecoDecay::getMother(particlesMC, candidate.index0_as().mcParticle_as>(), pdg::Code::kDPlus, true); auto particleMother = particlesMC.iteratorAt(indexMother); registry.fill(HIST("hPtGenSig"), particleMother.pt()); // gen. level pT - registry.fill(HIST("hPtRecSig"), candidate.pt()); // rec. level pT + auto ptRec = candidate.pt(); + auto yRec = YDPlus(candidate); + registry.fill(HIST("hPtRecSig"), ptRec); // rec. level pT + if (candidate.isRecoHFFlag() >= d_selectionHFFlag) { + registry.fill(HIST("hPtvsYRecSig_RecoHFFlag"), ptRec, yRec); + } + if (candidate.isRecoTopol() >= d_selectionTopol) { + registry.fill(HIST("hPtvsYRecSig_RecoTopol"), ptRec, yRec); + } + if (candidate.isRecoPID() >= d_selectionPID) { + registry.fill(HIST("hPtvsYRecSig_RecoPID"), ptRec, yRec); + } + if (candidate.originMCRec() == OriginType::Prompt) { + registry.fill(HIST("hPtRecSigPrompt"), ptRec); // rec. level pT, prompt + if (candidate.isRecoHFFlag() >= d_selectionHFFlag) { + registry.fill(HIST("hPtvsYRecSigPrompt_RecoHFFlag"), ptRec, yRec); + } + if (candidate.isRecoTopol() >= d_selectionTopol) { + registry.fill(HIST("hPtvsYRecSigPrompt_RecoTopol"), ptRec, yRec); + } + if (candidate.isRecoPID() >= d_selectionPID) { + registry.fill(HIST("hPtvsYRecSigPrompt_RecoPID"), ptRec, yRec); + } + } else { + registry.fill(HIST("hPtRecSigNonPrompt"), ptRec); // rec. level pT, non-prompt + if (candidate.isRecoHFFlag() >= d_selectionHFFlag) { + registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoHFFlag"), ptRec, yRec); + } + if (candidate.isRecoTopol() >= d_selectionTopol) { + registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoTopol"), ptRec, yRec); + } + if (candidate.isRecoPID() >= d_selectionPID) { + registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoPID"), ptRec, yRec); + } + } registry.fill(HIST("hCPARecSig"), candidate.cpa()); registry.fill(HIST("hEtaRecSig"), candidate.eta()); } else { @@ -158,10 +212,20 @@ struct TaskDPlusMC { //Printf("MC Particles: %d", particlesMC.size()); for (auto& particle : particlesMC) { if (std::abs(particle.flagMCMatchGen()) == 1 << DecayType::DPlusToPiKPi) { - if (cutYCandMax >= 0. && std::abs(RecoDecay::Y(array{particle.px(), particle.py(), particle.pz()}, RecoDecay::getMassPDG(particle.pdgCode()))) > cutYCandMax) { + auto ptGen = particle.pt(); + auto yGen = RecoDecay::Y(array{particle.px(), particle.py(), particle.pz()}, RecoDecay::getMassPDG(particle.pdgCode())); + if (cutYCandMax >= 0. && std::abs(yGen) > cutYCandMax) { continue; } - registry.fill(HIST("hPtGen"), particle.pt()); + registry.fill(HIST("hPtGen"), ptGen); + registry.fill(HIST("hPtvsYGen"), ptGen, yGen); + if (particle.originMCGen() == OriginType::Prompt) { + registry.fill(HIST("hPtGenPrompt"), ptGen); + registry.fill(HIST("hPtvsYGenPrompt"), ptGen, yGen); + } else { + registry.fill(HIST("hPtGenNonPrompt"), ptGen); + registry.fill(HIST("hPtvsYGenNonPrompt"), ptGen, yGen); + } registry.fill(HIST("hEtaGen"), particle.eta()); } } From 93f2be60a6194643a89aedbaae58e70fb700da49 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 29 Sep 2021 16:42:28 +0200 Subject: [PATCH 02/10] Fix format --- PWGHF/DataModel/HFCandidateSelectionTables.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/DataModel/HFCandidateSelectionTables.h b/PWGHF/DataModel/HFCandidateSelectionTables.h index c2242c16f72..41d59147aec 100644 --- a/PWGHF/DataModel/HFCandidateSelectionTables.h +++ b/PWGHF/DataModel/HFCandidateSelectionTables.h @@ -64,8 +64,8 @@ DECLARE_SOA_TABLE(HFSelD0CandidateALICE3Forward, "AOD", "HFSELD0CANDA3F", //! namespace hf_selcandidate_dplus { DECLARE_SOA_COLUMN(IsSelDplusToPiKPi, isSelDplusToPiKPi, int); //! -DECLARE_SOA_COLUMN(IsRecoHFFlag, isRecoHFFlag, int); //! -DECLARE_SOA_COLUMN(IsRecoTopol, isRecoTopol, int); //! +DECLARE_SOA_COLUMN(IsRecoHFFlag, isRecoHFFlag, int); //! +DECLARE_SOA_COLUMN(IsRecoTopol, isRecoTopol, int); //! DECLARE_SOA_COLUMN(IsRecoPID, isRecoPID, int); } // namespace hf_selcandidate_dplus DECLARE_SOA_TABLE(HFSelDplusToPiKPiCandidate, "AOD", "HFSELDPLUSCAND", //! From 8c2146a4876f0d04cfeecd3953aaa06ccd9bb92b Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Thu, 30 Sep 2021 12:01:38 +0200 Subject: [PATCH 03/10] Implement Fabio's suggestions --- PWGHF/DataModel/HFCandidateSelectionTables.h | 8 +-- .../HFDplusToPiKPiCandidateSelector.cxx | 26 +++---- PWGHF/Tasks/taskDPlus.cxx | 72 ++++++++----------- 3 files changed, 45 insertions(+), 61 deletions(-) diff --git a/PWGHF/DataModel/HFCandidateSelectionTables.h b/PWGHF/DataModel/HFCandidateSelectionTables.h index 41d59147aec..df3592c0495 100644 --- a/PWGHF/DataModel/HFCandidateSelectionTables.h +++ b/PWGHF/DataModel/HFCandidateSelectionTables.h @@ -64,15 +64,9 @@ DECLARE_SOA_TABLE(HFSelD0CandidateALICE3Forward, "AOD", "HFSELD0CANDA3F", //! namespace hf_selcandidate_dplus { DECLARE_SOA_COLUMN(IsSelDplusToPiKPi, isSelDplusToPiKPi, int); //! -DECLARE_SOA_COLUMN(IsRecoHFFlag, isRecoHFFlag, int); //! -DECLARE_SOA_COLUMN(IsRecoTopol, isRecoTopol, int); //! -DECLARE_SOA_COLUMN(IsRecoPID, isRecoPID, int); } // namespace hf_selcandidate_dplus DECLARE_SOA_TABLE(HFSelDplusToPiKPiCandidate, "AOD", "HFSELDPLUSCAND", //! - hf_selcandidate_dplus::IsSelDplusToPiKPi, - hf_selcandidate_dplus::IsRecoHFFlag, - hf_selcandidate_dplus::IsRecoTopol, - hf_selcandidate_dplus::IsRecoPID); + hf_selcandidate_dplus::IsSelDplusToPiKPi); namespace hf_selcandidate_lc { diff --git a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx index 2814411085a..7fa705d4734 100644 --- a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx +++ b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx @@ -119,17 +119,18 @@ struct HFDplusToPiKPiCandidateSelector { // looping over 3-prong candidates for (auto& candidate : candidates) { - // final selection flag: 0 - rejected, 1 - accepted + // final selection flag: + // 0 - rejected + // BIT(0) - bit for D+ candidate + // BIT(1) - selected by topological cuts + // BIT(2) - selected by PID cuts auto statusDplusToPiKPi = 0; - auto statusHFFlag = 0; - auto statusTopol = 0; - auto statusPID = 0; - + if (!(candidate.hfflag() & 1 << DecayType::DPlusToPiKPi)) { - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); continue; } - statusHFFlag = 1; + SETBIT(statusDplusToPiKPi, 0); auto trackPos1 = candidate.index0_as(); // positive daughter (negative for the antiparticles) auto trackNeg = candidate.index1_as(); // negative daughter (positive for the antiparticles) @@ -147,10 +148,10 @@ struct HFDplusToPiKPiCandidateSelector { // topological selection if (!selection(candidate, trackPos1, trackNeg, trackPos2)) { - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); continue; } - statusTopol = 1; + SETBIT(statusDplusToPiKPi, 1); // track-level PID selection int pidTrackPos1Pion = selectorPion.getStatusTrackPIDAll(trackPos1); @@ -160,13 +161,12 @@ struct HFDplusToPiKPiCandidateSelector { if (pidTrackPos1Pion == TrackSelectorPID::Status::PIDRejected || pidTrackNegKaon == TrackSelectorPID::Status::PIDRejected || pidTrackPos2Pion == TrackSelectorPID::Status::PIDRejected) { // exclude D± - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); continue; } - statusPID = 1; + SETBIT(statusDplusToPiKPi, 2); - statusDplusToPiKPi = 1; - hfSelDplusToPiKPiCandidate(statusDplusToPiKPi, statusHFFlag, statusTopol, statusPID); + hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); } } }; diff --git a/PWGHF/Tasks/taskDPlus.cxx b/PWGHF/Tasks/taskDPlus.cxx index b75bdcc9dc9..bfe46a3374c 100644 --- a/PWGHF/Tasks/taskDPlus.cxx +++ b/PWGHF/Tasks/taskDPlus.cxx @@ -113,39 +113,38 @@ struct TaskDPlus { struct TaskDPlusMC { HistogramRegistry registry{ "registry", - {{"hPtRecSig", "3-prong candidates (matched);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hPtRecSigPrompt", "3-prong candidates (matched, prompt);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hPtRecSigNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hPtRecBg", "3-prong candidates (unmatched);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hPtGen", "MC particles (matched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hPtGenSig", "3-prong candidates (matched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hPtGenSigPrompt", "3-prong candidates (matched, prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hPtGenSigNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, - {"hCPARecSig", "3-prong candidates (matched);cosine of pointing angle;entries", {HistType::kTH1F, {{110, -1.1, 1.1}}}}, + {{"hCPARecSig", "3-prong candidates (matched);cosine of pointing angle;entries", {HistType::kTH1F, {{110, -1.1, 1.1}}}}, {"hCPARecBg", "3-prong candidates (unmatched);cosine of pointing angle;entries", {HistType::kTH1F, {{110, -1.1, 1.1}}}}, {"hEtaRecSig", "3-prong candidates (matched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}, {"hEtaRecBg", "3-prong candidates (unmatched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}, - {"hEtaGen", "MC particles (matched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}, - {"hPtvsYRecSig_RecoPID", "2-prong candidates (RecoPID - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSigPrompt_RecoPID", "2-prong candidates (RecoPID - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSigNonPrompt_RecoPID", "2-prong candidates (RecoPID - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSig_RecoTopol", "2-prong candidates (RecoTopol - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSigPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSigNonPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSig_RecoHFFlag", "2-prong candidates (RecoHFFlag - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSigPrompt_RecoHFFlag", "2-prong candidates (RecoHFFlag - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYRecSigNonPrompt_RecoHFFlag", "2-prong candidates (RecoHFFlag - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYGen", "2-prong candidates (matched);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYGenPrompt", "2-prong candidates (matched, prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}, - {"hPtvsYGenNonPrompt", "2-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{100, 0., 10.}, {100, -5., 5.}}}}}}; + {"hEtaGen", "MC particles (matched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}}}; Configurable d_selectionFlagDPlus{"d_selectionFlagDPlus", 1, "Selection Flag for DPlus"}; - Configurable d_selectionHFFlag{"d_selectionHFFlag", 1, "Selection Flag for HF flagged candidates"}; - Configurable d_selectionTopol{"d_selectionTopol", 1, "Selection Flag for topologically selected candidates"}; - Configurable d_selectionPID{"d_selectionPID", 1, "Selection Flag for reco PID candidates"}; Configurable cutYCandMax{"cutYCandMax", -1., "max. cand. rapidity"}; + Configurable> bins{"pTBins", std::vector{hf_cuts_dplus_topikpi::pTBins_v}, "pT bin limits"}; + + void init(o2::framework::InitContext&) + { + auto vbins = (std::vector)bins; - Filter filterSelectCandidates = (aod::hf_selcandidate_dplus::isRecoHFFlag >= d_selectionHFFlag); + registry.add("hPtRecSig", "3-prong candidates (matched);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); + registry.add("hPtRecSigNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); + registry.add("hPtRecBg", "3-prong candidates (unmatched);#it{p}_{T}^{rec.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); + registry.add("hPtGen", "MC particles (matched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); + registry.add("hPtGenSig", "3-prong candidates (matched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); + registry.add("hPtGenSigPrompt", "3-prong candidates (matched, prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); + registry.add("hPtGenSigNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); + registry.add("hPtvsYRecSig_RecoPID", "2-prong candidates (RecoPID - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigPrompt_RecoPID", "2-prong candidates (RecoPID - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigNonPrompt_RecoPID", "2-prong candidates (RecoPID - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSig_RecoTopol", "2-prong candidates (RecoTopol - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigNonPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYGenPrompt", "2-prong candidates (matched, prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYGenNonPrompt", "2-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + } + + Filter filterSelectCandidates = (aod::hf_selcandidate_dplus::isSelDplusToPiKPi >= d_selectionFlagDPlus); void process(soa::Filtered> const& candidates, soa::Join const& particlesMC, aod::BigTracksMC const& tracks) @@ -168,35 +167,26 @@ struct TaskDPlusMC { auto ptRec = candidate.pt(); auto yRec = YDPlus(candidate); registry.fill(HIST("hPtRecSig"), ptRec); // rec. level pT - if (candidate.isRecoHFFlag() >= d_selectionHFFlag) { - registry.fill(HIST("hPtvsYRecSig_RecoHFFlag"), ptRec, yRec); - } - if (candidate.isRecoTopol() >= d_selectionTopol) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { registry.fill(HIST("hPtvsYRecSig_RecoTopol"), ptRec, yRec); } - if (candidate.isRecoPID() >= d_selectionPID) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { registry.fill(HIST("hPtvsYRecSig_RecoPID"), ptRec, yRec); } if (candidate.originMCRec() == OriginType::Prompt) { registry.fill(HIST("hPtRecSigPrompt"), ptRec); // rec. level pT, prompt - if (candidate.isRecoHFFlag() >= d_selectionHFFlag) { - registry.fill(HIST("hPtvsYRecSigPrompt_RecoHFFlag"), ptRec, yRec); - } - if (candidate.isRecoTopol() >= d_selectionTopol) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoTopol"), ptRec, yRec); } - if (candidate.isRecoPID() >= d_selectionPID) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoPID"), ptRec, yRec); } } else { registry.fill(HIST("hPtRecSigNonPrompt"), ptRec); // rec. level pT, non-prompt - if (candidate.isRecoHFFlag() >= d_selectionHFFlag) { - registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoHFFlag"), ptRec, yRec); - } - if (candidate.isRecoTopol() >= d_selectionTopol) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoTopol"), ptRec, yRec); } - if (candidate.isRecoPID() >= d_selectionPID) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoPID"), ptRec, yRec); } } From e02cacc15eca9026864246d0947e36a70061cdf5 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Thu, 30 Sep 2021 12:02:41 +0200 Subject: [PATCH 04/10] Fix format --- PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx index 7fa705d4734..6fadbb132b4 100644 --- a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx +++ b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx @@ -125,7 +125,7 @@ struct HFDplusToPiKPiCandidateSelector { // BIT(1) - selected by topological cuts // BIT(2) - selected by PID cuts auto statusDplusToPiKPi = 0; - + if (!(candidate.hfflag() & 1 << DecayType::DPlusToPiKPi)) { hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); continue; From 07989608300c020fde3fa6e0dcdcd9e5bfffe4be Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Thu, 30 Sep 2021 14:45:00 +0200 Subject: [PATCH 05/10] Change default for selection in data process --- PWGHF/Tasks/taskDPlus.cxx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/PWGHF/Tasks/taskDPlus.cxx b/PWGHF/Tasks/taskDPlus.cxx index bfe46a3374c..cbf6a35cd55 100644 --- a/PWGHF/Tasks/taskDPlus.cxx +++ b/PWGHF/Tasks/taskDPlus.cxx @@ -44,7 +44,7 @@ struct TaskDPlus { {"hPtProng1", "3-prong candidates;prong 1 #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}, {"hPtProng2", "3-prong candidates;prong 2 #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}}}; - Configurable d_selectionFlagDPlus{"d_selectionFlagDPlus", 1, "Selection Flag for DPlus"}; + Configurable d_selectionFlagDPlus{"d_selectionFlagDPlus", 7, "Selection Flag for DPlus"}; // 7 corresponds to topo+PID cuts Configurable cutYCandMax{"cutYCandMax", -1., "max. cand. rapidity"}; Configurable> bins{"pTBins", std::vector{hf_cuts_dplus_topikpi::pTBins_v}, "pT bin limits"}; @@ -119,7 +119,6 @@ struct TaskDPlusMC { {"hEtaRecBg", "3-prong candidates (unmatched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}, {"hEtaGen", "MC particles (matched);#it{#eta};entries", {HistType::kTH1F, {{100, -2., 2.}}}}}}; - Configurable d_selectionFlagDPlus{"d_selectionFlagDPlus", 1, "Selection Flag for DPlus"}; Configurable cutYCandMax{"cutYCandMax", -1., "max. cand. rapidity"}; Configurable> bins{"pTBins", std::vector{hf_cuts_dplus_topikpi::pTBins_v}, "pT bin limits"}; @@ -144,7 +143,7 @@ struct TaskDPlusMC { registry.add("hPtvsYGenNonPrompt", "2-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); } - Filter filterSelectCandidates = (aod::hf_selcandidate_dplus::isSelDplusToPiKPi >= d_selectionFlagDPlus); + Filter filterSelectCandidates = (aod::hf_selcandidate_dplus::isSelDplusToPiKPi > 0); void process(soa::Filtered> const& candidates, soa::Join const& particlesMC, aod::BigTracksMC const& tracks) From b511de3945600963f73afe3a455538b2615fc11f Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Tue, 5 Oct 2021 16:12:11 +0200 Subject: [PATCH 06/10] Add histogram for efficiency at skim level --- PWGHF/Tasks/taskDPlus.cxx | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/PWGHF/Tasks/taskDPlus.cxx b/PWGHF/Tasks/taskDPlus.cxx index cbf6a35cd55..f8d3c5ad98a 100644 --- a/PWGHF/Tasks/taskDPlus.cxx +++ b/PWGHF/Tasks/taskDPlus.cxx @@ -121,6 +121,7 @@ struct TaskDPlusMC { Configurable cutYCandMax{"cutYCandMax", -1., "max. cand. rapidity"}; Configurable> bins{"pTBins", std::vector{hf_cuts_dplus_topikpi::pTBins_v}, "pT bin limits"}; + Configurable d_selectionFlagDPlus{"d_selectionFlagDPlus", 7, "Selection Flag for DPlus"}; // 7 corresponds to topo+PID cuts void init(o2::framework::InitContext&) { @@ -133,14 +134,17 @@ struct TaskDPlusMC { registry.add("hPtGenSig", "3-prong candidates (matched);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); registry.add("hPtGenSigPrompt", "3-prong candidates (matched, prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); registry.add("hPtGenSigNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.} (GeV/#it{c});entries", {HistType::kTH1F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}}}); - registry.add("hPtvsYRecSig_RecoPID", "2-prong candidates (RecoPID - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); - registry.add("hPtvsYRecSigPrompt_RecoPID", "2-prong candidates (RecoPID - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); - registry.add("hPtvsYRecSigNonPrompt_RecoPID", "2-prong candidates (RecoPID - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); - registry.add("hPtvsYRecSig_RecoTopol", "2-prong candidates (RecoTopol - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); - registry.add("hPtvsYRecSigPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); - registry.add("hPtvsYRecSigNonPrompt_RecoTopol", "2-prong candidates (RecoTopol - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); - registry.add("hPtvsYGenPrompt", "2-prong candidates (matched, prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); - registry.add("hPtvsYGenNonPrompt", "2-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSig_RecoPID", "3-prong candidates (RecoPID - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigPrompt_RecoPID", "3-prong candidates (RecoPID - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigNonPrompt_RecoPID", "3-prong candidates (RecoPID - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSig_RecoTopol", "3-prong candidates (RecoTopol - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigPrompt_RecoTopol", "3-prong candidates (RecoTopol - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigNonPrompt_RecoTopol", "3-prong candidates (RecoTopol - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSig_RecoSkim", "3-prong candidates (RecoSkim - matched);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigPrompt_RecoSkim", "3-prong candidates (RecoSkim - matched, prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYRecSigNonPrompt_RecoSkim", "3-prong candidates (RecoSkim - matched, non-prompt);#it{p}_{T}^{rec.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYGenPrompt", "3-prong candidates (matched, prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); + registry.add("hPtvsYGenNonPrompt", "3-prong candidates (matched, non-prompt);#it{p}_{T}^{gen.}; #it{y}", {HistType::kTH2F, {{vbins, "#it{p}_{T} (GeV/#it{c})"}, {100, -5., 5.}}}); } Filter filterSelectCandidates = (aod::hf_selcandidate_dplus::isSelDplusToPiKPi > 0); @@ -165,29 +169,38 @@ struct TaskDPlusMC { registry.fill(HIST("hPtGenSig"), particleMother.pt()); // gen. level pT auto ptRec = candidate.pt(); auto yRec = YDPlus(candidate); - registry.fill(HIST("hPtRecSig"), ptRec); // rec. level pT + registry.fill(HIST("hPtvsYRecSig_RecoSkim"), ptRec, yRec); if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { registry.fill(HIST("hPtvsYRecSig_RecoTopol"), ptRec, yRec); } if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { registry.fill(HIST("hPtvsYRecSig_RecoPID"), ptRec, yRec); } + if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) { + registry.fill(HIST("hPtRecSig"), ptRec); // rec. level pT + } if (candidate.originMCRec() == OriginType::Prompt) { - registry.fill(HIST("hPtRecSigPrompt"), ptRec); // rec. level pT, prompt + registry.fill(HIST("hPtvsYRecSigPrompt_RecoSkim"), ptRec, yRec); if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoTopol"), ptRec, yRec); } if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoPID"), ptRec, yRec); } + if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) { + registry.fill(HIST("hPtRecSigPrompt"), ptRec); // rec. level pT, prompt + } } else { - registry.fill(HIST("hPtRecSigNonPrompt"), ptRec); // rec. level pT, non-prompt + registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoSkim"), ptRec, yRec); if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoTopol"), ptRec, yRec); } if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoPID"), ptRec, yRec); } + if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) { + registry.fill(HIST("hPtRecSigNonPrompt"), ptRec); // rec. level pT, non-prompt + } } registry.fill(HIST("hCPARecSig"), candidate.cpa()); registry.fill(HIST("hEtaRecSig"), candidate.eta()); From bdb8dc5f5df63b6d499da54e1e0e97fd2cbb895d Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 6 Oct 2021 22:30:36 +0200 Subject: [PATCH 07/10] Define enum with selection step --- PWGHF/DataModel/HFCandidateSelectionTables.h | 8 ++++++++ .../TableProducer/HFDplusToPiKPiCandidateSelector.cxx | 10 +++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/PWGHF/DataModel/HFCandidateSelectionTables.h b/PWGHF/DataModel/HFCandidateSelectionTables.h index df3592c0495..78846ebab02 100644 --- a/PWGHF/DataModel/HFCandidateSelectionTables.h +++ b/PWGHF/DataModel/HFCandidateSelectionTables.h @@ -14,6 +14,14 @@ namespace o2::aod { +// selection steps +enum SelectionStep { + RecoSkims = 0, + RecoTopol, + RecoPID, + NSelectionSteps +}; + namespace hf_selcandidate_d0 { DECLARE_SOA_COLUMN(IsSelD0, isSelD0, int); //! diff --git a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx index 6fadbb132b4..6f2a3d8c7fb 100644 --- a/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx +++ b/PWGHF/TableProducer/HFDplusToPiKPiCandidateSelector.cxx @@ -120,17 +120,13 @@ struct HFDplusToPiKPiCandidateSelector { for (auto& candidate : candidates) { // final selection flag: - // 0 - rejected - // BIT(0) - bit for D+ candidate - // BIT(1) - selected by topological cuts - // BIT(2) - selected by PID cuts auto statusDplusToPiKPi = 0; if (!(candidate.hfflag() & 1 << DecayType::DPlusToPiKPi)) { hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); continue; } - SETBIT(statusDplusToPiKPi, 0); + SETBIT(statusDplusToPiKPi, aod::SelectionStep::RecoSkims); auto trackPos1 = candidate.index0_as(); // positive daughter (negative for the antiparticles) auto trackNeg = candidate.index1_as(); // negative daughter (positive for the antiparticles) @@ -151,7 +147,7 @@ struct HFDplusToPiKPiCandidateSelector { hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); continue; } - SETBIT(statusDplusToPiKPi, 1); + SETBIT(statusDplusToPiKPi, aod::SelectionStep::RecoTopol); // track-level PID selection int pidTrackPos1Pion = selectorPion.getStatusTrackPIDAll(trackPos1); @@ -164,7 +160,7 @@ struct HFDplusToPiKPiCandidateSelector { hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); continue; } - SETBIT(statusDplusToPiKPi, 2); + SETBIT(statusDplusToPiKPi, aod::SelectionStep::RecoPID); hfSelDplusToPiKPiCandidate(statusDplusToPiKPi); } From 81e908cadbd80e8add86faa710104fc9c7577e20 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 6 Oct 2021 22:32:34 +0200 Subject: [PATCH 08/10] Fix format --- PWGHF/DataModel/HFCandidateSelectionTables.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGHF/DataModel/HFCandidateSelectionTables.h b/PWGHF/DataModel/HFCandidateSelectionTables.h index 78846ebab02..c00db54dc0b 100644 --- a/PWGHF/DataModel/HFCandidateSelectionTables.h +++ b/PWGHF/DataModel/HFCandidateSelectionTables.h @@ -16,10 +16,10 @@ namespace o2::aod { // selection steps enum SelectionStep { - RecoSkims = 0, - RecoTopol, - RecoPID, - NSelectionSteps + RecoSkims = 0, + RecoTopol, + RecoPID, + NSelectionSteps }; namespace hf_selcandidate_d0 From 953b205afc152a8ce15affee0e2e2af3d5546e91 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 6 Oct 2021 22:34:53 +0200 Subject: [PATCH 09/10] Fix format --- PWGHF/Tasks/taskDPlus.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/Tasks/taskDPlus.cxx b/PWGHF/Tasks/taskDPlus.cxx index f8d3c5ad98a..9ce233abf5a 100644 --- a/PWGHF/Tasks/taskDPlus.cxx +++ b/PWGHF/Tasks/taskDPlus.cxx @@ -177,7 +177,7 @@ struct TaskDPlusMC { registry.fill(HIST("hPtvsYRecSig_RecoPID"), ptRec, yRec); } if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) { - registry.fill(HIST("hPtRecSig"), ptRec); // rec. level pT + registry.fill(HIST("hPtRecSig"), ptRec); // rec. level pT } if (candidate.originMCRec() == OriginType::Prompt) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoSkim"), ptRec, yRec); @@ -199,7 +199,7 @@ struct TaskDPlusMC { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoPID"), ptRec, yRec); } if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) { - registry.fill(HIST("hPtRecSigNonPrompt"), ptRec); // rec. level pT, non-prompt + registry.fill(HIST("hPtRecSigNonPrompt"), ptRec); // rec. level pT, non-prompt } } registry.fill(HIST("hCPARecSig"), candidate.cpa()); From f8350132a57a8bc5b4d47afe72ac7594af2cc562 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Thu, 7 Oct 2021 09:33:13 +0200 Subject: [PATCH 10/10] Substitute numbers with enum elements --- PWGHF/Tasks/taskDPlus.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PWGHF/Tasks/taskDPlus.cxx b/PWGHF/Tasks/taskDPlus.cxx index 9ce233abf5a..eaa09deaa00 100644 --- a/PWGHF/Tasks/taskDPlus.cxx +++ b/PWGHF/Tasks/taskDPlus.cxx @@ -170,10 +170,10 @@ struct TaskDPlusMC { auto ptRec = candidate.pt(); auto yRec = YDPlus(candidate); registry.fill(HIST("hPtvsYRecSig_RecoSkim"), ptRec, yRec); - if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), aod::SelectionStep::RecoTopol)) { registry.fill(HIST("hPtvsYRecSig_RecoTopol"), ptRec, yRec); } - if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), aod::SelectionStep::RecoPID)) { registry.fill(HIST("hPtvsYRecSig_RecoPID"), ptRec, yRec); } if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) { @@ -181,10 +181,10 @@ struct TaskDPlusMC { } if (candidate.originMCRec() == OriginType::Prompt) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoSkim"), ptRec, yRec); - if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), aod::SelectionStep::RecoTopol)) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoTopol"), ptRec, yRec); } - if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), aod::SelectionStep::RecoPID)) { registry.fill(HIST("hPtvsYRecSigPrompt_RecoPID"), ptRec, yRec); } if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) { @@ -192,10 +192,10 @@ struct TaskDPlusMC { } } else { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoSkim"), ptRec, yRec); - if (TESTBIT(candidate.isSelDplusToPiKPi(), 1)) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), aod::SelectionStep::RecoTopol)) { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoTopol"), ptRec, yRec); } - if (TESTBIT(candidate.isSelDplusToPiKPi(), 2)) { + if (TESTBIT(candidate.isSelDplusToPiKPi(), aod::SelectionStep::RecoPID)) { registry.fill(HIST("hPtvsYRecSigNonPrompt_RecoPID"), ptRec, yRec); } if (candidate.isSelDplusToPiKPi() >= d_selectionFlagDPlus) {