From ca58ffa552ae62e2165bb10486d3bdffb3ea6757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Sat, 30 May 2026 20:44:32 +0200 Subject: [PATCH] Enhance deuteron candidate selection parameters Added configurations for deuteron candidate selection and DCA preselection. --- PWGHF/D2H/Tasks/taskCd.cxx | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskCd.cxx b/PWGHF/D2H/Tasks/taskCd.cxx index d4ca3b0fbf6..a7997f5c189 100644 --- a/PWGHF/D2H/Tasks/taskCd.cxx +++ b/PWGHF/D2H/Tasks/taskCd.cxx @@ -10,7 +10,7 @@ // or submit itself to any jurisdiction. /// \file taskCd.cxx -/// \brief Cd± → d± K∓ π± analysis task +/// \brief cd± → d± K∓ π± analysis task /// \author Biao Zhang , Heidelberg Universiity #include "PWGHF/Core/CentralityEstimation.h" @@ -175,6 +175,10 @@ struct HfTaskCd { Configurable fillTHn{"fillTHn", false, "fill THn"}; Configurable fillCandLiteTree{"fillCandLiteTree", false, "Flag to fill candiates lite tree"}; Configurable fillCandFullTree{"fillCandFullTree", false, "Flag to fill candiates full tree"}; + Configurable cfgUseTofPidForDeuteron{"cfgUseTofPidForDeuteron", false, "Use TOF PID for deuteron candidates"}; + Configurable cfgCutOnDeuteronDcaOrdering{"cfgCutOnDeuteronDcaOrdering", false, "Require deuteron DCA to be smaller than kaon and pion DCAs"}; + Configurable cfgMinDeuteronDcaPreselection{"cfgMinDeuteronDcaPreselection", 0.004, "Minimum deuteron DCA for preselection (cm)"}; + Configurable cfgMaxDeuteronTofPidPreselection{"cfgMaxDeuteronTofPidPreselection", 5, "Maximum |nSigma TOF| for deuteron preselection"}; SliceCache cache; @@ -406,6 +410,7 @@ struct HfTaskCd { float nSigmaItsDe = 0.f; float nSigmaTofDe = 0.f, nSigmaTofKa = 0.f, nSigmaTofPi = 0.f; + float dcaDeuteron = 0.f, dcaKaon = 0.f, dcaPion = 0.f; // int itsNClusterSizeDe = 0; float tpcSignalsDe = 0.f; @@ -420,8 +425,8 @@ struct HfTaskCd { nSigmaTpcKa = candidate.nSigTpcKa1(); nSigmaTofKa = candidate.nSigTofKa1(); - const bool selDeKPi = (candidate.isSelCdToDeKPi() >= 1); - const bool selPiKDe = (candidate.isSelCdToPiKDe() >= 1); + const bool selDeKPi = (candidate.isSelCdToDeKPi() >= selectionFlagCd); + const bool selPiKDe = (candidate.isSelCdToPiKDe() >= selectionFlagCd); auto prong0 = candidate.template prong0_as(); auto prong1 = candidate.template prong1_as(); @@ -446,6 +451,10 @@ struct HfTaskCd { tpcSignalsDe = prong0.tpcSignal(); tpcSignalsPi = prong2.tpcSignal(); itsSignalsDe = itsSignal(prong0); + + dcaDeuteron = candidate.impactParameter0(); + dcaKaon = candidate.impactParameter1(); + dcaPion = candidate.impactParameter2(); } else if (selPiKDe) { candFlag = -1; pSignedDe = prong2.tpcInnerParam() * prong2.sign(); @@ -460,6 +469,10 @@ struct HfTaskCd { tpcSignalsDe = prong2.tpcSignal(); tpcSignalsPi = prong0.tpcSignal(); itsSignalsDe = itsSignal(prong2); + + dcaDeuteron = candidate.impactParameter2(); + dcaKaon = candidate.impactParameter1(); + dcaPion = candidate.impactParameter0(); } // PID QA @@ -476,6 +489,15 @@ struct HfTaskCd { registry.fill(HIST("Data/hNsigmaTPCKaVsP"), prong1.tpcInnerParam() * prong1.sign(), nSigmaTpcKa); registry.fill(HIST("Data/hNsigmaTOFKaVsP"), prong1.tpcInnerParam() * prong1.sign(), nSigmaTofKa); + if (cfgUseTofPidForDeuteron && std::abs(nSigmaTofDe) > cfgMaxDeuteronTofPidPreselection) { + continue; + } + if (std::abs(dcaDeuteron) < cfgMinDeuteronDcaPreselection) { + continue; + } + if (cfgCutOnDeuteronDcaOrdering && (std::abs(dcaDeuteron) > std::abs(dcaKaon) || std::abs(dcaDeuteron) > std::abs(dcaPion))) { + continue; + } if (fillCandLiteTree) { rowCandCdLite(