Source code for qcodes.instrument_drivers.Keysight.keysight_34980a_submodules

from typing import TYPE_CHECKING

from typing_extensions import deprecated

from qcodes.instrument import InstrumentBaseKWArgs, InstrumentChannel, VisaInstrument
from qcodes.utils import QCoDeSDeprecationWarning

if TYPE_CHECKING:
    from typing_extensions import Unpack


@deprecated("Unused module", category=QCoDeSDeprecationWarning, stacklevel=2)
class KeysightSubModule(InstrumentChannel):
    """
    A base class for submodules for the 34980A systems.

    Args:
        parent: the system which the module is installed on
        name: user defined name for the module
        slot: the slot the module is installed

    """

    def __init__(
        self,
        parent: VisaInstrument | InstrumentChannel,
        name: str,
        slot: int,
        **kwargs: "Unpack[InstrumentBaseKWArgs]",
    ) -> None:
        super().__init__(parent, name, **kwargs)

        self.slot = slot


[docs] class Keysight34980ASwitchMatrixSubModule(InstrumentChannel): def __init__( self, parent: VisaInstrument | InstrumentChannel, name: str, slot: int, **kwargs: "Unpack[InstrumentBaseKWArgs]", ) -> None: """ A base class for **Switch Matrix** submodules for the 34980A systems. Args: parent: the system which the module is installed on name: user defined name for the module slot: the slot the module is installed **kwargs: Forwarded to base class. """ super().__init__(parent, name, **kwargs) self.slot = slot
[docs] def validate_value(self, row: int, column: int) -> None: """ to check if the row and column number is within the range of the module layout. Args: row: row value column: column value """ raise NotImplementedError("Please subclass this")
[docs] def to_channel_list( self, paths: list[tuple[int, int]], wiring_config: str | None = None ) -> str: """ convert the (row, column) pair to a 4-digit channel number 'sxxx', where s is the slot number, xxx is generated from the numbering function. This may be different for different modules. Args: paths: list of channels to connect [(r1, c1), (r2, c2), (r3, c3)] wiring_config: for 1-wire matrices, values are 'MH', 'ML'; for 2-wire matrices, values are 'M1H', 'M2H', 'M1L', 'M2L' Returns: in the format of '(@sxxx, sxxx, sxxx, sxxx)', where sxxx is a 4-digit channel number """ raise NotImplementedError("Please subclass this")
[docs] def is_open(self, row: int, column: int) -> bool: """ to check if a channel is open/disconnected Args: row: row number column: column number Returns: True if the channel is open/disconnected False if it's closed/connected. """ self.validate_value(row, column) channel = self.to_channel_list([(row, column)]) message = self.ask(f"ROUT:OPEN? {channel}") return bool(int(message))
[docs] def is_closed(self, row: int, column: int) -> bool: """ to check if a channel is closed/connected Args: row: row number column: column number Returns: True if the channel is closed/connected False if it's open/disconnected. """ self.validate_value(row, column) channel = self.to_channel_list([(row, column)]) message = self.ask(f"ROUT:CLOSe? {channel}") return bool(int(message))
[docs] def connect(self, row: int, column: int) -> None: """ to connect/close the specified channels Args: row: row number column: column number """ self.validate_value(row, column) channel = self.to_channel_list([(row, column)]) self.write(f"ROUT:CLOSe {channel}")
[docs] def disconnect(self, row: int, column: int) -> None: """ to disconnect/open the specified channels Args: row: row number column: column number """ self.validate_value(row, column) channel = self.to_channel_list([(row, column)]) self.write(f"ROUT:OPEN {channel}")
[docs] def connect_paths(self, paths: list[tuple[int, int]]) -> None: """ to connect/close the specified channels. Args: paths: list of channels to connect [(r1, c1), (r2, c2), (r3, c3)] """ for row, column in paths: self.validate_value(row, column) channel_list_str = self.to_channel_list(paths) self.write(f"ROUTe:CLOSe {channel_list_str}")
[docs] def disconnect_paths(self, paths: list[tuple[int, int]]) -> None: """ to disconnect/open the specified channels. Args: paths: list of channels to connect [(r1, c1), (r2, c2), (r3, c3)] """ for row, column in paths: self.validate_value(row, column) channel_list_str = self.to_channel_list(paths) self.write(f"ROUTe:OPEN {channel_list_str}")
[docs] def are_closed(self, paths: list[tuple[int, int]]) -> list[bool]: """ to check if a list of channels is closed/connected Args: paths: list of channels [(r1, c1), (r2, c2), (r3, c3)] Returns: a list of True and/or False True if the channel is closed/connected False if it's open/disconnected. """ for row, column in paths: self.validate_value(row, column) channel_list_str = self.to_channel_list(paths) messages = self.ask(f"ROUTe:CLOSe? {channel_list_str}") return [bool(int(message)) for message in messages.split(",")]
[docs] def are_open(self, paths: list[tuple[int, int]]) -> list[bool]: """ to check if a list of channels is open/disconnected Args: paths: list of channels [(r1, c1), (r2, c2), (r3, c3)] Returns: a list of True and/or False True if the channel is closed/connected False if it's open/disconnected. """ for row, column in paths: self.validate_value(row, column) channel_list_str = self.to_channel_list(paths) messages = self.ask(f"ROUTe:OPEN? {channel_list_str}") return [bool(int(message)) for message in messages.split(",")]
@deprecated( "Use Keysight34980ASwitchMatrixSubModule", category=QCoDeSDeprecationWarning, stacklevel=2, ) class KeysightSwitchMatrixSubModule(Keysight34980ASwitchMatrixSubModule): pass