54{
   57 
   58  int         numberOfEvents;
   60  double      precision;
   62 
   63  try {
   64 
   65    JParser<> zap(
"Example program to test multi-dimensional interpolation.");
 
   66 
   74 
   75    zap(argc, argv);
   76  }
   77  catch(const exception &error) {
   78    FATAL(error.what() << endl);
 
   79  }
   80 
   81 
   82  const double xmin = -1.0;
 
   83  const double xmax = +1.0;
 
   85 
   91                   JMap_t>::maplist                         JMaplist_t;
   92 
   94  typedef JMultiFunction_t::result_type                     result_type;
   95    
   96  JMultiFunction_t g3;
   97 
   98 
   99  for (
double x = xmin; 
x < 
xmax + 0.5*dx; 
x += dx) {
 
  100    for (
double y = xmin; 
y < 
xmax + 0.5*dx; 
y += dx) {
 
  101      for (
double z = xmin; z < 
xmax + 0.5*dx; z += dx) {
 
  102        g3[
x][
y][z] = 
f3(x,y,z);
 
  103      }
  104    }
  105  }
  106    
  107    
  109 
  110 
  111  if (numberOfEvents > 0) {
  112 
  115    
  116    for (int i = 0; i != numberOfEvents; ++i) {
  117      
  118      const double x  = gRandom->Uniform(xmin, xmax);
 
  119      const double y  = gRandom->Uniform(xmin, xmax);
 
  120      const double z  = gRandom->Uniform(xmin, xmax);
  121      
  122      const result_type 
result = g3(x,y,z);
 
  123 
  124      const double v  = 
f3(x,y,z);
 
  126 
  128 
  129      H[0][0].put(fx.getDerivative().getDerivative(x) * fy(y) * fz(z)  -  
result.fpp.f.f);
 
  130      H[1][0].put(fx.getDerivative(x) * fy.getDerivative(y) * fz(z)    -  
result.fp.fp.f);
 
  131      H[2][0].put(fx.getDerivative(x) * fy(y) * fz.getDerivative(z)    -  
result.fp.f.fp);
 
  132      
  133      H[1][1].put(fx(x) * fy.getDerivative().getDerivative(y) * fz(z)  -  
result.f.fpp.f);
 
  134      H[2][1].put(fx(x) * fy.getDerivative(y) * fz.getDerivative(z)    -  
result.f.fp.fp);
 
  135 
  136      H[2][2].put(fx(x) * fy(y) * fz.getDerivative().getDerivative(z)  -  
result.f.f.fpp);
 
  137    }
  138 
  140 
  142 
  143      cout << "Hessian matrix" << endl;
  144 
  145      for (int i = 0; i != N; ++i) {
  146        for (
int j = 0; 
j <= i; ++
j) {
 
  148        }
  149        cout << endl;
  150      }
  151 
  152      for (int i = 0; i != N; ++i) {
  153        for (
int j = 0; 
j <= i; ++
j) {
 
  155        }
  156        cout << endl;
  157      }
  158    }
  159 
  162 
  163    for (int i = 0; i != N; ++i) {
  164      for (
int j = 0; 
j <= i; ++
j) {
 
  166        ASSERT(
H[i][
j].getSTDev() <= precision);
 
  167      }
  168    }
  169 
  170  } else {
  171 
  172    for ( ; ; ) {
  173      
  174      cout << "> " << flush;
  175      
  176      string buffer;
  177      
  178      if (
getline(cin, buffer) && !buffer.empty()) {
 
  179        
  181        
  182        istringstream(buffer) >> 
x >> 
y >> z;
 
  183 
  184        try {
  185          cout << 
f3(x,y,z) << 
' ' << 
get_value(g3(x,y,z)) << endl;
 
  186        }
  188          cout << exception << endl;
  189        }
  190 
  191      } else {
  192        break;
  193      }
  194    }
  195  }
  196 
  197  return 0;
  198}
double getMean(vector< double > &v)
get mean of vector content
 
#define ASSERT(A,...)
Assert macro.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
double f3(const double x, const double y, const double z)
3D function.
 
int numberOfBins
number of bins for average CDF integral of optical module
 
Utility class to parse command line options.
 
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
 
const parameter_list< JPolynome< ID_t, 0 > > JPolynome< ID_t, 0 >::parameters & JPolynome
Set parameters.
 
static const double H
Planck constant [eV s].
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.