73{
76
78 int numberOfEvents;
82
83 try {
84
85 JParser<> zap(
"Program to test JGandalf algorithm.");
86
92
93 zap(argc, argv);
94 }
95 catch(const exception& error) {
96 FATAL(error.what() << endl);
97 }
98
100
101 ASSERT(numberOfEvents > 0);
102
104
105 TF1 fs("fs", "exp(-0.5 * (x-[0])*(x-[0]) / ([1]*[1]))");
106 TF1 fb("fb", "1.0");
107
108 fs.FixParameter(0,
gauss.mean);
109 fs.FixParameter(1,
gauss.sigma);
110
111 const Int_t nx = 21;
112 const Double_t xmin = -5.0;
113 const Double_t xmax = +5.0;
114
120 };
121
123 TH1D("ha", "", 101, -0.1, +0.1),
124 TH1D("hb", "", 101, -0.1, +0.1),
125 TH1D("hc", "", 101, -100.0, +100.0),
126 TH1D("hd", "", 101, -100.0, +100.0)
127 };
128
130
131 for (int i = 0; i != numberOfEvents; ++i) {
132
133 STATUS(
"event: " << setw(10) << i <<
'\r');
DEBUG(endl);
134
135 TH1D h0("h0", NULL, nx, xmin, xmax);
136
137 h0.Sumw2();
138
139 h0.FillRandom(
"fs", (Int_t)
gauss.signal);
140 h0.FillRandom(
"fb", (Int_t)
gauss.background);
141
143
144 for (Int_t i = 1; i <= h0.GetNbinsX(); ++i) {
145 data.push_back(JElement_t(h0.GetBinCenter (i),
146 h0.GetBinContent(i)));
147 }
148
150
152
153 fit.parameters.resize(4);
154
155 fit.parameters[0] = &JGauss::mean;
156 fit.parameters[1] = &JGauss::sigma;
157 fit.parameters[2] = &JGauss::signal;
158 fit.parameters[3] = &JGauss::background;
159
160 fit.value =
JGauss(h0.GetMean(),
161 h0.GetRMS(),
162 h0.GetEntries() * (xmax - xmin) / nx - h0.GetMinimum(),
163 h0.GetMinimum());
164
165 DEBUG(
"Start value " << fit.value << endl);
166
168
169 const double chi2 = fit(
g1,
data.begin(),
data.end());
170
172
173 DEBUG(
"Final value " << fit.value << endl);
174 DEBUG(
"Chi2 " << chi2 << endl);
175
176 const double Y[] = { fit.value.mean -
gauss.mean,
177 fit.value.sigma -
gauss.sigma,
178 fit.value.signal * nx / (xmax - xmin) -
gauss.signal,
179 fit.value.background * nx -
gauss.background };
180
181 for (int i = 0; i != sizeof(Q)/sizeof(Q[0]); ++i) {
184 }
185 }
186
187 for (int i = 0; i != sizeof(Q)/sizeof(Q[0]); ++i) {
189 }
190
193 }
194
196
198
199 for (
int i = 0; i !=
sizeof(
H)/
sizeof(
H[0]); ++i) {
201 }
202
203 out.Write();
204 out.Close();
205 }
206
207 for (int i = 0; i != sizeof(Q)/sizeof(Q[0]); ++i) {
209 }
210
215
216 return 0;
217}
double getMean(vector< double > &v)
get mean of vector content
std::ostream & longprint(std::ostream &out)
Set long printing.
std::ostream & shortprint(std::ostream &out)
Set short printing.
#define DEBUG(A)
Message macros.
#define ASSERT(A,...)
Assert macro.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Double_t g1(const Double_t x)
Function.
Place holder for custom implementation.
Auxiliary class for CPU timing and usage.
void print(std::ostream &out, const JScale_t scale=milli_t) const
Print timer data.
Utility class to parse command line options.
Auxiliary classes and methods for linear and iterative data regression.
double gauss(const double x, const double sigma)
Gauss function (normalised to 1 at x = 0).
static const double H
Planck constant [eV s].
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).