In [ ]:
import numpy as np
import matplotlib.pyplot as pl
pl.style.use('apw-notebook')
%matplotlib inline
import scipy.optimize as so
In [ ]:
focus_fwhm = [
(2520,3.5,0.2),
(2515,2.8,0.01),
(2510,2.4,0.01),
(2505,3.00,0.01)
]
focus_fwhm = np.array(focus_fwhm, dtype=[('focus',float),('fwhm',float),('fwhm_err',float)])
In [ ]:
def model(p,focus):
return p[0]*(focus-p[3])**2 + p[1]*(focus-p[3]) + p[2]
def errfunc(p,focus,fwhm,fwhm_err):
return (fwhm - model(p,focus))/fwhm_err
In [ ]:
grid = np.linspace(2500,2520,100)
pl.plot(grid, model((1e-2,1e-2,focus_fwhm['fwhm'].min(),np.median(focus_fwhm['focus'])),grid))
pl.plot(focus_fwhm['focus'], focus_fwhm['fwhm'], ls='none', marker='o')
In [ ]:
popt,ier = so.leastsq(errfunc, x0=(1E-2,1E-2,2.,2510),
args=(focus_fwhm['focus'], focus_fwhm['fwhm'], focus_fwhm['fwhm_err']))
In [ ]:
grid = np.linspace(2500,2520,1024)
pl.plot(grid, model(popt,grid))
pl.plot(focus_fwhm['focus'], focus_fwhm['fwhm'], ls='none', marker='o')
In [ ]:
idx = model(popt,grid).argmin()
print("The focus you should use is: {}".format(int(grid[idx])))
In [ ]: