Skip to content

Commit

Permalink
Merge pull request #4594 from jenshnielsen/driver/qdev
Browse files Browse the repository at this point in the history
 Update Qdev drivers to conform with standard
  • Loading branch information
jenshnielsen authored Sep 12, 2022
2 parents 9539774 + 33726f3 commit 1d60455
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 17 deletions.
1 change: 1 addition & 0 deletions docs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ genapi:
../qcodes/instrument_drivers/Keithley \
../qcodes/instrument_drivers/keysight \
../qcodes/instrument_drivers/Lakeshore \
../qcodes/instrument_drivers/QDev/* \
../qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/private/* \
../qcodes/instrument_drivers/rigol/* \
../qcodes/instrument_drivers/stahl/*\
Expand Down
7 changes: 7 additions & 0 deletions docs/drivers_api/QDev.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.. _qdev_api :

QDev Drivers
============

.. automodule:: qcodes.instrument_drivers.QDev
:autosummary:
1 change: 1 addition & 0 deletions docs/make.bat
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ sphinx-apidoc -o _auto -d 10 ..\qcodes ^
..\qcodes\instrument_drivers\Keithley ^
..\qcodes\instrument_drivers\Lakeshore ^
..\qcodes\instrument_drivers\QuantumDesign\DynaCoolPPMS\private\* ^
..\qcodes\instrument_drivers\QDev\* ^
..\qcodes\instrument_drivers\rigol\* ^
..\qcodes\instrument_drivers\stahl\* ^
..\qcodes\instrument_drivers\stanford_research\* ^
Expand Down
52 changes: 35 additions & 17 deletions qcodes/instrument_drivers/QDev/QDac_channels.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
log = logging.getLogger(__name__)


class QDacChannel(InstrumentChannel):
class QDevQDacChannel(InstrumentChannel):
"""
A single output channel of the QDac.
Expand Down Expand Up @@ -118,7 +118,10 @@ def snapshot_base(
return snap


class QDacMultiChannelParameter(MultiChannelInstrumentParameter):
QDacChannel = QDevQDacChannel


class QDevQDacMultiChannelParameter(MultiChannelInstrumentParameter):
"""
The class to be returned by __getattr__ of the ChannelList. Here customised
for fast multi-readout of voltages.
Expand Down Expand Up @@ -151,7 +154,10 @@ def get_raw(self) -> Tuple[ParamRawDataType, ...]:
return output


class QDac(VisaInstrument):
QDacMultiChannelParameter = QDevQDacMultiChannelParameter


class QDevQDac(VisaInstrument):
"""
Channelised driver for the QDev digital-analog converter QDac
Expand Down Expand Up @@ -220,12 +226,16 @@ def __init__(self,
self.chan_range = range(1, 1 + self.num_chans)
self.channel_validator = vals.Ints(1, self.num_chans)

channels = ChannelList(self, "Channels", QDacChannel,
snapshotable=False,
multichan_paramclass=QDacMultiChannelParameter)
channels = ChannelList(
self,
"Channels",
QDevQDacChannel,
snapshotable=False,
multichan_paramclass=QDevQDacMultiChannelParameter,
)

for i in self.chan_range:
channel = QDacChannel(self, f'chan{i:02}', i)
channel = QDevQDacChannel(self, f"chan{i:02}", i)
channels.append(channel)
# Should raise valueerror if name is invalid (silently fails now)
self.add_submodule(f"ch{i:02}", channel)
Expand Down Expand Up @@ -314,7 +324,7 @@ def _set_voltage(
# happen inside _rampvoltage
self._rampvoltage(chan, fg, v_start, v_set, time)
else:
v_dac = QDac._get_v_dac_from_v_exp(channel, v_set)
v_dac = QDevQDac._get_v_dac_from_v_exp(channel, v_set)
# set the mode back to DC in case it had been changed
# and then set the voltage
self.write(f'wav {chan} 0 0 0;set {chan} {v_dac:.6f}')
Expand All @@ -338,16 +348,16 @@ def _get_voltage(self, chan: int) -> float:
# commands.
# Then we have the general relationship`v_exp = v_dac * attenuation`,
@staticmethod
def _get_attenuation(channel: QDacChannel) -> float:
def _get_attenuation(channel: QDevQDacChannel) -> float:
return 0.1 if channel.vrange.cache() == 1 else 1.0

@staticmethod
def _get_v_dac_from_v_exp(channel: QDacChannel, v_exp: float) -> float:
return v_exp / QDac._get_attenuation(channel)
def _get_v_dac_from_v_exp(channel: QDevQDacChannel, v_exp: float) -> float:
return v_exp / QDevQDac._get_attenuation(channel)

@staticmethod
def _get_v_exp_from_v_dac(channel: QDacChannel, v_dac: float) -> float:
return v_dac * QDac._get_attenuation(channel)
def _get_v_exp_from_v_dac(channel: QDevQDacChannel, v_dac: float) -> float:
return v_dac * QDevQDac._get_attenuation(channel)

def _set_vrange(self, chan: int, switchint: int) -> None:
"""
Expand All @@ -366,10 +376,10 @@ def _set_vrange(self, chan: int, switchint: int) -> None:
# for definitions.
channel = self.channels[chan-1]
if channel.vrange.cache() != switchint:
v_dac = QDac._get_v_dac_from_v_exp(channel, channel.v.cache())
v_dac = QDevQDac._get_v_dac_from_v_exp(channel, channel.v.cache())
channel.vrange.cache.set(switchint)
self._update_v_validator(channel, switchint)
channel.v.cache.set(QDac._get_v_exp_from_v_dac(channel, v_dac))
channel.v.cache.set(QDevQDac._get_v_exp_from_v_dac(channel, v_dac))

def _get_vrange(self, chan: int) -> float:
"""
Expand Down Expand Up @@ -458,7 +468,7 @@ def parse_line(line: str) -> Tuple[int, int, int, float]:
channel.vrange.cache.set(v_range)
self._update_v_validator(channel, v_range)
channel.irange.cache.set(i_range)
channel.v.cache.set(QDac._get_v_exp_from_v_dac(channel, v_dac))
channel.v.cache.set(QDevQDac._get_v_exp_from_v_dac(channel, v_dac))

chans_left.remove(chan)

Expand All @@ -471,7 +481,7 @@ def _read_currents(self) -> None:
_ = param.get()

@staticmethod
def _update_v_validator(channel: QDacChannel, v_range: int) -> None:
def _update_v_validator(channel: QDevQDacChannel, v_range: int) -> None:
range = (-10.01, 10.01) if v_range == 0 else (-1.001, 1.001)
channel.v.vals = vals.Numbers(*range)

Expand Down Expand Up @@ -734,3 +744,11 @@ def print_overview(self, update_currents: bool = False) -> None:
line += f": {returnmap[pp][value]}"
line += ". "
print(line)


class QDac(QDevQDac):
"""
Backwards compatibility alias for QDevQDac driver
"""

pass
3 changes: 3 additions & 0 deletions qcodes/instrument_drivers/QDev/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .QDac_channels import QDevQDac, QDevQDacChannel

__all__ = ["QDevQDacChannel", "QDevQDac"]

0 comments on commit 1d60455

Please sign in to comment.