161{
164
166
168 int numberOfEvents;
172
173 try {
174
176
182
184 }
185 catch(const exception& error) {
187 }
188
189
191
192
193 const double top = parameters[0];
194 const double sigma = parameters[1];
195
197
199
200 for (int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
203 }
204
206
208
209
210 JSimplex<model_type> simplex;
211
212 JSimplex<model_type>::debug =
debug;
213 JSimplex<model_type>::MAXIMUM_ITERATIONS = 10000;
214
215 double (*fit)(
const model_type&,
const hit_type&) = likelihood;
216
217
219
220 TH1D h0(
"chi2/NDF",
NULL, 200, 0.0, 10.0);
221
223
224 for (
size_t i =1; i !=
model.size(); ++i) {
226 }
227
228
229 for (int counter = 0; counter != numberOfEvents; ++counter) {
230
232
233
234
235
237
239
241
243 const double sigma = (value > 1.0 ? sqrt(value) : 0.7);
244
245 data.push_back(hit_type(
p1, value, sigma));
246 }
247
248
249
250 JStats Q[NUMBER_OF_DIMENSIONS];
251
252 double value = 0.0;
253
255
256 for (int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
257 if (
hit.value > 0.0) {
259 }
260 }
261
262 if (
hit.value > value) {
263
264 simplex.value[0] =
hit.value;
265
266 for (int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
267 simplex.value[2*i + 1] =
hit[i];
268 }
269
271 }
272 }
273
274 for (int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
275 simplex.value[2*i + 2] = 1.0 * Q[i].
getSTDev();
276 }
277
278
279
280
281 simplex.step.resize(2*NUMBER_OF_DIMENSIONS + 1);
282
283 model_type step;
284
285 simplex.step[0] = model_type();
286 simplex.step[0][0] = 1.0;
287
288 for (int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
289
290 simplex.step[2*i + 1] = model_type();
291 simplex.step[2*i + 1][2*i + 1] = 0.1;
292
293 simplex.step[2*i + 2] = model_type();
294 simplex.step[2*i + 2][2*i + 2] = 0.1;
295 }
296
297 DEBUG(
"start values " << simplex.value <<
endl);
298
299 for (size_t i = 0; i != simplex.step.size(); ++i) {
300 DEBUG(
"step: " <<
setw(2) << i <<
' ' << simplex.step[i] <<
endl);
301 }
302
303
304
305
306 const double chi2 = simplex(fit,
data.begin(),
data.end());
307 const int ndf =
data.size() - simplex.step.size();
308
309
310 h0.Fill(chi2 / ndf);
311
312 for (
size_t i = 0; i !=
model.size(); ++i) {
313 H1[i]->Fill(model[i] - simplex.value[i]);
314 }
315
316 DEBUG(
"chi2 / NDF" <<
FIXED(12,3) << chi2 <<
" / " << ndf <<
endl);
317
318 DEBUG(
"final values " << simplex.value <<
endl);
320
321 if (
debug >= debug_t) {
322
324
326
327 for (int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
329 }
330
331 const double value = simplex.value(
hit);
332
334 <<
FIXED(7,3) << value <<
' '
336 }
337 }
338
339 }
341
342
344
346
347 out << h0;
348
349 for (
size_t i = 0; i !=
sizeof(
H1)/
sizeof(
H1[0]); ++i) {
351 }
352
353 out.Write();
354 out.Close();
355 }
356}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Double_t g1(const Double_t x)
Function.
Template definition of a multi-dimensional oscillation probability interpolation table.
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Auxiliary data structure for return type of make methods.