53{
55
56 int numberOfEvents;
58
59 try {
60
61 JParser<> zap(
"Example program to test interpolation between 2D tables.");
62
65
66 zap(argc, argv);
67 }
68 catch(const exception &error) {
69 FATAL(error.what() << endl);
70 }
71
72
74
75
76 const int NX = 21;
77 const int NY = 11;
78 const int NZ = 11;
79
83
84
88
89
90 JFunction1D_t buffer;
91
92 for (int i = 0; i != X.getSize(); ++i) {
93
94 DEBUG(
"table[" << i <<
"]" << endl);
95
96 const double x = X.getX(i);
97
98 JTable2D_t& table = buffer[
x];
99
100 for (int __i = 0; __i != NY; ++__i) {
101 for (int __j = 0; __j != NZ; ++__j) {
102
103 const double y = Y.getX(__i);
104 const double z = Z.getX(__j);
105
106 table[__i][__j] =
f3(x,y,z);
107
109 }
111 }
112 }
113
114
115
116
119
120 JMultiFunction_t g2;
121
122 g2.configure(Y);
123
124 for (JMultiFunction_t::iterator i = g2.begin(); i != g2.end(); ++i) {
125 i->getY().configure(Z);
126 }
127
128
131
134
135
136 for (int i = 0; i != numberOfEvents; ++i) {
137
138 const double x = gRandom->Uniform(X.getXmin(), X.getXmax());
139 const double y = gRandom->Uniform(Y.getXmin(), Y.getXmax());
140 const double z = gRandom->Uniform(Z.getXmin(), Z.getXmax());
141
142 const double v =
f3(x,y,z);
143
144
145
146
147 t1.start();
148
149 const int __i = (int) (Y.getSize() * (y - X.getXmin()) / (Y.getXmax() - Y.getXmin()));
150 const int __j = (int) (Z.getSize() * (z - Z.getXmin()) / (Z.getXmax() - Z.getXmin()));
151
152 const double w1 = buffer(x)[__i][__j];
153
154 t1.stop();
155
156
157
158
159 t2.start();
160
161 const JTable2D_t& table = buffer(x);
162
163 for (int __i = 0; __i != Y.getSize(); ++__i) {
164 for (int __j = 0; __j != Z.getSize(); ++__j) {
165 g2.getY(__i).getY(__j) = table[__i][__j];
166 }
167 }
168
169 g2.compile();
170
171 const double w2 = g2(y,z);
172
173 t2.stop();
174
176 f2.put(v - w2);
177 }
178
179
181
182 cout << i->getTitle() << endl;
183 cout <<
"mean " <<
SCIENTIFIC(10,2) << i->getMean() << endl;
184 cout <<
"RMS " <<
SCIENTIFIC(10,2) << i->getSTDev() << endl;
185 }
186
188 i->print(cout, true, micro_t);
189 }
190}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double f3(const double x, const double y, const double z)
3D function.
Auxiliary class for CPU timing and usage.
const std::string & getTitle() const
Get title.
Utility class to parse command line options.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Auxiliary data structure for floating point format specification.