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.
Files changed (73) hide show
  1. qcdrivers/__init__.py +9 -0
  2. qcdrivers/basel/__init__.py +12 -0
  3. qcdrivers/basel/amplifiers/__init__.py +10 -0
  4. qcdrivers/basel/amplifiers/amplifiers.py +107 -0
  5. qcdrivers/basel/amplifiers/dummy.py +136 -0
  6. qcdrivers/basel/dacs/__init__.py +9 -0
  7. qcdrivers/basel/dacs/dacs.py +1497 -0
  8. qcdrivers/basel/dacs/dacs_controller.py +2132 -0
  9. qcdrivers/bluefors/__init__.py +7 -0
  10. qcdrivers/bluefors/fridges/README.md +42 -0
  11. qcdrivers/bluefors/fridges/__init__.py +7 -0
  12. qcdrivers/bluefors/fridges/fridges.py +384 -0
  13. qcdrivers/buffered/__init__.py +26 -0
  14. qcdrivers/buffered/_typing.py +30 -0
  15. qcdrivers/buffered/base.py +90 -0
  16. qcdrivers/buffered/basel/__init__.py +5 -0
  17. qcdrivers/buffered/basel/nodes.py +217 -0
  18. qcdrivers/buffered/keysight/__init__.py +5 -0
  19. qcdrivers/buffered/keysight/nodes.py +234 -0
  20. qcdrivers/buffered/qdevil/__init__.py +5 -0
  21. qcdrivers/buffered/qdevil/nodes.py +269 -0
  22. qcdrivers/buffered/squad/__init__.py +5 -0
  23. qcdrivers/buffered/squad/nodes.py +91 -0
  24. qcdrivers/buffered/zurich/__init__.py +5 -0
  25. qcdrivers/buffered/zurich/nodes.py +736 -0
  26. qcdrivers/entropy/README.md +164 -0
  27. qcdrivers/entropy/__init__.py +9 -0
  28. qcdrivers/entropy/adr/__init__.py +7 -0
  29. qcdrivers/entropy/adr/adr.py +229 -0
  30. qcdrivers/entropy/heater/__init__.py +7 -0
  31. qcdrivers/entropy/heater/heater.py +181 -0
  32. qcdrivers/harvard/__init__.py +10 -0
  33. qcdrivers/harvard/dacs/__init__.py +10 -0
  34. qcdrivers/harvard/dacs/dacs.py +781 -0
  35. qcdrivers/keysight/__init__.py +12 -0
  36. qcdrivers/keysight/dmms/Keysight_34410A.py +20 -0
  37. qcdrivers/keysight/dmms/Keysight_34461A.py +20 -0
  38. qcdrivers/keysight/dmms/Keysight_344xxA_submodules.py +1121 -0
  39. qcdrivers/keysight/dmms/__init__.py +4 -0
  40. qcdrivers/keysight/vna/N52xx.py +501 -0
  41. qcdrivers/keysight/vna/__init__.py +9 -0
  42. qcdrivers/qdevil/__init__.py +7 -0
  43. qcdrivers/qdevil/qdac2/__init__.py +7 -0
  44. qcdrivers/qdevil/qdac2/qdac2.py +2912 -0
  45. qcdrivers/rwth/__init__.py +7 -0
  46. qcdrivers/rwth/mux/README.md +56 -0
  47. qcdrivers/rwth/mux/__init__.py +7 -0
  48. qcdrivers/rwth/mux/helpers/firmware/control.ino +77 -0
  49. qcdrivers/rwth/mux/helpers/firmware/firmware.ino +295 -0
  50. qcdrivers/rwth/mux/helpers/firmware/identify.ino +192 -0
  51. qcdrivers/rwth/mux/helpers/firmware/voltage.ino +25 -0
  52. qcdrivers/rwth/mux/mux.py +398 -0
  53. qcdrivers/squad/__init__.py +9 -0
  54. qcdrivers/squad/curry/README.md +151 -0
  55. qcdrivers/squad/curry/__init__.py +23 -0
  56. qcdrivers/squad/curry/curry.py +349 -0
  57. qcdrivers/squad/helpers/__init__.py +9 -0
  58. qcdrivers/squad/helpers/helpers.py +366 -0
  59. qcdrivers/squad/mux/README.md +40 -0
  60. qcdrivers/squad/mux/__init__.py +7 -0
  61. qcdrivers/squad/mux/helpers/24x24.ino +36 -0
  62. qcdrivers/squad/mux/helpers/AD75019.cpp +144 -0
  63. qcdrivers/squad/mux/helpers/AD75019.h +132 -0
  64. qcdrivers/squad/mux/helpers/AD75019_24.cpp +197 -0
  65. qcdrivers/squad/mux/helpers/AD75019_24.h +123 -0
  66. qcdrivers/squad/mux/helpers/firmware.ino +120 -0
  67. qcdrivers/squad/mux/mux.py +256 -0
  68. qcdrivers/stanford/__init__.py +7 -0
  69. qcdrivers/stanford/vccs.py +169 -0
  70. qcdrivers-0.1.0.dist-info/METADATA +134 -0
  71. qcdrivers-0.1.0.dist-info/RECORD +73 -0
  72. qcdrivers-0.1.0.dist-info/WHEEL +4 -0
  73. qcdrivers-0.1.0.dist-info/licenses/LICENSE +661 -0
qcdrivers/__init__.py ADDED
@@ -0,0 +1,9 @@
1
+ """
2
+ QCoDeS drivers for instruments used in the SQUAD lab.
3
+
4
+ Drivers are grouped by manufacturer; hardware-triggered (buffered) sweep nodes
5
+ live under :mod:`qcdrivers.buffered`, grouped the same way.
6
+
7
+ """
8
+
9
+ __all__: list[str] = []
@@ -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
@@ -0,0 +1,9 @@
1
+ """Basel Precision Instruments DACs."""
2
+
3
+ from qcdrivers.basel.dacs.dacs import BaselDac2
4
+ from qcdrivers.basel.dacs.dacs_controller import BaselDac2Controller
5
+
6
+ __all__ = [
7
+ "BaselDac2",
8
+ "BaselDac2Controller",
9
+ ]