def make_poissonian_fit(self, x_axis, data, estimator, units=None, add_params=None):
""" Performe a poissonian fit on the provided data.
@param numpy.array x_axis: 1D axis values
@param numpy.array data: 1D data, should have the same dimension as x_axis.
@param method estimator: Pointer to the estimator method
@param list units: List containing the ['horizontal', 'vertical'] units as strings
@param Parameters or dict add_params: optional, additional parameters of
type lmfit.parameter.Parameters, OrderedDict or dict for the fit
which will be used instead of the values from the estimator.
@return object result: lmfit.model.ModelFit object, all parameters
provided about the fitting, like: success,
initial fitting values, best fitting values, data
with best fit with given axis,...
"""
poissonian_model, params = self.make_poissonian_model()
error, params = estimator(x_axis, data, params)
params = self._substitute_params(initial_params=params,
update_params=add_params)
try:
result = poissonian_model.fit(data, x=x_axis, params=params)
except:
self.log.warning('The poissonian fit did not work. Check if a poisson '
'distribution is needed or a normal approximation can be'
'used. For values above 10 a normal/ gaussian distribution '
'is a good approximation.')
result = poissonian_model.fit(data, x=x_axis, params=params)
print(result.message)
if units is None:
units = ['arb. unit', 'arb. unit']
result_str_dict = dict() # create result string for gui oder OrderedDict()
result_str_dict['Amplitude'] = {'value': result.params['amplitude'].value,
'error': result.params['amplitude'].stderr,
'unit': units[1]} # Amplitude
result_str_dict['Event rate'] = {'value': result.params['mu'].value,
'error': result.params['mu'].stderr,
'unit': units[0]} # event rate
result.result_str_dict = result_str_dict
return result
评论列表
文章目录