84 unsigned int numberOfEvents;
90 precision[
"spline"] = JPrecision_t(1.0e-3, 1.0e-1, 1.0e-4);
91 precision[
"hermite"] = JPrecision_t(1.0e-3, 1.0e-1, 1.0e-4);
92 precision[
"grid"] = JPrecision_t(1.0e-3, 1.0e-1, 1.0e-4);
93 precision[
"polint"] = JPrecision_t(1.0e-14, 1.0e-12, 1.0e-14);
97 JParser<> zap(
"Example program to test 1D interpolation of a polynome.");
107 catch(
const exception &error) {
108 FATAL(error.what() << endl);
114 JSplineFunction1S_t spline;
115 JHermiteSplineFunction1S_t hermite;
116 JGridSplineFunction1S_t grid;
117 JPolintFunction1H_t< N > polint;
118 JPolintFunction1D_t<N+1> Polint;
120 const double xmin = -1.0;
121 const double xmax = +1.0;
137 if (numberOfEvents != 0) {
139 JABC Qspline (
"spline");
140 JABC Qhermite(
"hermite");
142 JABC Qpolint (
"polint");
144 for (
unsigned int i = 0; i != numberOfEvents; ++i) {
146 const double x = gRandom->Uniform(xmin, xmax);
148 const double y1 = f1.getValue(x);
149 const double fp = f1.getDerivative(x);
150 const double F1 = f1.getIntegral(x) - f1.getIntegral(xmin);
152 Qspline .f .put(y1 - spline (x).
f);
153 Qhermite.f .put(y1 - hermite(x).f);
154 Qgrid .f .put(y1 - grid (x).f);
155 Qpolint .f .put(y1 - polint (x).f);
157 Qspline .fp.put(fp - spline (x).fp);
158 Qhermite.fp.put(fp - hermite(x).fp);
159 Qgrid .fp.put(fp - grid (x).fp);
160 Qpolint .fp.put(fp - polint (x).fp);
162 Qspline .v .put(F1 - spline (x).
v);
163 Qhermite.v .put(F1 - hermite(x).v);
164 Qgrid .v .put(F1 - grid (x).v);
165 Qpolint .v .put(F1 - Polint (x));
170 cout <<
"RMS: f f' F " << endl;
171 cout <<
"_________________________________________" << endl;
174 <<
SCIENTIFIC(10,3) << Qspline .f .getSTDev() <<
' '
175 <<
SCIENTIFIC(10,3) << Qspline .fp.getSTDev() <<
' '
176 <<
SCIENTIFIC(10,3) << Qspline .v .getSTDev() << endl;
179 <<
SCIENTIFIC(10,3) << Qhermite.f .getSTDev() <<
' '
180 <<
SCIENTIFIC(10,3) << Qhermite.fp.getSTDev() <<
' '
181 <<
SCIENTIFIC(10,3) << Qhermite.v .getSTDev() << endl;
184 <<
SCIENTIFIC(10,3) << Qgrid .f .getSTDev() <<
' '
185 <<
SCIENTIFIC(10,3) << Qgrid .fp.getSTDev() <<
' '
186 <<
SCIENTIFIC(10,3) << Qgrid .v .getSTDev() << endl;
189 <<
SCIENTIFIC(10,3) << Qpolint .f .getSTDev() <<
' '
190 <<
SCIENTIFIC(10,3) << Qpolint .fp.getSTDev() <<
' '
191 <<
SCIENTIFIC(10,3) << Qpolint .v .getSTDev() << endl;
194 ASSERT(Qspline .f .getSTDev() <= precision[
"spline"].f);
195 ASSERT(Qspline .fp.getSTDev() <= precision[
"spline"].fp);
196 ASSERT(Qspline .v .getSTDev() <= precision[
"spline"].v);
198 ASSERT(Qhermite.f .getSTDev() <= precision[
"hermite"].f);
199 ASSERT(Qhermite.fp.getSTDev() <= precision[
"hermite"].fp);
200 ASSERT(Qhermite.v .getSTDev() <= precision[
"hermite"].v);
202 ASSERT(Qgrid .f .getSTDev() <= precision[
"grid"].f);
203 ASSERT(Qgrid .fp.getSTDev() <= precision[
"grid"].fp);
204 ASSERT(Qgrid .v .getSTDev() <= precision[
"grid"].v);
206 ASSERT(Qpolint .f .getSTDev() <= precision[
"polint"].f);
207 ASSERT(Qpolint .fp.getSTDev() <= precision[
"polint"].fp);
208 ASSERT(Qpolint .v .getSTDev() <= precision[
"polint"].v);
216 cout <<
"> " << flush;
226 istringstream(buffer) >>
x;
228 cout <<
"f1 " << f1 (x) << endl;
229 cout <<
"spline " << spline (x).f << endl;
230 cout <<
"hermite " << hermite(x).f << endl;
231 cout <<
"grid spline " << grid (x).f << endl;
232 cout <<
"polynomial " << polint (x).f << endl;
234 catch(
const JException& exception) {
235 cout << exception.what() << endl;
Utility class to parse command line options.
o $QUALITY_ROOT d $DEBUG!JPlot1D f
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
#define ASSERT(A,...)
Assert macro.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Auxiliary data structure for floating point format specification.
int numberOfBins
number of bins for average CDF integral of optical module