Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
887eb01
First version of Solstis 3 laser driver
Jan 3, 2018
6176618
add methods _get_status and _get_wavelength and _set_wavelength
Jan 4, 2018
8df6f82
additional methods to control the wavelength tuning (locked or not)
Jan 4, 2018
c369cb6
Get started on MFLI driver development
May 14, 2018
5f1953a
Merge branch 'feature/solstis_3_driver' into optics/master
ThomasDescamps May 22, 2018
e9ef635
Merge branch 'master' into feature/ziMFLI_driver
Jul 27, 2018
8922738
Add initial version of FZJ DecaDAC driver
Jul 27, 2018
21a7da1
Merge branch 'master' into feature/FZJ_DecaDAC_driver
Jul 27, 2018
1bab06a
Merge branch 'master' into feature/FZJ_DecaDAC_driver
Sep 3, 2018
32bd93a
Decadac class now derives from VisaInstrument instead of using serial…
lankes-fzj Sep 5, 2018
8b0332f
Remove unnessesary open statement
Sep 26, 2018
f9145f6
Merge branch 'issues/2_fix_dependencies' into feature/FZJ_DecaDAC_driver
Sep 26, 2018
d474c63
Initial Commit. First test on hardware
lankes-fzj Oct 15, 2018
55eea9b
QuPulseInstrument added
lankes-fzj Oct 15, 2018
2ffebf7
Interim status after testing on hardware
Oct 15, 2018
b31fa9c
Interim status
lankes-fzj Oct 18, 2018
92330bd
Integrated qupulse into QCoDeS.
lankes-fzj Nov 8, 2018
3739362
Bug fixes, fine tuning and comments
lankes-fzj Nov 13, 2018
045d51b
Metadata support for QuPulse-Instruments
lankes-fzj Nov 15, 2018
1cfae35
Merge https://github.com/QCoDeS/Qcodes into feature/FZJ_DecaDAC_driver
Nov 21, 2018
c6e1bb0
Fix Harvard DecaDAC terminator
Nov 22, 2018
f935bb6
sc
Nov 22, 2018
72410d4
Fixed the broken read method. This should fix issue #3.
lankes-fzj Nov 26, 2018
f509aa8
This should fix issue #4. It's necessary to set the switch pos before…
lankes-fzj Nov 26, 2018
6fcf662
Addition to issue #4.
lankes-fzj Dec 3, 2018
aa44bca
Calling ask_raw in Decadac._read instead of write_raw. This should fi…
lankes-fzj Dec 3, 2018
eb8a9f1
Changed the default terminator for the FZJ_Decadac driver to "\n" ins…
lankes-fzj Dec 3, 2018
008c902
More comments
lankes-fzj Dec 4, 2018
95ab62f
Added "run_program"-callback to "BufferedLoop", so the user can run t…
lankes-fzj Dec 13, 2018
d483ad6
First try to work with RepetitionPTs in qcodes
lankes-fzj Jan 22, 2019
b2ce30e
FZJ_Decadac: Removed the read-function and merged it into the write-f…
lankes-fzj Jan 28, 2019
7db4f3f
Merge branch 'optics/master'
ThomasDescamps Feb 1, 2019
74a53d3
Merge https://github.com/QCoDeS/Qcodes into feature/FZJ_DecaDAC_driver
Feb 8, 2019
8927fe2
Merge branch 'feature/FZJ_DecaDAC_driver' of https://github.com/qutec…
Feb 8, 2019
de5e523
qupulse_instrument: run_program_cmd is an attribute of the instrument…
lankes-fzj Feb 12, 2019
d877bce
Merge branch 'feature/qctoolkit-integration' of github.com:qutech/Qco…
lankes-fzj Feb 12, 2019
18286b3
- Added repeat function to SweepFixedValues
lankes-fzj Feb 12, 2019
68ca253
Removed debugging output in loops.py
lankes-fzj Feb 13, 2019
a55584e
Added classes 'Repetition' and 'BufferedRepetition' and functions 're…
lankes-fzj Feb 14, 2019
a22a85f
Merge branch 'master' of github.com:qutech/Qcodes into feature/qctool…
lankes-fzj Mar 11, 2019
8d68cb8
Merge branch 'feature/qctoolkit-integration' of github.com:qutech/Qco…
lankes-fzj Mar 11, 2019
62f5d05
Renamed BufferedReadableParameter to BufferedReadableArrayParameter
lankes-fzj Mar 11, 2019
8f3dff2
Merge branch 'feature/qctoolkit-integration' of github.com:qutech/Qco…
lankes-fzj Mar 11, 2019
5707a58
Implementation of buffered ramping for the Decadac, so it can be used…
lankes-fzj Mar 13, 2019
ce641f6
Bug fix in BufferedActiveLoop (loops.py).
lankes-fzj Mar 14, 2019
991c5d8
Merge branch 'feature/qctoolkit-integration' of github.com:qutech/Qco…
lankes-fzj Mar 14, 2019
28232a2
Changes in the buffered acquisition. Bug fixes in the Decadac class.
lankes-fzj Mar 14, 2019
28ecebc
Merge branch 'master' of https://github.com/qutech/Qcodes
ThomasDescamps Mar 29, 2019
34c53b6
Merge https://github.com/QCoDeS/Qcodes
Apr 25, 2019
93e2b4c
Fix baud rate
May 21, 2019
66adae6
Fix hard coded channel numbers
May 21, 2019
06bd535
Merge pull request #8 from qutech/issues/7_QDac_init_error
qutech-lab May 21, 2019
3ce14ae
Merge https://github.com/QCoDeS/Qcodes
Jul 3, 2019
b080875
Merge https://github.com/QCoDeS/Qcodes into feature/FZJ_DecaDAC_driver
Mar 11, 2021
e256f3e
Merge branch 'feature/FZJ_DecaDAC_driver'
Mar 11, 2021
edef389
Merge branch 'QCoDeS:master' into master
thangleiter Jan 27, 2022
7550a70
Merge branch 'QCoDeS:master' into master
qutech-lab May 6, 2022
4e5e0ac
Merge branch 'main' into main_qutech
thangleiter Oct 28, 2024
75fdf27
Bump types-setuptools from 75.2.0.20241025 to 75.8.0.20250110
dependabot[bot] Jan 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
144 changes: 144 additions & 0 deletions qcodes/instrument_drivers/msquared/solstis_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
import socket
import json
import threading
import time
import random

