1 #ifndef NPSTAT_DISCRETIZATIONERRORND_HH_
2 #define NPSTAT_DISCRETIZATIONERRORND_HH_
19 double discretizationErrorND(
20 const AbsDistributionND& fcn,
const std::vector<Axis>& axes,
21 const unsigned pointsPerBinWhenDiscretizing,
22 const unsigned nIntegrationPoints,
const bool normalize=
true)
25 ArrayND<double> densityScan(Private::makeHistoShape(axes));
26 densityScan.functorFill(makeDensityAveScanND(
27 fcn, axes, pointsPerBinWhenDiscretizing));
32 const unsigned dim = fcn.dim();
33 const unsigned long len = densityScan.length();
34 long double integ = 0.0L;
35 long double ise = 0.0L;
36 double center[CHAR_BIT*
sizeof(
unsigned long)];
37 double size[CHAR_BIT*
sizeof(
unsigned long)];
38 unsigned index[CHAR_BIT*
sizeof(
unsigned long)];
39 for (
unsigned long ipt=0; ipt<len; ++ipt)
41 densityScan.convertLinearIndex(ipt, index, dim);
43 for (
unsigned i=0; i<dim; ++i)
45 center[i] = axes[i].binCenter(index[i]);
46 const double width = axes[i].binWidth(index[i]);
50 const double c = densityScan.linearValue(ipt);
52 DensityDiscretizationErrorND err(fcn, 1.0, c);
54 err, center, size, dim, nIntegrationPoints);
59 return ise/integ/integ;
Fill multivariate arrays with multivariate density values by averaging inside the corresponding bins.
Arbitrary-dimensional histogram template.
Definition: AbsArrayProjector.hh:14
double rectangleIntegralCenterAndSize(const AbsMultivariateFunctor &f, const double *rectangleCenter, const double *rectangleSize, unsigned dim, unsigned integrationPoints)