Quantum Design Drivers

Classes:

DynaCool(name, address, **kwargs)

Class to represent the DynaCoolPPMS

class qcodes.instrument_drivers.QuantumDesign.DynaCool(name: str, address: str, **kwargs: Unpack[VisaInstrumentKWArgs])[source]

Bases: VisaInstrument

Class to represent the DynaCoolPPMS

Note that this driver assumes the server to be running on the DynaCool dedicated control PC. The server can be launched using qcodes-dynacool-server.exe or by executing server.py (from the ‘private’ folder)

Parameters:
  • name – The name used internally by QCoDeS for this driver

  • address – The VISA resource name. E.g. ‘TCPIP0::127.0.0.1::5000::SOCKET’ with the appropriate IP address instead of 127.0.0.1. Note that the port number is hard-coded into the server.

Attributes:

temp_params

field_params

default_terminator

The default terminator to use if the terminator is not specified when creating the instrument.

temperature

Parameter temperature

temperature_setpoint

Parameter temperature_setpoint

temperature_rate

Parameter temperature_rate

temperature_settling

Parameter temperature_settling

temperature_state

Parameter temperature_state

field_measured

Parameter field_measured

field_target

Parameter field_target

field_ramp

Parameter field_ramp

field_rate

Parameter field_rate

field_approach

Parameter field_approach

magnet_state

Parameter magnet_state

chamber_temperature

Parameter chamber_temperature

chamber_state

Parameter chamber_state

field_tolerance

The tolerance below which fields are considered identical in a blocking ramp.

error_code

Methods:

get_idn()

Parse a standard VISA *IDN? response into an ID dict.

ramp([mode])

Ramp the field to the value given by the field_target parameter

write(cmd)

Since the error code is always returned, we must read it back

ask(cmd)

Since the error code is always returned, we must read it back

close()

Make sure to nicely close the server connection

temp_params = ('temperature_setpoint', 'temperature_rate', 'temperature_settling')
field_params = ('field_target', 'field_rate', 'field_approach')
default_terminator: str | None = '\r\n'

The default terminator to use if the terminator is not specified when creating the instrument. None means use the default terminator from PyVisa.

temperature: Parameter = self.add_parameter( "temperature", label="Temperature", unit="K", get_parser=partial(DynaCool._pick_one, 1, float), get_cmd="TEMP?", )

Parameter temperature

temperature_setpoint: Parameter = self.add_parameter( "temperature_setpoint", label="Temperature setpoint", unit="K", vals=vals.Numbers(1.6, 400), set_cmd=partial(self._temp_setter, "temperature_setpoint"), get_cmd=partial(self._temp_getter, "temperature_setpoint"), )

Parameter temperature_setpoint

