30int main(
int argc, 
char **argv)
 
   35  const char* 
const count_t = 
"count";
 
   36  const char* 
const value_t = 
"value";
 
   40    double background =  5;
 
   63    JParser<> zap(
"Program to test JRootfit algorithm.");
 
   70    zap[
'O'] = 
make_field(option)              = count_t, value_t;
 
   77  catch(
const exception& error) {
 
   78    FATAL(error.what() << endl);
 
   82  gRandom->SetSeed(seed);
 
   85  const double xmin = parameters.center  -  5.0 * parameters.sigma;
 
   86  const double xmax = parameters.center  +  5.0 * parameters.sigma;
 
   90  if (inputFile == 
"") {
 
   92    h1 = 
new TH1D(
"h1", NULL, nx, xmin, xmax);
 
   96    auto f0 = 
JP0<1>(parameters.signal) * JGauss<1>(parameters.center, parameters.sigma)  +  
JP0<2>(parameters.background);
 
  101      FillRandom(h1, f0, N);
 
  105    TFile* in = TFile::Open(inputFile.c_str(), 
"exist");
 
  107    in->GetObject(
"h1", h1);
 
  113  const double center     = h1->GetMean();
 
  114  const double sigma      = h1->GetStdDev()  * 0.66;
 
  115  const double signal     = h1->GetMaximum();
 
  116  const double background = h1->GetMinimum() + 0.10;
 
  121  auto f1 = 
JP0<1>(signal) * JGauss<1>(center, sigma)  +  Exp(
JP0<2>(log(background)));
 
  123  typedef decltype(f1)  function_type;
 
  127  for (
size_t i = 0; i != getNumberOfParameters<function_type>(); ++i) {
 
  128    cout << setw(2)     << i                   << 
' '  
  129         << 
FIXED(15,9) << getParameter(f1, i) << endl;
 
  133    const chrono::steady_clock::time_point t0 = chrono::steady_clock::now();
 
  135    const auto result = (option == count_t ?
 
  136                         (writeFits ? Fit<m_count>(h1, f1, {}, X) : Fit<m_count>(*h1, f1, {}, X)) :
 
  137                         (writeFits ? Fit<m_value>(h1, f1, {}, X) : Fit<m_value>(*h1, f1, {}, X)));
 
  139    const chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
 
  141    cout << 
"chi2/NDF " << 
FIXED(7,3) << result.getChi2() << 
"/" << result.getNDF() << endl;
 
  142    cout << 
"Number of iterations " << result.numberOfIterations << endl;
 
  143    cout << 
"Elapsed time [us] " << setw(8) << chrono::duration_cast<chrono::microseconds>(t1 - t0).count() << endl;
 
  145    for (
size_t i = 0; i != result.getNumberOfParameters(); ++i) {
 
  146      cout << setw(2)     << i                  << 
' '  
  147           << 
FIXED(15,9) << result.getValue(i) << 
" +/- " 
  148           << 
FIXED(15,9) << result.getError(i) << endl;