Skip to content

Commit 4299406

Browse files
committed
finalized errors on moments using subsampling
1 parent bdcb675 commit 4299406

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

PWGCF/EbyEFluctuations/Tasks/FactorialMomentsTask.cxx

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ struct FactorialMomentsTask {
182182
std::array<std::array<std::array<double, nBins>, 5>, 6> fqEventSampled;
183183
std::array<std::array<double, nBins>, 5> binConEvent;
184184
std::array<std::array<std::array<double, nBins>, 5>, 6> binConEventSampled;
185-
std::array<std::array<std::array<double, nBins>, 5>, 6> errorFq = {{{{{0, 0, 0, 0, 0}}}}};
185+
std::array<std::array<std::array<int, nBins>, 5>, nfqOrder> nSubsamples{};
186186
std::vector<std::shared_ptr<TH2>> mHistArrReset;
187187
std::vector<std::shared_ptr<TH1>> mHistArrQA;
188188
std::vector<std::shared_ptr<TH3>> mHistArrEff;
@@ -307,23 +307,28 @@ struct FactorialMomentsTask {
307307
}
308308
binConEvent[iPt][iM] = binContent / (std::pow(binningM[iM], 2));
309309
for (int iq = 0; iq < nfqOrder; ++iq) {
310-
if (sumfqBin[iq] > 0) {
311-
fqEvent[iq][iPt][iM] = sumfqBin[iq] / (std::pow(binningM[iM], 2));
312-
fqEventSampled[iq][iPt][iM] += fqEvent[iq][iPt][iM];
313-
}
310+
// Always accumulate raw fq numerator and binCon unconditionally so
311+
// both sums run over exactly the same set of events.
312+
fqEvent[iq][iPt][iM] = sumfqBin[iq] / (std::pow(binningM[iM], 2));
313+
fqEventSampled[iq][iPt][iM] += fqEvent[iq][iPt][iM];
314314
binConEventSampled[iq][iPt][iM] += binConEvent[iPt][iM];
315315
mFqBinFinal[iPt * 6 + iq]->Fill(iM, fqEvent[iq][iPt][iM]);
316316
mBinConFinal[iPt * 6 + iq]->Fill(iM, binConEvent[iPt][iM]);
317317
if (compSample) {
318-
mBinConFinalSampled[iPt * 6 + iq]->Fill(iM, binConEventSampled[iq][iPt][iM] / samplesize);
318+
const double avM = binConEventSampled[iq][iPt][iM] / samplesize;
319+
mBinConFinalSampled[iPt * 6 + iq]->Fill(iM, avM);
320+
const double den = std::pow(avM, iq + 2);
321+
const double fqM = ((fqEventSampled[iq][iPt][iM]) / samplesize);
319322

320-
double tmp = (fqEventSampled[iq][iPt][iM] / (samplesize)) / (std::pow(binConEventSampled[iq][iPt][iM] / (samplesize), (iq + 2)));
323+
const double tmp = (den > 0.) ? fqM / den : 0.;
321324
mFqBinFinalSampled[iPt * 6 + iq]->Fill(iM, tmp);
322-
tmpFqErr[iq][iPt][iM]->Fill(tmp);
323-
errorFq[iq][iPt][iM] += std::pow(fqEventSampled[iq][iPt][iM] / (samplesize), 2);
324-
mFqError[iPt * 6 + iq]->SetBinContent(iM + 1, 0);
325-
mFqError[iPt * 6 + iq]->Fill(iM, tmpFqErr[iq][iPt][iM]->GetStdDev());
326325

326+
tmpFqErr[iq][iPt][iM]->Fill(tmp);
327+
++nSubsamples[iq][iPt][iM];
328+
const double stdErr = (nSubsamples[iq][iPt][iM] > 1)
329+
? tmpFqErr[iq][iPt][iM]->GetStdDev() / std::sqrt(static_cast<double>(nSubsamples[iq][iPt][iM]))
330+
: 0.;
331+
mFqError[iPt * 6 + iq]->SetBinContent(iM + 1, stdErr);
327332
fqEventSampled[iq][iPt][iM] = 0;
328333
binConEventSampled[iq][iPt][iM] = 0;
329334
}

0 commit comments

Comments
 (0)