Commit b869c4f31d547466607b3f761d0f9f3d7e66742c

Authored by bmarechal
1 parent c437a22764
Exists in master

more explicit display of results

Showing 1 changed file with 10 additions and 3 deletions Inline Diff

#!/usr/bin/python 1 1 #!/usr/bin/python
2 2
from scipy.optimize import curve_fit 3 3 from scipy.optimize import curve_fit
import csv, numpy, glob 4 4 import csv, numpy, glob
from scipy.special import erf 5 5 from scipy.special import erf
import matplotlib.pyplot as plt 6 6 import matplotlib.pyplot as plt
7 7
'''power function to optimize''' 8 8 '''power function to optimize'''
def P(x, Po, Pmax, xo, w): 9 9 def P(x, Po, Pmax, xo, w):
return Po+0.5*Pmax*(1.-erf(2.**0.5*(x-xo)/w)) 10 10 return Po+0.5*Pmax*(1.-erf(2.**0.5*(x-xo)/w))
11 11
12 12
'''load and fit beam section''' 13 13 '''load and fit beam section'''
files = glob.glob('*.dat') 14 14 files = glob.glob('*.dat')
files.sort() 15 15 files.sort()
data_waist = [] 16 16 data_waist = []
plt.close() 17 17 plt.close()
fig, p = plt.subplots(2, 1) 18 18 fig, p = plt.subplots(2, 1)
for f in files: 19 19 for f in files:
with open(f, 'r') as dest_f: 20 20 with open(f, 'r') as dest_f:
raw = csv.reader(dest_f, delimiter = '\t', quotechar = '"') 21 21 raw = csv.reader(dest_f, delimiter = '\t', quotechar = '"')
data = [value for value in raw] 22 22 data = [value for value in raw]
data = numpy.asarray(data, dtype = float) 23 23 data = numpy.asarray(data, dtype = float)
xmes = data[:,0] 24 24 xmes = data[:,0]
Pmes = data[:,1] 25 25 Pmes = data[:,1]
26 26
'''optimization with non-linear least squares method''' 27 27 '''optimization with non-linear least squares method'''
Ppopt, Pcov = curve_fit(P, xmes, Pmes, method = 'trf') 28 28 Ppopt, Pcov = curve_fit(P, xmes, Pmes, method = 'trf')
data_waist.append([int(f.split('-')[-1].split('.')[0]), Ppopt[3]]) 29 29 z = int(f.split('-')[-1].split('.')[0])
30 w = Ppopt[3]
31 w_sig = numpy.sqrt(numpy.diag(Pcov))[3]
32 data_waist.append([z, w, w_sig])
33 print('z = %.3f mm\t w = %.3f mm (+-%.3f mm)'%(z, w, 1.96*w_sig))
30 34
'''plot''' 31 35 '''plot'''
p[0].plot(xmes, Pmes, 'o') 32 36 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)) 33 37 p[0].plot(numpy.linspace(xmes[0], xmes[-1], 100), P(numpy.linspace(xmes[0], xmes[-1], 100), *Ppopt))
34 38
p[0].grid() 35 39 p[0].grid()
36 40
'''return waist(z) table''' 37 41 '''return waist(z) table'''
data_waist = numpy.asarray(data_waist, dtype = float) 38 42 data_waist = numpy.asarray(data_waist, dtype = float)
print(data_waist) 39
40 43
'''waist function to optimize''' 41 44 '''waist function to optimize'''
def W(z, w0, z0): 42 45 def W(z, w0, z0):
return w0*(1.+((z-z0)*1542e-6/(numpy.pi*w0**2))**2)**0.5 43 46 return w0*(1.+((z-z0)*1542e-6/(numpy.pi*w0**2))**2)**0.5
44 47
popt, cov = curve_fit(W, data_waist[:,0], data_waist[:,1]) 45 48 popt, cov = curve_fit(W, data_waist[:,0], data_waist[:,1])
print(popt[0], popt[1]) 46 49 w0 = popt[0]
50 w0_sig = numpy.sqrt(numpy.diag(cov))[0]
51 z0 = popt[1]