Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Driver for Stanford SR570 Current Amplifier #308

Merged
Merged
Changes from all commits
Commits
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
278 changes: 278 additions & 0 deletions src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,278 @@
from typing import Any, Optional

Check warning on line 1 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L1

Added line #L1 was not covered by tests

import qcodes.validators as vals
from pyvisa.constants import Parity, StopBits
from pyvisa.resources.serial import SerialInstrument
from pyvisa.resources.tcpip import TCPIPSocket
from qcodes.instrument.visa import VisaInstrument
from qcodes.parameters import ParameterBase, create_on_off_val_mapping

Check warning on line 8 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L3-L8

Added lines #L3 - L8 were not covered by tests


class SR570(VisaInstrument):

Check warning on line 11 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L11

Added line #L11 was not covered by tests
"""
QCoDeS driver for the Stanford Research Systems SR570 Low-Noise Current Preamplifier.

This is a real driver and it will talk to your instrument (as opposed to SR560 from QCoDeS).

It *can't listen to it*, so make sure that you either reset or set parameters before reading them.

(Resetting the device will update the parameters' value with their reset value as per documentation.)

The device can also be accessed via TCP/IP if exposed via something like:

.. code-block:: console

socat /dev/ttyUSB0,echo=0,b9600,cstopb=1,parenb=0,raw tcp-listen:20570,reuseaddr,nodelay

"""

def __init__(self, name: str, address: str, **kwargs: Any):
super().__init__(name, address, **kwargs)
if isinstance(self.visa_handle, TCPIPSocket):

Check warning on line 31 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L29-L31

Added lines #L29 - L31 were not covered by tests
# allow connection to remote serial device over TCP/IP address
self.visa_handle.write_termination = "\r\n"
self.visa_handle.read_termination = "" # but there's no read

Check warning on line 34 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L33-L34

Added lines #L33 - L34 were not covered by tests
else:
assert isinstance(self.visa_handle, SerialInstrument)
serial: SerialInstrument = self.visa_handle

Check warning on line 37 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L36-L37

Added lines #L36 - L37 were not covered by tests
# 9600 Baud DCE, 8 bit, no parity, 2 stop bits
serial.baud_rate = 9600
serial.parity = Parity.none
serial.stop_bits = StopBits.two
serial.write_termination = "\r\n"
serial.read_termination = "" # but there's no read

Check warning on line 43 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L39-L43

Added lines #L39 - L43 were not covered by tests

self.connect_message()

Check warning on line 45 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L45

Added line #L45 was not covered by tests

# fmt:off
sensitivity = [

Check warning on line 48 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L48

Added line #L48 was not covered by tests
1e-12, 2e-12, 5e-12,
10e-12, 20e-12, 50e-12,
100e-12, 200e-12, 500e-12,
1e-9, 2e-9, 5e-9,
10e-9, 20e-9, 50e-9,
100e-9, 200e-9, 500e-9,
1e-6, 2e-6, 5e-6,
10e-6, 20e-6, 50e-6,
100e-6, 200e-6, 500e-6,
1e-3
]

input_offset_current = [

Check warning on line 61 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L61

Added line #L61 was not covered by tests
1e-12, 2e-12, 5e-12,
10e-12, 20e-12, 50e-12,
100e-12, 200e-12, 500e-12,
1e-9, 2e-9, 5e-9,
10e-9, 20e-9, 50e-9,
100e-9, 200e-9, 500e-9,
1e-6, 2e-6, 5e-6,
10e-6, 20e-6, 50e-6,
100e-6, 200e-6, 500e-6,
1e-3, 2e-3, 5e-3
]

filter_type = [

Check warning on line 74 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L74

Added line #L74 was not covered by tests
"6db_highpass",
"12db_highpass",
"6db_bandpass",
"6db_lowpass",
"12db_lowpass",
"none",
]

