Blame view
fit_waist.py
1.63 KB
fc102800d better method to ... |
1 |
#!/usr/bin/python |
d0c0cc957 Add files via upload |
2 3 4 5 6 7 8 |
from scipy.optimize import curve_fit import csv, numpy, glob from scipy.special import erf import matplotlib.pyplot as plt '''power function to optimize''' def P(x, Po, Pmax, xo, w): |
c81fde478 replace 4 spaces ... |
9 |
return Po+0.5*Pmax*(1.-erf(2.**0.5*(x-xo)/w)) |
d0c0cc957 Add files via upload |
10 11 12 13 14 15 16 17 18 |
'''load and fit beam section''' files = glob.glob('*.dat') files.sort() data_waist = [] plt.close() fig, p = plt.subplots(2, 1) for f in files: |
c81fde478 replace 4 spaces ... |
19 20 21 22 23 24 |
with open(f, 'r') as dest_f: raw = csv.reader(dest_f, delimiter = '\t', quotechar = '"') data = [value for value in raw] data = numpy.asarray(data, dtype = float) xmes = data[:,0] Pmes = data[:,1] |
d0c0cc957 Add files via upload |
25 |
|
c81fde478 replace 4 spaces ... |
26 |
'''optimization with non-linear least squares method''' |
f808f4392 use more robust t... |
27 |
Ppopt, Pcov = curve_fit(P, xmes, Pmes, method = 'trf') |
fc102800d better method to ... |
28 |
data_waist.append([int(f.split('-')[-1].split('.')[0]), Ppopt[3]]) |
d0c0cc957 Add files via upload |
29 |
|
c81fde478 replace 4 spaces ... |
30 31 32 |
'''plot''' p[0].plot(xmes, Pmes, 'o') p[0].plot(numpy.linspace(xmes[0], xmes[-1], 100), P(numpy.linspace(xmes[0], xmes[-1], 100), *Ppopt)) |
d0c0cc957 Add files via upload |
33 34 35 36 37 38 39 40 41 |
p[0].grid() '''return waist(z) table''' data_waist = numpy.asarray(data_waist, dtype = float) print(data_waist) '''waist function to optimize''' def W(z, w0, z0): |
c81fde478 replace 4 spaces ... |
42 |
return w0*(1.+((z-z0)*1542e-6/(numpy.pi*w0**2))**2)**0.5 |
d0c0cc957 Add files via upload |
43 44 45 46 47 48 |
popt, cov = curve_fit(W, data_waist[:,0], data_waist[:,1]) print(popt[0], popt[1]) p[1].plot(data_waist[:,0], data_waist[:,1], 'bo') p[1].plot(data_waist[:,0], -data_waist[:,1], 'bo') |
f4aa0fa9a min-max for plotting |
49 50 |
p[1].plot(numpy.linspace(min(data_waist[:,0]), max(data_waist[:,0]), 100), W(numpy.linspace(min(data_waist[:,0]), max(data_waist[:,0]), 100), *popt), 'r') p[1].plot(numpy.linspace(min(data_waist[:,0]), max(data_waist[:,0]), 100), -W(numpy.linspace(min(data_waist[:,0]), max(data_waist[:,0]), 100), *popt), 'r') |
d0c0cc957 Add files via upload |
51 |
p[1].grid() |
55e48965f abs |
52 |
plt.show() |