Commit d0c0cc957820b7887d568b55fa5f7acaf2ab64df

Authored by mer0m
Committed by GitHub
1 parent 00bf9bcbf7
Exists in master

Add files via upload

Showing 2 changed files with 230 additions and 0 deletions Inline Diff

File was created 1 from scipy.optimize import curve_fit
2 import csv, numpy, glob
3 from scipy.special import erf
4 import matplotlib.pyplot as plt
5
6 '''power function to optimize'''
7 def P(x, Po, Pmax, xo, w):
8 return Po+0.5*Pmax*(1.-erf(2.**0.5*(x-xo)/w))
9
10
11 '''load and fit beam section'''
12 files = glob.glob('*.dat')
13 files.sort()
14 data_waist = []
15 plt.close()
16 fig, p = plt.subplots(2, 1)
17 for f in files:
18 with open(f, 'r') as dest_f:
19 raw = csv.reader(dest_f, delimiter = '\t', quotechar = '"')
20 data = [value for value in raw]
21 data = numpy.asarray(data, dtype = float)
22 xmes = data[:,0]
23 Pmes = data[:,1]
24
25 '''optimization with non-linear least squares method'''
26 Ppopt, Pcov = curve_fit(P, xmes, Pmes)
27 data_waist.append([int(f[-7:-4]), Ppopt[3]])
28
29 '''plot'''
30 p[0].plot(xmes, Pmes, 'o')
31 p[0].plot(numpy.linspace(xmes[0], xmes[-1], 100), P(numpy.linspace(xmes[0], xmes[-1], 100), *Ppopt))
32
33 p[0].grid()
34
35 '''return waist(z) table'''
36 data_waist = numpy.asarray(data_waist, dtype = float)
37 print(data_waist)
38
39 '''waist function to optimize'''
40 def W(z, w0, z0):
41 return w0*(1.+((z-z0)*1542e-6/(numpy.pi*w0**2))**2)**0.5
File was created 1 #!/usr/bin/env python
2
3 import argparse, time, os
4 import matplotlib.pyplot as plt
5
6 #==============================================================================
7
8 # Path
9 PATH = os.getcwd()
10 # File footer
11 OFILENAME = '130'
12
13 #==============================================================================
14
15 def parse():
16 """
17 Specific parsing procedure for transfering data from Thorlabs PM100D.
18 :returns: populated namespace (parser)
19 """
20 parser = argparse.ArgumentParser(description = 'Acquire data from Thorlabs PM100D',
21 epilog = 'Example: \'./pm100d.py -st 10 -o toto\' logs PM100D every 10 seconds to output file YYYYMMDD-HHMMSS-toto.dat')
22
23 parser.add_argument('-p',
24 action='store',
25 dest='path',
26 default=PATH,
27 help='Absolute path (default '+PATH+')')
28
29 parser.add_argument('-o',
30 action='store',
31 dest='ofile',
32 default=OFILENAME,
33 help='Output data filename (default '+OFILENAME+')')
34
35 args = parser.parse_args()
36 return args
37
38 #==============================================================================
39
40 class usbtmc:
41 def __init__(self, device):
42 self.device = device
43 self.FILE = os.open(device, os.O_RDWR)
44
45 def write(self, command):
46 os.write(self.FILE, command);
47
48 def read(self, length = 4000):
49 return os.read(self.FILE, length)
50
51 def getName(self):
52 self.write("*IDN?")
53 return self.read(300)
54
55 def sendReset(self):
56 self.write("*RST")
57
58 #==============================================================================
59
60 class instrument:
61 """Class to control a SCPI compatible instrument"""
62 def __init__(self, device):
63 print 'Connecting to device %s...' %device
64 self.meas = usbtmc(device)
65 self.name = self.meas.getName()
66 print self.name
67 print ' --> Ok'
68
69 def write(self, command):
70 """Send an arbitrary command directly to the scope"""
71 self.meas.write(command)
72
73 def read(self, command):
74 """Read an arbitrary amount of data directly from the scope"""
75 return self.meas.read(command)
76
77 def reset(self):
78 """Reset the instrument"""
79 self.meas.sendReset()
80
81 def value(self):
82 self.write('MEAS?')
83 return self.read(300)
84
85 #==============================================================================
86
87 def acqu_PM100D(instrument, path, ofile):
88
89 t0 = time.time()
90 filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(t0)) + '-' + ofile + '.dat'
91 print('Opening %s' %filename)
92 data_file = open(filename, 'wr', 0)
93 dx = 0.
94
95 xmes = []
96 Pmes = []
97 plt.ion()
98 fig = plt.figure()
99 ax1 = fig.add_subplot(111)
100 line1, = ax1.plot(xmes, Pmes, 'o')
101
102 # Infinite loop
103 while True:
104 try:
105 keypressed = raw_input("Press Enter to continue...\n")
106
107 if keypressed=='':
108 # Power values
109 sensors_values = instrument.value()
110 sensors_values = sensors_values.replace('E', 'e')
111 string = "%f\t%s" % (dx , sensors_values)
112 data_file.write(string) # Write in a file
113 print(string)
114
115 xmes.append(dx)
116 Pmes.append(float(sensors_values))
117
118 dx = dx + 0.05
119
120 elif keypressed.isdigit():
121 print('Closing %s' %filename)
122 data_file.close()
123 t0 = time.time()
124 filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(t0)) + '-' + keypressed + '.dat'
125 print('Opening %s' %filename)
126 data_file = open(filename, 'wr', 0)
127 dx = 0.
128
129 xmes = []
130 Pmes = []
131 line1, = ax1.plot(xmes, Pmes, 'o')
132
133 else:
134 raise KeyboardInterrupt
135