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;
65 JParser<> zap(
"Program to test JRootfit algorithm.");
74 zap[
'O'] =
make_field(option) = count_t, value_t;
81 catch(
const exception& error) {
82 FATAL(error.what() << endl);
86 gRandom->SetSeed(seed);
90 const size_t nx = 20 *
ls;
91 const double xmin = -5.0 *
ls;
92 const double xmax = +5.0 *
ls;
94 const size_t ny = 20 *
ls;
95 const double ymin = -5.0 *
ls;
96 const double ymax = +5.0 *
ls;
98 const size_t nz = 20 *
ls;
99 const double zmin = -5.0 *
ls;
100 const double zmax = +5.0 *
ls;
104 if (inputFile ==
"") {
106 h3 =
new TH3D(
"h3", NULL, nx,
xmin,
xmax, ny, ymin, ymax, nz, zmin, zmax);
110 auto f3 = (
JGauss3X<1>(parameters.center, parameters.sigma) *
113 JP0<1>(parameters.signal) +
114 JP0<2>(parameters.background));
123 TFile* in = TFile::Open(inputFile.c_str(),
"exist");
125 in->GetObject(
"h3", h3);
131 const double x0 = h3->GetMean(1);
132 const double y0 = h3->GetMean(2);
133 const double z0 = h3->GetMean(3);
134 const double xs = h3->GetStdDev(1) * 0.17;
135 const double ys = h3->GetStdDev(2) * 0.17;
136 const double zs = h3->GetStdDev(3) * 0.17;
137 const double signal = h3->GetMaximum();
138 const double background = h3->GetMinimum() + 0.10;
148 typedef decltype(
f3) function_type;
152 for (
size_t i = 0; i != getNumberOfParameters<function_type>(); ++i) {
153 cout << setw(2) << i <<
' '
158 const chrono::steady_clock::time_point t0 = chrono::steady_clock::now();
160 const auto result = (option == count_t ?
161 (writeFits ? Fit<m_count>(h3,
f3, {}, X, Y, Z) : Fit<m_count>(*h3,
f3, {}, X, Y, Z)) :
162 (writeFits ? Fit<m_value>(h3,
f3, {}, X, Y, Z) : Fit<m_value>(*h3,
f3, {}, X, Y, Z)));
164 const chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
166 cout <<
"chi2/NDF " <<
FIXED(7,3) <<
result.getChi2() <<
"/" <<
result.getNDF() << endl;
167 cout <<
"Number of iterations " <<
result.numberOfIterations << endl;
168 cout <<
"Elapsed time [us] " << setw(8) << chrono::duration_cast<chrono::microseconds>(t1 - t0).count() << endl;
170 for (
size_t i = 0; i !=
result.getNumberOfParameters(); ++i) {
171 cout << setw(2) << i <<
' '
Functional algebra in 3D.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double f3(const double x, const double y, const double z)
3D function.
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.
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 3D function of x from 1D function.
Make 3D function of y from 1D function.
Make 3D function of z 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.