Jpp  15.0.4
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
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

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 
80  typedef JMAPLIST<JPolint1FunctionalMap>::maplist JMaplist1D_t;
81  typedef JMultiFunction<JFunction1D_t, JMaplist1D_t> JFunction2D_t;
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 }
Utility class to parse command line options.
Definition: JParser.hh:1500
data_type w[N+1][M+1]
Definition: JPolint.hh:741
General purpose class for collection of elements, see: &lt;a href=&quot;JTools.PDF&quot;;&gt;Collection of elements...
Definition: JCollection.hh:73
micro
Definition: JScale.hh:29
Auxiliary data structure for running average, standard deviation and quantiles.
Definition: JQuantile.hh:43
notice
Definition: JMessage.hh:32
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
Template class for spline interpolation in 1D.
Definition: JSpline.hh:657
Template implementation of function object in one dimension returning a constant value.
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
Multidimensional interpolation method.
Map list.
Definition: JMapList.hh:24
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
Type definition of a 1st degree polynomial interpolation based on a JMap implementation.
Auxiliary class for CPU timing and usage.
Definition: JTimer.hh:32
int debug
debug level
Definition: JSirene.cc:63
Auxiliary class for recursive map list generation.
Definition: JMapList.hh:108
#define FATAL(A)
Definition: JMessage.hh:67
nano
Definition: JScale.hh:28
double f5(const double x0, const double x1, const double x2, const double x3, const double x4)
5D function.
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:139
data_type v[N+1][M+1]
Definition: JPolint.hh:740
int numberOfBins
number of bins for average CDF integral of optical module
Definition: JSirene.cc:64