Jpp 19.3.0-rc.2
the software that should make you happy
Loading...
Searching...
No Matches
JMultiFunction1D.cc File Reference

Example program to create 1D function interpolator from multi-dimensional interpolator. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <cmath>
#include "TRandom3.h"
#include "TMath.h"
#include "JTools/JMapList.hh"
#include "JTools/JFunction1D_t.hh"
#include "JTools/JFunctionalMap_t.hh"
#include "JTools/JConstantFunction1D.hh"
#include "JTools/JMultiFunction.hh"
#include "JTools/JQuantile.hh"
#include "JTools/JToolsToolkit.hh"
#include "Jeep/JTimer.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to create 1D function interpolator from multi-dimensional interpolator.

Author
mdejong

Definition in file JMultiFunction1D.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 45 of file JMultiFunction1D.cc.

46{
47 using namespace std;
48 using namespace JPP;
49
50 int numberOfEvents;
51 int numberOfBins;
52 double precision;
53 int debug;
54
55 try {
56
57 JParser<> zap("Example program to create 1D function interpolator from multi-dimensional interpolator.");
58
59 zap['n'] = make_field(numberOfEvents) = 1000;
60 zap['N'] = make_field(numberOfBins) = 11;
61 zap['e'] = make_field(precision) = 1.0e-14;
62 zap['d'] = make_field(debug) = 3;
63
64 zap(argc, argv);
65 }
66 catch(const exception &error) {
67 FATAL(error.what() << endl);
68 }
69
70 ASSERT(numberOfEvents > 0);
71
72 const double xmin = -1.0;
73 const double xmax = +1.0;
74 const double dx = (xmax - xmin) / (numberOfBins - 1);
75
77 typedef JFunction1D_t::abscissa_type abscissa_type;
78 typedef JFunction1D_t::value_type value_type;
79
81
85 JPolint1FunctionalMap>::maplist JMaplist_t;
86
89
90 for (double x0 = xmin; x0 < xmax + 0.5*dx; x0 += dx) {
91 for (double x1 = xmin; x1 < xmax + 0.5*dx; x1 += dx) {
92 for (double x2 = xmin; x2 < xmax + 0.5*dx; x2 += dx) {
93 for (double x3 = xmin; x3 < xmax + 0.5*dx; x3 += dx) {
94 for (double x4 = xmin; x4 < xmax + 0.5*dx; x4 += dx) {
95 g5[x0][x1][x2][x3][x4] = f5(x0,x1,x2,x3,x4);
96 h5[x0][x1][x2][x3][x4] = f5(x0,x1,x2,x3,x4);
97 }
98 }
99 }
100 }
101 }
102
103 g5.compile();
104 h5.compile();
105
106
107 const double x0 = +0.15;
108 const double x1 = -0.25;
109 const double x2 = 0.25;
110 const double x3 = -0.15;
111
112 JFunction1D_t g1;
113
114 JTimer timer("4D interpolator");
115
116 timer.start();
117
118 for (int i = 0; i != 100; ++i) {
119 copy(h5(x0,x1,x2,x3), g1); // put interpolated data into 1D functional object
120 }
121
122 timer.stop();
123 timer.print(cout, 1.0/100, micro_t);
124
125 g1.compile();
126
127 JTimer t1("1D interpolator");
128 JTimer t5("5D interpolator");
129
130 JQuantile Q1("1D interpolator");
131 JQuantile Q5("5D interpolator");
132
133 // mini buffer to reduce overhead in timer
134
135 const int N = 100;
136
137 double x[N];
138 double y[N];
139 double v[N];
140 double w[N];
141
142 for (int i = 0; i != numberOfEvents; ++i) {
143
144 for (int __i = 0; __i != N; ++__i) {
145
146 const double x4 = gRandom->Uniform(xmin, xmax);
147
148 x[__i] = x4;
149 y[__i] = f5(x0,x1,x2,x3,x4);
150 }
151
152 t1.start();
153
154 for (int __i = 0; __i != N; ++__i) {
155 v[__i] = g1(x[__i]);
156 }
157
158 t1.stop();
159
160 t5.start();
161
162 for (int __i = 0; __i != N; ++__i) {
163 w[__i] = g5(x0,x1,x2,x3,x[__i]);
164 }
165
166 t5.stop();
167
168 for (int __i = 0; __i != N; ++__i) {
169 Q1.put(v[__i] - y[__i]);
170 Q5.put(w[__i] - y[__i]);
171 }
172 }
173
174 if (debug >= notice_t) {
175
176 Q1.print(cout);
177 Q5.print(cout, false);
178
179 t1.print(cout, 1.0 / (N * numberOfEvents), nano_t);
180 t5.print(cout, 1.0 / (N * numberOfEvents), nano_t);
181 }
182
183 ASSERT(fabs(Q1.getMean() - Q5.getMean()) <= precision);
184 ASSERT(fabs(Q1.getSTDev() - Q5.getSTDev()) <= precision);
185
186 return 0;
187}
#define ASSERT(A,...)
Assert macro.
Definition JMessage.hh:90
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
double f5(const double x0, const double x1, const double x2, const double x3, const double x4)
5D function.
Double_t g1(const Double_t x)
Function.
Definition JQuantiles.cc:25
int numberOfBins
number of bins for average CDF integral of optical module
Definition JSirene.cc:73
Auxiliary class for CPU timing and usage.
Definition JTimer.hh:33
Utility class to parse command line options.
Definition JParser.hh:1698
General purpose class for collection of elements, see: <a href="JTools.PDF";>Collection of elements....
Definition JSet.hh:22
Template implementation of function object in one dimension returning a constant value.
Multidimensional interpolation method.
void compile()
Compilation.
Template class for spline interpolation in 1D.
Definition JSpline.hh:734
const double xmax
const double xmin
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition JHead.cc:163
@ nano_t
nano
Definition JScale.hh:28
@ micro_t
micro
Definition JScale.hh:29
@ notice_t
notice
Definition JMessage.hh:32
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary class for recursive map list generation.
Definition JMapList.hh:109
Type definition of a 1st degree polynomial interpolation based on a JMap implementation.
Auxiliary data structure for running average, standard deviation and quantiles.
Definition JQuantile.hh:46