Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JQuantiles.cc
Go to the documentation of this file.
1
2#include <string>
3#include <iostream>
4#include <iomanip>
5#include <cmath>
6
7#include "TMath.h"
8
10#include "JTools/JGrid.hh"
11#include "JTools/JQuantiles.hh"
13
14#include "Jeep/JPrint.hh"
15#include "Jeep/JParser.hh"
16#include "Jeep/JMessage.hh"
17
18
19/**
20 * Function.
21 *
22 * \param x
23 * \return function value
24 */
25inline Double_t g1(const Double_t x)
26{
27 return TMath::Gaus(x, 0.0, 1.0, kTRUE);
28}
29
30
31/**
32 * Integral of method g1.
33 *
34 * \param x
35 * \return integral value
36 */
37inline Double_t G1(const Double_t x)
38{
39 return 0.5 * (1.0 + TMath::Erf(sqrt(0.5)*x));
40}
41
42
43/**
44 * \file
45 * Example program to test JTOOLS::JQuantiles calculation of a function.
46 * \author mdejong
47 */
48int main(int argc, char **argv)
49{
50 using namespace std;
51
52 int numberOfBins;
53 double Q;
54 double precision;
55 int debug;
56
57 try {
58
59 JParser<> zap("Example program to test quantiles calculation of a function.");
60
61 zap['N'] = make_field(numberOfBins) = 13;
62 zap['Q'] = make_field(Q) = 0.5;
63 zap['e'] = make_field(precision) = 1.0e-3;
64 zap['d'] = make_field(debug) = 3;
65
66 zap(argc, argv);
67 }
68 catch(const exception &error) {
69 FATAL(error.what() << endl);
70 }
71
72 if (numberOfBins < 2) {
73 FATAL("Fatal error: number of bins " << numberOfBins << endl);
74 }
75
76 if (Q < 0.0 || Q > 1.0) {
77 FATAL("Fatal error: quantile " << Q << endl);
78 }
79
80 using namespace JPP;
81
82 const Double_t xmin = -5.0;
83 const Double_t xmax = +5.0;
84
85 JQuantiles quantiles(make_grid(numberOfBins, xmin, xmax), g1, Q);
86
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);
93
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);
99}
100
General purpose class for a collection of sorted elements.
General purpose messaging.
#define ASSERT(A,...)
Assert macro.
Definition JMessage.hh:90
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
I/O formatting auxiliaries.
Double_t g1(const Double_t x)
Function.
Definition JQuantiles.cc:25
int main(int argc, char **argv)
Definition JQuantiles.cc:48
Double_t G1(const Double_t x)
Integral of method g1.
Definition JQuantiles.cc:37
int numberOfBins
number of bins for average CDF integral of optical module
Definition JSirene.cc:73
Utility class to parse command line options.
Definition JParser.hh:1698
Quantile calculator for a given function.
double getIntegral() const
Get integral of function.
double getX() const
Get position of maximum.
double getFWHM() const
Get Full Width at Half Maximum.
T getLowerLimit() const
Get lower limit.
Definition JRange.hh:202
T getUpperLimit() const
Get upper limit.
Definition JRange.hh:213
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448