temperature_rate: Parameter = self.add_parameter( "temperature_rate", label="Temperature settle rate", unit="K/s", vals=vals.Numbers(0.0002, 0.3), set_parser=lambda x: x * 60, # conversion to K/min get_parser=lambda x: x / 60, # conversion to K/s set_cmd=partial(self._temp_setter, "temperature_rate"), get_cmd=partial(self._temp_getter, "temperature_rate"), )

Parameter temperature_rate

temperature_settling: Parameter = self.add_parameter( "temperature_settling", label="Temperature settling mode", val_mapping={"fast settle": 0, "no overshoot": 1}, set_cmd=partial(self._temp_setter, "temperature_settling"), get_cmd=partial(self._temp_getter, "temperature_settling"), )

Parameter temperature_settling

temperature_state: Parameter = self.add_parameter( "temperature_state", label="Temperature tracking state", val_mapping={ "tracking": 2, "stable": 1, "near": 5, "chasing": 6, "pot operation": 7, "standby": 10, "diagnostic": 13, "impedance control error": 14, "failure": 15, }, get_parser=partial(DynaCool._pick_one, 2, int), get_cmd="TEMP?", )

Parameter temperature_state

field_measured: Parameter = self.add_parameter( "field_measured", label="Field", unit="T", get_cmd=self._measured_field_getter, )

Parameter field_measured

field_target: Parameter = self.add_parameter( "field_target", label="Field target", unit="T", get_cmd=None, set_cmd=None, vals=vals.Numbers(-14, 14), )

Parameter field_target

field_ramp: Parameter = self.add_parameter( "field_ramp", label="Field [ramp]", unit="T", get_cmd=None, set_cmd=self._field_ramp_setter, vals=vals.Numbers(-14, 14), )

Parameter field_ramp

field_rate: Parameter = self.add_parameter( "field_rate", label="Field rate", unit="T/s", get_parser=lambda x: x * 1e-4, # Oe to T set_parser=lambda x: x * 1e4, # T to Oe set_cmd=None, get_cmd=None, initial_value=0, vals=vals.Numbers(0, 1), )

Parameter field_rate

field_approach: Parameter = self.add_parameter( "field_approach", label="Field ramp approach", val_mapping={"linear": 0, "no overshoot": 1, "oscillate": 2}, set_cmd=None, get_cmd=None, initial_value="linear", )

Parameter field_approach

magnet_state: Parameter = self.add_parameter( "magnet_state", label="Magnet state", val_mapping={ "unknown": 0, "stable": 1, "switch warming": 2, "switch cool": 3, "holding": 4, "iterate": 5, "ramping": 6, "ramping ": 7, # map must have inverse "resetting": 8, "current error": 9, "switch error": 10, "quenching": 11, "charging error": 12, "power supply error": 14, "failure": 15, }, get_parser=partial(DynaCool._pick_one, 2, int), get_cmd="FELD?", )

Parameter magnet_state

chamber_temperature: Parameter = self.add_parameter( "chamber_temperature", label="Chamber Temperature", unit="K", get_parser=partial(DynaCool._pick_one, 1, float), get_cmd="CHAT?", )

Parameter chamber_temperature

chamber_state: Parameter = self.add_parameter( "chamber_state", label="Chamber vacuum state", val_mapping={ "purged and sealed": 1, "vented and sealed": 2, "sealed": 3, "performing purge/seal": 4, "performing vent/seal": 5, "pre-high vacuum": 6, "high vacuum": 7, "pumping continuously": 8, "flooding continuously": 9, }, get_parser=partial(DynaCool._pick_one, 1, int), get_cmd="CHAM?", )

Parameter chamber_state

field_tolerance: Parameter = self.add_parameter( "field_tolerance", label="Field Tolerance", unit="T", get_cmd=None, set_cmd=None, vals=vals.Numbers(0, 1e-2), set_parser=float, docstring="The tolerance below which fields are " "considered identical in a " "blocking ramp.", initial_value=5e-4, )

The tolerance below which fields are considered identical in a blocking ramp.

property error_code: int
visabackend: str = visabackend
visa_handle: pyvisa.resources.MessageBasedResource = visa_handle

The VISA resource used by this instrument.

visalib: str | None = visalib
parameters: dict[str, ParameterBase] = {}

All the parameters supported by this instrument. Usually populated via add_parameter().

functions: dict[str, Function] = {}

All the functions supported by this instrument. Usually populated via add_function().

submodules: dict[str, InstrumentModule | ChannelTuple] = {}

All the submodules of this instrument such as channel lists or logical groupings of parameters. Usually populated via add_submodule().

instrument_modules: dict[str, InstrumentModule] = {}

All the InstrumentModule of this instrument Usually populated via add_submodule().

log: InstrumentLoggerAdapter = get_instrument_logger(self, __name__)
metadata: dict[str, Any] = {}
get_idn() dict[str, str | None][source]

Parse a standard VISA *IDN? response into an ID dict.

Even though this is the VISA standard, it applies to various other types as well, such as IPInstruments, so it is included here in the Instrument base class.

Override this if your instrument does not support *IDN? or returns a nonstandard IDN string. This string is supposed to be a comma-separated list of vendor, model, serial, and firmware, but semicolon and colon are also common separators so we accept them here as well.

Returns:

A dict containing vendor, model, serial, and firmware.

ramp(mode: str = 'blocking') None[source]

Ramp the field to the value given by the field_target parameter

Parameters:

mode – how to ramp, either “blocking” or “non-blocking”. In “blocking” mode, this function does not return until the target field has been reached. In “non-blocking” mode, this function immediately returns.

write(cmd: str) None[source]

Since the error code is always returned, we must read it back

ask(cmd: str) str[source]

Since the error code is always returned, we must read it back

close() None[source]

Make sure to nicely close the server connection