30int main(
int argc,
char **argv)
35 const char*
const count_t =
"count";
36 const char*
const value_t =
"value";
40 double background = 5;
77 catch(
const exception& error) {
85 const double xmin = parameters.center - 5.0 * parameters.sigma;
86 const double xmax = parameters.center + 5.0 * parameters.sigma;
90 if (inputFile ==
"") {
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) {
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 ?
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) {
147 <<
FIXED(15,9) << result.getValue(i) <<
" +/- "
148 <<
FIXED(15,9) << result.getError(i) <<
endl;