add the commits to the fit analyser
This commit is contained in:
parent
ca901526f6
commit
1e72312936
@ -554,7 +554,7 @@ class FitAnalyser():
|
|||||||
return self.fitModel.guess(data=data, x=x, y=y, **kwargs)
|
return self.fitModel.guess(data=data, x=x, y=y, **kwargs)
|
||||||
|
|
||||||
def guess(self, dataArray, x=None, y=None, guess_kwargs={}, input_core_dims=None, dask='parallelized', vectorize=True, keep_attrs=True, daskKwargs=None, **kwargs):
|
def guess(self, dataArray, x=None, y=None, guess_kwargs={}, input_core_dims=None, dask='parallelized', vectorize=True, keep_attrs=True, daskKwargs=None, **kwargs):
|
||||||
"""Call the guess function of the 1D fit model to guess the initial value.
|
"""Call the guess function of the fit model to guess the initial value.
|
||||||
|
|
||||||
:param dataArray: The data for the fit
|
:param dataArray: The data for the fit
|
||||||
:type dataArray: xarray DataArray
|
:type dataArray: xarray DataArray
|
||||||
@ -565,7 +565,7 @@ class FitAnalyser():
|
|||||||
:param guess_kwargs: the keyworded arguments to send to the guess function, defaults to {}
|
:param guess_kwargs: the keyworded arguments to send to the guess function, defaults to {}
|
||||||
:type guess_kwargs: dict, optional
|
:type guess_kwargs: dict, optional
|
||||||
:param input_core_dims: over write of the same argument in xarray.apply_ufunc, defaults to None
|
:param input_core_dims: over write of the same argument in xarray.apply_ufunc, defaults to None
|
||||||
:type input_core_dims: _type_, optional
|
:type input_core_dims: list or array like, optional
|
||||||
:param dask: over write of the same argument in xarray.apply_ufunc,, defaults to 'parallelized'
|
:param dask: over write of the same argument in xarray.apply_ufunc,, defaults to 'parallelized'
|
||||||
:type dask: str, optional
|
:type dask: str, optional
|
||||||
:param vectorize: over write of the same argument in xarray.apply_ufunc,, defaults to True
|
:param vectorize: over write of the same argument in xarray.apply_ufunc,, defaults to True
|
||||||
@ -574,8 +574,8 @@ class FitAnalyser():
|
|||||||
:type keep_attrs: bool, optional
|
:type keep_attrs: bool, optional
|
||||||
:param daskKwargs: over write of the same argument in xarray.apply_ufunc,, defaults to None
|
:param daskKwargs: over write of the same argument in xarray.apply_ufunc,, defaults to None
|
||||||
:type daskKwargs: dict, optional
|
:type daskKwargs: dict, optional
|
||||||
:return: _description_
|
:return: The guessed initial parameters for the fit
|
||||||
:rtype: _type_
|
:rtype: xarray DataArray
|
||||||
"""
|
"""
|
||||||
|
|
||||||
kwargs.update(
|
kwargs.update(
|
||||||
@ -667,14 +667,60 @@ class FitAnalyser():
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _fit_1D(self, data, params, x):
|
def _fit_1D(self, data, params, x):
|
||||||
|
"""Call the fit function of the 1D fit model to do the fit.
|
||||||
|
|
||||||
|
:param data: The data to fit
|
||||||
|
:type data: 1D numpy array
|
||||||
|
:param params: The initial paramters of the fit
|
||||||
|
:type params: lmfit Parameters
|
||||||
|
:param x: The data of x axis
|
||||||
|
:type x: 1D numpy array
|
||||||
|
:return: The result of the fit
|
||||||
|
:rtype: lmfit FitResult
|
||||||
|
"""
|
||||||
return self.fitModel.fit(data=data, x=x, params=params, nan_policy='omit')
|
return self.fitModel.fit(data=data, x=x, params=params, nan_policy='omit')
|
||||||
|
|
||||||
def _fit_2D(self, data, params, x, y):
|
def _fit_2D(self, data, params, x, y):
|
||||||
|
"""Call the fit function of the 2D fit model to do the fit.
|
||||||
|
|
||||||
|
:param data: The flattened data to fit
|
||||||
|
:type data: 1D numpy array
|
||||||
|
:param params: The flattened initial paramters of the fit
|
||||||
|
:type params: lmfit Parameters
|
||||||
|
:param x: The flattened data of x axis
|
||||||
|
:type x: 1D numpy array
|
||||||
|
:param y: The flattened data of y axis
|
||||||
|
:type y: 1D numpy array
|
||||||
|
:return: The result of the fit
|
||||||
|
:rtype: lmfit FitResult
|
||||||
|
"""
|
||||||
data = data.flatten(order='F')
|
data = data.flatten(order='F')
|
||||||
return self.fitModel.fit(data=data, x=x, y=y, params=params, nan_policy='omit')
|
return self.fitModel.fit(data=data, x=x, y=y, params=params, nan_policy='omit')
|
||||||
|
|
||||||
def fit(self, dataArray, paramsArray, x=None, y=None, input_core_dims=None, dask='parallelized', vectorize=True, keep_attrs=True, daskKwargs=None, **kwargs):
|
def fit(self, dataArray, paramsArray, x=None, y=None, input_core_dims=None, dask='parallelized', vectorize=True, keep_attrs=True, daskKwargs=None, **kwargs):
|
||||||
|
"""Call the fit function of the fit model to do the fit.
|
||||||
|
|
||||||
|
:param dataArray: The data for the fit
|
||||||
|
:type dataArray: xarray DataArray
|
||||||
|
:param paramsArray: The flattened initial paramters of the fit
|
||||||
|
:type paramsArray: xarray DataArray or lmfit Parameters
|
||||||
|
:param x: The name of x axis in data or the data of x axis, defaults to None
|
||||||
|
:type x: str or numpy array, optional
|
||||||
|
:param y: The name of y axis in data or the data of y axis, defaults to None
|
||||||
|
:type y: str or numpy array, optional
|
||||||
|
:param input_core_dims: over write of the same argument in xarray.apply_ufunc, defaults to None, defaults to None
|
||||||
|
:type input_core_dims: list or array like, optional
|
||||||
|
:param dask: over write of the same argument in xarray.apply_ufunc, defaults to None, defaults to 'parallelized'
|
||||||
|
:type dask: str, optional
|
||||||
|
:param vectorize: over write of the same argument in xarray.apply_ufunc, defaults to None, defaults to True
|
||||||
|
:type vectorize: bool, optional
|
||||||
|
:param keep_attrs: over write of the same argument in xarray.apply_ufunc, defaults to None, defaults to True
|
||||||
|
:type keep_attrs: bool, optional
|
||||||
|
:param daskKwargs: over write of the same argument in xarray.apply_ufunc, defaults to None, defaults to None
|
||||||
|
:type daskKwargs: dict, optional
|
||||||
|
:return: The fit result
|
||||||
|
:rtype: xarray DataArray
|
||||||
|
"""
|
||||||
kwargs.update(
|
kwargs.update(
|
||||||
{
|
{
|
||||||
"dask": dask,
|
"dask": dask,
|
||||||
@ -816,13 +862,56 @@ class FitAnalyser():
|
|||||||
**kwargs)
|
**kwargs)
|
||||||
|
|
||||||
def _eval_1D(self, fitResult, x):
|
def _eval_1D(self, fitResult, x):
|
||||||
|
"""Call the eval function of the 1D fit model to calculate the curve.
|
||||||
|
|
||||||
|
:param fitResult: The result of fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param x: The data of x axis
|
||||||
|
:type x: 1D numpy array
|
||||||
|
:return: The curve based on the fit result
|
||||||
|
:rtype: 1D numpy array
|
||||||
|
"""
|
||||||
return self.fitModel.eval(x=x, **fitResult.best_values)
|
return self.fitModel.eval(x=x, **fitResult.best_values)
|
||||||
|
|
||||||
def _eval_2D(self, fitResult, x, y, shape):
|
def _eval_2D(self, fitResult, x, y, shape):
|
||||||
|
"""Call the eval function of the 2D fit model to calculate the curve.
|
||||||
|
|
||||||
|
:param fitResult: The result of fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param x: The data of x axis
|
||||||
|
:type x: 1D numpy array
|
||||||
|
:param y: The flattened data of y axis
|
||||||
|
:type y: 1D numpy array
|
||||||
|
:param shape: The desired shape for output
|
||||||
|
:type shape: list, tuple or array like
|
||||||
|
:return: The curve based on the fit result
|
||||||
|
:rtype: 2D numpy array
|
||||||
|
"""
|
||||||
res = self.fitModel.eval(x=x, y=y, **fitResult.best_values)
|
res = self.fitModel.eval(x=x, y=y, **fitResult.best_values)
|
||||||
return res.reshape(shape, order='F')
|
return res.reshape(shape, order='F')
|
||||||
|
|
||||||
def eval(self, fitResultArray, x=None, y=None, output_core_dims=None, prefix="", dask='parallelized', vectorize=True, daskKwargs=None, **kwargs):
|
def eval(self, fitResultArray, x=None, y=None, output_core_dims=None, prefix="", dask='parallelized', vectorize=True, daskKwargs=None, **kwargs):
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
:param fitResultArray: The result of fit
|
||||||
|
:type fitResultArray: xarray DataArray
|
||||||
|
:param x: The name of x axis in data or the data of x axis, defaults to None
|
||||||
|
:type x: str or numpy array, optional
|
||||||
|
:param y: The name of y axis in data or the data of y axis, defaults to None
|
||||||
|
:type y: str or numpy array, optional
|
||||||
|
:param output_core_dims: over write of the same argument in xarray.apply_ufunc, defaults to None
|
||||||
|
:type output_core_dims: list, optional
|
||||||
|
:param prefix: prefix str of the fit model, defaults to ""
|
||||||
|
:type prefix: str, optional
|
||||||
|
:param dask: over write of the same argument in xarray.apply_ufunc, defaults to 'parallelized'
|
||||||
|
:type dask: str, optional
|
||||||
|
:param vectorize: over write of the same argument in xarray.apply_ufunc, defaults to True
|
||||||
|
:type vectorize: bool, optional
|
||||||
|
:param daskKwargs: over write of the same argument in xarray.apply_ufunc, defaults to None
|
||||||
|
:type daskKwargs: dict, optional
|
||||||
|
:return: The curve based on the fit result
|
||||||
|
:rtype: xarray
|
||||||
|
"""
|
||||||
|
|
||||||
kwargs.update(
|
kwargs.update(
|
||||||
{
|
{
|
||||||
@ -896,9 +985,27 @@ class FitAnalyser():
|
|||||||
return res.assign_coords({prefix+'x':np.array(x), prefix+'y':np.array(y)})
|
return res.assign_coords({prefix+'x':np.array(x), prefix+'y':np.array(y)})
|
||||||
|
|
||||||
def _get_fit_value_single(self, fitResult, key):
|
def _get_fit_value_single(self, fitResult, key):
|
||||||
|
"""get value of one single parameter from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param key: The name of the parameter
|
||||||
|
:type key: str
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: float
|
||||||
|
"""
|
||||||
return fitResult.params[key].value
|
return fitResult.params[key].value
|
||||||
|
|
||||||
def _get_fit_value(self, fitResult, params):
|
def _get_fit_value(self, fitResult, params):
|
||||||
|
"""get value of parameters from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param params: A list of the name of paramerters to read
|
||||||
|
:type params: list or array like
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: 1D numpy array
|
||||||
|
"""
|
||||||
func = np.vectorize(self._get_fit_value_single)
|
func = np.vectorize(self._get_fit_value_single)
|
||||||
res = tuple(
|
res = tuple(
|
||||||
func(fitResult, key)
|
func(fitResult, key)
|
||||||
@ -908,6 +1015,15 @@ class FitAnalyser():
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
def get_fit_value(self, fitResult, dask='parallelized', **kwargs):
|
def get_fit_value(self, fitResult, dask='parallelized', **kwargs):
|
||||||
|
"""get value of parameters from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param dask: over write of the same argument in xarray.apply_ufunc, defaults to 'parallelized'
|
||||||
|
:type dask: str, optional
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: xarray DataArray
|
||||||
|
"""
|
||||||
firstIndex = {
|
firstIndex = {
|
||||||
key: fitResult[key][0]
|
key: fitResult[key][0]
|
||||||
for key in fitResult.dims
|
for key in fitResult.dims
|
||||||
@ -938,9 +1054,27 @@ class FitAnalyser():
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
def _get_fit_std_single(self, fitResult, key):
|
def _get_fit_std_single(self, fitResult, key):
|
||||||
|
"""get standard deviation of one single parameter from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param key: The name of the parameter
|
||||||
|
:type key: str
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: float
|
||||||
|
"""
|
||||||
return fitResult.params[key].stderr
|
return fitResult.params[key].stderr
|
||||||
|
|
||||||
def _get_fit_std(self, fitResult, params):
|
def _get_fit_std(self, fitResult, params):
|
||||||
|
"""get standard deviation of parameters from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param params: A list of the name of paramerters to read
|
||||||
|
:type params: list or array like
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: 1D numpy array
|
||||||
|
"""
|
||||||
func = np.vectorize(self._get_fit_std_single)
|
func = np.vectorize(self._get_fit_std_single)
|
||||||
res = tuple(
|
res = tuple(
|
||||||
func(fitResult, key)
|
func(fitResult, key)
|
||||||
@ -950,6 +1084,15 @@ class FitAnalyser():
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
def get_fit_std(self, fitResult, dask='parallelized', **kwargs):
|
def get_fit_std(self, fitResult, dask='parallelized', **kwargs):
|
||||||
|
"""get standard deviation of parameters from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param dask: over write of the same argument in xarray.apply_ufunc, defaults to 'parallelized'
|
||||||
|
:type dask: str, optional
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: xarray DataArray
|
||||||
|
"""
|
||||||
firstIndex = {
|
firstIndex = {
|
||||||
key: fitResult[key][0]
|
key: fitResult[key][0]
|
||||||
for key in fitResult.dims
|
for key in fitResult.dims
|
||||||
@ -980,6 +1123,15 @@ class FitAnalyser():
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
def _get_fit_full_result_single(self, fitResult, key):
|
def _get_fit_full_result_single(self, fitResult, key):
|
||||||
|
"""get the full result of one single parameter from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param key: The name of the parameter
|
||||||
|
:type key: str
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: float
|
||||||
|
"""
|
||||||
|
|
||||||
if not fitResult.params[key].value is None:
|
if not fitResult.params[key].value is None:
|
||||||
value = fitResult.params[key].value
|
value = fitResult.params[key].value
|
||||||
@ -994,6 +1146,15 @@ class FitAnalyser():
|
|||||||
return ufloat(value, std)
|
return ufloat(value, std)
|
||||||
|
|
||||||
def _get_fit_full_result(self, fitResult, params):
|
def _get_fit_full_result(self, fitResult, params):
|
||||||
|
"""get the full result of parameters from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param params: A list of the name of paramerters to read
|
||||||
|
:type params: list or array like
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: 1D numpy array
|
||||||
|
"""
|
||||||
func = np.vectorize(self._get_fit_full_result_single)
|
func = np.vectorize(self._get_fit_full_result_single)
|
||||||
res = tuple(
|
res = tuple(
|
||||||
func(fitResult, key)
|
func(fitResult, key)
|
||||||
@ -1003,6 +1164,15 @@ class FitAnalyser():
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
def get_fit_full_result(self, fitResult, dask='parallelized', **kwargs):
|
def get_fit_full_result(self, fitResult, dask='parallelized', **kwargs):
|
||||||
|
"""get the full result of parameters from fit result
|
||||||
|
|
||||||
|
:param fitResult: The result of the fit
|
||||||
|
:type fitResult: lmfit FitResult
|
||||||
|
:param dask: over write of the same argument in xarray.apply_ufunc, defaults to 'parallelized'
|
||||||
|
:type dask: str, optional
|
||||||
|
:return: The vaule of the parameter
|
||||||
|
:rtype: xarray DataArray
|
||||||
|
"""
|
||||||
firstIndex = {
|
firstIndex = {
|
||||||
key: fitResult[key][0]
|
key: fitResult[key][0]
|
||||||
for key in fitResult.dims
|
for key in fitResult.dims
|
||||||
|
Loading…
Reference in New Issue
Block a user