From 3fadf9a849ec63dbe78abf3d62c33b5bf120c355 Mon Sep 17 00:00:00 2001 From: Paola Vargas Torres Date: Tue, 28 Jul 2026 13:22:22 -0600 Subject: [PATCH 1/3] Add GoodITSLayersAll event cut and adjust myTrackSelection cuts --- PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx b/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx index 2186703599f..aa012ec3dd6 100644 --- a/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx +++ b/PWGLF/Tasks/Nuspex/dedxPidAnalysis.cxx @@ -140,6 +140,7 @@ struct DedxPidAnalysis { ZVtxCut, NoSameBunchPileup, GoodZvtxFT0vsPV, + GoodITS, INELgt }; @@ -204,7 +205,7 @@ struct DedxPidAnalysis { "max z distance to IP"}; Configurable etaMin{"etaMin", -0.8f, "etaMin"}; Configurable etaMax{"etaMax", +0.8f, "etaMax"}; - Configurable minNCrossedRowsOverFindableClustersTPC{"minNCrossedRowsOverFindableClustersTPC", 0.8f, "Additional cut on the minimum value of the ratio between crossed rows and findable clusters in the TPC"}; + // Configurable minNCrossedRowsOverFindableClustersTPC{"minNCrossedRowsOverFindableClustersTPC", 0.8f, "Additional cut on the minimum value of the ratio between crossed rows and findable clusters in the TPC"}; Configurable nSigmaDCAxy{"nSigmaDCAxy", 3.0, "nSigma DCAxy selection"}; Configurable dcaXYp0{"dcaXYp0", 0.0105f, "DCAxy formula: p0 + p1/pt^p2"}; Configurable dcaXYp1{"dcaXYp1", 0.0350f, "DCAxy p1 parameter"}; @@ -250,6 +251,7 @@ struct DedxPidAnalysis { Configurable nGoodZvtx{"nGoodZvtx", true, "Rejects events with no vertex match between FT0 and PV"}; // Configurable nPileUp{"nPileUp", true, "Rejects events with pileup in the same bunch crossing"}; Configurable nINELSelectionMode{"nINELSelectionMode", 2, "INEL event selection: 1 no sel, 2 INEL>0, 3 INEL>1"}; + Configurable nGoodITS{"nGoodITS", true, "Numbers of inactive chips on all ITS layers are below maximum allowed values"}; Configurable v0SelectionMode{"v0SelectionMode", 3, "V0 Selection base on TPC: 1, TOF:2 ,Both:3"}; Configurable momentumMode{"momentumMode", 2, "1: TPC inner param, 2: Total momentum p"}; Configurable v0TypeSelection{"v0TypeSelection", 1, "select on a certain V0 type (leave negative if no selection desired)"}; @@ -281,10 +283,10 @@ struct DedxPidAnalysis { TrackSelection selectedTracks; selectedTracks.SetPtRange(0.1f, 1e10f); selectedTracks.SetEtaRange(etaMin, etaMax); - selectedTracks.SetRequireITSRefit(true); - selectedTracks.SetRequireTPCRefit(true); + // selectedTracks.SetRequireITSRefit(true); + // selectedTracks.SetRequireTPCRefit(true); selectedTracks.SetMinNCrossedRowsTPC(static_cast(minNCrossedRowsTPC.value)); - selectedTracks.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC); + // selectedTracks.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC); selectedTracks.SetMaxChi2PerClusterTPC(maxChi2TPC); selectedTracks.SetRequireHitsInITSLayers(1, {0, 1, 2}); selectedTracks.SetMaxChi2PerClusterITS(maxChi2ITS); @@ -310,6 +312,11 @@ struct DedxPidAnalysis { } else { LOGF(info, "GoodZvtxFT0vsPV cut disabled"); } + if (nGoodITS) { + LOGF(info, "Applying GoodITSLayersAll cut"); + } else { + LOGF(info, "GoodITSLayersAll cut disabled"); + } if (nINELSelectionMode == NoSelINEL) { LOGF(info, "Applying just INEL"); label = "INEL"; @@ -760,7 +767,7 @@ struct DedxPidAnalysis { HistType::kTH2F, {{ptAxis}, {dcaAxis}}); // Event Counter - registryDeDx.add("evsel", "events selected", HistType::kTH1F, {{6, 0.5, 6.5, ""}}); + registryDeDx.add("evsel", "events selected", HistType::kTH1F, {{7, 0.5, 7.5, ""}}); auto hstat = registryDeDx.get(HIST("evsel")); auto* x = hstat->GetXaxis(); x->SetBinLabel(AllEv, "AllEv"); @@ -769,6 +776,7 @@ struct DedxPidAnalysis { x->SetBinLabel(NoSameBunchPileup, "NoSameBunchPileup"); x->SetBinLabel(GoodZvtxFT0vsPV, "GoodZvtxFT0vsPV"); x->SetBinLabel(INELgt, label); + x->SetBinLabel(GoodITS, "GoodITSLayersAll"); // Track Prim Counter registryDeDx.add("trackselAll", "track selected all particles", HistType::kTH1F, {{5, 0.5, 5.5, ""}}); @@ -1438,6 +1446,12 @@ struct DedxPidAnalysis { registryDeDx.fill(HIST("evsel"), EvCutLabel::GoodZvtxFT0vsPV); } + if (nGoodITS) { + if (!collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) + return; + registryDeDx.fill(HIST("evsel"), EvCutLabel::GoodITS); + } + if (nINELSelectionMode == NoSelINEL) { registryDeDx.fill(HIST("evsel"), EvCutLabel::INELgt); } else if (nINELSelectionMode == SelINELgt0) { From cdccf12064c725df66a5533483e168f621f62dfe Mon Sep 17 00:00:00 2001 From: Paola Vargas Torres Date: Mon, 3 Aug 2026 15:43:51 -0600 Subject: [PATCH 2/3] Add GoodITSLayersAll event cut and adjust myTrackSelection cuts to multiplicityPt.cxx --- PWGLF/Tasks/Nuspex/multiplicityPt.cxx | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/PWGLF/Tasks/Nuspex/multiplicityPt.cxx b/PWGLF/Tasks/Nuspex/multiplicityPt.cxx index 7f0864b61c1..09bc3ac17ba 100644 --- a/PWGLF/Tasks/Nuspex/multiplicityPt.cxx +++ b/PWGLF/Tasks/Nuspex/multiplicityPt.cxx @@ -121,6 +121,7 @@ struct MultiplicityPt { Configurable requireIsGoodZvtxFT0vsPV{"requireIsGoodZvtxFT0vsPV", false, "Require good Z vertex FT0 vs PV"}; Configurable requireIsVertexITSTPC{"requireIsVertexITSTPC", false, "Require vertex ITSTPC"}; Configurable removeNoTimeFrameBorder{"removeNoTimeFrameBorder", false, "Remove no time frame border"}; + Configurable nGoodITS{"nGoodITS", true, "Numbers of inactive chips on all ITS layers are below maximum allowed values"}; // Gen-level event selection Configurable selTVXMC{"selTVXMC", true, "Require TVX-equivalent at gen level"}; @@ -229,7 +230,8 @@ struct MultiplicityPt { kVtxZ, kINELgt0, kRecoColl, - kRecoSelected + kGoodITS, + kRecoSelected, }; // Particle species enum @@ -252,14 +254,14 @@ struct MultiplicityPt { // Setup custom track cuts if (useCustomTrackCuts.value) { customTrackCuts = getGlobalTrackSelectionRun3ITSMatch(itsPattern.value); - customTrackCuts.SetRequireITSRefit(requireITS.value); - customTrackCuts.SetRequireTPCRefit(requireTPC.value); + //customTrackCuts.SetRequireITSRefit(requireITS.value); + //customTrackCuts.SetRequireTPCRefit(requireTPC.value); customTrackCuts.SetMinNClustersITS(minITSnClusters.value); customTrackCuts.SetRequireGoldenChi2(requireGoldenChi2.value); customTrackCuts.SetMaxChi2PerClusterTPC(maxChi2PerClusterTPC.value); customTrackCuts.SetMaxChi2PerClusterITS(maxChi2PerClusterITS.value); customTrackCuts.SetMinNCrossedRowsTPC(minNCrossedRowsTPC.value); - customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); + //customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); customTrackCuts.SetMaxDcaXYPtDep([](float /*pt*/) { return 10000.f; }); // customTrackCuts.SetMaxDcaZ(maxDcaZ.value); } @@ -305,7 +307,7 @@ struct MultiplicityPt { // ======================================================================== // EVENT COUNTER AND BASIC HISTOGRAMS // ======================================================================== - registry.add("EventCounter", ";;Events", kTH1F, {{8, 0.5, 8.5}}); + registry.add("EventCounter", ";;Events", kTH1F, {{9, 0.5, 9.5}}); { auto h = registry.get(HIST("EventCounter")); h->GetXaxis()->SetBinLabel(kAllGen, "All gen."); @@ -313,6 +315,7 @@ struct MultiplicityPt { h->GetXaxis()->SetBinLabel(kVtxZ, "|Zvtx|GetXaxis()->SetBinLabel(kINELgt0, "INEL>0"); h->GetXaxis()->SetBinLabel(kRecoColl, ">=1 reco coll."); + h->GetXaxis()->SetBinLabel(kGoodITS, "GoodITSLayersAll"); h->GetXaxis()->SetBinLabel(kRecoSelected, ">=1 reco+sel."); } @@ -967,7 +970,7 @@ struct MultiplicityPt { if (isZvtxPosSelMC.value && std::abs(mcCollision.posZ()) > cfgCutVertex.value) return; registry.fill(HIST("EventCounter"), kVtxZ); - + if (cfgINELCut.value == 1 && nChINEL == 0) return; if (cfgINELCut.value == INELgt1 && nChINEL < INELgt1) @@ -1063,8 +1066,12 @@ struct MultiplicityPt { continue; if (!isEventSelectedMC(collision)) continue; - - registry.fill(HIST("EventCounter"), kRecoSelected); + + if (nGoodITS.value && !collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) + continue; + registry.fill(HIST("EventCounter"), kGoodITS); + + registry.fill(HIST("EventCounter"), kRecoSelected); const float centrality = collision.centFT0M(); From 223bc85d462f8764bda6cd9601b9e936d55eb730 Mon Sep 17 00:00:00 2001 From: Paola Vargas Torres Date: Mon, 3 Aug 2026 15:44:47 -0600 Subject: [PATCH 3/3] Add GoodITSLayersAll event cut and adjust myTrackSelection cuts to multiplicityPt.cxx --- PWGLF/Tasks/Nuspex/multiplicityPt.cxx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/PWGLF/Tasks/Nuspex/multiplicityPt.cxx b/PWGLF/Tasks/Nuspex/multiplicityPt.cxx index 09bc3ac17ba..7e90e8b89d5 100644 --- a/PWGLF/Tasks/Nuspex/multiplicityPt.cxx +++ b/PWGLF/Tasks/Nuspex/multiplicityPt.cxx @@ -121,7 +121,7 @@ struct MultiplicityPt { Configurable requireIsGoodZvtxFT0vsPV{"requireIsGoodZvtxFT0vsPV", false, "Require good Z vertex FT0 vs PV"}; Configurable requireIsVertexITSTPC{"requireIsVertexITSTPC", false, "Require vertex ITSTPC"}; Configurable removeNoTimeFrameBorder{"removeNoTimeFrameBorder", false, "Remove no time frame border"}; - Configurable nGoodITS{"nGoodITS", true, "Numbers of inactive chips on all ITS layers are below maximum allowed values"}; + Configurable nGoodITS{"nGoodITS", true, "Numbers of inactive chips on all ITS layers are below maximum allowed values"}; // Gen-level event selection Configurable selTVXMC{"selTVXMC", true, "Require TVX-equivalent at gen level"}; @@ -254,14 +254,14 @@ struct MultiplicityPt { // Setup custom track cuts if (useCustomTrackCuts.value) { customTrackCuts = getGlobalTrackSelectionRun3ITSMatch(itsPattern.value); - //customTrackCuts.SetRequireITSRefit(requireITS.value); - //customTrackCuts.SetRequireTPCRefit(requireTPC.value); + // customTrackCuts.SetRequireITSRefit(requireITS.value); + // customTrackCuts.SetRequireTPCRefit(requireTPC.value); customTrackCuts.SetMinNClustersITS(minITSnClusters.value); customTrackCuts.SetRequireGoldenChi2(requireGoldenChi2.value); customTrackCuts.SetMaxChi2PerClusterTPC(maxChi2PerClusterTPC.value); customTrackCuts.SetMaxChi2PerClusterITS(maxChi2PerClusterITS.value); customTrackCuts.SetMinNCrossedRowsTPC(minNCrossedRowsTPC.value); - //customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); + // customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); customTrackCuts.SetMaxDcaXYPtDep([](float /*pt*/) { return 10000.f; }); // customTrackCuts.SetMaxDcaZ(maxDcaZ.value); } @@ -970,7 +970,7 @@ struct MultiplicityPt { if (isZvtxPosSelMC.value && std::abs(mcCollision.posZ()) > cfgCutVertex.value) return; registry.fill(HIST("EventCounter"), kVtxZ); - + if (cfgINELCut.value == 1 && nChINEL == 0) return; if (cfgINELCut.value == INELgt1 && nChINEL < INELgt1) @@ -1066,12 +1066,12 @@ struct MultiplicityPt { continue; if (!isEventSelectedMC(collision)) continue; - - if (nGoodITS.value && !collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) - continue; + + if (nGoodITS.value && !collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) + continue; registry.fill(HIST("EventCounter"), kGoodITS); - - registry.fill(HIST("EventCounter"), kRecoSelected); + + registry.fill(HIST("EventCounter"), kRecoSelected); const float centrality = collision.centFT0M();