aboutsummaryrefslogtreecommitdiff
path: root/src/fit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fit.c')
-rw-r--r--src/fit.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/fit.c b/src/fit.c
index 36de76c..87bf232 100644
--- a/src/fit.c
+++ b/src/fit.c
@@ -22,8 +22,14 @@
static size_t iter;
+typedef struct fitParams {
+ event *ev;
+ double epsrel;
+} fitParams;
+
double nll(unsigned int n, const double *x, double *grad, void *params)
{
+ fitParams *fpars = (fitParams *) params;
double T, theta, phi, t0;
double pos[3], dir[3];
double fval;
@@ -48,7 +54,7 @@ double nll(unsigned int n, const double *x, double *grad, void *params)
z2[0] = x[8];
gettimeofday(&tv_start, NULL);
- fval = nll_muon((event *) params, T, pos, dir, t0, z1, z2, 1);
+ fval = nll_muon(fpars->ev, T, pos, dir, t0, z1, z2, 1, fpars->epsrel);
gettimeofday(&tv_stop, NULL);
long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000;
@@ -72,11 +78,12 @@ double nll(unsigned int n, const double *x, double *grad, void *params)
int fit_event(event *ev, double *xopt, double *fmin)
{
+ fitParams fpars;
double x[9], ss[9], lb[9], ub[9], fval, n;
int rv;
nlopt_opt opt = nlopt_create(NLOPT_LN_BOBYQA, 9);
- nlopt_set_min_objective(opt,nll,ev);
+ nlopt_set_min_objective(opt,nll,&fpars);
nlopt_set_ftol_abs(opt, 1e-5);
x[0] = 1200.0;
@@ -126,6 +133,9 @@ int fit_event(event *ev, double *xopt, double *fmin)
nlopt_set_initial_step(opt, ss);
+ fpars.ev = ev;
+ fpars.epsrel = 1e-1;
+
iter = 0;
rv = nlopt_optimize(opt,x,&fval);