From 8e1a5e5de2a0de2ad9cf3abe92fae42296758e12 Mon Sep 17 00:00:00 2001 From: panasee Date: Wed, 19 Feb 2025 13:21:43 +0800 Subject: [PATCH 1/7] Add heater_switch parameter to the WorkerPS, used for judging and switching the status of magnet heater. --- src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py index dd10088d4c41..15b31f8bbec7 100644 --- a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py +++ b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py @@ -102,6 +102,15 @@ def __init__( else: self.psu_string = "PSU" + self.heater_switch: Parameter = self.add_parameter( + 'heater_switch', + label='Heater switch status/set', + get_cmd=partial(self._param_getter, "SIG:SWHT"), + set_cmd=partial(self._param_setter, "SIG:SWHT"), + get_parser=_response_preparser, + ) + """Parameter heater switch""" + self.voltage: Parameter = self.add_parameter( "voltage", label="Output voltage", From 05401a8c18f23e98577f9e7d548fb942bc11c65a Mon Sep 17 00:00:00 2001 From: panasee Date: Wed, 19 Feb 2025 13:23:25 +0800 Subject: [PATCH 2/7] Add parameters to the overall OxfordMercuryiPS class, for sensing the important temperatures of magnet, PT1 and PT2. Also add a parser to the start for parsing the temperature from response --- .../oxford/MercuryiPS_VISA.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py index 15b31f8bbec7..e59e7c848af0 100644 --- a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py +++ b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py @@ -64,6 +64,16 @@ def _signal_parser(our_scaling: float, response: str) -> float: return float(digits) * their_scaling * our_scaling +def _temp_parser(response: str): + """ + Parse a response string into a correct SI temperature value. + + Args: + response: What comes back from instrument.ask + + """ + return float(response.split(":")[-1][:-1]) + class OxfordMercuryWorkerPS(InstrumentChannel): """ @@ -348,6 +358,38 @@ def __init__( x=self.GRPX.field(), y=self.GRPY.field(), z=self.GRPZ.field() ) + self.magnet_temp_addr = 'DEV:MB1.T1:TEMP' + self.pt1_temp_addr = 'DEV:DB8.T1:TEMP' + self.pt2_temp_addr = 'DEV:DB7.T1:TEMP' + + self.magnet_temp: Parameter = self.add_parameter( + name='magnet_temp', + label='Magnet Temperature', + unit='K', + docstring='Temperature of the magnet sensor', + get_cmd="READ:" + self.magnet_temp_addr + ":SIG:TEMP?", + get_parser=_temp_parser + ) + + self.pt1_temp: Parameter = self.add_parameter( + name='pt1_temp', + label='pt1 Temperature', + unit='K', + docstring='Temperature of the pt1', + get_cmd="READ:" + self.pt1_temp_addr + ":SIG:TEMP?", + get_parser=_temp_parser + ) + + self.pt2_temp: Parameter = self.add_parameter( + name='pt2_temp', + label='pt2 Temperature', + unit='K', + docstring='Temperature of the pt2', + get_cmd="READ:" + self.pt2_temp_addr + ":SIG:TEMP?", + get_parser=_temp_parser + ) + + for coord, unit in zip( ["x", "y", "z", "r", "theta", "phi", "rho"], ["T", "T", "T", "T", "degrees", "degrees", "T"], From 51c63f727765b179ee53be01d29c18b1661064e9 Mon Sep 17 00:00:00 2001 From: panasee Date: Wed, 19 Feb 2025 13:46:07 +0800 Subject: [PATCH 3/7] Add temperature parameters docstrings --- src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py index e59e7c848af0..8177a91d9232 100644 --- a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py +++ b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py @@ -370,6 +370,7 @@ def __init__( get_cmd="READ:" + self.magnet_temp_addr + ":SIG:TEMP?", get_parser=_temp_parser ) + """Parameter magnet temperature""" self.pt1_temp: Parameter = self.add_parameter( name='pt1_temp', @@ -379,6 +380,7 @@ def __init__( get_cmd="READ:" + self.pt1_temp_addr + ":SIG:TEMP?", get_parser=_temp_parser ) + """Parameter pt1 temperature""" self.pt2_temp: Parameter = self.add_parameter( name='pt2_temp', @@ -388,7 +390,7 @@ def __init__( get_cmd="READ:" + self.pt2_temp_addr + ":SIG:TEMP?", get_parser=_temp_parser ) - + """Parameter pt2 temperature""" for coord, unit in zip( ["x", "y", "z", "r", "theta", "phi", "rho"], From b88c90f3083302b83f98603fb9ff0f876da7e04f Mon Sep 17 00:00:00 2001 From: panasee <49427309+panasee@users.noreply.github.com> Date: Wed, 19 Feb 2025 22:35:26 +0800 Subject: [PATCH 4/7] Update src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py Co-authored-by: Jens Hedegaard Nielsen --- src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py index 8177a91d9232..bf5d90dbd662 100644 --- a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py +++ b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py @@ -64,7 +64,7 @@ def _signal_parser(our_scaling: float, response: str) -> float: return float(digits) * their_scaling * our_scaling -def _temp_parser(response: str): +def _temp_parser(response: str) -> float: """ Parse a response string into a correct SI temperature value. From 4dbd897bb417a06c96bd4ab8f9b446b594974df8 Mon Sep 17 00:00:00 2001 From: panasee <49427309+panasee@users.noreply.github.com> Date: Wed, 19 Feb 2025 23:14:26 +0800 Subject: [PATCH 5/7] change sensor addresses to private variable --- .../instrument_drivers/oxford/MercuryiPS_VISA.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py index bf5d90dbd662..47a2e37a035f 100644 --- a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py +++ b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py @@ -358,16 +358,16 @@ def __init__( x=self.GRPX.field(), y=self.GRPY.field(), z=self.GRPZ.field() ) - self.magnet_temp_addr = 'DEV:MB1.T1:TEMP' - self.pt1_temp_addr = 'DEV:DB8.T1:TEMP' - self.pt2_temp_addr = 'DEV:DB7.T1:TEMP' + self._magnet_temp_addr = 'DEV:MB1.T1:TEMP' + self._pt1_temp_addr = 'DEV:DB8.T1:TEMP' + self._pt2_temp_addr = 'DEV:DB7.T1:TEMP' self.magnet_temp: Parameter = self.add_parameter( name='magnet_temp', label='Magnet Temperature', unit='K', docstring='Temperature of the magnet sensor', - get_cmd="READ:" + self.magnet_temp_addr + ":SIG:TEMP?", + get_cmd="READ:" + self._magnet_temp_addr + ":SIG:TEMP?", get_parser=_temp_parser ) """Parameter magnet temperature""" @@ -377,7 +377,7 @@ def __init__( label='pt1 Temperature', unit='K', docstring='Temperature of the pt1', - get_cmd="READ:" + self.pt1_temp_addr + ":SIG:TEMP?", + get_cmd="READ:" + self._pt1_temp_addr + ":SIG:TEMP?", get_parser=_temp_parser ) """Parameter pt1 temperature""" @@ -387,7 +387,7 @@ def __init__( label='pt2 Temperature', unit='K', docstring='Temperature of the pt2', - get_cmd="READ:" + self.pt2_temp_addr + ":SIG:TEMP?", + get_cmd="READ:" + self._pt2_temp_addr + ":SIG:TEMP?", get_parser=_temp_parser ) """Parameter pt2 temperature""" From 780984c7956cdeed50879c5e956092aaebb7a96a Mon Sep 17 00:00:00 2001 From: panasee Date: Thu, 20 Feb 2025 14:45:34 +0800 Subject: [PATCH 6/7] pre-commit ruff-format changes --- .../oxford/MercuryiPS_VISA.py | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py index 47a2e37a035f..b5e364e96f70 100644 --- a/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py +++ b/src/qcodes/instrument_drivers/oxford/MercuryiPS_VISA.py @@ -64,6 +64,7 @@ def _signal_parser(our_scaling: float, response: str) -> float: return float(digits) * their_scaling * our_scaling + def _temp_parser(response: str) -> float: """ Parse a response string into a correct SI temperature value. @@ -113,8 +114,8 @@ def __init__( self.psu_string = "PSU" self.heater_switch: Parameter = self.add_parameter( - 'heater_switch', - label='Heater switch status/set', + "heater_switch", + label="Heater switch status/set", get_cmd=partial(self._param_getter, "SIG:SWHT"), set_cmd=partial(self._param_setter, "SIG:SWHT"), get_parser=_response_preparser, @@ -358,37 +359,37 @@ def __init__( x=self.GRPX.field(), y=self.GRPY.field(), z=self.GRPZ.field() ) - self._magnet_temp_addr = 'DEV:MB1.T1:TEMP' - self._pt1_temp_addr = 'DEV:DB8.T1:TEMP' - self._pt2_temp_addr = 'DEV:DB7.T1:TEMP' + self._magnet_temp_addr = "DEV:MB1.T1:TEMP" + self._pt1_temp_addr = "DEV:DB8.T1:TEMP" + self._pt2_temp_addr = "DEV:DB7.T1:TEMP" self.magnet_temp: Parameter = self.add_parameter( - name='magnet_temp', - label='Magnet Temperature', - unit='K', - docstring='Temperature of the magnet sensor', - get_cmd="READ:" + self._magnet_temp_addr + ":SIG:TEMP?", - get_parser=_temp_parser - ) + name="magnet_temp", + label="Magnet Temperature", + unit="K", + docstring="Temperature of the magnet sensor", + get_cmd="READ:" + self._magnet_temp_addr + ":SIG:TEMP?", + get_parser=_temp_parser, + ) """Parameter magnet temperature""" self.pt1_temp: Parameter = self.add_parameter( - name='pt1_temp', - label='pt1 Temperature', - unit='K', - docstring='Temperature of the pt1', - get_cmd="READ:" + self._pt1_temp_addr + ":SIG:TEMP?", - get_parser=_temp_parser - ) + name="pt1_temp", + label="pt1 Temperature", + unit="K", + docstring="Temperature of the pt1", + get_cmd="READ:" + self._pt1_temp_addr + ":SIG:TEMP?", + get_parser=_temp_parser, + ) """Parameter pt1 temperature""" self.pt2_temp: Parameter = self.add_parameter( - name='pt2_temp', - label='pt2 Temperature', - unit='K', - docstring='Temperature of the pt2', + name="pt2_temp", + label="pt2 Temperature", + unit="K", + docstring="Temperature of the pt2", get_cmd="READ:" + self._pt2_temp_addr + ":SIG:TEMP?", - get_parser=_temp_parser + get_parser=_temp_parser, ) """Parameter pt2 temperature""" From 05b40f12caa1480c3ac2db3cfe360a2ff6ba6f88 Mon Sep 17 00:00:00 2001 From: Mikhail Astafev Date: Fri, 21 Feb 2025 17:18:07 +0100 Subject: [PATCH 7/7] Create 6889.improved_driver --- docs/changes/newsfragments/6889.improved_driver | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/changes/newsfragments/6889.improved_driver diff --git a/docs/changes/newsfragments/6889.improved_driver b/docs/changes/newsfragments/6889.improved_driver new file mode 100644 index 000000000000..68c929eaa0c6 --- /dev/null +++ b/docs/changes/newsfragments/6889.improved_driver @@ -0,0 +1,8 @@ +Added several parameters into the oxford MercuryiPS driver, +enabling the control of the heaters and the sensing of internal temperatures +(magnet, PT1, and PT2 stage of cryogenic system). +Added `heater_switch` parameter to manage the heater switch status and settings. +The heater switch control is bound to each WorkerPS, accepting "ON" and "OFF" as inputs. +Added `magnet_temp`, `pt1_temp`, and `pt2_temp` parameters for reading temperatures +from different sensors, utilizing the new `_temp_parser` function. +Currently, the addresses of temperature sensors are written statically in the driver.