25 inline Double_t
g1(
const Double_t x)
27 return TMath::Gaus(x, 0.0, 1.0, kTRUE);
37 inline Double_t
G1(
const Double_t x)
39 return 0.5 * (1.0 + TMath::Erf(sqrt(0.5)*x));
48 int main(
int argc,
char **argv)
59 JParser<> zap(
"Example program to test quantiles calculation of a function.");
68 catch(
const exception &error) {
69 FATAL(error.what() << endl);
72 if (numberOfBins < 2) {
73 FATAL(
"Fatal error: number of bins " << numberOfBins << endl);
76 if (Q < 0.0 || Q > 1.0) {
77 FATAL(
"Fatal error: quantile " << Q << endl);
82 const Double_t xmin = -5.0;
83 const Double_t xmax = +5.0;
85 JQuantiles quantiles(
make_grid(numberOfBins, xmin, xmax),
g1, Q);
87 NOTICE(
"quantity " << setw(10) <<
"calculated" <<
" / " << setw(10) <<
"true" << endl);
88 NOTICE(
"X " <<
FIXED(10,6) << quantiles.getX() <<
" / " <<
FIXED(10,6) << 0.0 << endl);
89 NOTICE(
"FWHM " <<
FIXED(10,6) << quantiles.getFWHM() <<
" / " <<
FIXED(10,6) << 2.0*sqrt(2.0*log(2.0)) << endl);
90 NOTICE(
"integral " <<
FIXED(10,6) << quantiles.getIntegral() <<
" / " <<
FIXED(10,6) <<
G1(xmax) -
G1(xmin) << endl);
91 NOTICE(
"quantile " <<
FIXED(10,6) << (
G1(quantiles.getUpperLimit()) -
92 G1(quantiles.getLowerLimit())) <<
" / " <<
FIXED(10,6) << Q << endl);
94 ASSERT(fabs(quantiles.getX() - 0.0) < precision);
95 ASSERT(fabs(quantiles.getFWHM() - 2.0*sqrt(2.0*log(2.0))) < precision);
96 ASSERT(fabs(quantiles.getIntegral() - (
G1(xmax) -
G1(xmin))) < precision);
97 ASSERT(fabs((
G1(quantiles.getUpperLimit()) -
98 G1(quantiles.getLowerLimit())) - Q) < precision);