175    JParser<> zap(
"Program to test JSimplex algorithm.");
 
  185  catch(
const exception& error) {
 
  186    FATAL(error.what() << endl);
 
  190  gRandom->SetSeed(seed);
 
  193  const double top   = parameters[0];
 
  194  const double sigma = parameters[1];
 
  200  for (
int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
 
  201    model[i*2 + 1] = gRandom->Uniform(-sigma, +sigma);
 
  202    model[i*2 + 2] = gRandom->Gaus(sigma, 0.2*sigma);
 
  213  double (*fit)(
const model_type&, 
const hit_type&) = likelihood;  
 
  218  TH1D h0(
"chi2/NDF", NULL, 200, 0.0, 10.0);
 
  220  H1.push_back(
new TH1D(
MAKE_CSTRING(
"p" << 0), NULL, 101, -20.0, +20.0));
 
  222  for (
size_t i =1; i != model.size(); ++i) {
 
  223    H1.push_back(
new TH1D(
MAKE_CSTRING(
"p" << i), NULL, 101, -0.1, +0.1));
 
  227  for (
int counter = 0; counter != numberOfEvents; ++counter) {
 
  229    STATUS(
"event: " << setw(10) << counter << 
'\r'); 
DEBUG(endl);
 
  240      const double value = gRandom->Poisson(model(
p1));
 
  241      const double sigma = (value > 1.0 ? sqrt(value) : 0.7);
 
  243      data.push_back(hit_type(
p1, value, sigma));         
 
  253    for (
const auto& hit : data) {
 
  255      for (
int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
 
  256        Q[i].
put(hit[i], hit.value);
 
  259      if (hit.value > value) {
 
  261        simplex.
value[0] = hit.value;
 
  263        for (
int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
 
  264          simplex.
value[2*i + 1] = hit[i];
 
  271    for (
int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
 
  278    simplex.
step.resize(2*NUMBER_OF_DIMENSIONS + 1);
 
  282    simplex.
step[0]    = model_type();
 
  283    simplex.
step[0][0] = 1.0;
 
  285    for (
int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
 
  287      simplex.
step[2*i + 1]          = model_type();
 
  288      simplex.
step[2*i + 1][2*i + 1] = 0.1;
 
  290      simplex.
step[2*i + 2]          = model_type();
 
  291      simplex.
step[2*i + 2][2*i + 2] = 0.1;
 
  294    DEBUG(
"start values " << simplex.
value << endl);
 
  296    for (
size_t i = 0; i != simplex.
step.size(); ++i) {
 
  297      DEBUG(
"step: " << setw(2) << i << 
' ' << simplex.
step[i] << endl);
 
  303    const double chi2 = simplex(fit, data.begin(), data.end());
 
  304    const int    ndf  = data.size()  -  simplex.
step.size();
 
  309    for (
size_t i = 0; i != model.size(); ++i) {
 
  310      H1[i]->Fill(model[i] - simplex.
value[i]);
 
  313    DEBUG(
"chi2 / NDF" << 
FIXED(12,3) << chi2 << 
" / " << ndf << endl);
 
  315    DEBUG(
"final values " << simplex.
value << endl);
 
  316    DEBUG(
"model values " << model         << endl);
 
  318    if (
debug >= debug_t) {
 
  320      for (
const auto& hit : data) {
 
  324        for (
int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
 
  325          cout << 
FIXED(7,3) << hit[i] << 
' ';
 
  328        const double value = simplex.
value(hit);
 
  330        cout << 
FIXED(7,3) << hit.value << 
' ' 
  331             << 
FIXED(7,3) << value  << 
' ' 
  332             << 
FIXED(7,3) << (hit.value - value) / hit.sigma << endl;
 
  346    for (
size_t i = 0; i != 
sizeof(H1)/
sizeof(H1[0]); ++i) {