From d1c59a24b5804631b881abfef06b3d0d3a9915fe Mon Sep 17 00:00:00 2001 From: kegangxiong Date: Tue, 21 Apr 2026 17:42:26 +0800 Subject: [PATCH 1/5] Skip the cent cut and add some QA plots --- PWGCF/Flow/Tasks/flowZdcEnergy.cxx | 81 +++++++++++++++--------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx index adecb80f8ff..50a1b02bd16 100644 --- a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx +++ b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx @@ -12,7 +12,7 @@ /// \file flowZdcEnergy.cxx /// \author Kegang Xiong /// \since 03/2026 -/// \brief Study ZDC energy observables versus centrality for Run 2 / Run 3. +/// \brief Study ZDC energy observables versus multiplicity for Run 2 / Run 3. #include "Common/DataModel/Centrality.h" #include "Common/DataModel/EventSelection.h" @@ -47,10 +47,7 @@ using namespace o2::framework::expressions; struct flowZdcEnergy { struct : ConfigurableGroup{ - O2_DEFINE_CONFIGURABLE(cfgUseEvsel, bool, true, "whether to enable event selection") - O2_DEFINE_CONFIGURABLE(cfgCentMin, float, 0.f, "Minimum centrality for selected events") - O2_DEFINE_CONFIGURABLE(cfgCentMax, float, 90.f, "Maximum centrality for selected events") - O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10.f, "Accepted z-vertex range")} evsel; + O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10.f, "Accepted z-vertex range")} evsel; O2_DEFINE_CONFIGURABLE(cfgEtaMax, float, 0.8f, "Maximum track #eta") O2_DEFINE_CONFIGURABLE(cfgPtMin, float, 0.2f, "Minimum track #P_{t}") @@ -59,8 +56,8 @@ struct flowZdcEnergy { O2_DEFINE_CONFIGURABLE(cfgDcaZMax, float, 2.0f, "Maximum DCAz") ConfigurableAxis axisCent{"axisCent", {90, 0, 90}, "Centrality (%)"}; - ConfigurableAxis axisMult{"axisMult", {100, 0, 100000}, "Multiplicity"}; - ConfigurableAxis axisMultDivided{"axisMultDivided", {30, 0, 15000}, "Multiplicity bins for ZN energy"}; + ConfigurableAxis axisMult{"axisMult", {500, 0, 15000}, "Multiplicity"}; + ConfigurableAxis axisMultDivided{"axisMultDivided", {500, 0, 10000}, "Multiplicity bins for ZN energy"}; ConfigurableAxis axisPt{"axisPt", {100, 0, 15}, "#P_{t}"}; ConfigurableAxis axisEta{"axisEta", {64, -1.6, 1.6}, "#eta"}; ConfigurableAxis axisEnergy{"axisEnergy", {300, 0, 300}, "Energy"}; @@ -71,7 +68,6 @@ struct flowZdcEnergy { kAllEvents = 0, kSeln, kZvtx, - kCentrality, kBCHasZDC, kSelectedZDC, kNSelections @@ -105,13 +101,17 @@ struct flowZdcEnergy { hCount->GetXaxis()->SetBinLabel(kAllEvents + 1, "All events"); hCount->GetXaxis()->SetBinLabel(kSeln + 1, "Sel7/8"); hCount->GetXaxis()->SetBinLabel(kZvtx + 1, "Zvtx"); - hCount->GetXaxis()->SetBinLabel(kCentrality + 1, "Centrality"); hCount->GetXaxis()->SetBinLabel(kBCHasZDC + 1, "BC has ZDC"); hCount->GetXaxis()->SetBinLabel(kSelectedZDC + 1, "Selected ZDC"); - registry.add("QA/hCentrality", "", {HistType::kTH1D, {axisCent}}); - registry.add("QA/hMultiplicity", "", {HistType::kTH1D, {axisMult}}); - registry.add("QA/hMultiplicity_TPC", "", {HistType::kTH1D, {axisMult}}); + registry.add("QA/hCentrality_beforeCut", "", {HistType::kTH1D, {axisCent}}); + registry.add("QA/hMultiplicity_beforeCut", "", {HistType::kTH1D, {axisMult}}); + registry.add("QA/hMultiplicity_TPC_beforeCut", "", {HistType::kTH1D, {axisMult}}); + + registry.add("QA/hCentrality_afterCut", "", {HistType::kTH1D, {axisCent}}); + registry.add("QA/hMultiplicity_afterCut", "", {HistType::kTH1D, {axisMult}}); + registry.add("QA/hMultiplicity_TPC_afterCut", "", {HistType::kTH1D, {axisMult}}); + registry.add("QA/hPt", "", {HistType::kTH1D, {axisPt}}); registry.add("QA/hEta", "", {HistType::kTH1D, {axisEta}}); @@ -148,28 +148,21 @@ struct flowZdcEnergy { // Helper: event selection template - bool acceptEvent(TCollision const& collision, bool UseEvsel, float centrality, const int runmode) + bool acceptEvent(TCollision const& collision, const int runmode) { - if (!UseEvsel) { - registry.fill(HIST("QA/hEventCount"), kAllEvents); - } else { - registry.fill(HIST("QA/hEventCount"), kAllEvents); - if (runmode == 2 && !collision.sel7()) { - return false; - } - if (runmode == 3 && !collision.sel8()) { - return false; - } - registry.fill(HIST("QA/hEventCount"), kSeln); - if (std::abs(collision.posZ()) > evsel.cfgVtxZ) { - return false; - } - registry.fill(HIST("QA/hEventCount"), kZvtx); - if (centrality < evsel.cfgCentMin || centrality > evsel.cfgCentMax) { - return false; - } - registry.fill(HIST("QA/hEventCount"), kCentrality); + registry.fill(HIST("QA/hEventCount"), kAllEvents); + if (runmode == 2 && !collision.sel7()) { + return false; + } + if (runmode == 3 && !collision.sel8()) { + return false; + } + registry.fill(HIST("QA/hEventCount"), kSeln); + if (std::abs(collision.posZ()) > evsel.cfgVtxZ) { + return false; } + registry.fill(HIST("QA/hEventCount"), kZvtx); + return true; } @@ -252,12 +245,16 @@ struct flowZdcEnergy { const float multi = collision.multFT0C(); const float multiTPC = collision.multTPC(); - if (!acceptEvent(collision, evsel.cfgUseEvsel, centrality, 3)) { + registry.fill(HIST("QA/hCentrality_beforeCut"), centrality); + registry.fill(HIST("QA/hMultiplicity_beforeCut"), multi); + registry.fill(HIST("QA/hMultiplicity_TPC_beforeCut"), multiTPC); + + if (!acceptEvent(collision, 3)) { return; } - registry.fill(HIST("QA/hCentrality"), centrality); - registry.fill(HIST("QA/hMultiplicity"), multi); - registry.fill(HIST("QA/hMultiplicity_TPC"), multiTPC); + registry.fill(HIST("QA/hCentrality_afterCut"), centrality); + registry.fill(HIST("QA/hMultiplicity_afterCut"), multi); + registry.fill(HIST("QA/hMultiplicity_TPC_afterCut"), multiTPC); fillZDCObservables(collision, centrality, multiTPC); for (const auto& track : tracks) { @@ -276,12 +273,16 @@ struct flowZdcEnergy { const float multi = collision.multFV0M(); const float multiTPC = collision.multTPC(); - if (!acceptEvent(collision, evsel.cfgUseEvsel, centrality, 2)) { + registry.fill(HIST("QA/hCentrality_beforeCut"), centrality); + registry.fill(HIST("QA/hMultiplicity_beforeCut"), multi); + registry.fill(HIST("QA/hMultiplicity_TPC_beforeCut"), multiTPC); + + if (!acceptEvent(collision, 2)) { return; } - registry.fill(HIST("QA/hCentrality"), centrality); - registry.fill(HIST("QA/hMultiplicity"), multi); - registry.fill(HIST("QA/hMultiplicity_TPC"), multiTPC); + registry.fill(HIST("QA/hCentrality_afterCut"), centrality); + registry.fill(HIST("QA/hMultiplicity_afterCut"), multi); + registry.fill(HIST("QA/hMultiplicity_TPC_afterCut"), multiTPC); fillZDCObservables(collision, centrality, multiTPC); for (const auto& track : tracks) { From c286174c2fe7e1c456dc61b60b481fa2b52f0bf5 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 21 Apr 2026 09:45:04 +0000 Subject: [PATCH 2/5] Please consider the following formatting changes --- PWGCF/Flow/Tasks/flowZdcEnergy.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx index 50a1b02bd16..43bb67fda7e 100644 --- a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx +++ b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx @@ -47,7 +47,7 @@ using namespace o2::framework::expressions; struct flowZdcEnergy { struct : ConfigurableGroup{ - O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10.f, "Accepted z-vertex range")} evsel; + O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10.f, "Accepted z-vertex range")} evsel; O2_DEFINE_CONFIGURABLE(cfgEtaMax, float, 0.8f, "Maximum track #eta") O2_DEFINE_CONFIGURABLE(cfgPtMin, float, 0.2f, "Minimum track #P_{t}") From 10c70ff8f20ded00dc51ad8d270b7ae7ef271040 Mon Sep 17 00:00:00 2001 From: kegangxiong Date: Tue, 21 Apr 2026 18:45:39 +0800 Subject: [PATCH 3/5] Fix the magic number --- PWGCF/Flow/Tasks/flowZdcEnergy.cxx | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx index 43bb67fda7e..a3f342a8a45 100644 --- a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx +++ b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx @@ -148,13 +148,26 @@ struct flowZdcEnergy { // Helper: event selection template - bool acceptEvent(TCollision const& collision, const int runmode) + bool acceptEventRun2(TCollision const& collision) { registry.fill(HIST("QA/hEventCount"), kAllEvents); - if (runmode == 2 && !collision.sel7()) { + if (!collision.sel7()) { return false; } - if (runmode == 3 && !collision.sel8()) { + registry.fill(HIST("QA/hEventCount"), kSeln); + if (std::abs(collision.posZ()) > evsel.cfgVtxZ) { + return false; + } + registry.fill(HIST("QA/hEventCount"), kZvtx); + + return true; + } + + template + bool acceptEventRun3(TCollision const& collision) + { + registry.fill(HIST("QA/hEventCount"), kAllEvents); + if (!collision.sel8()) { return false; } registry.fill(HIST("QA/hEventCount"), kSeln); @@ -225,11 +238,12 @@ struct flowZdcEnergy { registry.fill(HIST("hEnergyWithMult_ZNA_SumSectors"), sumEnergyZNA, multiTPC); registry.fill(HIST("hEnergyWithMult_ZNC_SumSectors"), sumEnergyZNC, multiTPC); - if (commonDen > 1.e-6f) { + const float nonZero = 1.e-6f; + if (commonDen > nonZero) { registry.fill(HIST("hEnergyWithCent_RescaledDiff"), (energyCommonZNA - energyCommonZNC) / commonDen, centrality); registry.fill(HIST("hEnergyWithMult_RescaledDiff"), (energyCommonZNA - energyCommonZNC) / commonDen, multiTPC); } - if (sumDen > 1.e-6f) { + if (sumDen > nonZero) { registry.fill(HIST("hEnergyWithCent_RescaledSumDiff"), (sumEnergyZNA - sumEnergyZNC) / sumDen, centrality); registry.fill(HIST("hEnergyWithMult_RescaledSumDiff"), (sumEnergyZNA - sumEnergyZNC) / sumDen, multiTPC); } @@ -249,7 +263,7 @@ struct flowZdcEnergy { registry.fill(HIST("QA/hMultiplicity_beforeCut"), multi); registry.fill(HIST("QA/hMultiplicity_TPC_beforeCut"), multiTPC); - if (!acceptEvent(collision, 3)) { + if (!acceptEventRun3(collision)) { return; } registry.fill(HIST("QA/hCentrality_afterCut"), centrality); @@ -277,7 +291,7 @@ struct flowZdcEnergy { registry.fill(HIST("QA/hMultiplicity_beforeCut"), multi); registry.fill(HIST("QA/hMultiplicity_TPC_beforeCut"), multiTPC); - if (!acceptEvent(collision, 2)) { + if (!acceptEventRun2(collision)) { return; } registry.fill(HIST("QA/hCentrality_afterCut"), centrality); From cde8f6fb00a08452f9515f43d650a48375dad657 Mon Sep 17 00:00:00 2001 From: kegangxiong Date: Tue, 21 Apr 2026 19:07:57 +0800 Subject: [PATCH 4/5] Fix the struct bug --- PWGCF/Flow/Tasks/flowZdcEnergy.cxx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx index a3f342a8a45..b5c9c3507a8 100644 --- a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx +++ b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx @@ -46,9 +46,7 @@ using namespace o2::framework::expressions; struct flowZdcEnergy { - struct : ConfigurableGroup{ - O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10.f, "Accepted z-vertex range")} evsel; - + O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10.f, "Event cut: accepted z-vertex range") O2_DEFINE_CONFIGURABLE(cfgEtaMax, float, 0.8f, "Maximum track #eta") O2_DEFINE_CONFIGURABLE(cfgPtMin, float, 0.2f, "Minimum track #P_{t}") O2_DEFINE_CONFIGURABLE(cfgPtMax, float, 10.0f, "Maximum track #P_{t}") @@ -155,7 +153,7 @@ struct flowZdcEnergy { return false; } registry.fill(HIST("QA/hEventCount"), kSeln); - if (std::abs(collision.posZ()) > evsel.cfgVtxZ) { + if (std::abs(collision.posZ()) > cfgVtxZ) { return false; } registry.fill(HIST("QA/hEventCount"), kZvtx); @@ -171,7 +169,7 @@ struct flowZdcEnergy { return false; } registry.fill(HIST("QA/hEventCount"), kSeln); - if (std::abs(collision.posZ()) > evsel.cfgVtxZ) { + if (std::abs(collision.posZ()) > cfgVtxZ) { return false; } registry.fill(HIST("QA/hEventCount"), kZvtx); From f2d62e0ec2aaa03c8580aca7b5152b4799a03b42 Mon Sep 17 00:00:00 2001 From: kegangxiong Date: Tue, 21 Apr 2026 19:25:34 +0800 Subject: [PATCH 5/5] Rename the main struct --- PWGCF/Flow/Tasks/flowZdcEnergy.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx index b5c9c3507a8..742fd5248c0 100644 --- a/PWGCF/Flow/Tasks/flowZdcEnergy.cxx +++ b/PWGCF/Flow/Tasks/flowZdcEnergy.cxx @@ -44,7 +44,7 @@ using namespace o2::framework::expressions; #define O2_DEFINE_CONFIGURABLE(NAME, TYPE, DEFAULT, HELP) Configurable NAME{#NAME, DEFAULT, HELP}; -struct flowZdcEnergy { +struct FlowZdcEnergy { O2_DEFINE_CONFIGURABLE(cfgVtxZ, float, 10.f, "Event cut: accepted z-vertex range") O2_DEFINE_CONFIGURABLE(cfgEtaMax, float, 0.8f, "Maximum track #eta") @@ -304,12 +304,12 @@ struct flowZdcEnergy { } // Process switches - PROCESS_SWITCH(flowZdcEnergy, processRun3, "Process Run 3 data", true); - PROCESS_SWITCH(flowZdcEnergy, processRun2, "Process Run 2 data", false); + PROCESS_SWITCH(FlowZdcEnergy, processRun3, "Process Run 3 data", true); + PROCESS_SWITCH(FlowZdcEnergy, processRun2, "Process Run 2 data", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{ - adaptAnalysisTask(cfgc)}; + adaptAnalysisTask(cfgc)}; }