19#include "HistogramAccumulatorMerge.hh"
25#include "BDSBH4DBase.hh"
39 const std::string& resultHistNameIn,
40 const std::string& resultHistTitleIn):
57 unsigned long oldEntries;
58 unsigned long newEntries;
62 oldEntries = (
unsigned long)
static_cast<BDSBH4DBase*
>(mean)->GetEntries_BDSBH4D();
63 newEntries = (
unsigned long)
static_cast<BDSBH4DBase*
>(newValue)->GetEntries_BDSBH4D();
67 oldEntries = (
unsigned long)mean->GetEntries();
68 newEntries = (
unsigned long)newValue->GetEntries();
71 unsigned long newTotalEntries = oldEntries + newEntries;
72 const double nD = (double)newEntries;
73 const double factor = nD * (nD - 1);
79 TH1D* h1 =
dynamic_cast<TH1D*
>(mean);
80 TH1D* h1e =
dynamic_cast<TH1D*
>(variance);
81 TH1D* ht =
dynamic_cast<TH1D*
>(newValue);
82 for (
int j = 0; j <= h1->GetNbinsX() + 1; ++j)
84 var = std::pow(ht->GetBinError(j), 2) * factor;
86 h1e->GetBinContent(j),
89 oldEntries, newEntries,
91 h1->SetBinContent(j, newMean);
92 h1e->SetBinContent(j, newVari);
98 TH2D* h1 =
dynamic_cast<TH2D*
>(mean);
99 TH2D* h1e =
dynamic_cast<TH2D*
>(variance);
100 TH2D* ht =
dynamic_cast<TH2D*
>(newValue);
101 for (
int j = 0; j <= h1->GetNbinsX() + 1; ++j)
103 for (
int k = 0; k <= h1->GetNbinsY() + 1; ++k)
105 var = std::pow(ht->GetBinError(j,k), 2) * factor;
107 h1e->GetBinContent(j,k),
108 ht->GetBinContent(j,k),
110 oldEntries, newEntries,
112 h1->SetBinContent(j, k, newMean);
113 h1e->SetBinContent(j, k, newVari);
120 TH3D* h1 =
dynamic_cast<TH3D*
>(mean);
121 TH3D* h1e =
dynamic_cast<TH3D*
>(variance);
122 TH3D* ht =
dynamic_cast<TH3D*
>(newValue);
123 for (
int j = 0; j <= h1->GetNbinsX() + 1; ++j)
125 for (
int k = 0; k <= h1->GetNbinsY() + 1; ++k)
127 for (
int l = 0; l <= h1->GetNbinsZ() + 1; ++l)
129 var = std::pow(ht->GetBinError(j,k,l), 2) * factor;
131 h1e->GetBinContent(j,k,l),
132 ht->GetBinContent(j,k,l),
134 oldEntries, newEntries,
136 h1->SetBinContent(j, k, l, newMean);
137 h1e->SetBinContent(j, k, l, newVari);
149 for (
int j = -1; j <= h1->GetNbinsX(); ++j)
151 for (
int k = -1; k <= h1->GetNbinsY(); ++k)
153 for (
int l = -1; l <= h1->GetNbinsZ(); ++l)
155 for (
int e = -1; e <= h1->GetNbinsE(); ++e)
157 var = std::pow(ht->AtError(j,k,l,e), 2) * factor;
162 oldEntries, newEntries,
164 h1->Set_BDSBH4D(j, k, l, e, newMean);
165 h1e->Set_BDSBH4D(j, k, l, e, newVari);
178 dynamic_cast<BDSBH4DBase*
>(mean)->SetEntries_BDSBH4D(newTotalEntries);
179 dynamic_cast<BDSBH4DBase*
>(variance)->SetEntries_BDSBH4D(newTotalEntries);
183 mean->SetEntries(newTotalEntries);
184 variance->SetEntries(newTotalEntries);
193 unsigned long nEntriesAccumulated,
194 unsigned long nEntriesToAccumulate,
196 double& newVari)
const
198 double dMean = x - oldMean;
199 double dMean2 = std::pow(dMean, 2);
200 double nA = (double)nEntriesAccumulated;
201 double nB = (double)nEntriesToAccumulate;
204 newMean = oldMean + nB * (dMean / nT);
206 double q = (nA * nB) * (dMean2 / nT);
207 newVari = oldVari + xVari + q;
Base class for the 4D histogram classes.
Class to combine histograms of mean with error on mean.
virtual void AccumulateSingleValue(double oldMean, double oldVari, double x, double xVari, unsigned long nEntriesAccumulated, unsigned long nEntriesToAccumulate, double &newMean, double &newVari) const
virtual void Accumulate(TH1 *newValue)
HistogramAccumulatorMerge()
Default constructor only for ROOT reflexivity - not intended for use.
Class to accumulate and merge histograms in different ways.
int nDimensions
Number of dimensions.