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

Example program to create 2D 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 2D function interpolator from multi-dimensional interpolator.

Author
mdejong

Definition in file JMultiFunction2D.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 45 of file JMultiFunction2D.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 2D 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
82
84
88 JPolint1FunctionalMap>::maplist JMaplist4D_t;
89
92 JPolint1FunctionalMap>::maplist JMaplist3D_t;
93
96
97 for (double x0 = xmin; x0 < xmax + 0.5*dx; x0 += dx) {
98 for (double x1 = xmin; x1 < xmax + 0.5*dx; x1 += dx) {
99 for (double x2 = xmin; x2 < xmax + 0.5*dx; x2 += dx) {
100 for (double x3 = xmin; x3 < xmax + 0.5*dx; x3 += dx) {
101 for (double x4 = xmin; x4 < xmax + 0.5*dx; x4 += dx) {
102 g5[x0][x1][x2][x3][x4] = f5(x0,x1,x2,x3,x4);
103 h5[x0][x1][x2][x3][x4] = f5(x0,x1,x2,x3,x4);
104 }
105 }
106 }
107 }
108 }
109
110 g5.compile();
111 h5.compile();
112
113
114 const double x0 = +0.15;
115 const double x1 = -0.25;
116 const double x2 = 0.25;
117
118 JFunction2D_t g2;
119
120 JTimer timer("3D interpolator");
121
122 timer.start();
123
124 for (int i = 0; i != 100; ++i) {
125 copy(h5(x0,x1,x2), g2); // put interpolated data into 2D functional object
126 }
127
128 timer.stop();
129 timer.print(cout, 1.0/100, micro_t);
130
131 g2.compile();
132
133 JTimer t2("2D interpolator");
134 JTimer t5("5D interpolator");
135
136 JQuantile Q2("2D interpolator");
137 JQuantile Q5("5D interpolator");
138
139 // mini buffer to reduce overhead in timer
140
141 const int N = 100;
142
143 double x[N];
144 double y[N];
145 double z[N];
146 double v[N];
147 double w[N];
148
149 for (int i = 0; i != numberOfEvents; ++i) {
150
151 for (int __i = 0; __i != N; ++__i) {
152
153 const double x3 = gRandom->Uniform(xmin, xmax);
154 const double x4 = gRandom->Uniform(xmin, xmax);
155
156 x[__i] = x3;
157 y[__i] = x4;
158 z[__i] = f5(x0,x1,x2,x3,x4);
159 }
160
161 t2.start();
162
163 for (int __i = 0; __i != N; ++__i) {
164 v[__i] = g2(x[__i], y[__i]);
165 }
166
167 t2.stop();
168
169 t5.start();
170
171 for (int __i = 0; __i != N; ++__i) {
172 w[__i] = g5(x0,x1,x2,x[__i],y[__i]);
173 }
174
175 t5.stop();
176
177 for (int __i = 0; __i != N; ++__i) {
178 Q2.put(v[__i] - z[__i]);
179 Q5.put(w[__i] - z[__i]);
180 }
181 }
182
183 if (debug >= notice_t) {
184
185 Q2.print(cout);
186 Q5.print(cout, false);
187
188 t2.print(cout, 1.0 / (N * numberOfEvents), nano_t);
189 t5.print(cout, 1.0 / (N * numberOfEvents), nano_t);
190 }
191
192 ASSERT(fabs(Q2.getMean() - Q5.getMean()) <= precision);
193 ASSERT(fabs(Q2.getSTDev() - Q5.getSTDev()) <= precision);
194
195 return 0;
196}
#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.
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
Map list.
Definition JMapList.hh:25
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