@@ -86,10 +86,14 @@ double residuals_nlopt(const std::vector<double> &x, std::vector<double> &grad,
8686
8787 double sum = 0.0 ;
8888 double dy = 0 .;
89+ double dt = 0 .;
8990 // Calculate residuals
9091 for (int i=0 ; i<ud->spectra .size (); i++)
9192 {
92- sum += pow ((ud->spectra [i] - ud->spectra_model [i]), 2.0 ) * ud->weights [i];
93+ // orig
94+ // sum += pow((ud->spectra[i] - ud->spectra_model[i]), 2.0) * ud->weights[i];
95+ dy += pow ((ud->spectra [i] - ud->spectra_model [i]), 2.0 );
96+ dt += pow ((ud->spectra [i] - ud->spec_avg ), 2.0 );
9397 /*
9498 if (std::isfinite(dy) == false)
9599 {
@@ -111,6 +115,7 @@ double residuals_nlopt(const std::vector<double> &x, std::vector<double> &grad,
111115 }
112116 */
113117 }
118+ sum = dy / dt;
114119 // logI << "f = " << sum << "\n";
115120 ud->cur_itr ++;
116121 if (ud->status_callback != nullptr )
@@ -145,11 +150,16 @@ double gen_residuals_nlopt(const std::vector<double> &x, std::vector<double> &gr
145150 ud->spectra_model += ud->spectra_background ;
146151
147152 double sum = 0.0 ;
153+ double dy = 0 .;
154+ double dt = 0 .;
148155 // Calculate residuals
149156 for (int i=0 ; i<ud->spectra .size (); i++)
150157 {
151- sum += pow ((ud->spectra [i] - ud->spectra_model [i]), 2.0 ) * ud->weights [i];
158+ // sum += pow((ud->spectra[i] - ud->spectra_model[i]), 2.0) * ud->weights[i];
159+ dy += pow ((ud->spectra [i] - ud->spectra_model [i]), 2.0 );
160+ dt += pow ((ud->spectra [i] - ud->spec_avg ), 2.0 );
152161 }
162+ sum = dy / dt;
153163
154164 return sum;
155165}
@@ -513,13 +523,17 @@ OPTIMIZER_OUTCOME NLOPT_Optimizer<T_real>::minimize_quantification(Fit_Parameter
513523 return OPTIMIZER_OUTCOME::STOPPED;
514524 }
515525
516- nlopt::opt opt (_algo, fitp_arr.size ());
526+ // nlopt::opt opt(nlopt::algorithm::GN_ESCH, fitp_arr.size());
527+ // nlopt::opt opt(nlopt::algorithm::GN_ISRES, fitp_arr.size());
528+ // nlopt::opt opt(nlopt::algorithm::LN_SBPLX, fitp_arr.size());
529+ nlopt::opt opt (nlopt::algorithm::GN_CRS2_LM, fitp_arr.size ());
517530 opt.set_lower_bounds (lb_arr);
518531 opt.set_upper_bounds (ub_arr);
519532 opt.set_default_initial_step (step_arr);
520533 opt.set_min_objective (quantification_residuals_nlopt<T_real>, (void *)&ud);
521534 opt.set_xtol_rel (_options.at (STR_OPT_XTOL));
522- opt.set_maxeval (_options.at (STR_OPT_MAXITER));
535+ // opt.set_maxeval(_options.at(STR_OPT_MAXITER));
536+ opt.set_maxeval (1000000 );
523537
524538 double minf;
525539 nlopt::result result;
0 commit comments