50 const std::string& resultHistNameIn,
51 const std::string& resultHistTitleIn):
52 nDimensions(nDimensionsIn),
55 resultHistName(resultHistNameIn),
56 resultHistTitle(resultHistTitleIn),
67 mean =
dynamic_cast<TH1D*
>(baseHistogram->Clone(meanName.c_str()));
68 variance =
dynamic_cast<TH1D*
>(baseHistogram->Clone(variName.c_str()));
69 result =
dynamic_cast<TH1D*
>(baseHistogram->Clone(
resultHistName.c_str()));
74 mean =
dynamic_cast<TH2D*
>(baseHistogram->Clone(meanName.c_str()));
75 variance =
dynamic_cast<TH2D*
>(baseHistogram->Clone(variName.c_str()));
76 result =
dynamic_cast<TH2D*
>(baseHistogram->Clone(
resultHistName.c_str()));
81 mean =
dynamic_cast<TH3D*
>(baseHistogram->Clone(meanName.c_str()));
82 variance =
dynamic_cast<TH3D*
>(baseHistogram->Clone(variName.c_str()));
83 result =
dynamic_cast<TH3D*
>(baseHistogram->Clone(
resultHistName.c_str()));
89 mean =
dynamic_cast<BDSBH4DBase*
>(baseHistogram)->Clone(meanName.c_str());
90 variance =
dynamic_cast<BDSBH4DBase*
>(baseHistogram)->Clone(variName.c_str());
96 {
throw std::domain_error(
"Invalid number of dimensions");
break;}
98 if (mean && variance && result)
108 mean->SetTitle(meanName.c_str());
109 variance->SetTitle(variName.c_str());
116 static_cast<BDSBH4DBase*
>(variance)->Reset_BDSBH4D();
117 static_cast<BDSBH4DBase*
>(result)->Reset_BDSBH4D();
120 static_cast<BDSBH4DBase*
>(mean)->SetTitle(meanName.c_str());
121 static_cast<BDSBH4DBase*
>(variance)->SetTitle(variName.c_str());
140 const double error = 0;
141 const unsigned long nEntriesToAccumulate = 1;
149 TH1D* h1 =
dynamic_cast<TH1D*
>(mean);
150 TH1D* h1e =
dynamic_cast<TH1D*
>(variance);
151 TH1D* ht =
dynamic_cast<TH1D*
>(newValue);
152 for (
int j = 0; j <= h1->GetNbinsX() + 1; ++j)
155 h1e->GetBinContent(j),
156 ht->GetBinContent(j),
157 error,
n, nEntriesToAccumulate,
159 h1->SetBinContent(j, newMean);
160 h1e->SetBinContent(j, newVari);
166 TH2D* h1 =
dynamic_cast<TH2D*
>(mean);
167 TH2D* h1e =
dynamic_cast<TH2D*
>(variance);
168 TH2D* ht =
dynamic_cast<TH2D*
>(newValue);
169 for (
int j = 0; j <= h1->GetNbinsX() + 1; ++j)
171 for (
int k = 0; k <= h1->GetNbinsY() + 1; ++k)
174 h1e->GetBinContent(j,k),
175 ht->GetBinContent(j,k),
176 error,
n, nEntriesToAccumulate,
178 h1->SetBinContent(j, k, newMean);
179 h1e->SetBinContent(j, k, newVari);
186 TH3D* h1 =
dynamic_cast<TH3D*
>(mean);
187 TH3D* h1e =
dynamic_cast<TH3D*
>(variance);
188 TH3D* ht =
dynamic_cast<TH3D*
>(newValue);
189 for (
int j = 0; j <= h1->GetNbinsX() + 1; ++j)
191 for (
int k = 0; k <= h1->GetNbinsY() + 1; ++k)
193 for (
int l = 0; l <= h1->GetNbinsZ() + 1; ++l)
196 h1e->GetBinContent(j,k,l),
197 ht->GetBinContent(j,k,l),
198 error,
n, nEntriesToAccumulate,
200 h1->SetBinContent(j, k, l, newMean);
201 h1e->SetBinContent(j, k, l, newVari);
213 for (
int j = -1; j <= h1->GetNbinsX(); ++j)
215 for (
int k = -1; k <= h1->GetNbinsY(); ++k)
217 for (
int l = -1; l <= h1->GetNbinsZ(); ++l)
219 for (
int e = -1; e <= h1->GetNbinsE(); ++e)
224 error,
n, nEntriesToAccumulate,
226 h1->Set_BDSBH4D(j,k,l,e, newMean);
227 h1e->Set_BDSBH4D(j,k,l,e, newVari);
245 const double nD = (double)
n;
246 const double factor = std::sqrt(1./(nD * (nD - 1)));
257 for (
int j = 0; j <= result->GetNbinsX() + 1; ++j)
259 mn = mean->GetBinContent(j);
260 var = variance->GetBinContent(j);
261 err =
n > 1 ? factor*std::sqrt(var) : 0;
262 result->SetBinContent(j, mn);
263 result->SetBinError(j, err);
269 for (
int j = 0; j <= result->GetNbinsX() + 1; ++j)
271 for (
int k = 0; k <= result->GetNbinsY() + 1; ++k)
273 mn = mean->GetBinContent(j,k);
274 var = variance->GetBinContent(j, k);
275 err =
n > 1 ? factor*std::sqrt(var) : 0;
276 result->SetBinContent(j, k, mn);
277 result->SetBinError(j, k, err);
284 for (
int j = 0; j <= result->GetNbinsX() + 1; ++j)
286 for (
int k = 0; k <= result->GetNbinsY() + 1; ++k)
288 for (
int l = 0; l <= result->GetNbinsZ() + 1; ++l)
290 mn = mean->GetBinContent(j,k,l);
291 var = variance->GetBinContent(j, k, l);
292 err =
n > 1 ? factor*std::sqrt(var) : 0;
293 result->SetBinContent(j,k,l, mn);
294 result->SetBinError(j,k,l, err);
303 auto histCast =
dynamic_cast<BDSBH4DBase*
>(result);
305 auto varCast =
dynamic_cast<BDSBH4DBase*
>(variance);
307 int nBinsX = histCast->GetNbinsX();
308 int nBinsY = histCast->GetNbinsY();
309 int nBinsZ = histCast->GetNbinsZ();
310 int nBinsE = histCast->GetNbinsE();
311 for (
int j = -1; j <= nBinsX; ++j)
313 for (
int k = -1; k <= nBinsY; ++k)
315 for (
int l = -1; l <= nBinsZ; ++l)
317 for (
int e = -1; e <= nBinsE; ++e)
319 mn = mnCast->At(j, k, l, e);
320 var = varCast->At(j, k, l, e);
321 err =
n > 1 ? factor*std::sqrt(var) : 0;
322 resCast->Set_BDSBH4D(j, k, l, e, mn);
323 resCast->SetError_BDSBH4D(j, k, l, e, err);
335 {
dynamic_cast<BDSBH4DBase*
>(result)->SetEntries_BDSBH4D((
double)
n);}
337 {result->SetEntries((
double)
n);}
virtual void AccumulateSingleValue(double oldMean, double oldVari, double x, double xVari, unsigned long nEntriesAccumulated, unsigned long nEntriesToAccumulate, double &newMean, double &newVari) const