@@ -241,12 +241,12 @@ def _func(x, *beta):
241241 return result_obj
242242
243243
244- def _normalise_fit_result (datafile , xcol , ycol , fit , result_obj ):
244+ def _normalise_fit_result (datafile , settings , fit , result_obj ):
245245 """Normalise the fit results based on the fit instance."""
246246 func = result_obj .func
247247 args = result_obj .args
248- result_obj .data = datafile . data [:, ycol ]
249- result_obj .xdata = datafile . data [:, xcol ]
248+ result_obj .data = datafile
249+ result_obj .settings = settings
250250
251251 match fit :
252252 case _Curve_Fit_Result ():
@@ -273,23 +273,19 @@ def _normalise_fit_result(datafile, xcol, ycol, fit, result_obj):
273273 perr = fit .perr
274274 nfev = fit .nfev
275275 nfree = len (datafile ) - len (popt )
276- fit_data = func (result_obj . xdata , * popt )
277- chisq = np .sum ((result_obj .data - fit_data ) ** 2 ) / nfree
276+ fit_data = func (datafile // settings . columns . xcol , * popt )
277+ chisq = np .sum ((datafile .data [:, settings . columns . ycol ] - fit_data ) ** 2 ) / nfree
278278 case _:
279279 raise RuntimeError ("Unable to understand {type(fit)} as a fitting result" )
280- result_obj .popt = popt
281- result_obj .perr = perr
282- result_obj .nfev = nfev
283- result_obj .chisq = chisq
284- result_obj .nfree = nfree
280+ result_obj .results = {"popt" : popt , "perr" : perr , "nfev" : nfev , "chisq" : chisq , "nfree" : nfree }
285281 return result_obj
286282
287283
288284def _record_curve_fit_result (datafile , func , fit , settings ):
289285 """Annotate the DataFile object with the curve_fit result."""
290286 result_obj = _Curve_Fit_Result ()
291287 result_obj = _normalise_model_func (func , settings .prefix , result_obj )
292- result_obj = _normalise_fit_result (datafile , settings . columns . xcol , settings . columns . ycol , fit , result_obj )
288+ result_obj = _normalise_fit_result (datafile , settings , fit , result_obj )
293289
294290 result_obj .add_metadata (datafile )
295291
@@ -721,14 +717,15 @@ def p0_func(ydata,x=xdata):
721717 sigma = None
722718 for var in ["xcol" , "ycol" , "zcol" , "xerr" , "yerr" , "zerr" , "scale_covar" ]:
723719 kwargs .pop (var , None )
724- report = _Curve_Fit_Result (* _curve_fit (_func , xdat , ydat , ** kwargs ))
720+ popt , pcov , infodict , msg , ier = _curve_fit (_func , xdat , ydat , ** kwargs )
721+ report = _Curve_Fit_Result ()
722+ report .settings = settings
725723 report .func = func
726- if p0 is None :
727- report .p0 = np .ones (len (report .popt ))
728- else :
729- report .p0 = p0
724+ report .results = {"popt" : popt , "pcov" : pcov , "mesg" : msg , "ier" : ier }
725+ report .infodict = infodict
726+ report .p0 = np .ones (len (report .popt )) if p0 is None else p0
730727 report .data = datafile
731- report .residual_vals = data . y - report .fvec
728+ report .residual_vals = ydat - report .fvec
732729 report .chisq = (report .residual_vals ** 2 ).sum ()
733730 report .nfree = len (datafile ) - len (report .popt )
734731 report .chisq /= report .nfree
@@ -860,11 +857,15 @@ def differential_evolution(datafile, model, xcol=None, ycol=None, p0=None, sigma
860857 kwargs .pop ("polish" , None )
861858 kwargs ["full_output" ] = True
862859 kwargs ["absolute_sigma" ] = abs_sigma
863- polish = _Curve_Fit_Result (* _curve_fit (model .func , data .x , data .y [0 ], sigma = data .e [0 ], p0 = fit .x , ** kwargs ))
860+ popt , pcov , infodict , mesg , ier = _curve_fit (model .func , data .x , data .y [0 ], sigma = data .e [0 ], p0 = fit .x , ** kwargs )
861+ polish = _Curve_Fit_Result ()
862+ polish .results = {"popt" : popt , "pcov" : pcov , "mesg" : mesg , "ier" : ier }
863+ polish .infodict = infodict
864+ polish .data = datafile
865+ polish .settings = settings
864866
865867 polish .func = model .func
866868 polish .p0 = p0
867- polish .data = datafile
868869 polish .residual_vals = data .y - polish .fvec
869870 polish .chisq = (polish .residual_vals ** 2 ).sum ()
870871 polish .nfree = len (datafile ) - len (polish .popt )
0 commit comments