Source code for qcodes_contrib_drivers.drivers.Lakeshore.modules.vs10

import numpy as np
from qcodes.instrument import Instrument, InstrumentChannel
from qcodes.validators import Numbers, Enum, Validator
from qcodes_contrib_drivers.drivers.Lakeshore.modules.sourceBase import sourceBase

[docs] class ValidateInput(Validator): """ Validator class for voltage high limit, voltage low limit voltage peak amplitude and voltage rms amplitude parameters """ def __init__(self, parent: InstrumentChannel, param: str) -> None: self.parent = parent self.param = param
[docs] def validate(self, value: float, context='') -> None: match self.param: case 'voltage_low_limit': self._validator = Numbers(-10.000000000001, self.parent.get('voltage_peak_amplitude')) case 'voltage_high_limit': self._validator = Numbers(self.parent.get('voltage_peak_amplitude'), 10.000000000001) case 'voltage_peak_amplitude': self._validator = Numbers(self.parent.get('voltage_low_limit'), self.parent.get('voltage_high_limit')) case 'voltage_rms_amplitude': self._validator = Numbers(self.parent.get('voltage_low_limit')/np.sqrt(2), self.parent.get('voltage_high_limit')/np.sqrt(2)) self._validator.validate(value)
[docs] class vs10(sourceBase): def __init__(self, parent: Instrument, name: str, Channel: str, **kwargs) -> None: super().__init__(parent, name, Channel, **kwargs) self.add_parameter(name='voltage_autorange_enabled', label='voltage autorange status', get_cmd=self._param_getter('VOLTage:RANGe:AUTO?'), get_parser = lambda status: True if int(status) == 1 else False, set_cmd=self._param_setter('VOLTage:RANGe:AUTO', '{}'), val_mapping={True: 1, False: 0}, ) self.add_parameter(name='voltage_range', label='voltage range', unit='V', get_cmd=self._param_getter('VOLTage:RANGe?'), set_cmd=self._param_setter('VOLTage:RANGe', '{}'), vals=Enum(10e-3, 100e-3, 1, 10), get_parser=float ) self.add_parameter(name='voltage_range_dc', label='voltage range dc', unit='V', get_cmd=self._param_getter('VOLTage:RANGe:DC?'), get_parser=float, set_cmd=self._param_setter('VOLTage:RANGe:DC', '{}'), vals=Enum(10e-3, 100e-3, 1, 10), ) self.add_parameter(name='voltage_low_limit', label='voltage low limit', unit='V', get_cmd=self._param_getter('VOLTage:LIMit:LOW?'), get_parser = float, set_cmd=self._param_setter('VOLTage:LIMit:LOW', '{}'), vals=ValidateInput(self, 'voltage_low_limit') ) self.add_parameter(name='voltage_high_limit', label='voltage high limit', unit='V', get_cmd=self._param_getter('VOLTage:LIMit:HIGH?'), get_parser = float, set_cmd=self._param_setter('VOLTage:LIMit:HIGH', '{}'), vals=ValidateInput(self, 'voltage_high_limit') ) self.add_parameter(name='current_protection_limit', label='current protection limit', unit='A', get_cmd=self._param_getter('CURRent:PROTection?'), get_parser = float, set_cmd=self._param_setter('CURRent:PROTection', '{}') ) self.add_parameter(name='current_protection_tripped', label='current protection tripped', get_cmd=self._param_getter('CURRent:PROTection:TRIPped?'), get_parser = lambda status: True if int(status) == 1 else False, val_mapping={True: 1, False: 0} ) self.add_parameter(name='voltage_peak_amplitude', label='voltage peak amplitude', unit='V', get_cmd=self._param_getter('VOLTage:LEVel:AMPLitude:PEAK?'), get_parser = float, set_cmd=self._param_setter('VOLTage:LEVel:AMPLitude:PEAK', '{}'), vals=ValidateInput(self, 'voltage_peak_amplitude') ) self.add_parameter(name='voltage_rms_amplitude', label='voltage rms amplitude', unit='V RMS', get_cmd=self._get_RMS, set_cmd=self._param_setter('VOLTage:LEVel:AMPLitude:RMS', '{}'), vals=ValidateInput(self, 'voltage_rms_amplitude') ) self.add_parameter(name='voltage_offset', label='voltage offset', unit='V', get_cmd=self._param_getter('VOLTage:LEVel:OFFSet?'), get_parser = float, set_cmd=self._param_setter('VOLTage:LEVel:OFFSet', '{}') ) def _get_RMS(self) -> float|None: # get function for getting shape shape_cmd = self._param_getter('FUNCtion:SHAPe?') # ask the instrument for the current shape current_shape = self.ask(shape_cmd) if current_shape == 'SINUSOID': # if current shape is SINUSOID ask for RMS parameter rms_cmd = self._param_getter('VOLTage:LEVel:AMPLitude:RMS?') rms = float(self.ask(rms_cmd)) else: # if not SINUSOID set RMS as None rms = None return rms