30 int main(
int argc, 
char **argv)
 
   35   const char* 
const count_t = 
"count";
 
   36   const char* 
const value_t = 
"value";
 
   40     double background =   5;
 
   64     JParser<> zap(
"Program to test JRootfit algorithm.");
 
   72     zap[
'O'] = 
make_field(option)              = count_t, value_t;
 
   79   catch(
const exception& error) {
 
   80     FATAL(error.what() << endl);
 
   84   gRandom->SetSeed(seed);
 
   88   const size_t nx   = 20   * 
ls;
 
   89   const double xmin = -5.0 * 
ls;
 
   90   const double xmax = +5.0 * 
ls;
 
   92   const size_t ny   = 20   * 
ls;
 
   93   const double ymin = -5.0 * 
ls;
 
   94   const double ymax = +5.0 * 
ls;
 
   98   if (inputFile == 
"") {
 
  100     h2 = 
new TH2D(
"h2", NULL, nx, 
xmin, 
xmax, ny, ymin, ymax);
 
  104     auto f2 = (
JGauss2X<1>(parameters.center, parameters.sigma) * 
 
  106                JP0<1>(parameters.signal)                            +
 
  107                JP0<2>(parameters.background));
 
  116     TFile* in = TFile::Open(inputFile.c_str(), 
"exist");
 
  118     in->GetObject(
"h2", h2);
 
  124   const double x0         = h2->GetMean(1);
 
  125   const double y0         = h2->GetMean(2);
 
  126   const double xs         = h2->GetStdDev(1) * 0.33;
 
  127   const double ys         = h2->GetStdDev(2) * 0.33;
 
  128   const double signal     = h2->GetMaximum();
 
  129   const double background = h2->GetMinimum() + 0.10;
 
  139   typedef decltype(f2)  function_type;
 
  143   for (
size_t i = 0; i != getNumberOfParameters<function_type>(); ++i) {
 
  144     cout << setw(2)     << i                   << 
' '  
  149     const chrono::steady_clock::time_point t0 = chrono::steady_clock::now();
 
  151     const auto result = (option == count_t ?
 
  152                          (writeFits ? Fit<m_count>(h2, f2, {}, X, Y) : Fit<m_count>(*h2, f2, {}, X, Y)) :
 
  153                          (writeFits ? Fit<m_value>(h2, f2, {}, X, Y) : Fit<m_value>(*h2, f2, {}, X, Y)));
 
  155     const chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
 
  157     cout << 
"chi2/NDF " << 
FIXED(7,3) << 
result.getChi2() << 
"/" << 
result.getNDF() << endl;
 
  158     cout << 
"Number of iterations " << 
result.numberOfIterations << endl;
 
  159     cout << 
"Elapsed time [us] " << setw(8) << chrono::duration_cast<chrono::microseconds>(t1 - t0).count() << endl;
 
  161     for (
size_t i = 0; i != 
result.getNumberOfParameters(); ++i) {
 
  162       cout << setw(2)     << i                  << 
' '  
Functional algebra in 2D.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse parameter values.
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
int main(int argc, char **argv)
Utility class to parse parameter values.
Utility class to parse command line options.
int getParameter(const std::string &text)
Get parameter number from text string.
JExp< JF1_t > Exp(const JF1_t &f1)
Exponent of function.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
void FillRandom(TH1 *h1, const T &f1)
Fill 1D histogram according Poisson statistics with expectation values from given 1D function.
Auxiliary data structure for floating point format specification.
Make 2D function of x from 1D function.
Make 2D function of y from 1D function.
Termination class for polynomial function.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary data structure to list files in directory.