From 4553fda621913417b542b56c52951dbedc3c90a1 Mon Sep 17 00:00:00 2001 From: Prottay Das Date: Tue, 28 Oct 2025 17:45:24 +0100 Subject: [PATCH 1/2] updated systematic study for phi meson --- PWGCF/DataModel/CorrelationsDerived.h | 2 ++ PWGCF/TableProducer/filter2Prong.cxx | 40 +++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/PWGCF/DataModel/CorrelationsDerived.h b/PWGCF/DataModel/CorrelationsDerived.h index 95fcc296597..b49818891f3 100644 --- a/PWGCF/DataModel/CorrelationsDerived.h +++ b/PWGCF/DataModel/CorrelationsDerived.h @@ -143,6 +143,8 @@ enum ParticleDecay { PhiToKKPID1, PhiToKKPID2, PhiToKKPID3, + PhiToKKPID3Loose, + PhiToKKPID3Tight, K0stoPiPi, LambdatoPPi, AntiLambdatoPiP, diff --git a/PWGCF/TableProducer/filter2Prong.cxx b/PWGCF/TableProducer/filter2Prong.cxx index 80f947348a4..929e44e15d9 100644 --- a/PWGCF/TableProducer/filter2Prong.cxx +++ b/PWGCF/TableProducer/filter2Prong.cxx @@ -123,6 +123,7 @@ struct Filter2Prong { } grpV0; struct : ConfigurableGroup { + O2_DEFINE_CONFIGURABLE(storeLooseTightforphi, bool, true, "Store also loose and tight phi candidates for systematics"); O2_DEFINE_CONFIGURABLE(ImMinInvMassPhiMeson, float, 0.98f, "Minimum invariant mass Phi meson (GeV)"); O2_DEFINE_CONFIGURABLE(ImMaxInvMassPhiMeson, float, 1.07f, "Maximum invariant mass Phi meson (GeV)"); O2_DEFINE_CONFIGURABLE(ITSPIDSelection, bool, true, "PID ITS"); @@ -130,9 +131,9 @@ struct Filter2Prong { O2_DEFINE_CONFIGURABLE(lowITSPIDNsigma, float, 3.0, "lower cut on PID nsigma for ITS"); O2_DEFINE_CONFIGURABLE(highITSPIDNsigma, float, 3.0, "higher cut on PID nsigma for ITS"); O2_DEFINE_CONFIGURABLE(ITSclusterPhiMeson, int, 5, "Minimum number of ITS cluster for phi meson track"); - O2_DEFINE_CONFIGURABLE(TPCCrossedRowsPhiMeson, int, 80, "Minimum number of TPC Crossed Rows for phi meson track"); - O2_DEFINE_CONFIGURABLE(cutDCAxyPhiMeson, float, 0.1, "Maximum DCAxy for phi meson track"); - O2_DEFINE_CONFIGURABLE(cutDCAzPhiMeson, float, 0.1, "Maximum DCAz for phi meson track"); + O2_DEFINE_CONFIGURABLE(TPCCrossedRowsPhiMeson, std::vector, (std::vector{70, 80, 90}), "Minimum number of TPC Crossed Rows for phi meson track (Loose, Default, Tight)"); + O2_DEFINE_CONFIGURABLE(cutDCAxyPhiMeson, std::vector, (std::vector{0.12, 0.1, 0.08}), "Maximum DCAxy for phi meson tracks (Loose, Default, Tight)"); + O2_DEFINE_CONFIGURABLE(cutDCAzPhiMeson, std::vector, (std::vector{0.12, 0.1, 0.08}), "Maximum DCAz for phi meson tracks (Loose, Default, Tight)"); O2_DEFINE_CONFIGURABLE(cutEtaPhiMeson, float, 0.8, "Maximum eta for phi meson track"); O2_DEFINE_CONFIGURABLE(cutPTPhiMeson, float, 0.15, "Maximum pt for phi meson track"); O2_DEFINE_CONFIGURABLE(isDeepAngle, bool, true, "Flag for applying deep angle"); @@ -318,7 +319,18 @@ struct Filter2Prong { template bool selectionTrack(const T& candidate) { - if (candidate.isGlobalTrack() && candidate.isPVContributor() && candidate.itsNCls() >= grpPhi.ITSclusterPhiMeson && candidate.tpcNClsCrossedRows() > grpPhi.TPCCrossedRowsPhiMeson && std::abs(candidate.dcaXY()) <= grpPhi.cutDCAxyPhiMeson && std::abs(candidate.dcaZ()) <= grpPhi.cutDCAzPhiMeson && std::abs(candidate.eta()) <= grpPhi.cutEtaPhiMeson && candidate.pt() >= grpPhi.cutPTPhiMeson) { + if (candidate.isGlobalTrack() && candidate.isPVContributor() && candidate.itsNCls() >= grpPhi.ITSclusterPhiMeson && std::abs(candidate.eta()) <= grpPhi.cutEtaPhiMeson && candidate.pt() >= grpPhi.cutPTPhiMeson) { + return true; + } + return false; + } + + template + bool selectionsys(const T& candidate, bool isLoose, bool isTight) + { + const int indexCut = isLoose ? 0 : (isTight ? 2 : 1); + + if (std::abs(candidate.dcaXY()) <= grpPhi.cutDCAxyPhiMeson.value[indexCut] && std::abs(candidate.dcaZ()) <= grpPhi.cutDCAzPhiMeson.value[indexCut] && candidate.tpcNClsCrossedRows() > grpPhi.TPCCrossedRowsPhiMeson.value[indexCut]) { return true; } return false; @@ -735,8 +747,24 @@ struct Filter2Prong { cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID2); } if (selectionPID3(p1) && selectionPID3(p2)) { - output2ProngTracks(cfcollisions.begin().globalIndex(), - cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID3); + if (selectionsys(p1, false, false) && selectionsys(p2, false, false)) // default + { + output2ProngTracks(cfcollisions.begin().globalIndex(), + cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID3); + } + if (grpPhi.storeLooseTightforphi) // store also loose and tight K0s + { + if (selectionsys(p1, true, false) && selectionsys(p2, true, false)) // loose + { + output2ProngTracks(cfcollisions.begin().globalIndex(), + cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID3Loose); + } + if (selectionsys(p1, false, true) && selectionsys(p2, false, true)) // tight + { + output2ProngTracks(cfcollisions.begin().globalIndex(), + cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID3Tight); + } + } } } // end of loop over second track } // end of loop over first track From 28667bf70567a764c1314eedbe86a199536bc3be Mon Sep 17 00:00:00 2001 From: Prottay Das Date: Tue, 28 Oct 2025 18:07:33 +0100 Subject: [PATCH 2/2] updated --- PWGCF/TableProducer/filter2Prong.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGCF/TableProducer/filter2Prong.cxx b/PWGCF/TableProducer/filter2Prong.cxx index 929e44e15d9..0197160a5e1 100644 --- a/PWGCF/TableProducer/filter2Prong.cxx +++ b/PWGCF/TableProducer/filter2Prong.cxx @@ -326,7 +326,7 @@ struct Filter2Prong { } template - bool selectionsys(const T& candidate, bool isLoose, bool isTight) + bool selectionSys(const T& candidate, bool isLoose, bool isTight) { const int indexCut = isLoose ? 0 : (isTight ? 2 : 1); @@ -747,19 +747,19 @@ struct Filter2Prong { cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID2); } if (selectionPID3(p1) && selectionPID3(p2)) { - if (selectionsys(p1, false, false) && selectionsys(p2, false, false)) // default + if (selectionSys(p1, false, false) && selectionSys(p2, false, false)) // default { output2ProngTracks(cfcollisions.begin().globalIndex(), cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID3); } if (grpPhi.storeLooseTightforphi) // store also loose and tight K0s { - if (selectionsys(p1, true, false) && selectionsys(p2, true, false)) // loose + if (selectionSys(p1, true, false) && selectionSys(p2, true, false)) // loose { output2ProngTracks(cfcollisions.begin().globalIndex(), cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID3Loose); } - if (selectionsys(p1, false, true) && selectionsys(p2, false, true)) // tight + if (selectionSys(p1, false, true) && selectionSys(p2, false, true)) // tight { output2ProngTracks(cfcollisions.begin().globalIndex(), cftrack1.globalIndex(), cftrack2.globalIndex(), s.pt(), s.eta(), phi, s.M(), aod::cf2prongtrack::PhiToKKPID3Tight);