from qcodes.instrument.ip import IPInstrument
from qcodes.utils.validators import Numbers, Ints, Enum, MultiType, Anything, Strings


class Solstis3(IPInstrument):
def __init__(self, name, address=None, port=None, timeout=5, controller_address=None,
persistent=True, write_confirmation=True, testing=False,**kwargs):

super().__init__(name, address=address, port=port, timeout=timeout,
persistent=False, write_confirmation=write_confirmation, terminator='', **kwargs)

self._controller_address = controller_address

self.set_persistent(persistent)

self.add_parameter('wavelength_m',
get_cmd = self._get_wavelength,
set_cmd = self._set_wave_m,
label = 'Wavelength',
unit = 'nm',
vals = Numbers(min_value = 700, max_value = 1000),
docstring = 'wavelength locked')

self.add_parameter('wavelength_t',
get_cmd = self._get_wavelength,
set_cmd = self._move_wave_t,
label= 'Wavelength',
unit = 'nm',
vals = Numbers(min_value = 700, max_value = 1000),
docstring = 'wavelength not locked')

self.add_parameter('lock',
get_cmd = self._is_wave_locked_m,
set_cmd = self._lock_wave_m,
vals = Enum(True,False))

@staticmethod
def _generate_transmission_id():
return random.randint(1, 2 ** 14)

def _connect(self):
if self._controller_address is None:
raise RuntimeError('No Controller address')

super()._connect()
answer = self.send_message('start_link', {'ip_address': self._controller_address})

if answer['status'] != 'ok':
super()._disconnect()
raise RuntimeError('Connection to Solstis failed', answer)
else:
print('Connection to Solstis successful')

########## tuning WITHOUT solstis ##########
def _move_wave_t(self,wavelength):
parameters = {'wavelength':[wavelength]}
self.send_message('move_wave_t',parameters)

def poll_move_wave_t(self):
current_status = self.send_message('poll_move_wave_t')
inProgress = False
if current_status['status'][0] == 1:
inProgress = True
current_wavelength = current_status['current_wavelength'][0]
return inProgress, current_wavelength

def stop_move_wave_t(self):
self.send_message('stop_move_wave_t')
time.sleep(0.5) #delay between stop cmd sent and effective stop -> read final wavelength
return self._get_wavelength()

########## tuning WITH solstis ##########
def _set_wave_m(self, wavelength):
parameters = {'wavelength':[wavelength]}
self.send_message('set_wave_m',parameters)

def poll_wave_m(self):
current_status = self.send_message('poll_wave_m')
inProgress = False
if current_status['status'][0] == 1:
inProgress = True
current_wavelength = current_status['current_wavelength'][0]
lock_status = current_status['lock_status'][0]
return inProgress, current_wavelength, lock_status

def stop_wave_m(self):
stop_status = self.send_message('stop_wave_m')
return stop_status['current_wavelength'][0]

def _lock_wave_m(self,will_be_locked):
if will_be_locked:
parameters = {'operation':'on'}
else:
parameters = {'operation':'off'}
locking_status = self.send_message('lock_wave_m',parameters)

def _is_wave_locked_m(self):
onProgress, current_wavelength, lock_status = self.poll_wave_m()
return lock_status

######### read STATUS #########
def _get_wavelength(self):
status = self.get_status()
return status['wavelength'][0]

def get_status(self):
return self.send_message('get_status')

######### ASK command #########
def send_message(self, op, parameters=None, verbose=False):
transmission_id = self._generate_transmission_id()

query = {'message':
{'transmission_id': [transmission_id],
'op': op}}
if parameters:
query['message']['parameters'] = parameters

query_string = json.dumps(query, separators=(',', ':'))
if verbose:
print('query:', query_string)
answer_string = self.ask_raw(query_string)
if verbose:
print('answer:', answer_string)
answer = json.loads(answer_string)

if answer['message']['transmission_id'] != [transmission_id]:
raise RuntimeError('Invalid transmission ID', answer)

return answer['message']['parameters']

def snapshot_base(self, update=False):
snapshot = super().snapshot_base(update)

snapshot['controller_address'] = self._controller_address

return snapshot

Loading