From 12c45b285cf205aaf67c2b9b8f8b73f568af81f5 Mon Sep 17 00:00:00 2001 From: jikim1290 Date: Sun, 8 Feb 2026 04:16:42 +0900 Subject: [PATCH 1/2] adding pointing angle selection --- PWGLF/Tasks/Resonances/heptaquark.cxx | 68 +++++++++++++++++++-------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/PWGLF/Tasks/Resonances/heptaquark.cxx b/PWGLF/Tasks/Resonances/heptaquark.cxx index f7c30a46ddf..0fc9f99e7c6 100644 --- a/PWGLF/Tasks/Resonances/heptaquark.cxx +++ b/PWGLF/Tasks/Resonances/heptaquark.cxx @@ -68,6 +68,7 @@ struct heptaquark { Configurable cfgSoftFraction{"cfgSoftFraction", 0.01, "Minimum allowed softest fraction"}; Configurable cfgCollinear{"cfgCollinear", 0.98, "Maximum allowed collinear selection"}; + Configurable cfgCosPoint{"cfgCosPoint", 0.95, "Minimum pointing angle selection"}; ConfigurableAxis massAxis{"massAxis", {600, 2.8, 3.4}, "Invariant mass axis"}; ConfigurableAxis ptAxis{"ptAxis", {VARIABLE_WIDTH, 0.2, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.5, 8.0, 10.0, 100.0}, "Transverse momentum bins"}; @@ -97,6 +98,18 @@ struct heptaquark { histos.add("hDalitzRot", "hDalitzRot", {HistType::kTHnSparseF, {massPPAxis, massPLAxis, massAxis, ptAxis, {2, -0.5f, 1.5f}, centAxis}}); } + template + static inline TLorentzVector makeP4FromHQRow(HQRow const& hq) + { + const double px = hq.hqPx(); + const double py = hq.hqPy(); + const double pz = hq.hqPz(); + const double m = hq.hqMass(); + TLorentzVector v; + v.SetXYZM(px, py, pz, m); + return v; + } + double massLambda = o2::constants::physics::MassLambda; double massPr = o2::constants::physics::MassProton; double massPi = o2::constants::physics::MassPionCharged; @@ -185,37 +198,52 @@ struct heptaquark { return false; } - template - int selectHQ(HQ1 const& hq1, HQ2 const& hq2, HQ3 const& hq3) + template + int selectHQ(HQRow1 const& hq1r, HQRow2 const& hq2r, HQRow3 const& hq3r, ColRow const& col) { int selection = 0; - if (hq1.Pt() < cfgMinPhiPt || hq2.Pt() < cfgMinPhiPt || hq3.Pt() < cfgMinLambdaPt) + + auto hq1 = makeP4FromHQRow(hq1r); + auto hq2 = makeP4FromHQRow(hq2r); + auto hq3 = makeP4FromHQRow(hq3r); + + if (hq1.Pt() < cfgMinPhiPt || hq2.Pt() < cfgMinPhiPt || hq3.Pt() < cfgMinLambdaPt) { selection += 1; + } - double sumE = hq1.E() + hq2.E() + hq3.E(); - double emin = std::min({hq1.E(), hq2.E(), hq3.E()}); - double fmin = emin / std::max(1e-9, sumE); - if (fmin < cfgSoftFraction) + const double sumE = hq1.E() + hq2.E() + hq3.E(); + const double emin = std::min({hq1.E(), hq2.E(), hq3.E()}); + const double fmin = emin / std::max(1e-9, sumE); + if (fmin < cfgSoftFraction) { selection += 2; + } auto ex = hq1 + hq2 + hq3; TVector3 boost = -ex.BoostVector(); + auto hqphipair_boost = hq1 + hq2; - auto hqlambda_boost = hq3; + auto hqlambda_boost = hq3; hqphipair_boost.Boost(boost); hqlambda_boost.Boost(boost); - double cosHel = hqlambda_boost.Vect().Dot(hqphipair_boost.Vect()) / (hqlambda_boost.Vect().Mag() * hqphipair_boost.Vect().Mag()); - if (std::abs(cosHel) > cfgCollinear) + + const double denom = (hqlambda_boost.Vect().Mag() * hqphipair_boost.Vect().Mag()); + const double cosHel = (denom > 0.) ? (hqlambda_boost.Vect().Dot(hqphipair_boost.Vect()) / denom) : 1.0; + if (std::abs(cosHel) > cfgCollinear) { selection += 4; - /* - ROOT::Math::XYZVector rPV(col.posX(), col.posY(), col.posZ()); - ROOT::Math::XYZVector rSV(hq3.hqx(), hq3.hqy(), hq3.hqz()); - ROOT::Math::XYZVector L = rSV - rPV; - ROOT::Math::XYZVector exMom(ex.Px(), ex.Py(), ex.Pz()); - double cosPoint = L.Dot(exMom) / (L.R() * pEx.R() + 1e-9); - if (cosPoint < cfgCosPoint) - return 8; - */ + } + + ROOT::Math::XYZVector rPV(col.posX(), col.posY(), col.posZ()); + ROOT::Math::XYZVector rSV(hq3r.hqx(), hq3r.hqy(), hq3r.hqz()); + + ROOT::Math::XYZVector L = rSV - rPV; + ROOT::Math::XYZVector exMom(ex.Px(), ex.Py(), ex.Pz()); + + const double denom2 = (L.R() * exMom.R() + 1e-9); + const double cosPoint = L.Dot(exMom) / denom2; + if (cosPoint < cfgCosPoint) { + selection += 8; + } + return selection; } @@ -344,7 +372,7 @@ struct heptaquark { HQ12 = HQ1 + HQ2; HQ13 = HQ1 + HQ3; - if (cfgSelectHQ && selectHQ(HQ1, HQ2, HQ3)) + if (cfgSelectHQ && selectHQ(hqtrackd1, hqtrackd2, hqtrackd3, collision)) continue; histos.fill(HIST("h_InvMass_same"), exotic.M(), exotic.Pt(), collision.centrality()); From 20f4619ddd89bdee59aae3a99f651bb6da25d7f4 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Sat, 7 Feb 2026 19:17:36 +0000 Subject: [PATCH 2/2] Please consider the following formatting changes --- PWGLF/Tasks/Resonances/heptaquark.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/Tasks/Resonances/heptaquark.cxx b/PWGLF/Tasks/Resonances/heptaquark.cxx index 0fc9f99e7c6..824c39601ac 100644 --- a/PWGLF/Tasks/Resonances/heptaquark.cxx +++ b/PWGLF/Tasks/Resonances/heptaquark.cxx @@ -104,7 +104,7 @@ struct heptaquark { const double px = hq.hqPx(); const double py = hq.hqPy(); const double pz = hq.hqPz(); - const double m = hq.hqMass(); + const double m = hq.hqMass(); TLorentzVector v; v.SetXYZM(px, py, pz, m); return v; @@ -222,7 +222,7 @@ struct heptaquark { TVector3 boost = -ex.BoostVector(); auto hqphipair_boost = hq1 + hq2; - auto hqlambda_boost = hq3; + auto hqlambda_boost = hq3; hqphipair_boost.Boost(boost); hqlambda_boost.Boost(boost);