-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPyTai.py
executable file
·139 lines (112 loc) · 4.22 KB
/
PyTai.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
class PyTai:
"""Create a class for the Spectra-Physics MaiTai laser"""
def __init__(self,port,baudrate=38400,bits=8,parity='N',stop_bits=1,timeout=0,xonxoff=1):
import serial
self.ser = serial.Serial(port, baudrate, bits, parity, stop_bits, timeout, xonxoff)
self.port=self.ser.port
self.baudrate=self.ser.baudrate
self.bits=self.ser.bytesize
self.parity=self.ser.parity
self.stop_bits=self.ser.stopbits
self.timeout=self.ser.timeout
self.xonxoff=self.ser.xonxoff
def query(self,command):
__instr_response=''
self.ser.open()
self.ser.write("{c}\n".format(c=command).encode('utf-8'))
__instr_response=self.ser.readall()
self.ser.close()
return __instr_response
# Write-only commands
def off(self):
self.ser.open()
self.ser.write('SAVE\n'.encode('utf-8'))
self.ser.write('OFF\n'.encode('utf-8'))
self.ser.close()
def on(self):
self.ser.open()
self.ser.write('ON\n'.encode('utf-8'))
self.ser.close()
def save_status(self):
self.ser.open()
self.ser.write('SAVE\n'.encode('utf-8'))
self.ser.close()
def set_wavelength(self,wav):
import time
self.ser.open()
self.ser.write('WAVELENGTH {l}\n'.format(l=wav).encode('utf-8'))
self.ser.close()
recentWav = self.recent_wavelength_commanded()
while True:
curWav = self.MaiTai_wavelength()
print(curWav.decode("ascii"))
if curWav == recentWav:
print(curWav.decode("ascii"), 'Done')
break
time.sleep(3)
print('Yup, Done!!')
def shutter_off(self):
self.ser.open()
self.ser.write('SHUTTER 0\n'.encode('utf-8'))
self.ser.close()
def shutter_on(self):
self.ser.open()
self.ser.write('SHUTTER 1\n'.encode('utf-8'))
self.ser.close()
# Query commands
def recent_wavelength_commanded(self):
return self.query('WAVelength?')
def wavelength_range(self):
maxWav = self.query('WAVelength:MAX?')
minWav = self.query('WAVelength:MIN?')
return minWav, maxWav
def idYourself(self):
return self.query('*IDN?')
def shutter_status(self):
import time
time.sleep(2)
shutStat = self.query('SHUTter?')
if shutStat.decode("ascii") == "0":
print('Shutter Closed')
else:
print('Shutter Open')
return shutStat
## The pump laser: Millenia
def pump_laser_which_mode(self):
return self.query('MODE?')
def pump_laser_history(self):
return self.query('PLASER:AHISTORY?')
def pump_laser_errcode(self):
return self.query('PLASER:ERRCODE?')
def pump_laser_current_commanded(self):
return self.query('PLASER:CURRENT?')
def pump_laser_power_commanded(self):
return self.query('PLASER:POWER?')
def pump_laser_diodes_currents(self):
'''Typical response may be “75.1%<LF>”'''
__d1Curr = self.query('READ:PLASer:DIODe1:CURRent?')
__d2Curr = self.query('READ:PLASer:DIODe2:CURRent?')
return __d1Curr, __d2Curr
def pump_laser_diodes_temps(self):
'''Typical response may be “20.5<LF>”'''
__d1Temp = self.query('READ:PLASer:DIODe1:TEMPerature?')
__d2Temp = self.query('READ:PLASer:DIODe2:TEMPerature?')
return __d1Temp, __d2Temp
def pump_laser_current_actual(self):
return self.query('READ:PLASer:PCURrent?')
def pump_laser_power_actual(self):
return self.query('READ:PLASer:POWer?')
def pump_laser_SHG(self):
return self.query('READ:PLASer:SHGS?')
## The MaiTai laser
def MaiTai_is_modelocked(self):
return self.query('CONTROL:MLENABLE?')
def MaiTai_history(self):
return self.query('READ:AHISTORY?')
def is_warmed_up(self):
'''response is in the form of b'x%'. Laser can be turned on when the response is b'100%' '''
return self.query('READ:PCTWARMEDUP?')
def MaiTai_output_power(self):
return self.query('READ:POWer?')
def MaiTai_wavelength(self):
return self.query('READ:WAVelength?')