Source code for silq.meta_instruments.Simrack

from functools import partial

from qcodes import Instrument
from qcodes.instrument.parameter import ManualParameter

[docs]class Simrack(Instrument): """Combiner of multiple SIM900 modules Note: This module is not finished and has never been tested. """ def __init__(self, name, SIMs, **kwargs): super().__init__(name, **kwargs) # If SIMs is not a list, we assume it's a single SIM, in which case we convert it to a list if not type(SIMs) == list: SIMs = [SIMs] self.SIMs = SIMs # self.total_channels = sum(map(lambda sim: sim.channels, self.SIMs)) for SIM_idx, SIM in enumerate(self.SIMs): #Find alphabetic character for each SIM instrument SIM_letter = chr(SIM_idx + ord('A')) for channel in range(1, SIM.channels+1): self.add_parameter('ch{}{}'.format(SIM_letter, channel), label='Corrected Gate Channel {}{} (V)'.format(SIM_letter, channel), get_cmd=partial(self.do_get_voltage,channel=channel, SIM_letter=SIM_letter), set_cmd=partial(self.do_set_voltage, channel=channel, SIM_letter=SIM_letter)) self.add_parameter('ch{}{}_divider'.format(SIM_letter, channel), label='Gate Channel {} divider'.format(channel), parameter_class=ManualParameter, initial_value=1 )
[docs] def do_get_voltage(self, SIM_letter, channel): SIM_idx = ord(SIM_letter) - ord('A') SIM = self.SIMs[SIM_idx] raw_voltage = eval('SIM.ch{}()'.format(channel)) divider = eval('self.ch{}{}_divider()'.format(SIM_letter, channel)) return raw_voltage/divider
[docs] def do_set_voltage(self, voltage, SIM_letter, channel): SIM_idx = ord(SIM_letter) - ord('A') SIM = self.SIMs[SIM_idx] divider = eval('self.ch{}{}_divider()'.format(SIM_letter, channel)) eval('SIM.ch{}({})'.format(channel, voltage * divider))