filter_freq = [

Check warning on line 83 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L83

Added line #L83 was not covered by tests
0.03,
0.1, 0.3,
1, 3,
10, 30,
100, 300,
1e+3, 3e+3,
10e+3, 30e+3,
100e+3, 300e+3,
1e+6,
]

gain_modes = [

Check warning on line 95 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L95

Added line #L95 was not covered by tests
"low_noise",
"high_bandwidth",
"low_drift"
]

# fmt:on
on_off_val_mapping = create_on_off_val_mapping(on_val=1, off_val=0)

Check warning on line 102 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L102

Added line #L102 was not covered by tests

self._reset_defaults: dict[str, Any] = {}

Check warning on line 104 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L104

Added line #L104 was not covered by tests

self.add_parameter(

Check warning on line 106 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L106

Added line #L106 was not covered by tests
"sensitivity",
get_cmd=None,
set_cmd="SENS {}",
val_mapping={scale: n for n, scale in enumerate(sensitivity)},
unit="A/V",
)

self._reset_defaults["sensitivity"] = 1e-6

Check warning on line 114 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L114

Added line #L114 was not covered by tests

self.add_parameter(

Check warning on line 116 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L116

Added line #L116 was not covered by tests
"sensitivity_uncalibrated_mode",
get_cmd=None,
set_cmd="SUCM {}",
val_mapping=create_on_off_val_mapping(on_val=1, off_val=0),
)

self._reset_defaults["sensitivity_uncalibrated_mode"] = False

Check warning on line 123 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L123

Added line #L123 was not covered by tests

self.add_parameter(

Check warning on line 125 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L125

Added line #L125 was not covered by tests
"sensitivity_uncalibrated_vernier",
get_cmd=None,
set_cmd="SUCV {}",
vals=vals.Ints(0, 100),
unit="%",
)

self.add_parameter(

Check warning on line 133 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L133

Added line #L133 was not covered by tests
"input_offset_current_status",
get_cmd=None,
set_cmd="IOON {}",
val_mapping=on_off_val_mapping,
)

self._reset_defaults["input_offset_current_status"] = False

Check warning on line 140 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L140

Added line #L140 was not covered by tests

self.add_parameter(

Check warning on line 142 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L142

Added line #L142 was not covered by tests
"input_offset_current_level",
get_cmd=None,
set_cmd="IOLV {}",
val_mapping={scale: n for n, scale in enumerate(input_offset_current)},
unit="A",
)

self._reset_defaults["input_offset_current_level"] = 1e-12

Check warning on line 150 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L150

Added line #L150 was not covered by tests

self.add_parameter(

Check warning on line 152 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L152

Added line #L152 was not covered by tests
"input_offset_current_sign",
get_cmd=None,
set_cmd="IOSN {}",
val_mapping={+1: 0, -1: 1},
)

self._reset_defaults["input_offset_current_sign"] = +1

Check warning on line 159 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L159

Added line #L159 was not covered by tests

self.add_parameter(

Check warning on line 161 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L161

Added line #L161 was not covered by tests
"input_offset_uncalibrated_mode",
get_cmd=None,
set_cmd="IOUC {}",
val_mapping=on_off_val_mapping,
)

self._reset_defaults["input_offset_uncalibrated_mode"] = False

Check warning on line 168 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L168

Added line #L168 was not covered by tests

self.add_parameter(

Check warning on line 170 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L170

Added line #L170 was not covered by tests
"input_offset_uncalibrated_vernier",
get_cmd=None,
set_cmd="IOUV {}",
vals=vals.MultiTypeAnd(
vals.Numbers(-100, 100), vals.PermissiveMultiples(0.1)
),
set_parser=lambda v: int(v * 10),
unit="%",
)

self.add_parameter(

Check warning on line 181 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L181

Added line #L181 was not covered by tests
"bias_voltage_status",
get_cmd=None,
set_cmd="BSON {}",
val_mapping=on_off_val_mapping,
)

self._reset_defaults["bias_voltage_status"] = False

Check warning on line 188 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L188

Added line #L188 was not covered by tests

self.add_parameter(

Check warning on line 190 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L190

Added line #L190 was not covered by tests
"bias_voltage",
get_cmd=None,
set_cmd="BSLV {}",
vals=vals.Numbers(-5.0, +5.0),
set_parser=lambda v: int(v * 1000),
unit="V",
)

self._reset_defaults["bias_voltage"] = 0.0

Check warning on line 199 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L199

Added line #L199 was not covered by tests

self.add_parameter(

Check warning on line 201 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L201

Added line #L201 was not covered by tests
"filter_type",
get_cmd=None,
set_cmd="FLTT {}",
val_mapping={fltt: n for n, fltt in enumerate(filter_type)},
)

self._reset_defaults["filter_type"] = "none"

Check warning on line 208 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L208

Added line #L208 was not covered by tests

self.add_parameter(

Check warning on line 210 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L210

Added line #L210 was not covered by tests
"filter_lowpass_frequency",
get_cmd=None,
set_cmd="LFRQ {}",
val_mapping={f: n for n, f in enumerate(filter_freq)},
unit="Hz",
)

self._reset_defaults["filter_lowpass_frequency"] = 1e6

Check warning on line 218 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L218

Added line #L218 was not covered by tests

self.add_parameter(

Check warning on line 220 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L220

Added line #L220 was not covered by tests
"filter_highpass_frequency",
get_cmd=None,
set_cmd="HFRQ {}",
val_mapping={f: n for n, f in enumerate(filter_freq[:12])},
unit="Hz",
)

self._reset_defaults["filter_highpass_frequency"] = 0.03

Check warning on line 228 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L228

Added line #L228 was not covered by tests

self.add_function("reset_overload_condition", call_cmd="ROLD")

Check warning on line 230 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L230

Added line #L230 was not covered by tests

self.add_parameter(

Check warning on line 232 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L232

Added line #L232 was not covered by tests
"gain_mode",
get_cmd=None,
set_cmd="GNMD {}",
val_mapping={mode: n for n, mode in enumerate(gain_modes)},
)

self._reset_defaults["gain_mode"] = gain_modes[0]

Check warning on line 239 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L239

Added line #L239 was not covered by tests

self.add_parameter(

Check warning on line 241 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L241

Added line #L241 was not covered by tests
"invert", get_cmd=None, set_cmd="INVT {}", val_mapping=on_off_val_mapping
)

self._reset_defaults["invert"] = False

Check warning on line 245 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L245

Added line #L245 was not covered by tests

self.add_parameter(

Check warning on line 247 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L247

Added line #L247 was not covered by tests
"blank", get_cmd=None, set_cmd="BLNK {}", val_mapping=on_off_val_mapping
)

self._reset_defaults["blank"] = False

Check warning on line 251 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L251

Added line #L251 was not covered by tests

def reset(self) -> None:
self.write("*RST")

Check warning on line 254 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L253-L254

Added lines #L253 - L254 were not covered by tests
p: ParameterBase
for p in self.parameters.values():
if not hasattr(p, "cache"):
continue
p.cache.invalidate()

Check warning on line 259 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L256-L259

Added lines #L256 - L259 were not covered by tests

for name, value in self._reset_defaults.items():
p = self.parameters[name]
if not hasattr(p, "cache"):
continue
p.cache.set(value)

Check warning on line 265 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L261-L265

Added lines #L261 - L265 were not covered by tests

def get_idn(self) -> dict[str, Optional[str]]:
vendor = "Stanford Research Systems"
model = "SR570"
serial = None
firmware = None

Check warning on line 271 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L267-L271

Added lines #L267 - L271 were not covered by tests

return {

Check warning on line 273 in src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes_contrib_drivers/drivers/StanfordResearchSystems/SR570.py#L273

Added line #L273 was not covered by tests
"vendor": vendor,
"model": model,
"serial": serial,
"firmware": firmware,
}