From a85d0b90b09bd1805eb5565cbc7291a2ec059770 Mon Sep 17 00:00:00 2001 From: Tobias Hangleiter Date: Tue, 14 Jan 2025 10:23:36 +0100 Subject: [PATCH 1/2] Only add magnet params if one is available --- .../instrument_drivers/oxford/triton.py | 140 ++++++++++-------- 1 file changed, 76 insertions(+), 64 deletions(-) diff --git a/src/qcodes/instrument_drivers/oxford/triton.py b/src/qcodes/instrument_drivers/oxford/triton.py index 0b9183355a8f..d7200090f4bb 100644 --- a/src/qcodes/instrument_drivers/oxford/triton.py +++ b/src/qcodes/instrument_drivers/oxford/triton.py @@ -64,6 +64,9 @@ def __init__( self._control_channel = 5 self.pump_label_dict = {"TURB1": "Turbo 1", "COMP": "Compressor"} + self.magnet_available: bool = self._get_control_B_param("ACTN") != "INVALID" + """Indicates if a magnet is equipped *and* controlled by the Triton.""" + self.time: Parameter = self.add_parameter( name="time", label="System Time", @@ -172,73 +175,80 @@ def __init__( ) """Parameter pid_range""" - self.magnet_status: Parameter = self.add_parameter( - name="magnet_status", - label="Magnet status", - unit="", - get_cmd=partial(self._get_control_B_param, "ACTN"), - ) - """Parameter magnet_status""" - - self.magnet_sweeprate: Parameter = self.add_parameter( - name="magnet_sweeprate", - label="Magnet sweep rate", - unit="T/min", - get_cmd=partial(self._get_control_B_param, "RVST:RATE"), - set_cmd=partial(self._set_control_magnet_sweeprate_param), - ) - """Parameter magnet_sweeprate""" + if self.magnet_available: + self.magnet_status: Parameter = self.add_parameter( + name="magnet_status", + label="Magnet status", + unit="", + get_cmd=partial(self._get_control_B_param, "ACTN"), + ) + """Parameter magnet_status""" + + self.magnet_sweeprate: Parameter = self.add_parameter( + name="magnet_sweeprate", + label="Magnet sweep rate", + unit="T/min", + get_cmd=partial(self._get_control_B_param, "RVST:RATE"), + set_cmd=partial(self._set_control_magnet_sweeprate_param), + ) + """Parameter magnet_sweeprate""" - self.magnet_sweeprate_insta: Parameter = self.add_parameter( - name="magnet_sweeprate_insta", - label="Instantaneous magnet sweep rate", - unit="T/min", - get_cmd=partial(self._get_control_B_param, "RFST"), - ) - """Parameter magnet_sweeprate_insta""" + self.magnet_sweeprate_insta: Parameter = self.add_parameter( + name="magnet_sweeprate_insta", + label="Instantaneous magnet sweep rate", + unit="T/min", + get_cmd=partial(self._get_control_B_param, "RFST"), + ) + """Parameter magnet_sweeprate_insta""" - self.B: Parameter = self.add_parameter( - name="B", - label="Magnetic field", - unit="T", - get_cmd=partial(self._get_control_B_param, "VECT"), - ) - """Parameter B""" - - self.Bx: Parameter = self.add_parameter( - name="Bx", - label="Magnetic field x-component", - unit="T", - get_cmd=partial(self._get_control_Bcomp_param, "VECTBx"), - set_cmd=partial(self._set_control_Bx_param), - ) - """Parameter Bx""" - - self.By: Parameter = self.add_parameter( - name="By", - label="Magnetic field y-component", - unit="T", - get_cmd=partial(self._get_control_Bcomp_param, "VECTBy"), - set_cmd=partial(self._set_control_By_param), - ) - """Parameter By""" - - self.Bz: Parameter = self.add_parameter( - name="Bz", - label="Magnetic field z-component", - unit="T", - get_cmd=partial(self._get_control_Bcomp_param, "VECTBz"), - set_cmd=partial(self._set_control_Bz_param), - ) - """Parameter Bz""" + self.B: Parameter = self.add_parameter( + name="B", + label="Magnetic field", + unit="T", + get_cmd=partial(self._get_control_B_param, "VECT"), + ) + """Parameter B""" + + self.Bx: Parameter = self.add_parameter( + name="Bx", + label="Magnetic field x-component", + unit="T", + get_cmd=partial(self._get_control_Bcomp_param, "VECTBx"), + set_cmd=partial(self._set_control_Bx_param), + ) + """Parameter Bx""" + + self.By: Parameter = self.add_parameter( + name="By", + label="Magnetic field y-component", + unit="T", + get_cmd=partial(self._get_control_Bcomp_param, "VECTBy"), + set_cmd=partial(self._set_control_By_param), + ) + """Parameter By""" + + self.Bz: Parameter = self.add_parameter( + name="Bz", + label="Magnetic field z-component", + unit="T", + get_cmd=partial(self._get_control_Bcomp_param, "VECTBz"), + set_cmd=partial(self._set_control_Bz_param), + ) + """Parameter Bz""" - self.magnet_sweep_time: Parameter = self.add_parameter( - name="magnet_sweep_time", - label="Magnet sweep time", - unit="T/min", - get_cmd=partial(self._get_control_B_param, "RVST:TIME"), - ) - """Parameter magnet_sweep_time""" + self.magnet_sweep_time: Parameter = self.add_parameter( + name="magnet_sweep_time", + label="Magnet sweep time", + unit="T/min", + get_cmd=partial(self._get_control_B_param, "RVST:TIME"), + ) + """Parameter magnet_sweep_time""" + else: + self.log.debug( + "Skipped adding magnet parameters. This may either be because there " + "is none equipped or because the Mercury iPS is not set to be " + "controlled by the Triton." + ) self.turb1_speed: Parameter = self.add_parameter( name="turb1_speed", @@ -266,6 +276,8 @@ def __init__( self.connect_message() def set_B(self, x: float, y: float, z: float, s: float) -> None: + if not self.magnet_available: + raise RuntimeError("Magnet not available") if 0 < s <= 0.2: self.write( "SET:SYS:VRM:COO:CART:RVST:MODE:RATE:RATE:" From 67cef178d7ecc9400790cb35c95f60a8b42bc435 Mon Sep 17 00:00:00 2001 From: Tobias Hangleiter Date: Tue, 14 Jan 2025 15:40:01 +0100 Subject: [PATCH 2/2] Add newsfragment --- docs/changes/newsfragments/6792.improved | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/changes/newsfragments/6792.improved diff --git a/docs/changes/newsfragments/6792.improved b/docs/changes/newsfragments/6792.improved new file mode 100644 index 000000000000..1d20a7f185e9 --- /dev/null +++ b/docs/changes/newsfragments/6792.improved @@ -0,0 +1 @@ +Only add magnet parameters if a magnet is detected in the Oxford Triton driver.