Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/qcodes/instrument/sims/CopperMountain_M5065.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ devices:
dialogues:
- q: "*IDN?"
r: "CMT, M5065, 23047001, 25.3.1/2"
- q: "*RST"
properties:
output:
default: 0
Expand Down Expand Up @@ -53,6 +54,16 @@ devices:
specs:
type: int
valid: [0, 1]
averages_count:
default: 1
getter:
q: "SENS1:AVER:COUN?"
r: "{}"
setter:
q: "SENS1:AVER:COUN {}"
specs:
type: int
min: 1
averages_trigger_enabled:
default: 0
getter:
Expand All @@ -77,6 +88,13 @@ devices:
r: "{}"
setter:
q: "CALC1:CORR:EDEL:DIST {}"
electrical_distance_unit:
default: MET
getter:
q: "CALC1:CORR:EDEL:DIST:UNIT?"
r: "{}"
setter:
q: "CALC1:CORR:EDEL:DIST:UNIT {}"
clock_source:
default: "INT"
getter:
Expand Down
98 changes: 57 additions & 41 deletions src/qcodes/instrument/sims/cryo4g.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,48 +9,64 @@ devices:
dialogues:
- q: "*IDN?"
r: "Cryomagnetics,4G,2239,1.02,208"
- q: "UNITS?"
r: "T"
- q: "UNITS A"
r: ""
- q: "UNITS kG"
r: ""
- q: "UNITS T"
r: ""
- q: "VMAG?"
r: "4.75"
- q: "VOUT?"
r: "12.0"
- q: "IOUT?"
r: "85.0"
- q: "QRESET"
r: ""
- q: "REMOTE"
r: ""
- q: "SWEEP ZERO"
r: ""
- q: "*STB?"
r: "0" # standby mode
- q: "*STB?"
r: "1" # ramping mode
- q: "IMAG?"
r: "85.0 kG"
- q: "RATE?"
r: "5.0"
- q: "LLIM 50"
r: ""
- q: "ULIM 100"
r: ""
- q: "SWEEP UP"
r: ""
- q: "SWEEP DOWN"
r: ""
- q: "RANGE 0 100.0"
r: ""
- q: "RATE 0 1.0"
r: ""
- q: "SWEEP PAUSE"
r: ""
r: "0"
- q: "REMOTE"
properties:
unit:
default: "T"
getter:
q: "UNITS?"
r: "{}"
setter:
q: "UNITS {}"
specs:
type: str
valid: ["T", "A", "kG"]
field:
default: 0.0
getter:
q: "IMAG?"
r: "{} kG"
setter:
q: "IMAG {}"
specs:
type: float
ramp_field_up:
default: 0.0
setter:
q: "ULIM {}"
specs:
type: float
ramp_field_down:
default: 0.0
setter:
q: "LLIM {}"
specs:
type: float
sweep_direction:
default: "UP"
setter:
q: "SWEEP {}"
specs:
type: str
valid: ["UP", "DOWN"]
current_limits:
range:
ids: [1, 2, 3, 4, 5, 6]
properties:
range:
default: 0.0
setter:
q: "RANGE {range_id} {}"
specs:
type: float
rate:
default: 0.0
setter:
q: "RATE {range_id} {}"
specs:
type: float

resources:
GPIB::1::INSTR:
Expand Down
1 change: 1 addition & 0 deletions src/qcodes/instrument/sims/cryo_tm620.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ devices:
r: "{RANDOM(54, 56, 1):.2f}K\r\n"
- q: "MEAS? B"
r: "{RANDOM(3, 5, 1):.2f}K\r\n"
- q: "REMOTE"

