diff --git a/ALICE3/DataModel/OTFMulticharm.h b/ALICE3/DataModel/OTFMulticharm.h index fe9cb6afc14..74d1afc3888 100644 --- a/ALICE3/DataModel/OTFMulticharm.h +++ b/ALICE3/DataModel/OTFMulticharm.h @@ -35,13 +35,15 @@ DECLARE_SOA_INDEX_COLUMN_FULL(XiCCPion, xiCCPion, int, Tracks, "_PiXiCC"); DECLARE_SOA_COLUMN(XicMass, xicMass, float); DECLARE_SOA_COLUMN(XiccMass, xiccMass, float); -DECLARE_SOA_COLUMN(LUTConfigId, lutConfigId, int); //! Index for LUT configuration +DECLARE_SOA_COLUMN(LutConfigId, lutConfigId, int); //! Index for LUT configuration // kine vars DECLARE_SOA_COLUMN(XiccPt, xiccPt, float); DECLARE_SOA_COLUMN(XiccEta, xiccEta, float); DECLARE_SOA_COLUMN(XicPt, xicPt, float); DECLARE_SOA_COLUMN(XicEta, xicEta, float); +DECLARE_SOA_COLUMN(XiPt, xiPt, float); +DECLARE_SOA_COLUMN(XiEta, xiEta, float); // topo vars DECLARE_SOA_COLUMN(XiDCAz, xiDCAz, float); @@ -91,7 +93,8 @@ DECLARE_SOA_TABLE(MCharmCores, "AOD", "MCharmCores", otfmulticharm::XicPt, otfmulticharm::XicEta, otfmulticharm::XicDauDCA, - + otfmulticharm::XiPt, + otfmulticharm::XiEta, otfmulticharm::XiDCAxy, otfmulticharm::XiDCAz, otfmulticharm::XicDCAxy, @@ -114,7 +117,7 @@ DECLARE_SOA_TABLE(MCharmCores, "AOD", "MCharmCores", otfmulticharm::Pi1cPt, otfmulticharm::Pi2cPt, otfmulticharm::PiccPt, - otfmulticharm::LUTConfigId); + otfmulticharm::LutConfigId); } // namespace o2::aod diff --git a/ALICE3/TableProducer/alice3MulticharmFinder.cxx b/ALICE3/TableProducer/alice3MulticharmFinder.cxx index ff589f85a15..545951013e3 100644 --- a/ALICE3/TableProducer/alice3MulticharmFinder.cxx +++ b/ALICE3/TableProducer/alice3MulticharmFinder.cxx @@ -199,6 +199,8 @@ struct Alice3MulticharmFinder { // Helper structs to pass candidate information struct { float radius{}; + float pt{}; + float eta{}; o2::track::TrackParCov trackParCov; } thisXiCandidate; @@ -812,6 +814,7 @@ struct Alice3MulticharmFinder { thisXiccCandidate.eta, thisXiccCandidate.dca, thisXicCandidate.mass, thisXicCandidate.pt, thisXicCandidate.eta, thisXicCandidate.dca, + thisXiCandidate.pt, thisXiCandidate.eta, xi.dcaXYCascToPV(), xi.dcaZCascToPV(), xicdcaXY, xicdcaZ, xiccdcaXY, xiccdcaZ, @@ -886,6 +889,8 @@ struct Alice3MulticharmFinder { hist("hDCAzXi")->Fill(xi.dcaZ() * ToMicrons); hist("hMinXiDecayRadius")->Fill(xiCand.cascRadius()); thisXiCandidate.radius = xiCand.cascRadius(); + thisXiCandidate.pt = xi.pt(); + thisXiCandidate.eta = xi.eta(); thisXiCandidate.trackParCov = getTrackParCov(xi); processFindXicc(collision, xiCand, picTracksGrouped, piccTracksGrouped); } @@ -971,6 +976,8 @@ struct Alice3MulticharmFinder { std::array cascCovMat{}; std::copy(xiCand.covMat(), xiCand.covMat() + NCovMatElements, cascCovMat.begin()); thisXiCandidate.radius = xiCand.cascradius(); + thisXiCandidate.pt = xiCand.pt(); + thisXiCandidate.eta = xiCand.eta(); thisXiCandidate.trackParCov = o2::track::TrackParCov(cascSV, cascP, cascCovMat, chargeCascade); processFindXicc(collision, xiCand, picTracksGrouped, piccTracksGrouped); } diff --git a/ALICE3/Tasks/alice3Multicharm.cxx b/ALICE3/Tasks/alice3Multicharm.cxx index cbdbc95e691..b344fe5095f 100644 --- a/ALICE3/Tasks/alice3Multicharm.cxx +++ b/ALICE3/Tasks/alice3Multicharm.cxx @@ -56,7 +56,7 @@ struct Alice3Multicharm { static constexpr float ToMicrons = 1e+4; struct : ConfigurableGroup { - std::string prefix = "bdt"; // JSON group name + std::string prefix = "bdt"; Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable localPath{"localPath", "MCharm_BDTModel.onnx", "(std::string) Path to the local .onnx file."}; Configurable pathCCDB{"pathCCDB", "Users/j/jekarlss/MLModels", "Path on CCDB"}; @@ -80,34 +80,72 @@ struct Alice3Multicharm { ConfigurableAxis axisBDTScoreFine{"axisBDTScoreFine", {1000, 0, 1}, "BDT Score for 1D histogram"}; ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for QA histograms"}; - Configurable xiMinDCAxy{"xiMinDCAxy", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; - Configurable xiMinDCAz{"xiMinDCAz", -1, "[0] in |DCAz| > [0]+[1]/pT"}; - Configurable xiMinRadius{"xiMinRadius", -1, "Minimum R2D for Xic decay (cm)"}; - - Configurable picMinDCAxy{"picMinDCAxy", -1, "[0] in |DCAz| > [0]+[1]/pT"}; - Configurable picMinDCAz{"picMinDCAz", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; - Configurable picMinPt{"picMinPt", -1, "Minimum pT for Xic pions"}; - - Configurable piccMinDCAxy{"piccMinDCAxy", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; - Configurable piccMinDCAz{"piccMinDCAz", -1, "[0] in |DCAz| > [0]+[1]/pT"}; - Configurable piccMinPt{"piccMinPt", -1, "Minimum pT for Xicc pions"}; - - Configurable xicMaxDauDCA{"xicMaxDauDCA", 1e+4, "DCA between Xic daughters (cm)"}; - Configurable xicMinDCAxy{"xicMinDCAxy", -1, "[0] in |DCAz| > [0]+[1]/pT"}; - Configurable xicMinDCAz{"xicMinDCAz", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; - Configurable xiccMaxDCAxy{"xiccMaxDCAxy", 1e+4, "Maximum DCAxy"}; - Configurable xiccMaxDCAz{"xiccMaxDCAz", 1e+4, "Maximum DCAz"}; - Configurable xicMinRadius{"xicMinRadius", -1, "Minimum R2D for Xic decay (cm)"}; - Configurable xicMinDecayDistanceFromPV{"xicMinDecayDistanceFromPV", -1, "Minimum distance for Xic decay from PV (cm)"}; - Configurable xicMinProperLength{"xicMinProperLength", -1, "Minimum proper length for Xic decay (cm)"}; - Configurable xicMaxProperLength{"xicMaxProperLength", 1e+4, "Minimum proper length for Xic decay (cm)"}; - - Configurable xiccMaxDauDCA{"xiccMaxDauDCA", 1e+4, "DCA between Xicc daughters (cm)"}; - Configurable xiccMinRadius{"xiccMinRadius", -1, "Minimum R2D for Xicc decay (cm)"}; - Configurable xiccMinProperLength{"xiccMinProperLength", -1, "Minimum proper length for Xicc decay (cm)"}; - Configurable xiccMaxProperLength{"xiccMaxProperLength", 1e+4, "Minimum proper length for Xicc decay (cm)"}; - Configurable otfConfig{"otfConfig", 0, "OTF configuration flag"}; + struct : ConfigurableGroup { + std::string prefix = "selVals"; + Configurable xiMinConstDCAxy{"xiMinConstDCAxy", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; + Configurable xiMinPtDepDCAxy{"xiMinPtDepDCAxy", 0, "[1] in |DCAxy| > [0]+[1]/pT"}; + Configurable xiMinConstDCAz{"xiMinConstDCAz", -1, "[0] in |DCAz| > [0]+[1]/pT"}; + Configurable xiMinPtDepDCAz{"xiMinPtDepDCAz", 0, "[1] in |DCAz| > [0]+[1]/pT"}; + Configurable xiMinRadius{"xiMinRadius", -1, "Minimum R2D for Xi decay (cm)"}; + + Configurable picMinConstDCAxy{"picMinConstDCAxy", -1, "[0] in |DCAz| > [0]+[1]/pT"}; + Configurable picMinPtDepDCAxy{"picMinPtDepDCAxy", 0, "[1] in |DCAz| > [0]+[1]/pT"}; + Configurable picMinConstDCAz{"picMinConstDCAz", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; + Configurable picMinPtDepDCAz{"picMinPtDepDCAz", 0, "[1] in |DCAxy| > [0]+[1]/pT"}; + Configurable picMinPt{"picMinPt", -1, "Minimum pT for Xic pions"}; + + Configurable piccMinConstDCAxy{"piccMinConstDCAxy", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; + Configurable piccMinPtDepDCAxy{"piccMinPtDepDCAxy", 0, "[1] in |DCAxy| > [0]+[1]/pT"}; + Configurable piccMinConstDCAz{"piccMinConstDCAz", -1, "[0] in |DCAz| > [0]+[1]/pT"}; + Configurable piccMinPtDepDCAz{"piccMinPtDepDCAz", 0, "[1] in |DCAz| > [0]+[1]/pT"}; + Configurable piccMinPt{"piccMinPt", -1, "Minimum pT for Xicc pions"}; + + Configurable xicMinConstDCAxy{"xicMinConstDCAxy", -1, "[0] in |DCAz| > [0]+[1]/pT"}; + Configurable xicMinConstDCAz{"xicMinConstDCAz", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; + Configurable xicMinPtDepDCAxy{"xicMinPtDepDCAxy", -1, "[0] in |DCAz| > [0]+[1]/pT"}; + Configurable xicMinPtDepDCAz{"xicMinPtDepDCAz", -1, "[0] in |DCAxy| > [0]+[1]/pT"}; + Configurable xicMaxDauDCA{"xicMaxDauDCA", 1e+4, "DCA between Xic daughters (cm)"}; + Configurable xicMinRadius{"xicMinRadius", -1, "Minimum R2D for Xic decay (cm)"}; + Configurable xicMinDecayDistanceFromPV{"xicMinDecayDistanceFromPV", -1, "Minimum distance for Xic decay from PV (cm)"}; + Configurable xicMinProperLength{"xicMinProperLength", -1, "Minimum proper length for Xic decay (cm)"}; + Configurable xicMaxProperLength{"xicMaxProperLength", 1e+4, "Minimum proper length for Xic decay (cm)"}; + + Configurable xiccMaxDCAxy{"xiccMaxDCAxy", 1e+4, "Maximum DCAxy"}; + Configurable xiccMaxDCAz{"xiccMaxDCAz", 1e+4, "Maximum DCAz"}; + Configurable xiccMaxDauDCA{"xiccMaxDauDCA", 1e+4, "DCA between Xicc daughters (cm)"}; + Configurable xiccMinRadius{"xiccMinRadius", -1, "Minimum R2D for Xicc decay (cm)"}; + Configurable xiccMinProperLength{"xiccMinProperLength", -1, "Minimum proper length for Xicc decay (cm)"}; + Configurable xiccMaxProperLength{"xiccMaxProperLength", 1e+4, "Minimum proper length for Xicc decay (cm)"}; + } selVals; + struct : ConfigurableGroup { + std::string prefix = "selVals"; + Configurable applyXiMinDCAxy{"applyXiMinDCAxy", false, "Apply |DCAxy| > [0]+[1]/pT"}; + Configurable applyXiMinDCAz{"applyXiMinDCAz", false, "Apply |DCAz| > [0]+[1]/pT"}; + Configurable applyXiMinRadius{"applyXiMinRadius", false, "Apply min radius"}; + + Configurable applyPicMinDCAxy{"applyPicMinDCAxy", false, "Apply |DCAxy| > [0]+[1]/pT"}; + Configurable applyPicMinDCAz{"applyPicMinDCAz", false, "Apply |DCAz| > [0]+[1]/pT"}; + Configurable applyPiccMinDCAxy{"applyPiccMinDCAxy", false, "Apply |DCAxy| > [0]+[1]/pT"}; + Configurable applyPiccMinDCAz{"applyPiccMinDCAz", false, "Apply |DCAz| > [0]+[1]/pT"}; + + Configurable applyXicMinDCAxy{"applyXicMinDCAxy", false, "Apply |DCAxy| > [0]+[1]/pT"}; + Configurable applyXicMinDCAz{"applyXicMinDCAz", false, "Apply |DCAz| > [0]+[1]/pT"}; + Configurable applyXicMinRadius{"applyXicMinRadius", false, "Apply min radius"}; + Configurable applyXicMaxDauDCA{"applyXicMaxDauDCA", false, "Apply max dau dca"}; + Configurable applyXicMinDistanceFromPV{"applyXicMinDistanceFromPV", false, "Apply min distance from PV (3D)"}; + Configurable applyXicMinProperLength{"applyXicMinProperLength", false, "Apply min proper length"}; + Configurable applyXicMaxProperLength{"applyXicMaxProperLength", false, "Apply max proper length"}; + + Configurable applyXiccMinDCAxy{"applyXiccMinDCAxy", false, "Apply |DCAxy| > [0]+[1]/pT"}; + Configurable applyXiccMinDCAz{"applyXiccMinDCAz", false, "Apply |DCAz| > [0]+[1]/pT"}; + Configurable applyXiccMinRadius{"applyXiccMinRadius", false, "Apply min radius"}; + Configurable applyXiccMaxDauDCA{"applyXiccMaxDauDCA", false, "Apply max dau dca"}; + Configurable applyXiccMinProperLength{"applyXiccMinProperLength", false, "Apply min proper length"}; + Configurable applyXiccMaxProperLength{"applyXiccMaxProperLength", false, "Apply max proper length"}; + } selFlags; + + Configurable otfConfig{"otfConfig", 0, "OTF configuration flag"}; Filter configFilter = (aod::otfmulticharm::lutConfigId == otfConfig); void init(InitContext&) @@ -162,16 +200,16 @@ struct Alice3Multicharm { hMCharmBuilding->GetXaxis()->SetBinLabel(1, "nTotalCandidates"); hMCharmBuilding->GetXaxis()->SetBinLabel(2, "xicMaxDauDCA"); hMCharmBuilding->GetXaxis()->SetBinLabel(3, "xiccMaxDauDCA"); - hMCharmBuilding->GetXaxis()->SetBinLabel(4, "xiMinDCAxy"); - hMCharmBuilding->GetXaxis()->SetBinLabel(5, "xiMinDCAz"); + hMCharmBuilding->GetXaxis()->SetBinLabel(4, "xiMinConstDCAxy"); + hMCharmBuilding->GetXaxis()->SetBinLabel(5, "xiMinConstDCAz"); hMCharmBuilding->GetXaxis()->SetBinLabel(6, "pi1cMinDCAxy"); hMCharmBuilding->GetXaxis()->SetBinLabel(7, "pi1cMinDCAz"); hMCharmBuilding->GetXaxis()->SetBinLabel(8, "pi2cMinDCAxy"); hMCharmBuilding->GetXaxis()->SetBinLabel(9, "pi2cMinDCAz"); - hMCharmBuilding->GetXaxis()->SetBinLabel(10, "piccMinDCAxy"); - hMCharmBuilding->GetXaxis()->SetBinLabel(11, "piccMinDCAz"); - hMCharmBuilding->GetXaxis()->SetBinLabel(12, "xicMinDCAxy"); - hMCharmBuilding->GetXaxis()->SetBinLabel(13, "xicMinDCAz"); + hMCharmBuilding->GetXaxis()->SetBinLabel(10, "piccMinConstDCAxy"); + hMCharmBuilding->GetXaxis()->SetBinLabel(11, "piccMinConstDCAz"); + hMCharmBuilding->GetXaxis()->SetBinLabel(12, "xicMinConstDCAxy"); + hMCharmBuilding->GetXaxis()->SetBinLabel(13, "xicMinConstDCAz"); hMCharmBuilding->GetXaxis()->SetBinLabel(14, "xiccMaxDCAxy"); hMCharmBuilding->GetXaxis()->SetBinLabel(15, "xiccMaxDCAz"); hMCharmBuilding->GetXaxis()->SetBinLabel(16, "xicMinRadius"); @@ -334,107 +372,107 @@ struct Alice3Multicharm { } histos.fill(HIST("hMCharmBuilding"), 0); - if (xiccCand.xicDauDCA() > xicMaxDauDCA) { + if (selFlags.applyXicMaxDauDCA && xiccCand.xicDauDCA() > selVals.xicMaxDauDCA) { continue; } histos.fill(HIST("hMCharmBuilding"), 1); - if (xiccCand.xiccDauDCA() > xiccMaxDauDCA) { + if (selFlags.applyXiccMaxDauDCA && xiccCand.xiccDauDCA() > selVals.xiccMaxDauDCA) { continue; } histos.fill(HIST("hMCharmBuilding"), 2); - if (std::fabs(xiccCand.xiDCAxy()) < xiMinDCAxy) { + if (selFlags.applyXiMinDCAxy && std::fabs(xiccCand.xiDCAxy()) < selVals.xiMinConstDCAxy + (selVals.xiMinPtDepDCAxy / xiccCand.xiPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 3); - if (std::fabs(xiccCand.xiDCAz()) < xiMinDCAz) { + if (selFlags.applyXiMinDCAz && std::fabs(xiccCand.xiDCAz()) < selVals.xiMinConstDCAz + (selVals.xiMinPtDepDCAz / xiccCand.xiPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 4); - if (std::fabs(xiccCand.pi1cDCAxy()) < picMinDCAxy) { + if (selFlags.applyPicMinDCAxy && std::fabs(xiccCand.pi1cDCAxy()) < selVals.picMinConstDCAxy + (selVals.picMinPtDepDCAxy / xiccCand.pi1cPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 5); - if (std::fabs(xiccCand.pi1cDCAz()) < picMinDCAz) { + if (selFlags.applyPicMinDCAz && std::fabs(xiccCand.pi1cDCAz()) < selVals.picMinConstDCAz + (selVals.picMinPtDepDCAz / xiccCand.pi1cPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 6); - if (std::fabs(xiccCand.pi2cDCAxy()) < picMinDCAxy) { + if (selFlags.applyPicMinDCAxy && std::fabs(xiccCand.pi2cDCAxy()) < selVals.picMinConstDCAxy + (selVals.picMinPtDepDCAxy / xiccCand.pi2cPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 7); - if (std::fabs(xiccCand.pi2cDCAz()) < picMinDCAz) { + if (selFlags.applyPicMinDCAz && std::fabs(xiccCand.pi2cDCAz()) < selVals.picMinConstDCAz + (selVals.picMinPtDepDCAz / xiccCand.pi2cPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 8); - if (std::fabs(xiccCand.piccDCAxy()) < piccMinDCAxy) { + if (selFlags.applyPiccMinDCAxy && std::fabs(xiccCand.piccDCAxy()) < selVals.piccMinConstDCAxy + (selVals.piccMinPtDepDCAxy / xiccCand.piccPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 9); - if (std::fabs(xiccCand.piccDCAz()) < piccMinDCAz) { + if (selFlags.applyPiccMinDCAz && std::fabs(xiccCand.piccDCAz()) < selVals.piccMinConstDCAz + (selVals.piccMinPtDepDCAz / xiccCand.piccPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 10); - if (std::fabs(xiccCand.xicDCAxy()) < xicMinDCAxy) { + if (selFlags.applyXicMinDCAxy && std::fabs(xiccCand.xicDCAxy()) < selVals.xicMinConstDCAxy + (selVals.xicMinPtDepDCAxy / xiccCand.xicPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 11); - if (std::fabs(xiccCand.xicDCAz()) < xicMinDCAz) { + if (selFlags.applyXicMinDCAz && std::fabs(xiccCand.xicDCAz()) < selVals.xicMinConstDCAz + (selVals.xicMinPtDepDCAz / xiccCand.xicPt())) { continue; } histos.fill(HIST("hMCharmBuilding"), 12); - if (std::fabs(xiccCand.xiccDCAxy()) > xiccMaxDCAxy) { + if (selFlags.applyXiccMinDCAxy && std::fabs(xiccCand.xiccDCAxy()) > selVals.xiccMaxDCAxy) { continue; } histos.fill(HIST("hMCharmBuilding"), 13); - if (std::fabs(xiccCand.xiccDCAz()) > xiccMaxDCAz) { + if (selFlags.applyXiccMinDCAz && std::fabs(xiccCand.xiccDCAz()) > selVals.xiccMaxDCAz) { continue; } histos.fill(HIST("hMCharmBuilding"), 14); - if (xiccCand.xicDecayRadius2D() < xicMinRadius) { + if (selFlags.applyXicMinRadius && xiccCand.xicDecayRadius2D() < selVals.xicMinRadius) { continue; } histos.fill(HIST("hMCharmBuilding"), 15); - if (xiccCand.xiccDecayRadius2D() < xiccMinRadius) { + if (selFlags.applyXiccMinRadius && xiccCand.xiccDecayRadius2D() < selVals.xiccMinRadius) { continue; } histos.fill(HIST("hMCharmBuilding"), 16); - if (xiccCand.xicProperLength() < xicMinProperLength) { + if (selFlags.applyXicMinProperLength && xiccCand.xicProperLength() < selVals.xicMinProperLength) { continue; } histos.fill(HIST("hMCharmBuilding"), 17); - if (xiccCand.xicProperLength() > xicMaxProperLength) { + if (selFlags.applyXicMaxProperLength && xiccCand.xicProperLength() > selVals.xicMaxProperLength) { continue; } histos.fill(HIST("hMCharmBuilding"), 18); - if (xiccCand.xiccProperLength() < xiccMinProperLength) { + if (selFlags.applyXiccMinProperLength && xiccCand.xiccProperLength() < selVals.xiccMinProperLength) { continue; } histos.fill(HIST("hMCharmBuilding"), 19); - if (xiccCand.xiccProperLength() > xiccMaxProperLength) { + if (selFlags.applyXiccMaxProperLength && xiccCand.xiccProperLength() > selVals.xiccMaxProperLength) { continue; } histos.fill(HIST("hMCharmBuilding"), 20); - if (xiccCand.xicDistanceFromPV() < xicMinDecayDistanceFromPV) { + if (selFlags.applyXicMinDistanceFromPV && xiccCand.xicDistanceFromPV() < selVals.xicMinDecayDistanceFromPV) { continue; }