Skip to content

Commit

Permalink
Merge pull request #6792 from qutech/enh/oxford_triton_without_magnet
Browse files Browse the repository at this point in the history
Oxford Triton driver: only add magnet parameters if one is present
  • Loading branch information
jenshnielsen authored Jan 16, 2025
2 parents 04e6f62 + 67cef17 commit 74a3a8d
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 64 deletions.
1 change: 1 addition & 0 deletions docs/changes/newsfragments/6792.improved
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Only add magnet parameters if a magnet is detected in the Oxford Triton driver.
140 changes: 76 additions & 64 deletions src/qcodes/instrument_drivers/oxford/triton.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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:"
Expand Down

0 comments on commit 74a3a8d

Please sign in to comment.