In [1]:
from lmfit import Parameters
import matplotlib
import matplotlib.pyplot as plt
from scipy.interpolate import InterpolatedUnivariateSpline
from scipy.signal import wiener, filtfilt, butter, gaussian, freqz
from scipy.ndimage import filters
from core.util.units import compute_dft
In [2]:
def poissonian_testing():
start=0
stop=30
mu=8
num_points=1000
x = np.array(np.linspace(start, stop, num_points))
mod, params = fitlogic.make_poissonian_model()
print('Parameters of the model',mod.param_names)
p=Parameters()
p.add('mu',value=mu)
p.add('amplitude',value=200.)
data_noisy=(mod.eval(x=x,params=p) *
np.array((1+0.001*np.random.normal(size=x.shape) *
p['amplitude'].value ) ) )
print('all int',all(isinstance(item, (np.int32,int, np.int64)) for item in x))
print('int',isinstance(x[1], int),float(x[1]).is_integer())
print(type(x[1]))
#make the filter an extra function shared and usable for other functions
gaus=gaussian(10,10)
data_smooth = filters.convolve1d(data_noisy, gaus/gaus.sum(),mode='mirror')
result = fitlogic.make_poissonian_fit(x, data_noisy, estimator=fitlogic.estimate_poissonian)
print(result.fit_report())
plt.figure()
plt.plot(x, data_noisy, '-b', label='noisy data')
plt.plot(x, data_smooth, '-g', label='smoothed data')
plt.plot(x,result.init_fit,'-y', label='initial values')
plt.plot(x,result.best_fit,'-r',linewidth=2.0, label='fit')
plt.xlabel('counts')
plt.ylabel('occurences')
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, ncol=2, mode="expand", borderaxespad=0.)
plt.show()
In [3]:
poissonian_testing()
In [4]:
def double_poissonian_testing():
""" Testing of double poissonian with self created data.
First version of double poissonian fit."""
start=100
stop=300
num_points=int((stop-start)+1)*100
x = np.linspace(start, stop, num_points)
# double poissonian
mod,params = fitlogic.make_poissoniandouble_model()
print('Parameters of the model',mod.param_names)
parameter=Parameters()
parameter.add('p0_mu',value=200)
parameter.add('p1_mu',value=240)
parameter.add('p0_amplitude',value=1)
parameter.add('p1_amplitude',value=1)
data_noisy = ( np.array(mod.eval(x=x,params=parameter)) *
np.array((1+0.2*np.random.normal(size=x.shape) )*
parameter['p1_amplitude'].value) )
#make the filter an extra function shared and usable for other functions
gaus=gaussian(10,10)
data_smooth = filters.convolve1d(data_noisy, gaus/gaus.sum(),mode='mirror')
result = fitlogic.make_poissoniandouble_fit(x, data_noisy, estimator=fitlogic.estimate_poissoniandouble)
print(result.fit_report())
plt.figure()
plt.plot(x, data_noisy, '-b', label='noisy data')
plt.plot(x, data_smooth, '-g', label='smoothed data')
plt.plot(x,result.init_fit,'-y', label='initial values')
plt.plot(x,result.best_fit,'-r',linewidth=2.0, label='fit')
plt.xlabel('counts')
plt.ylabel('occurences')
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, ncol=2, mode="expand", borderaxespad=0.)
plt.show()
In [5]:
double_poissonian_testing()
In [ ]: