qcdrivers 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qcdrivers/__init__.py +9 -0
- qcdrivers/basel/__init__.py +12 -0
- qcdrivers/basel/amplifiers/__init__.py +10 -0
- qcdrivers/basel/amplifiers/amplifiers.py +107 -0
- qcdrivers/basel/amplifiers/dummy.py +136 -0
- qcdrivers/basel/dacs/__init__.py +9 -0
- qcdrivers/basel/dacs/dacs.py +1497 -0
- qcdrivers/basel/dacs/dacs_controller.py +2132 -0
- qcdrivers/bluefors/__init__.py +7 -0
- qcdrivers/bluefors/fridges/README.md +42 -0
- qcdrivers/bluefors/fridges/__init__.py +7 -0
- qcdrivers/bluefors/fridges/fridges.py +384 -0
- qcdrivers/buffered/__init__.py +26 -0
- qcdrivers/buffered/_typing.py +30 -0
- qcdrivers/buffered/base.py +90 -0
- qcdrivers/buffered/basel/__init__.py +5 -0
- qcdrivers/buffered/basel/nodes.py +217 -0
- qcdrivers/buffered/keysight/__init__.py +5 -0
- qcdrivers/buffered/keysight/nodes.py +234 -0
- qcdrivers/buffered/qdevil/__init__.py +5 -0
- qcdrivers/buffered/qdevil/nodes.py +269 -0
- qcdrivers/buffered/squad/__init__.py +5 -0
- qcdrivers/buffered/squad/nodes.py +91 -0
- qcdrivers/buffered/zurich/__init__.py +5 -0
- qcdrivers/buffered/zurich/nodes.py +736 -0
- qcdrivers/entropy/README.md +164 -0
- qcdrivers/entropy/__init__.py +9 -0
- qcdrivers/entropy/adr/__init__.py +7 -0
- qcdrivers/entropy/adr/adr.py +229 -0
- qcdrivers/entropy/heater/__init__.py +7 -0
- qcdrivers/entropy/heater/heater.py +181 -0
- qcdrivers/harvard/__init__.py +10 -0
- qcdrivers/harvard/dacs/__init__.py +10 -0
- qcdrivers/harvard/dacs/dacs.py +781 -0
- qcdrivers/keysight/__init__.py +12 -0
- qcdrivers/keysight/dmms/Keysight_34410A.py +20 -0
- qcdrivers/keysight/dmms/Keysight_34461A.py +20 -0
- qcdrivers/keysight/dmms/Keysight_344xxA_submodules.py +1121 -0
- qcdrivers/keysight/dmms/__init__.py +4 -0
- qcdrivers/keysight/vna/N52xx.py +501 -0
- qcdrivers/keysight/vna/__init__.py +9 -0
- qcdrivers/qdevil/__init__.py +7 -0
- qcdrivers/qdevil/qdac2/__init__.py +7 -0
- qcdrivers/qdevil/qdac2/qdac2.py +2912 -0
- qcdrivers/rwth/__init__.py +7 -0
- qcdrivers/rwth/mux/README.md +56 -0
- qcdrivers/rwth/mux/__init__.py +7 -0
- qcdrivers/rwth/mux/helpers/firmware/control.ino +77 -0
- qcdrivers/rwth/mux/helpers/firmware/firmware.ino +295 -0
- qcdrivers/rwth/mux/helpers/firmware/identify.ino +192 -0
- qcdrivers/rwth/mux/helpers/firmware/voltage.ino +25 -0
- qcdrivers/rwth/mux/mux.py +398 -0
- qcdrivers/squad/__init__.py +9 -0
- qcdrivers/squad/curry/README.md +151 -0
- qcdrivers/squad/curry/__init__.py +23 -0
- qcdrivers/squad/curry/curry.py +349 -0
- qcdrivers/squad/helpers/__init__.py +9 -0
- qcdrivers/squad/helpers/helpers.py +366 -0
- qcdrivers/squad/mux/README.md +40 -0
- qcdrivers/squad/mux/__init__.py +7 -0
- qcdrivers/squad/mux/helpers/24x24.ino +36 -0
- qcdrivers/squad/mux/helpers/AD75019.cpp +144 -0
- qcdrivers/squad/mux/helpers/AD75019.h +132 -0
- qcdrivers/squad/mux/helpers/AD75019_24.cpp +197 -0
- qcdrivers/squad/mux/helpers/AD75019_24.h +123 -0
- qcdrivers/squad/mux/helpers/firmware.ino +120 -0
- qcdrivers/squad/mux/mux.py +256 -0
- qcdrivers/stanford/__init__.py +7 -0
- qcdrivers/stanford/vccs.py +169 -0
- qcdrivers-0.1.0.dist-info/METADATA +134 -0
- qcdrivers-0.1.0.dist-info/RECORD +73 -0
- qcdrivers-0.1.0.dist-info/WHEEL +4 -0
- qcdrivers-0.1.0.dist-info/licenses/LICENSE +661 -0
qcdrivers/__init__.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Basel Precision Instruments drivers."""
|
|
2
|
+
|
|
3
|
+
from qcdrivers.basel.amplifiers import BaselSP1004a, DummyBaselSP983a, DummyBaselSP1004a
|
|
4
|
+
from qcdrivers.basel.dacs import BaselDac2, BaselDac2Controller
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"BaselDac2",
|
|
8
|
+
"BaselDac2Controller",
|
|
9
|
+
"BaselSP1004a",
|
|
10
|
+
"DummyBaselSP1004a",
|
|
11
|
+
"DummyBaselSP983a",
|
|
12
|
+
]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Basel Precision Instruments preamplifiers."""
|
|
2
|
+
|
|
3
|
+
from qcdrivers.basel.amplifiers.amplifiers import BaselSP1004a
|
|
4
|
+
from qcdrivers.basel.amplifiers.dummy import DummyBaselSP983a, DummyBaselSP1004a
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"BaselSP1004a",
|
|
8
|
+
"DummyBaselSP1004a",
|
|
9
|
+
"DummyBaselSP983a",
|
|
10
|
+
]
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
from typing import Any, Optional
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
from qcodes import validators as vals
|
|
5
|
+
from qcodes.instrument import VisaInstrument
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class BaselSP1004a(VisaInstrument):
|
|
9
|
+
"""
|
|
10
|
+
A driver for Basel Preamp's (SP1004a) Remote Instrument - Model SP1004a.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
name: name for your instrument driver instance
|
|
14
|
+
address: address of the connected remote controller of basel preamp
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
name: str,
|
|
20
|
+
address: str,
|
|
21
|
+
terminator: str = "\r\n",
|
|
22
|
+
**kwargs: Any,
|
|
23
|
+
) -> None:
|
|
24
|
+
super().__init__(name, address, terminator=terminator, **kwargs)
|
|
25
|
+
|
|
26
|
+
self.connect_message()
|
|
27
|
+
|
|
28
|
+
self.add_parameter(
|
|
29
|
+
"gain",
|
|
30
|
+
label="Gain",
|
|
31
|
+
unit="",
|
|
32
|
+
set_cmd=self._set_gain,
|
|
33
|
+
get_cmd=self._get_gain,
|
|
34
|
+
vals=vals.Enum(1e2, 1e3, 1e4),
|
|
35
|
+
)
|
|
36
|
+
self.add_parameter(
|
|
37
|
+
"fcut",
|
|
38
|
+
unit="Hz",
|
|
39
|
+
label="Filter Cut-Off Frequency",
|
|
40
|
+
get_cmd=self._get_filter,
|
|
41
|
+
get_parser=self._parse_filter_value,
|
|
42
|
+
set_cmd=self._set_filter,
|
|
43
|
+
val_mapping={
|
|
44
|
+
100: "100",
|
|
45
|
+
300: "300",
|
|
46
|
+
1000: "1k",
|
|
47
|
+
3000: "3k",
|
|
48
|
+
10e3: "10k",
|
|
49
|
+
30e3: "30k",
|
|
50
|
+
100e3: "100k",
|
|
51
|
+
300e3: "300k",
|
|
52
|
+
1e6: "FULL",
|
|
53
|
+
},
|
|
54
|
+
)
|
|
55
|
+
self.add_parameter(
|
|
56
|
+
"overload_status", label="Overload Status", set_cmd=False, get_cmd="GET O"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
self.add_parameter(
|
|
60
|
+
"vin_offset_compensated",
|
|
61
|
+
label="Overload Status",
|
|
62
|
+
set_cmd=False,
|
|
63
|
+
get_cmd="GET C",
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def get_idn(self) -> dict[str, Optional[str]]:
|
|
67
|
+
vendor = "Physics Basel"
|
|
68
|
+
model = "SP 1004A"
|
|
69
|
+
serial = None
|
|
70
|
+
firmware = None
|
|
71
|
+
return {
|
|
72
|
+
"vendor": vendor,
|
|
73
|
+
"model": model,
|
|
74
|
+
"serial": serial,
|
|
75
|
+
"firmware": firmware,
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
def _set_gain(self, value: float) -> None:
|
|
79
|
+
r = self.ask(f"SET G 1E{int(np.log10(value))}")
|
|
80
|
+
if r != "OK":
|
|
81
|
+
raise ValueError(f"Expected OK return but got: {r}")
|
|
82
|
+
|
|
83
|
+
def _get_gain(self) -> float:
|
|
84
|
+
s = self.ask("GET G")
|
|
85
|
+
r = s.split("Gain: ")[1]
|
|
86
|
+
return float(r)
|
|
87
|
+
|
|
88
|
+
def _set_filter(self, value: str) -> None:
|
|
89
|
+
r = self.ask(f"SET F {value}")
|
|
90
|
+
if r != "OK":
|
|
91
|
+
raise ValueError(f"Expected OK return but got: {r}")
|
|
92
|
+
|
|
93
|
+
def _get_filter(self) -> str:
|
|
94
|
+
s = self.ask("GET F")
|
|
95
|
+
return s.split("Filter: ")[1]
|
|
96
|
+
|
|
97
|
+
@staticmethod
|
|
98
|
+
def _parse_filter_value(val: str) -> str:
|
|
99
|
+
if val.startswith("F"):
|
|
100
|
+
return "FULL"
|
|
101
|
+
elif val[-3::] == "kHz":
|
|
102
|
+
return str(int(val[0:-3])) + "k"
|
|
103
|
+
|
|
104
|
+
elif val[-2::] == "Hz":
|
|
105
|
+
return str(int(val[0:-2]))
|
|
106
|
+
else:
|
|
107
|
+
raise ValueError(f"Could not interpret result. Got: {val}")
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Dummy Basel preamplifier instruments.
|
|
3
|
+
|
|
4
|
+
Software stand-ins for the Basel SP1004a and SP983a preamplifiers, for wiring
|
|
5
|
+
up a measurement without the hardware present. Moved here from
|
|
6
|
+
``qcdrivers.squad.helpers.helpers`` so that Basel instruments live under the
|
|
7
|
+
Basel manufacturer package.
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from typing import Any, Optional
|
|
12
|
+
|
|
13
|
+
from qcodes import validators as vals
|
|
14
|
+
from qcodes.instrument import Instrument
|
|
15
|
+
|
|
16
|
+
__all__ = ["DummyBaselSP1004a", "DummyBaselSP983a"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class DummyBaselSP1004a(Instrument):
|
|
20
|
+
"""
|
|
21
|
+
A driver for Dummy Basel Diffamp's (SP1004a) Remote Instrument - Model SP1004a.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
name: name for your instrument driver instance
|
|
25
|
+
address: address of the connected remote controller of basel preamp
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
name: str,
|
|
31
|
+
**kwargs: Any,
|
|
32
|
+
) -> None:
|
|
33
|
+
super().__init__(name, **kwargs)
|
|
34
|
+
self.gain_value = None
|
|
35
|
+
self.filter_value = None
|
|
36
|
+
|
|
37
|
+
self.add_parameter(
|
|
38
|
+
"gain",
|
|
39
|
+
label="Gain",
|
|
40
|
+
unit="",
|
|
41
|
+
set_cmd=self._set_gain,
|
|
42
|
+
get_cmd=self._get_gain,
|
|
43
|
+
vals=vals.Enum(1e2, 1e3, 1e4),
|
|
44
|
+
)
|
|
45
|
+
self.add_parameter(
|
|
46
|
+
"fcut",
|
|
47
|
+
unit="Hz",
|
|
48
|
+
label="Filter Cut-Off Frequency",
|
|
49
|
+
get_cmd=self._get_filter,
|
|
50
|
+
set_cmd=self._set_filter,
|
|
51
|
+
vals=vals.Enum(100, 300, 1000, 3000, 10e3, 30e3, 100e3, 300e3, 1e6),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
def get_idn(self) -> dict[str, Optional[str]]:
|
|
55
|
+
vendor = "SQUAD Lab"
|
|
56
|
+
model = "Dummy SP 1004A"
|
|
57
|
+
serial = None
|
|
58
|
+
firmware = None
|
|
59
|
+
return {
|
|
60
|
+
"vendor": vendor,
|
|
61
|
+
"model": model,
|
|
62
|
+
"serial": serial,
|
|
63
|
+
"firmware": firmware,
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
def _set_gain(self, value: float) -> None:
|
|
67
|
+
self.gain_value = value
|
|
68
|
+
|
|
69
|
+
def _get_gain(self) -> float:
|
|
70
|
+
return self.gain_value
|
|
71
|
+
|
|
72
|
+
def _set_filter(self, value: str) -> None:
|
|
73
|
+
self.filter_value = value
|
|
74
|
+
|
|
75
|
+
def _get_filter(self) -> str:
|
|
76
|
+
return self.filter_value
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class DummyBaselSP983a(Instrument):
|
|
80
|
+
"""
|
|
81
|
+
A driver for a Dummy Basel I/V Converter (SP983a) Remote Instrument - Model SP983a.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
name: name for your instrument driver instance
|
|
85
|
+
address: address of the connected remote controller of basel preamp
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
def __init__(
|
|
89
|
+
self,
|
|
90
|
+
name: str,
|
|
91
|
+
**kwargs: Any,
|
|
92
|
+
) -> None:
|
|
93
|
+
super().__init__(name, **kwargs)
|
|
94
|
+
self.gain_value = None
|
|
95
|
+
self.filter_value = None
|
|
96
|
+
|
|
97
|
+
self.add_parameter(
|
|
98
|
+
"gain",
|
|
99
|
+
label="Gain",
|
|
100
|
+
unit="",
|
|
101
|
+
set_cmd=self._set_gain,
|
|
102
|
+
get_cmd=self._get_gain,
|
|
103
|
+
vals=vals.Enum(1e5, 1e6, 1e7, 1e8, 1e9),
|
|
104
|
+
)
|
|
105
|
+
self.add_parameter(
|
|
106
|
+
"fcut",
|
|
107
|
+
unit="Hz",
|
|
108
|
+
label="Filter Cut-Off Frequency",
|
|
109
|
+
get_cmd=self._get_filter,
|
|
110
|
+
set_cmd=self._set_filter,
|
|
111
|
+
vals=vals.Enum(30, 100, 300, 1000, 3000, 10e3, 30e3, 100e3, 1e6),
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def get_idn(self) -> dict[str, Optional[str]]:
|
|
115
|
+
vendor = "SQUAD Lab"
|
|
116
|
+
model = "Dummy SP 983a"
|
|
117
|
+
serial = None
|
|
118
|
+
firmware = None
|
|
119
|
+
return {
|
|
120
|
+
"vendor": vendor,
|
|
121
|
+
"model": model,
|
|
122
|
+
"serial": serial,
|
|
123
|
+
"firmware": firmware,
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
def _set_gain(self, value: float) -> None:
|
|
127
|
+
self.gain_value = value
|
|
128
|
+
|
|
129
|
+
def _get_gain(self) -> float:
|
|
130
|
+
return self.gain_value
|
|
131
|
+
|
|
132
|
+
def _set_filter(self, value: str) -> None:
|
|
133
|
+
self.filter_value = value
|
|
134
|
+
|
|
135
|
+
def _get_filter(self) -> str:
|
|
136
|
+
return self.filter_value
|