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.