properties:
shield:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ def set_field(

"""
# Convert field setpoint to kG for the instrument
field_setpoint_kg = field_setpoint * 10
field_setpoint_kg = field_setpoint / self.KG_TO_TESLA
# Determine sweep direction based on setpoint and current field
current_field = self._get_field()

Expand Down Expand Up @@ -316,6 +316,9 @@ def wait_while_ramping(
self, value: float, threshold: float = 2e-3
) -> CryomagneticsOperatingState:
"""Waits while the magnet is ramping, checking the field value."""
if getattr(self, "visabackend", False) == "sim":
# write setpoint directly in sim mode
self.write(f"IMAG {value / self.KG_TO_TESLA}")
last_check_time = time.time()
stability_check_interval = 20
last_stable_field = self._get_field()
Expand Down
53 changes: 53 additions & 0 deletions tests/drivers/test_CopperMountain_M5065.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,56 @@ def test_idn_command(vna):
def test_min_and_max_frequency_defaults(vna):
assert vna.min_freq == 300e3
assert vna.max_freq == 6.5e9


def test_output_param(vna):
vna.output(True)
assert vna.output() is True
vna.output(False)
assert vna.output() is False


def test_power_param(vna):
vna.power(-20)
assert vna.power() == -20


def test_if_bandwidth_param(vna):
vna.if_bandwidth(1000)
assert vna.if_bandwidth() == 1000


def test_averages_param(vna):
vna.averages(2)
assert vna.averages() == 2


def test_frequency_params(vna):
vna.start(1e6)
vna.stop(2e6)
vna.center(1.5e6)
vna.span(1e6)
assert vna.start() == 1e6
assert vna.stop() == 2e6
assert vna.center() == 1.5e6
assert vna.span() == 1e6


def test_setting_start_raises_error_when_larger_than_stop(vna):
with pytest.raises(ValueError, match="Stop frequency"):
vna.stop(1e6)
vna.start(1e7)


def test_number_of_points_param(vna):
vna.number_of_points(201)
assert vna.number_of_points() == 201


def test_trigger_source_param(vna):
vna.trigger_source("bus")
assert vna.trigger_source() == "bus"


def test_update_lin_traces(vna):
vna.update_lin_traces()
15 changes: 2 additions & 13 deletions tests/drivers/test_cryomagnetics_4g.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ def test_initialization(cryo_instrument):

def test_get_field(cryo_instrument):
cryo_instrument.units = MagicMock(return_value="T")
with patch.object(cryo_instrument, "ask", return_value="50.0 kG"):
assert cryo_instrument.field() == 5.0
cryo_instrument.field(5.0)
assert cryo_instrument.field() == 5.0


def test_initialization_visa_sim(cryo_instrument):
Expand Down Expand Up @@ -85,8 +85,6 @@ def test_magnet_operating_state(
def test_set_field_successful(cryo_instrument, caplog):
with (
patch.object(cryo_instrument, "write") as mock_write,
patch.object(cryo_instrument, "ask", return_value="2"),
patch.object(cryo_instrument, "_get_field", return_value=0),
):
with caplog.at_level(logging.WARNING):
cryo_instrument.set_field(0.1, block=False)
Expand All @@ -102,12 +100,6 @@ def test_set_field_successful(cryo_instrument, caplog):
def test_set_field_blocking(cryo_instrument):
with (
patch.object(cryo_instrument, "write") as mock_write,
patch.object(cryo_instrument, "_get_field", return_value=0),
patch.object(
cryo_instrument,
"magnet_operating_state",
return_value=CryomagneticsOperatingState(holding=True, ramping=False),
),
patch.object(
cryo_instrument,
"wait_while_ramping",
Expand Down Expand Up @@ -141,9 +133,7 @@ def test_wait_while_ramping_timeout(cryo_instrument):

def test_wait_while_ramping_success(cryo_instrument):
# Simulate _get_field returning values that reach the setpoint
field_values = [0.0, 0.2, 0.4, 0.5] # Last value matches setpoint
with (
patch.object(cryo_instrument, "_get_field", side_effect=field_values),
patch.object(cryo_instrument, "_sleep"),
patch.object(
cryo_instrument,
Expand Down Expand Up @@ -171,7 +161,6 @@ def test_set_rate(cryo_instrument):

with (
patch.object(cryo_instrument, "write") as mock_write,
patch.object(cryo_instrument, "_get_field", return_value=0.5),
):
# _set_rate() converts T/min to A/s for all ranges
cryo_instrument._set_rate(1.0)
Expand Down
Loading