def make_poissoniandouble_fit(self, x_axis, data, estimator, units=None, add_params=None):
""" Perform a double 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,...
"""
double_poissonian_model, params = self.make_poissoniandouble_model()
error, params = estimator(x_axis, data, params)
params = self._substitute_params(initial_params=params,
update_params=add_params)
try:
result = double_poissonian_model.fit(data, x=x_axis, params=params)
except:
self.log.warning('The double 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 = double_poissonian_model.fit(data, x=x_axis, params=params)
# Write the parameters to allow human-readable output to be generated
result_str_dict = OrderedDict()
if units is None:
units = ["arb. units", 'arb. unit']
result_str_dict['Amplitude 1'] = {'value': result.params['p0_amplitude'].value,
'error': result.params['p0_amplitude'].stderr,
'unit': units[0]}
result_str_dict['Event rate 1'] = {'value': result.params['p0_mu'].value,
'error': result.params['p0_mu'].stderr,
'unit': units[1]}
result_str_dict['Amplitude 2'] = {'value': result.params['p1_amplitude'].value,
'error': result.params['p1_amplitude'].stderr,
'unit': units[0]}
result_str_dict['Event rate 2'] = {'value': result.params['p1_mu'].value,
'error': result.params['p1_mu'].stderr,
'unit': units[1]}
result.result_str_dict = result_str_dict
return result
评论列表
文章目录