From fb5e5d1d20aa24b6be3a447d36968a1a34fb249f Mon Sep 17 00:00:00 2001 From: blacwovie Date: Mon, 6 Jul 2026 19:59:53 +0800 Subject: [PATCH 1/6] change QA plot range --- .../TableProducer/HadNucleiFemto.cxx | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx index 34a50779b57..d0cb4ce8dcb 100644 --- a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx +++ b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx @@ -290,8 +290,8 @@ struct HadNucleiFemto { {"hdcaxyNu", ";DCA_{xy} (cm)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}}, {"hdcazNu", ";DCA_{z} (cm)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}}, {"hNClsNuITS", ";N_{ITS} Cluster", {HistType::kTH1F, {{20, -10.0f, 10.0f}}}}, - {"hNuPt", "#it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{240, -6.0f, 6.0f}}}}, - {"hSingleNuPt", "#it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{240, -6.0f, 6.0f}}}}, + {"hNuPt", "#it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{280, -7.0f, 7.0f}}}}, + {"hSingleNuPt", "#it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{280, -7.0f, 7.0f}}}}, {"hNuPin", "#it{p} distribution; #it{p} (GeV/#it{c})", {HistType::kTH1F, {{240, -6.0f, 6.0f}}}}, {"hSingleNuPin", "#it{p} distribution; #it{p} (GeV/#it{c})", {HistType::kTH1F, {{240, -6.0f, 6.0f}}}}, {"hNuEta", "eta distribution; #eta(Nu)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}}, @@ -300,8 +300,8 @@ struct HadNucleiFemto { {"hdcaxyHad", ";DCA_{xy} (cm)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}}, {"hdcazHad", ";DCA_{z} (cm)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}}, {"hNClsHadITS", ";N_{ITS} Cluster", {HistType::kTH1F, {{20, -10.0f, 10.0f}}}}, - {"hHadPt", "Pt distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{160, -4.0f, 4.0f}}}}, - {"hSingleHadPt", "#it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{120, -3.0f, 3.0f}}}}, + {"hHadPt", "Pt distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{280, -7.0f, 7.0f}}}}, + {"hSingleHadPt", "#it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})", {HistType::kTH1F, {{280, -7.0f, 7.0f}}}}, {"hHadPin", "P distribution; #it{p} (GeV/#it{c})", {HistType::kTH1F, {{120, -4.0f, 4.0f}}}}, {"hHadEta", "eta distribution; #eta(had)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}}, {"hHadPhi", "phi distribution; phi(had)", {HistType::kTH1F, {{600, -4.0f, 4.0f}}}}, @@ -314,22 +314,22 @@ struct HadNucleiFemto { {"h2dEdx", "dEdx distribution; #it{p} (GeV/#it{c}); dE/dx (a.u.)", {HistType::kTH2F, {{200, -5.0f, 5.0f}, {100, 0.0f, 2000.0f}}}}, // Nucleus PID - {"h2NsigmaNuTPC", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{100, -2.0f, 2.0f}, {200, -5.0f, 5.0f}}}}, - {"h2NsigmaNuComb", "NsigmaNu TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(Nu)", {HistType::kTH2F, {{100, -2.0f, 2.0f}, {100, 0.0f, 5.0f}}}}, - {"h2NsigmaNuTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"h2NsigmaNuTPC_preselecComp", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"h2NSigmaNuITS_preselection", "NsigmaNu ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} Nu", {HistType::kTH2F, {{50, -5.0f, 5.0f}, {120, -3.0f, 3.0f}}}}, - {"h2NSigmaNuITS", "NsigmaNu ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} Nu", {HistType::kTH2F, {{100, -2.0f, 2.0f}, {120, -3.0f, 3.0f}}}}, - {"h2NsigmaNuTOF", "NsigmaNu TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(Nu)", {HistType::kTH2F, {{200, -5.0f, 5.0f}, {200, -5.0f, 5.0f}}}}, - {"h2NsigmaNuTOF_preselection", "NsigmaNu TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, + {"h2NsigmaNuTPC", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {200, -5.0f, 5.0f}}}}, + {"h2NsigmaNuComb", "NsigmaNu TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {100, 0.0f, 5.0f}}}}, + {"h2NsigmaNuTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"h2NsigmaNuTPC_preselecComp", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"h2NSigmaNuITS_preselection", "NsigmaNu ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} Nu", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {120, -3.0f, 3.0f}}}}, + {"h2NSigmaNuITS", "NsigmaNu ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} Nu", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {120, -3.0f, 3.0f}}}}, + {"h2NsigmaNuTOF", "NsigmaNu TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {200, -5.0f, 5.0f}}}}, + {"h2NsigmaNuTOF_preselection", "NsigmaNu TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, // Hadron PID - {"h2NsigmaHadComb", "NsigmaHad TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(had)", {HistType::kTH2F, {{100, -2.0f, 2.0f}, {100, 0.0f, 5.0f}}}}, - {"h2NsigmaHadTPC", "NsigmaHad TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(p)", {HistType::kTH2F, {{200, -5.0f, 5.0f}, {200, -5.0f, 5.0f}}}}, - {"h2NsigmaHadTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"h2NsigmaHadTOF", "NsigmaHad TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)", {HistType::kTH2F, {{200, -5.0f, 5.0f}, {200, -5.0f, 5.0f}}}}, - {"h2NsigmaHadTOF_preselection", "NsigmaHad TOF distribution; #iit{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"h2NsigmaHadComb_preselection", "NsigmaHad TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(had)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {100, 0.0f, 5.0f}}}}, + {"h2NsigmaHadComb", "NsigmaHad TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(had)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {100, 0.0f, 5.0f}}}}, + {"h2NsigmaHadTPC", "NsigmaHad TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(p)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {200, -5.0f, 5.0f}}}}, + {"h2NsigmaHadTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"h2NsigmaHadTOF", "NsigmaHad TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {200, -5.0f, 5.0f}}}}, + {"h2NsigmaHadTOF_preselection", "NsigmaHad TOF distribution; #iit{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"h2NsigmaHadComb_preselection", "NsigmaHad TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(had)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {100, 0.0f, 5.0f}}}}, {"h2NsigmaHadPrTPC", "NsigmaHad TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(p)", {HistType::kTH1F, {{200, -5.0f, 5.0f}}}}, {"h2NsigmaHadPiTPC", "NsigmaHad TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(pi)", {HistType::kTH1F, {{200, -5.0f, 5.0f}}}}, {"h2NsigmaHadKaTPC", "NsigmaHad TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(K)", {HistType::kTH1F, {{200, -5.0f, 5.0f}}}}, @@ -338,17 +338,17 @@ struct HadNucleiFemto { {"h2NsigmaHadKaTOF", "NsigmaHad TOF distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(K)", {HistType::kTH1F, {{200, -5.0f, 5.0f}}}}, // Purity - {"purity/h2NsigmaNuTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"purity/h2NsigmaNuTPC_preselecComp", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"purity/h2NSigmaNuITS_preselection", "NsigmaNu ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} Nu", {HistType::kTH2F, {{50, -5.0f, 5.0f}, {120, -3.0f, 3.0f}}}}, - {"purity/h2NsigmaNuTOF_preselection", "NsigmaNu TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"purity/h2NsigmaNuComb_preselection", "NsigmaNu TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {100, 0.0f, 5.0f}}}}, - {"purity/h2NsigmaHadTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"purity/h2NsigmaHadTOF_preselection", "NsigmaHad TOF distribution; #iit{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}}, - {"purity/h2NsigmaHadComb_preselection", "NsigmaHad TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(had)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {100, 0.0f, 5.0f}}}}, + {"purity/h2NsigmaNuTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"purity/h2NsigmaNuTPC_preselecComp", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"purity/h2NSigmaNuITS_preselection", "NsigmaNu ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} Nu", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {120, -3.0f, 3.0f}}}}, + {"purity/h2NsigmaNuTOF_preselection", "NsigmaNu TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"purity/h2NsigmaNuComb_preselection", "NsigmaNu TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {100, 0.0f, 5.0f}}}}, + {"purity/h2NsigmaHadTPC_preselection", "NsigmaNu TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(Nu)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"purity/h2NsigmaHadTOF_preselection", "NsigmaHad TOF distribution; #iit{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {400, -10.0f, 10.0f}}}}, + {"purity/h2NsigmaHadComb_preselection", "NsigmaHad TPCTOF comb distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{comb}(had)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {100, 0.0f, 5.0f}}}}, // Hypertriton - {"hHe3TPCnsigma", "NsigmaHe3 TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(He3)", {HistType::kTH2F, {{100, -2.0f, 2.0f}, {200, -5.0f, 5.0f}}}}, + {"hHe3TPCnsigma", "NsigmaHe3 TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(He3)", {HistType::kTH2F, {{280, -7.0f, 7.0f}, {200, -5.0f, 5.0f}}}}, {"hHe3P", "Pin distribution; p (GeV/#it{c})", {HistType::kTH1F, {{120, -3.0f, 3.0f}}}}, {"hHe3P_preselected", "Pin distribution_preselected; p (GeV/#it{c})", {HistType::kTH1F, {{120, -3.0f, 3.0f}}}}, From 798d8eba4a0b3544d5c5a7d1af38cf9fad82020a Mon Sep 17 00:00:00 2001 From: blacwovie Date: Mon, 6 Jul 2026 20:23:36 +0800 Subject: [PATCH 2/6] Update HadNucleiFemto.cxx --- PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx index d0cb4ce8dcb..a24708e7710 100644 --- a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx +++ b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx @@ -261,14 +261,14 @@ struct HadNucleiFemto { SameKindPair mPair{binningPolicy, settingNoMixedEvents, -1, &cache}; // Pair hyperPair{binningPolicy, settingNoMixedEvents, -1, &cache}; - std::array mBBparamsNucleus; + std::array mBBparamsNucleus{}; std::vector mGoodCollisions; std::vector mTrackPairs; std::vector mTrackHypPairs; o2::vertexing::DCAFitterN<2> mFitter; - int mRunNumber; - float mDbz; + int mRunNumber{0}; + float mDbz{0.f}; Service mCcdb; Zorro mZorro; OutputObj mZorroSummary{"zorroSummary"}; From 0455ebed1d87ea94435560f1c3a809f85da1d1b4 Mon Sep 17 00:00:00 2001 From: blacwovie Date: Mon, 6 Jul 2026 21:08:06 +0800 Subject: [PATCH 3/6] Update HadNucleiFemto.cxx --- .../TableProducer/HadNucleiFemto.cxx | 172 ++++++++---------- 1 file changed, 80 insertions(+), 92 deletions(-) diff --git a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx index a24708e7710..b85d371a69f 100644 --- a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx +++ b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx @@ -16,7 +16,6 @@ /// \date 2025-04-10 #include "PWGCF/Femto/FemtoNuclei/DataModel/HadronNucleiTables.h" -#include "PWGCF/FemtoWorld/Core/FemtoWorldMath.h" #include "PWGLF/DataModel/LFHypernucleiTables.h" #include "PWGLF/Utils/svPoolCreator.h" @@ -55,7 +54,9 @@ #include #include -#include +#include +#include +#include #include #include @@ -79,12 +80,11 @@ using TrackCandidates = soa::Join betheBlochParticleNames{"De", "He3"}; -static const std::vector betheBlochParNames{"p0", "p1", "p2", "p3", "p4", "resolution"}; -static constexpr std::array tmpRadiiTPC{{85.f, 105.f, 125.f, 145.f, 165.f, 185.f, 205.f, 225.f, 245.f}}; +constexpr std::array BetheBlochDefault{-136.71, 0.441, 0.2269, 1.347, 0.8035, 0.09, + -321.34, 0.6539, 1.591, 0.8225, 2.363, 0.09}; +const std::vector betheBlochParticleNames{"De", "He3"}; +const std::vector betheBlochParNames{"p0", "p1", "p2", "p3", "p4", "resolution"}; +constexpr std::array tmpRadiiTPC{{85.f, 105.f, 125.f, 145.f, 165.f, 185.f, 205.f, 225.f, 245.f}}; constexpr int DeuteronPDG = o2::constants::physics::Pdg::kDeuteron; constexpr int He3PDG = o2::constants::physics::Pdg::kHelium3; constexpr float He3RigidityMin = 0.8f; @@ -100,18 +100,16 @@ enum Selections { kAll }; -float MassHad = 0; - } // namespace struct HadNucandidate { - float recoPtNu() const { return signNu * std::hypot(momNu[0], momNu[1]); } - float recoPhiNu() const { return std::atan2(momNu[1], momNu[0]); } - float recoEtaNu() const { return std::asinh(momNu[2] / std::abs(recoPtNu())); } - float recoPtHad() const { return signHad * std::hypot(momHad[0], momHad[1]); } - float recoPhiHad() const { return std::atan2(momHad[1], momHad[0]); } - float recoEtaHad() const { return std::asinh(momHad[2] / std::abs(recoPtHad())); } + [[nodiscard]] float recoPtNu() const { return signNu * std::hypot(momNu[0], momNu[1]); } + [[nodiscard]] float recoPhiNu() const { return std::atan2(momNu[1], momNu[0]); } + [[nodiscard]] float recoEtaNu() const { return std::asinh(momNu[2] / std::abs(recoPtNu())); } + [[nodiscard]] float recoPtHad() const { return signHad * std::hypot(momHad[0], momHad[1]); } + [[nodiscard]] float recoPhiHad() const { return std::atan2(momHad[1], momHad[0]); } + [[nodiscard]] float recoEtaHad() const { return std::asinh(momHad[2] / std::abs(recoPtHad())); } std::array momNu = {99.f, 99.f, 99.f}; std::array momHad = {99.f, 99.f, 99.f}; @@ -245,7 +243,7 @@ struct HadNucleiFemto { Configurable settingGeoPath{"settingGeoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; Configurable settingPidPath{"settingPidPath", "", "Path to the PID response object"}; - Configurable> settingBetheBlochParams{"settingBetheBlochParams", {betheBlochDefault[0], 2, 6, betheBlochParticleNames, betheBlochParNames}, "TPC Bethe-Bloch parameterisation for the selected nucleus"}; + Configurable> settingBetheBlochParams{"settingBetheBlochParams", {BetheBlochDefault.data(), 2, 6, betheBlochParticleNames, betheBlochParNames}, "TPC Bethe-Bloch parameterisation for the selected nucleus"}; Configurable settingCompensatePIDinTracking{"settingCompensatePIDinTracking", false, "If true, divide tpcInnerParam by the electric charge"}; Configurable settingMaterialCorrection{"settingMaterialCorrection", static_cast(o2::base::Propagator::MatCorrType::USEMatCorrNONE), "Material correction type"}; @@ -262,6 +260,7 @@ struct HadNucleiFemto { // Pair hyperPair{binningPolicy, settingNoMixedEvents, -1, &cache}; std::array mBBparamsNucleus{}; + float mMassHad{0.f}; std::vector mGoodCollisions; std::vector mTrackPairs; std::vector mTrackHypPairs; @@ -269,7 +268,7 @@ struct HadNucleiFemto { int mRunNumber{0}; float mDbz{0.f}; - Service mCcdb; + Service mCcdb{}; Zorro mZorro; OutputObj mZorroSummary{"zorroSummary"}; @@ -424,8 +423,8 @@ struct HadNucleiFemto { mRunNumber = bc.runNumber(); const float defaultBzValue = -999.0f; auto run3GrpTimestamp = bc.timestamp(); - o2::parameters::GRPObject* grpo = mCcdb->getForTimeStamp(settingGrpPath, run3GrpTimestamp); - o2::parameters::GRPMagField* grpmag = 0x0; + auto* grpo = mCcdb->getForTimeStamp(settingGrpPath, run3GrpTimestamp); + o2::parameters::GRPMagField* grpmag = nullptr; if (grpo) { o2::base::Propagator::initFieldFromGRP(grpo); if (settingDbz < defaultBzValue) { @@ -492,17 +491,13 @@ struct HadNucleiFemto { const int minTPCNClsFound = 90; const int minTPCNClsCrossedRows = 70; const float crossedRowsToFindableRatio = 0.83f; - if (candidate.itsNCls() < settingCutNCls || - candidate.tpcNClsFound() < minTPCNClsFound || - candidate.tpcNClsCrossedRows() < minTPCNClsCrossedRows || - candidate.tpcNClsCrossedRows() < crossedRowsToFindableRatio * candidate.tpcNClsFindable() || - candidate.tpcChi2NCl() > settingCutChi2tpcHigh || - candidate.tpcChi2NCl() < settingCutChi2tpcLow || - candidate.itsChi2NCl() > settingCutChi2NClITS) { - return false; - } - - return true; + return !(candidate.itsNCls() < settingCutNCls || + candidate.tpcNClsFound() < minTPCNClsFound || + candidate.tpcNClsCrossedRows() < minTPCNClsCrossedRows || + candidate.tpcNClsCrossedRows() < crossedRowsToFindableRatio * candidate.tpcNClsFindable() || + candidate.tpcChi2NCl() > settingCutChi2tpcHigh || + candidate.tpcChi2NCl() < settingCutChi2tpcLow || + candidate.itsChi2NCl() > settingCutChi2NClITS); } template @@ -530,11 +525,7 @@ struct HadNucleiFemto { const float pionDCAxyMax = settingPionDCAxyOffset + settingPionDCAxyPtCoeff / absPt; const float pionDCAzMax = settingPionDCAzOffset + settingPionDCAzPtCoeff / absPt; - if (std::abs(candidate.dcaXY()) > pionDCAxyMax || std::abs(candidate.dcaZ()) > pionDCAzMax) { - return false; - } - - return true; + return !(std::abs(candidate.dcaXY()) > pionDCAxyMax || std::abs(candidate.dcaZ()) > pionDCAzMax); } template @@ -572,11 +563,7 @@ struct HadNucleiFemto { } const float prDCAxyMax = 105.e-3f + 30.5e-3f / std::pow(absPt, 1.1f); - if (std::abs(candidate.dcaXY()) >= prDCAxyMax || std::abs(candidate.dcaZ()) >= protonDCAzMax) { - return false; - } - - return true; + return !(std::abs(candidate.dcaXY()) >= prDCAxyMax || std::abs(candidate.dcaZ()) >= protonDCAzMax); } template @@ -594,17 +581,13 @@ struct HadNucleiFemto { constexpr int minITSNClsInnerBarrel = 1; const float tpcCrossedRowsOverFound = candidate.tpcNClsFound() > 0 ? static_cast(candidate.tpcNClsCrossedRows()) / candidate.tpcNClsFound() : 0.f; - if (candidate.tpcNClsFound() < minTPCNClsFound || - candidate.tpcNClsCrossedRows() < minTPCNClsCrossedRows || - tpcCrossedRowsOverFound < minTPCCrossedRowsOverFound || - candidate.tpcNClsShared() > maxTPCNClsShared || - candidate.tpcFractionSharedCls() > maxSharedTPCFraction || - candidate.itsNCls() < settingCutNCls || - candidate.itsNClsInnerBarrel() < minITSNClsInnerBarrel) { - return false; - } - - return true; + return !(candidate.tpcNClsFound() < minTPCNClsFound || + candidate.tpcNClsCrossedRows() < minTPCNClsCrossedRows || + tpcCrossedRowsOverFound < minTPCCrossedRowsOverFound || + candidate.tpcNClsShared() > maxTPCNClsShared || + candidate.tpcFractionSharedCls() > maxSharedTPCFraction || + candidate.itsNCls() < settingCutNCls || + candidate.itsNClsInnerBarrel() < minITSNClsInnerBarrel); } bool useDeuteronNucleus() const @@ -644,17 +627,13 @@ struct HadNucleiFemto { constexpr int minTPCNClsCrossedRows = 70; constexpr float crossedRowsToFindableRatio = 0.8f; - if (candidate.itsNCls() < settingCutNCls || - candidate.tpcNClsFound() < He3TPCNClsFoundMin || - candidate.tpcNClsCrossedRows() < minTPCNClsCrossedRows || - candidate.tpcNClsCrossedRows() < crossedRowsToFindableRatio * candidate.tpcNClsFindable() || - candidate.tpcChi2NCl() > settingCutChi2tpcHigh || - candidate.tpcChi2NCl() < He3TPCChi2NClMin || - candidate.itsChi2NCl() > settingCutChi2NClITS) { - return false; - } - - return true; + return !(candidate.itsNCls() < settingCutNCls || + candidate.tpcNClsFound() < He3TPCNClsFoundMin || + candidate.tpcNClsCrossedRows() < minTPCNClsCrossedRows || + candidate.tpcNClsCrossedRows() < crossedRowsToFindableRatio * candidate.tpcNClsFindable() || + candidate.tpcChi2NCl() > settingCutChi2tpcHigh || + candidate.tpcChi2NCl() < He3TPCChi2NClMin || + candidate.itsChi2NCl() > settingCutChi2NClITS); } template @@ -700,14 +679,14 @@ struct HadNucleiFemto { } template - float averagePhiStar(const Ttrack1& track1, const Ttrack2& track2) const + float averagePhiStar(const Ttrack1& firstTrack, const Ttrack2& secondTrack) const { constexpr float invalidPhiStar = 999.f; float dPhiAvg = 0.f; int meaningfulEntries = 0; for (const auto& radius : tmpRadiiTPC) { - const float phi1 = phiAtSpecificRadiiTPC(track1, radius); - const float phi2 = phiAtSpecificRadiiTPC(track2, radius); + const float phi1 = phiAtSpecificRadiiTPC(firstTrack, radius); + const float phi2 = phiAtSpecificRadiiTPC(secondTrack, radius); if (phi1 == invalidPhiStar || phi2 == invalidPhiStar) { continue; } @@ -721,7 +700,7 @@ struct HadNucleiFemto { } template - bool isClosePair(const Ttrack1& track1, const Ttrack2& track2) + bool isClosePair(const Ttrack1& firstTrack, const Ttrack2& secondTrack) { constexpr int closePairRadiusModePv = 0; constexpr int closePairRadiusModeSpecificTpc = 2; @@ -729,14 +708,14 @@ struct HadNucleiFemto { if (!settingEnableClosePairRejection.value) { return false; } - if (track1.sign() != track2.sign()) { + if (firstTrack.sign() != secondTrack.sign()) { return false; } - const float deta = track1.eta() - track2.eta(); - const float dphiAtPV = wrapDeltaPhi(track1.phi() - track2.phi()); - const float dphiAtSpecificRadius = wrapDeltaPhi(phiAtSpecificRadiiTPC(track1, settingClosePairSpecificRadius.value) - phiAtSpecificRadiiTPC(track2, settingClosePairSpecificRadius.value)); - const float dphiAvg = averagePhiStar(track1, track2); + const float deta = firstTrack.eta() - secondTrack.eta(); + const float dphiAtPV = wrapDeltaPhi(firstTrack.phi() - secondTrack.phi()); + const float dphiAtSpecificRadius = wrapDeltaPhi(phiAtSpecificRadiiTPC(firstTrack, settingClosePairSpecificRadius.value) - phiAtSpecificRadiiTPC(secondTrack, settingClosePairSpecificRadius.value)); + const float dphiAvg = averagePhiStar(firstTrack, secondTrack); float dphiToCut = dphiAvg; if (settingClosePairRadiusMode.value == closePairRadiusModePv) { @@ -814,22 +793,27 @@ struct HadNucleiFemto { auto tpcNSigmaKa = candidate.tpcNSigmaKa(); float DeDCAxyMin = 0.004 + (0.013 / candidate.pt()); float DeDCAzMin = 0.004 + (0.013 / candidate.pt()); - if (std::abs(candidate.dcaXY()) > DeDCAxyMin || std::abs(candidate.dcaZ()) > DeDCAzMin) + if (std::abs(candidate.dcaXY()) > DeDCAxyMin || std::abs(candidate.dcaZ()) > DeDCAzMin) { return false; + } mQaRegistry.fill(HIST("h2NsigmaHadTPC_preselection"), candidate.tpcInnerParam(), tpcNSigmaKa); - if (std::abs(candidate.pt()) < settingHadptMin || std::abs(candidate.pt()) > settingHadptMax) + if (std::abs(candidate.pt()) < settingHadptMin || std::abs(candidate.pt()) > settingHadptMax) { return false; + } // reject protons and pions - if (std::abs(candidate.tpcNSigmaPr()) < settingCutNsigTPCPrMin || std::abs(candidate.tpcNSigmaPi()) < settingCutNsigTPCPiMin) + if (std::abs(candidate.tpcNSigmaPr()) < settingCutNsigTPCPrMin || std::abs(candidate.tpcNSigmaPi()) < settingCutNsigTPCPiMin) { return false; + } mQaRegistry.fill(HIST("h2NsigmaHadPrTPC"), candidate.tpcNSigmaPr()); mQaRegistry.fill(HIST("h2NsigmaHadPiTPC"), candidate.tpcNSigmaPi()); - if (candidate.hasTOF() && std::abs(candidate.tofNSigmaPr()) < settingCutNsigTOFPrMin) + if (candidate.hasTOF() && std::abs(candidate.tofNSigmaPr()) < settingCutNsigTOFPrMin) { return false; - if (candidate.hasTOF() && std::abs(candidate.tofNSigmaPi()) < settingCutNsigTOFPiMin) + } + if (candidate.hasTOF() && std::abs(candidate.tofNSigmaPi()) < settingCutNsigTOFPiMin) { return false; + } mQaRegistry.fill(HIST("h2NsigmaHadPrTOF"), candidate.tofNSigmaPr()); mQaRegistry.fill(HIST("h2NsigmaHadPiTOF"), candidate.tofNSigmaPi()); // rejection end @@ -848,7 +832,8 @@ struct HadNucleiFemto { mQaRegistry.fill(HIST("h2NsigmaHadTOF"), candidate.sign() * candidate.pt(), tofNSigmaKa); mQaRegistry.fill(HIST("h2dEdxHadcandidates"), candidate.sign() * candidate.tpcInnerParam(), candidate.tpcSignal()); return true; - } else if (candidate.tpcInnerParam() < settingCutPinMinTOFHad) { + } + if (candidate.tpcInnerParam() < settingCutPinMinTOFHad) { if (std::abs(tpcNSigmaKa) > settingCutNsigmaTPCHad) { return false; } @@ -904,13 +889,13 @@ struct HadNucleiFemto { bool PID = false; if (settingHadPDGCode == PDG_t::kPiPlus) { PID = selectionPIDPion(candidate); - MassHad = o2::constants::physics::MassPiPlus; + mMassHad = o2::constants::physics::MassPiPlus; } else if (settingHadPDGCode == PDG_t::kKPlus) { PID = selectionPIDKaon(candidate); - MassHad = o2::constants::physics::MassKPlus; + mMassHad = o2::constants::physics::MassKPlus; } else if (settingHadPDGCode == PDG_t::kProton) { PID = selectionPIDProton(candidate); - MassHad = o2::constants::physics::MassProton; + mMassHad = o2::constants::physics::MassProton; } else { LOG(info) << "invalid PDG code"; } @@ -965,7 +950,7 @@ struct HadNucleiFemto { if (std::abs(tpcInnerParam) < settingCutPinMinDe) { return false; } - float tpcNSigmaDe; + float tpcNSigmaDe = 0.f; if (settingUseBBcomputeDeNsigma) { tpcNSigmaDe = computeNSigmaDe(candidate); } else { @@ -974,16 +959,18 @@ struct HadNucleiFemto { mQaRegistry.fill(HIST("h2NsigmaNuTPC_preselection"), candidate.sign() * candidate.pt(), tpcNSigmaDe); mQaRegistry.fill(HIST("h2NsigmaNuTPC_preselecComp"), candidate.sign() * candidate.pt(), candidate.tpcNSigmaDe()); - if (std::abs(candidate.pt()) < settingCutDeptMin || std::abs(candidate.pt()) > settingCutDeptMax) + if (std::abs(candidate.pt()) < settingCutDeptMin || std::abs(candidate.pt()) > settingCutDeptMax) { return false; + } const float absPt = std::abs(candidate.pt()); if (absPt <= 0.f) { return false; } const float deDCAxyMax = 0.004f + 0.013f / absPt; const float deDCAzMax = 0.004f + 0.013f / absPt; - if (std::abs(candidate.dcaXY()) > deDCAxyMax || std::abs(candidate.dcaZ()) > deDCAzMax) + if (std::abs(candidate.dcaXY()) > deDCAxyMax || std::abs(candidate.dcaZ()) > deDCAzMax) { return false; + } if (candidate.hasTOF() && candidate.tpcInnerParam() > settingCutPinMinTOFITSDe) { auto tofNSigmaDe = candidate.tofNSigmaDe(); @@ -1001,7 +988,8 @@ struct HadNucleiFemto { mQaRegistry.fill(HIST("h2NsigmaNuTPC"), candidate.sign() * candidate.pt(), tpcNSigmaDe); mQaRegistry.fill(HIST("h2NsigmaNuTOF"), candidate.sign() * candidate.pt(), tofNSigmaDe); return true; - } else if (candidate.tpcInnerParam() <= settingCutPinMinTOFITSDe) { + } + if (candidate.tpcInnerParam() <= settingCutPinMinTOFITSDe) { if (std::abs(tpcNSigmaDe) > settingCutNsigmaTPCDe) { return false; } @@ -1077,7 +1065,7 @@ struct HadNucleiFemto { const int nlayerITS = 7; for (int layer = 0; layer < nlayerITS; layer++) { - if ((itsClusterSizes >> (layer * 4)) & 0xf) { + if (((itsClusterSizes >> (layer * 4)) & 0xf) != 0u) { nclusters++; average += (itsClusterSizes >> (layer * 4)) & 0xf; } @@ -1192,7 +1180,7 @@ struct HadNucleiFemto { } hadNucand.momHad = std::array{trackHad.px(), trackHad.py(), trackHad.pz()}; float invMass = 0; - invMass = RecoDecay::m(std::array, 2>{hadNucand.momNu, hadNucand.momHad}, std::array{nucleusMass(), MassHad}); + invMass = RecoDecay::m(std::array, 2>{hadNucand.momNu, hadNucand.momHad}, std::array{nucleusMass(), mMassHad}); hadNucand.signNu = trackDe.sign(); hadNucand.signHad = trackHad.sign(); @@ -1253,8 +1241,8 @@ struct HadNucleiFemto { } const float massLightNucleusForKstarMt = useHelium3Nucleus() ? static_cast(o2::constants::physics::MassHelium3) : (settingUseProtonMassForKstarMt ? static_cast(o2::constants::physics::MassProton) : static_cast(o2::constants::physics::MassDeuteron)); - hadNucand.kstar = computePairKstar(hadNucand.momHad, MassHad, hadNucand.momNu, massLightNucleusForKstarMt); - hadNucand.mT = computePairMT(hadNucand.momHad, MassHad, hadNucand.momNu, massLightNucleusForKstarMt); + hadNucand.kstar = computePairKstar(hadNucand.momHad, mMassHad, hadNucand.momNu, massLightNucleusForKstarMt); + hadNucand.mT = computePairMT(hadNucand.momHad, mMassHad, hadNucand.momNu, massLightNucleusForKstarMt); return true; } @@ -1286,7 +1274,7 @@ struct HadNucleiFemto { hadHypercand.momHad = std::array{trackHad.px(), trackHad.py(), trackHad.pz()}; float invMass = 0; - invMass = RecoDecay::m(std::array, 2>{hadHypercand.momNu, hadHypercand.momHad}, std::array{static_cast(o2::constants::physics::MassHelium3), MassHad}); + invMass = RecoDecay::m(std::array, 2>{hadHypercand.momNu, hadHypercand.momHad}, std::array{static_cast(o2::constants::physics::MassHelium3), mMassHad}); hadHypercand.signHad = trackHad.sign(); if (V0Hyper.isMatter()) { @@ -1660,7 +1648,7 @@ struct HadNucleiFemto { pairTracksSameEvent(trackTableThisCollision, collision.centFT0C()); - if (mTrackPairs.size() == 0) { + if (mTrackPairs.empty()) { continue; } @@ -1692,7 +1680,7 @@ struct HadNucleiFemto { pairTracksSameEventHyper(trackTableThisCollision, hypdTableThisCollision); - if (mTrackHypPairs.size() == 0) { + if (mTrackHypPairs.empty()) { continue; } From 0cfb3544f24ea59091a5f5c7a5e0f4c15a238205 Mon Sep 17 00:00:00 2001 From: blacwovie Date: Mon, 6 Jul 2026 21:50:47 +0800 Subject: [PATCH 4/6] Update HadNucleiFemto.cxx --- PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx index b85d371a69f..57749ccac23 100644 --- a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx +++ b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx @@ -54,8 +54,10 @@ #include #include -#include -#include +#include +#include +#include +#include #include #include #include From 1ff3210111d03f0459d042d8ab78d33cc7e7c4fe Mon Sep 17 00:00:00 2001 From: blacwovie Date: Mon, 6 Jul 2026 22:49:36 +0800 Subject: [PATCH 5/6] Update HadNucleiFemto.cxx --- .../TableProducer/HadNucleiFemto.cxx | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx index 57749ccac23..97d7279f55b 100644 --- a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx +++ b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx @@ -57,7 +57,6 @@ #include #include #include -#include #include #include #include @@ -94,6 +93,7 @@ constexpr int He3TPCNClsFoundMin = 110; constexpr float He3TPCChi2NClMin = 0.5f; constexpr float He3TPCNSigmaMax = 3.0f; constexpr float He3ITSNSigmaMin = -1.5f; +using PairLorentzVector = ROOT::Math::LorentzVector>; enum Selections { kNoCuts = 0, @@ -1096,31 +1096,31 @@ struct HadNucleiFemto { float computePairKstar(const std::array& momHad, const float massHad, const std::array& momNu, const float massNu) const { - const ROOT::Math::PxPyPzMVector vecHad(momHad[0], momHad[1], momHad[2], massHad); - const ROOT::Math::PxPyPzMVector vecNu(momNu[0], momNu[1], momNu[2], massNu); - const ROOT::Math::PxPyPzMVector trackSum = vecHad + vecNu; + const PairLorentzVector vecHad(momHad[0], momHad[1], momHad[2], massHad); + const PairLorentzVector vecNu(momNu[0], momNu[1], momNu[2], massNu); + const PairLorentzVector trackSum = vecHad + vecNu; const float beta = trackSum.Beta(); const float betax = beta * std::cos(trackSum.Phi()) * std::sin(trackSum.Theta()); const float betay = beta * std::sin(trackSum.Phi()) * std::sin(trackSum.Theta()); const float betaz = beta * std::cos(trackSum.Theta()); - ROOT::Math::PxPyPzMVector partHadCMS(vecHad); - ROOT::Math::PxPyPzMVector partNuCMS(vecNu); + PairLorentzVector partHadCMS(vecHad); + PairLorentzVector partNuCMS(vecNu); const ROOT::Math::Boost boostPRF = ROOT::Math::Boost(-betax, -betay, -betaz); partHadCMS = boostPRF(partHadCMS); partNuCMS = boostPRF(partNuCMS); - const ROOT::Math::PxPyPzMVector trackRelK = partHadCMS - partNuCMS; + const PairLorentzVector trackRelK = partHadCMS - partNuCMS; return 0.5f * trackRelK.P(); } float computePairMT(const std::array& momHad, const float massHad, const std::array& momNu, const float massNu) const { - const ROOT::Math::PxPyPzMVector vecHad(momHad[0], momHad[1], momHad[2], massHad); - const ROOT::Math::PxPyPzMVector vecNu(momNu[0], momNu[1], momNu[2], massNu); - const ROOT::Math::PxPyPzMVector trackSum = vecHad + vecNu; + const PairLorentzVector vecHad(momHad[0], momHad[1], momHad[2], massHad); + const PairLorentzVector vecNu(momNu[0], momNu[1], momNu[2], massNu); + const PairLorentzVector trackSum = vecHad + vecNu; const float kT = 0.5f * trackSum.Pt(); return std::sqrt(kT * kT + std::pow(0.5f * (massHad + massNu), 2.f)); } @@ -1769,9 +1769,9 @@ struct HadNucleiFemto { if (passTrackNu && useDeuteronNucleus()) { const float tpcNSigmaDe = settingUseBBcomputeDeNsigma ? computeNSigmaDe(track) : track.tpcNSigmaDe(); - mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselection"), track.sign() * track.pt(), tpcNSigmaDe); - mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselecComp"), track.sign() * track.pt(), track.tpcNSigmaDe()); if (track.hasTOF() && track.tpcInnerParam() > settingCutPinMinTOFITSDe) { + mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselection"), track.sign() * track.pt(), tpcNSigmaDe); + mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselecComp"), track.sign() * track.pt(), track.tpcNSigmaDe()); const float tofNSigmaDe = track.tofNSigmaDe(); const float combNsigmaDe = std::sqrt(tofNSigmaDe * tofNSigmaDe + tpcNSigmaDe * tpcNSigmaDe); mQaRegistry.fill(HIST("purity/h2NsigmaNuTOF_preselection"), track.sign() * track.pt(), tofNSigmaDe); @@ -1780,6 +1780,10 @@ struct HadNucleiFemto { o2::aod::ITSResponse itsResponse; const float itsNSigmaDe = itsResponse.nSigmaITS(track.itsClusterSizes(), track.p(), track.eta()); mQaRegistry.fill(HIST("purity/h2NSigmaNuITS_preselection"), track.sign() * track.pt(), itsNSigmaDe); + if (std::abs(itsNSigmaDe) <= settingCutNsigmaITSDe) { + mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselection"), track.sign() * track.pt(), tpcNSigmaDe); + mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselecComp"), track.sign() * track.pt(), track.tpcNSigmaDe()); + } } } else if (passTrackNu && useHelium3Nucleus()) { const float tpcNSigmaHe3 = computeNSigmaHe3(track); From 038446ed05c0686f514bdb77bc43b0ee5b61b7f0 Mon Sep 17 00:00:00 2001 From: blacwovie Date: Mon, 6 Jul 2026 23:11:38 +0800 Subject: [PATCH 6/6] Update HadNucleiFemto.cxx --- .../FemtoNuclei/TableProducer/HadNucleiFemto.cxx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx index 97d7279f55b..7d1b8580535 100644 --- a/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx +++ b/PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx @@ -1769,14 +1769,17 @@ struct HadNucleiFemto { if (passTrackNu && useDeuteronNucleus()) { const float tpcNSigmaDe = settingUseBBcomputeDeNsigma ? computeNSigmaDe(track) : track.tpcNSigmaDe(); - if (track.hasTOF() && track.tpcInnerParam() > settingCutPinMinTOFITSDe) { + const float absTPCInnerParam = std::abs(track.tpcInnerParam()); + if (absTPCInnerParam > settingCutPinMinTOFITSDe) { mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselection"), track.sign() * track.pt(), tpcNSigmaDe); mQaRegistry.fill(HIST("purity/h2NsigmaNuTPC_preselecComp"), track.sign() * track.pt(), track.tpcNSigmaDe()); - const float tofNSigmaDe = track.tofNSigmaDe(); - const float combNsigmaDe = std::sqrt(tofNSigmaDe * tofNSigmaDe + tpcNSigmaDe * tpcNSigmaDe); - mQaRegistry.fill(HIST("purity/h2NsigmaNuTOF_preselection"), track.sign() * track.pt(), tofNSigmaDe); - mQaRegistry.fill(HIST("purity/h2NsigmaNuComb_preselection"), track.sign() * track.pt(), combNsigmaDe); - } else if (track.tpcInnerParam() <= settingCutPinMinTOFITSDe) { + if (track.hasTOF()) { + const float tofNSigmaDe = track.tofNSigmaDe(); + const float combNsigmaDe = std::sqrt(tofNSigmaDe * tofNSigmaDe + tpcNSigmaDe * tpcNSigmaDe); + mQaRegistry.fill(HIST("purity/h2NsigmaNuTOF_preselection"), track.sign() * track.pt(), tofNSigmaDe); + mQaRegistry.fill(HIST("purity/h2NsigmaNuComb_preselection"), track.sign() * track.pt(), combNsigmaDe); + } + } else { o2::aod::ITSResponse itsResponse; const float itsNSigmaDe = itsResponse.nSigmaITS(track.itsClusterSizes(), track.p(), track.eta()); mQaRegistry.fill(HIST("purity/h2NSigmaNuITS_preselection"), track.sign() * track.pt(), itsNSigmaDe);