From 4299406d72fc87e66f9c11e1dab6a23e1bd7496a Mon Sep 17 00:00:00 2001 From: baasingh Date: Sat, 11 Jul 2026 11:45:33 +0530 Subject: [PATCH 1/2] finalized errors on moments using subsampling --- .../Tasks/FactorialMomentsTask.cxx | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx b/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx index f01ce200c9b..042d149e01a 100644 --- a/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx +++ b/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx @@ -182,7 +182,7 @@ struct FactorialMomentsTask { std::array, 5>, 6> fqEventSampled; std::array, 5> binConEvent; std::array, 5>, 6> binConEventSampled; - std::array, 5>, 6> errorFq = {{{{{0, 0, 0, 0, 0}}}}}; + std::array, 5>, nfqOrder> nSubsamples{}; std::vector> mHistArrReset; std::vector> mHistArrQA; std::vector> mHistArrEff; @@ -307,23 +307,28 @@ struct FactorialMomentsTask { } binConEvent[iPt][iM] = binContent / (std::pow(binningM[iM], 2)); for (int iq = 0; iq < nfqOrder; ++iq) { - if (sumfqBin[iq] > 0) { - fqEvent[iq][iPt][iM] = sumfqBin[iq] / (std::pow(binningM[iM], 2)); - fqEventSampled[iq][iPt][iM] += fqEvent[iq][iPt][iM]; - } + // Always accumulate raw fq numerator and binCon unconditionally so + // both sums run over exactly the same set of events. + fqEvent[iq][iPt][iM] = sumfqBin[iq] / (std::pow(binningM[iM], 2)); + fqEventSampled[iq][iPt][iM] += fqEvent[iq][iPt][iM]; binConEventSampled[iq][iPt][iM] += binConEvent[iPt][iM]; mFqBinFinal[iPt * 6 + iq]->Fill(iM, fqEvent[iq][iPt][iM]); mBinConFinal[iPt * 6 + iq]->Fill(iM, binConEvent[iPt][iM]); if (compSample) { - mBinConFinalSampled[iPt * 6 + iq]->Fill(iM, binConEventSampled[iq][iPt][iM] / samplesize); + const double avM = binConEventSampled[iq][iPt][iM] / samplesize; + mBinConFinalSampled[iPt * 6 + iq]->Fill(iM, avM); + const double den = std::pow(avM, iq + 2); + const double fqM = ((fqEventSampled[iq][iPt][iM]) / samplesize); - double tmp = (fqEventSampled[iq][iPt][iM] / (samplesize)) / (std::pow(binConEventSampled[iq][iPt][iM] / (samplesize), (iq + 2))); + const double tmp = (den > 0.) ? fqM / den : 0.; mFqBinFinalSampled[iPt * 6 + iq]->Fill(iM, tmp); - tmpFqErr[iq][iPt][iM]->Fill(tmp); - errorFq[iq][iPt][iM] += std::pow(fqEventSampled[iq][iPt][iM] / (samplesize), 2); - mFqError[iPt * 6 + iq]->SetBinContent(iM + 1, 0); - mFqError[iPt * 6 + iq]->Fill(iM, tmpFqErr[iq][iPt][iM]->GetStdDev()); + tmpFqErr[iq][iPt][iM]->Fill(tmp); + ++nSubsamples[iq][iPt][iM]; + const double stdErr = (nSubsamples[iq][iPt][iM] > 1) + ? tmpFqErr[iq][iPt][iM]->GetStdDev() / std::sqrt(static_cast(nSubsamples[iq][iPt][iM])) + : 0.; + mFqError[iPt * 6 + iq]->SetBinContent(iM + 1, stdErr); fqEventSampled[iq][iPt][iM] = 0; binConEventSampled[iq][iPt][iM] = 0; } From a5e9275b6e6805ee2d7862e6b8d98159e2356117 Mon Sep 17 00:00:00 2001 From: baasingh Date: Sat, 11 Jul 2026 12:29:41 +0530 Subject: [PATCH 2/2] fixed cpp linting --- .../Tasks/FactorialMomentsTask.cxx | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx b/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx index 042d149e01a..f28fe6d641e 100644 --- a/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx +++ b/PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx @@ -170,18 +170,17 @@ struct FactorialMomentsTask { const double dcaxyMaxTrackPar0 = 0.0105; const double dcaxyMaxTrackPar1 = 0.035; const double dcaxyMaxTrackPar2 = 1.1; - const double dcazMaxTrack = 2.0; static const int nBins = 52; double kMinCharge = 1e-6; static const int nfqOrder = 6; int countSamples = 0; int testc1 = 0, testc2 = 0, testc3 = 0; - std::array binningM; + std::array binningM{}; std::array countTracks{0, 0, 0, 0, 0}; - std::array, 5>, 6> fqEvent; - std::array, 5>, 6> fqEventSampled; - std::array, 5> binConEvent; - std::array, 5>, 6> binConEventSampled; + std::array, 5>, 6> fqEvent{}; + std::array, 5>, 6> fqEventSampled{}; + std::array, 5> binConEvent{}; + std::array, 5>, 6> binConEventSampled{}; std::array, 5>, nfqOrder> nSubsamples{}; std::vector> mHistArrReset; std::vector> mHistArrQA; @@ -191,9 +190,7 @@ struct FactorialMomentsTask { std::vector> mFqBinFinalSampled; std::vector> mBinConFinalSampled; std::vector> mFqError; - // max number of bins restricted to 5 - static constexpr std::array - mbinNames{"bin1/", "bin2/", "bin3/", "bin4/", "bin5/"}; + void init(o2::framework::InitContext&) { // NOTE: check to make number of pt and the vector consistent