Source code for qcodes.instrument_drivers.tektronix.Keithley_2600
-from qcodes import VisaInstrument
+import warnings
+
+from qcodes import VisaInstrument
+from qcodes.instrument.channel import InstrumentChannel
+from qcodes.instrument.base import Instrument
+import qcodes.utils.validators as vals
[docs]class Keithley_2600(VisaInstrument):
"""
- channel: use channel 'a' or 'b'
-
This is the qcodes driver for the Keithley_2600 Source-Meter series,
tested with Keithley_2614B
Status: beta-version.
TODO:
- - Add all parameters that are in the manual
- - range and limit should be set according to mode
+ - Make a channelised version for the two channels
- add ramping and such stuff
"""
- def __init__(self, name, address, channel, **kwargs):
+ def __init__(self, name: str, address: str, channel: str,
+ model: str=None, **kwargs) -> None:
+ """
+ Args:
+ name: Name to use internally in QCoDeS
+ address: VISA ressource address
+ channel: Either 'a' or 'b'
+ model: The model type, e.g. '2614B'
+ """
+
+ warnings.warn("This Keithley driver is old and will be removed "
+ "from QCoDeS soon. Use Keithley_2600_channels "
+ "instead, it is MUCH better.", UserWarning)
+
super().__init__(name, address, terminator='\n', **kwargs)
+
+ model = self.ask('localnode.model')
+
+ knownmodels = ['2601B', '2602B', '2604B', '2611B', '2612B',
+ '2614B', '2635B', '2636B']
+ if model not in knownmodels:
+ kmstring = ('{}, '*(len(knownmodels)-1)).format(*knownmodels[:-1])
+ kmstring += 'and {}.'.format(knownmodels[-1])
+ raise ValueError('Unknown model. Known model are: ' +
+ kmstring)
+
+ self.model = model
+
+ vranges = {'2601B': [0.1, 1, 6, 40],
+ '2602B': [0.1, 1, 6, 40],
+ '2604B': [0.1, 1, 6, 40],
+ '2611B': [0.2, 2, 20, 200],
+ '2612B': [0.2, 2, 20, 200],
+ '2614B': [0.2, 2, 20, 200],
+ '2635B': [0.2, 2, 20, 200],
+ '2636B': [0.2, 2, 20, 200]
+ }
+
+ # TODO: In pulsed mode, models 2611B, 2612B, and 2614B
+ # actually allow up to 10 A.
+ iranges = {'2601B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 3],
+ '2602B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 3],
+ '2604B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 3],
+ '2611B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 1.5],
+ '2612B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 1.5],
+ '2614B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 1.5],
+ '2634B': [1e-9, 10e-9, 100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 10e-6, 100e-3, 1, 1.5],
+ '2635B': [1e-9, 10e-9, 100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 10e-6, 100e-3, 1, 1.5],
+ '2636B': [1e-9, 10e-9, 100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 10e-6, 100e-3, 1, 1.5]}
+
self._channel = channel
self.add_parameter('volt',
@@ -200,26 +259,51 @@ Source code for qcodes.instrument_drivers.tektronix.Keithley_2600
get_cmd='source.func',
get_parser=float,
set_cmd='source.func={:d}',
- val_mapping={'current': 0, 'voltage': 1})
+ val_mapping={'current': 0, 'voltage': 1},
+ docstring='Selects the output source.')
self.add_parameter('output',
get_cmd='source.output',
get_parser=float,
set_cmd='source.output={:d}',
val_mapping={'on': 1, 'off': 0})
- # Source range
- # needs get after set
- self.add_parameter('rangev',
+ self.add_parameter('nplc',
+ label='Number of power line cycles',
+ set_cmd='measure.nplc={:.4f}',
+ get_cmd='measure.nplc',
+ get_parser=float,
+ vals=vals.Numbers(0.001, 25))
+ # volt range
+ # needs get after set (WilliamHPNielsen): why?
+ self.add_parameter('sourcerange_v',
+ label='voltage source range',
get_cmd='source.rangev',
get_parser=float,
set_cmd='source.rangev={:.4f}',
- unit='V')
- # Measure range
+ unit='V',
+ vals=vals.Enum(*vranges[self.model]))
+ self.add_parameter('measurerange_v',
+ label='voltage measure range',
+ get_cmd='measure.rangev',
+ set_cmd='measure.rangev={:.4f}',
+ unit='V',
+ vals=vals.Enum(*vranges[self.model]))
+ # current range
# needs get after set
- self.add_parameter('rangei',
+ self.add_parameter('sourcerange_i',
+ label='current source range',
get_cmd='source.rangei',
get_parser=float,
set_cmd='source.rangei={:.4f}',
- unit='A')
+ unit='A',
+ vals=vals.Enum(*iranges[self.model]))
+
+ self.add_parameter('measurerange_i',
+ label='current measure range',
+ get_cmd='measure.rangei',
+ get_parser=float,
+ set_cmd='measure.rangei={:.4f}',
+ unit='A',
+ vals=vals.Enum(*iranges[self.model]))
# Compliance limit
self.add_parameter('limitv',
get_cmd='source.limitv',
@@ -232,9 +316,16 @@ Source code for qcodes.instrument_drivers.tektronix.Keithley_2600
get_parser=float,
set_cmd='source.limiti={:.4f}',
unit='A')
+ # display
+ self.add_parameter('display_settext',
+ set_cmd=self._display_settext,
+ vals=vals.Strings())
self.connect_message()
+ def _display_settext(self, text):
+ self.visa_handle.write('display.settext("{}")'.format(text))
+
[docs] def get_idn(self):
IDN = self.ask_raw('*IDN?')
vendor, model, serial, firmware = map(str.strip, IDN.split(','))
@@ -244,8 +335,32 @@ Source code for qcodes.instrument_drivers.tektronix.Keithley_2600
'serial': serial, 'firmware': firmware}
return IDN
+[docs] def display_clear(self):
+ """
+ This function clears the display, but also leaves it in user mode
+ """
+ self.visa_handle.write('display.clear()')
+
+[docs] def display_normal(self):
+ """
+ Set the display to the default mode
+ """
+ self.visa_handle.write('display.screen = display.SMUA_SMUB')
+
+[docs] def exit_key(self):
+ """
+ Get back the normal screen after an error:
+ send an EXIT key press event
+ """
+ self.visa_handle.write('display.sendkey(75)')
+
+ """
+ Reset instrument to factory defaults
+ """
+ self.write('reset()')
+ # remember to update all the metadata
+ self.snapshot(update=True)
diff --git a/_modules/qcodes/instrument_drivers/tektronix/Keithley_2600_channels.html b/_modules/qcodes/instrument_drivers/tektronix/Keithley_2600_channels.html
new file mode 100644
index 00000000000..c9f12e960d2
--- /dev/null
+++ b/_modules/qcodes/instrument_drivers/tektronix/Keithley_2600_channels.html
@@ -0,0 +1,680 @@
+
+
+
+
+
+
+
+
+
+
+ qcodes.instrument_drivers.tektronix.Keithley_2600_channels — QCoDeS 0.1.7 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Source code for qcodes.instrument_drivers.tektronix.Keithley_2600_channels
+import logging
+import struct
+import numpy as np
+from typing import List, Dict
+
+import qcodes as qc
+from qcodes import VisaInstrument, DataSet
+from qcodes.instrument.channel import InstrumentChannel
+from qcodes.instrument.base import Instrument
+from qcodes.instrument.parameter import ArrayParameter
+import qcodes.utils.validators as vals
+
+
+log = logging.getLogger(__name__)
+
+
+[docs]class LuaSweepParameter(ArrayParameter):
+ """
+ Parameter class to hold the data from a
+ deployed Lua script sweep.
+ """
+
+ def __init__(self, name: str, instrument: Instrument) -> None:
+
+ super().__init__(name=name,
+ shape=(1,),
+ docstring='Holds a sweep')
+
+ self._instrument = instrument
+
+[docs] def prepareSweep(self, start: float, stop: float, steps: int,
+ mode: str) -> None:
+ """
+ Builds setpoints and labels
+
+ Args:
+ start: Starting point of the sweep
+ stop: Endpoint of the sweep
+ steps: No. of sweep steps
+ mode: Type of sweep, either 'IV' (voltage sweep)
+ or 'VI' (current sweep)
+ """
+
+ if mode not in ['IV', 'VI']:
+ raise ValueError('mode must be either "VI" or "IV"')
+
+ self.shape = (steps,)
+
+ if mode == 'IV':
+ self.unit = 'A'
+ self.setpoint_names = ('Voltage',)
+ self.setpoint_units = ('V',)
+ self.label = 'current'
+ self.name = 'iv_sweep'
+
+ if mode == 'VI':
+ self.unit = 'V'
+ self.setpoint_names = ('Current',)
+ self.setpoint_units = ('A',)
+ self.label = 'voltage'
+ self.name = 'vi_sweep'
+
+ self.setpoints = (tuple(np.linspace(start, stop, steps)),)
+
+ self.start = start
+ self.stop = stop
+ self.steps = steps
+ self.mode = mode
+
+[docs] def get(self) -> np.ndarray:
+
+ data = self._instrument._fast_sweep(self.start,
+ self.stop,
+ self.steps,
+ self.mode)
+
+ return data
+
+
+[docs]class KeithleyChannel(InstrumentChannel):
+ """
+ Class to hold the two Keithley channels, i.e.
+ SMUA and SMUB.
+ """
+
+ def __init__(self, parent: Instrument, name: str, channel: str) -> None:
+ """
+ Args:
+ parent: The Instrument instance to which the channel is
+ to be attached.
+ name: The 'colloquial' name of the channel
+ channel: The name used by the Keithley, i.e. either
+ 'smua' or 'smub'
+ """
+
+ if channel not in ['smua', 'smub']:
+ raise ValueError('channel must be either "smub" or "smua"')
+
+ super().__init__(parent, name)
+ self.model = self._parent.model
+ vranges = self._parent._vranges
+ iranges = self._parent._iranges
+
+ self.add_parameter('volt',
+ get_cmd='{}.measure.v()'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.levelv={}'.format(channel,
+ '{:.12f}'),
+ label='Voltage',
+ unit='V')
+
+ self.add_parameter('curr',
+ get_cmd='{}.measure.i()'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.leveli={}'.format(channel,
+ '{:.12f}'),
+ label='Current',
+ unit='A')
+
+ self.add_parameter('mode',
+ get_cmd='{}.source.func'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.func={}'.format(channel, '{:d}'),
+ val_mapping={'current': 0, 'voltage': 1},
+ docstring='Selects the output source.')
+
+ self.add_parameter('output',
+ get_cmd='{}.source.output'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.output={}'.format(channel,
+ '{:d}'),
+ val_mapping={'on': 1, 'off': 0})
+
+ self.add_parameter('nplc',
+ label='Number of power line cycles',
+ set_cmd='{}.measure.nplc={}'.format(channel,
+ '{:.4f}'),
+ get_cmd='{}.measure.nplc'.format(channel),
+ get_parser=float,
+ vals=vals.Numbers(0.001, 25))
+ # volt range
+ # needs get after set (WilliamHPNielsen): why?
+ self.add_parameter('sourcerange_v',
+ label='voltage source range',
+ get_cmd='{}.source.rangev'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.rangev={}'.format(channel,
+ '{:.4f}'),
+ unit='V',
+ vals=vals.Enum(*vranges[self.model]))
+ self.add_parameter('measurerange_v',
+ label='voltage measure range',
+ get_cmd='{}.measure.rangev'.format(channel),
+ set_cmd='{}.measure.rangev={}'.format(channel,
+ '{:.4f}'),
+ unit='V',
+ vals=vals.Enum(*vranges[self.model]))
+ # current range
+ # needs get after set
+ self.add_parameter('sourcerange_i',
+ label='current source range',
+ get_cmd='{}.source.rangei'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.rangei={}'.format(channel,
+ '{:.4f}'),
+ unit='A',
+ vals=vals.Enum(*iranges[self.model]))
+
+ self.add_parameter('measurerange_i',
+ label='current measure range',
+ get_cmd='{}.measure.rangei'.format(channel),
+ get_parser=float,
+ set_cmd='{}.measure.rangei={}'.format(channel,
+ '{:.4f}'),
+ unit='A',
+ vals=vals.Enum(*iranges[self.model]))
+ # Compliance limit
+ self.add_parameter('limitv',
+ get_cmd='{}.source.limitv'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.limitv={}'.format(channel,
+ '{:.4f}'),
+ unit='V')
+ # Compliance limit
+ self.add_parameter('limiti',
+ get_cmd='{}.source.limiti'.format(channel),
+ get_parser=float,
+ set_cmd='{}.source.limiti={}'.format(channel,
+ '{:.4f}'),
+ unit='A')
+
+ self.add_parameter('fastsweep',
+ parameter_class=LuaSweepParameter)
+
+ self.channel = channel
+
+ # We need to avoid updating the sweep parameter
+[docs] def snapshot_base(self, update: bool=False) -> Dict:
+ params_to_skip_update = ['fastsweep']
+ dct = super().snapshot_base(update=update,
+ params_to_skip_update=params_to_skip_update)
+ return dct
+
+[docs] def reset(self):
+ """
+ Reset instrument to factory defaults.
+ This resets only the relevant channel.
+ """
+ self.write('{}.reset()'.format(self.channel))
+ # remember to update all the metadata
+ log.debug('Reset channel {}.'.format(self.channel) +
+ 'Updating settings...')
+ self.snapshot(update=True)
+
+[docs] def doFastSweep(self, start: float, stop: float,
+ steps: int, mode: str) -> DataSet:
+ """
+ Perform a fast sweep using a deployed lua script and
+ return a QCoDeS DataSet with the sweep.
+
+ Args:
+ start: starting sweep value (V or A)
+ stop: end sweep value (V or A)
+ steps: number of steps
+ mode: What kind of sweep to make.
+ 'IV' (I versus V) or 'VI' (V versus I)
+ """
+ # prepare setpoints, units, name
+ self.fastsweep.prepareSweep(start, stop, steps, mode)
+
+ data = qc.Measure(self.fastsweep).run()
+
+ return data
+
+ def _fast_sweep(self, start: float, stop: float, steps: int,
+ mode: str='IV') -> np.ndarray:
+ """
+ Perform a fast sweep using a deployed Lua script.
+ This is the engine that forms the script, uploads it,
+ runs it, collects the data, and casts the data correctly.
+
+ Args:
+ start: starting voltage
+ stop: end voltage
+ steps: number of steps
+ mode: What kind of sweep to make.
+ 'IV' (I versus V) or 'VI' (V versus I)
+ """
+
+ channel = self.channel
+
+ # an extra visa query, a necessary precaution
+ # to avoid timing out when waiting for long
+ # measurements
+ nplc = self.nplc()
+
+ dV = (stop-start)/(steps-1)
+
+ if mode == 'IV':
+ meas = 'i'
+ sour = 'v'
+ func = '1'
+
+ if mode == 'VI':
+ meas = 'v'
+ sour = 'i'
+ func = '0'
+
+ script = ['{}.measure.nplc = {:.12f}'.format(channel, nplc),
+ '{}.source.output = 1'.format(channel),
+ 'startX = {:.12f}'.format(start),
+ 'dX = {:.12f}'.format(dV),
+ '{}.source.output = 1'.format(channel),
+ '{}.source.func = {}'.format(channel, func),
+ '{}.measure.count = 1'.format(channel),
+ '{}.nvbuffer1.clear()'.format(channel),
+ '{}.nvbuffer1.appendmode = 1'.format(channel),
+ 'for index = 1, {} do'.format(steps),
+ ' target = startX + (index-1)*dX',
+ ' {}.source.level{} = target'.format(channel, sour),
+ ' {}.measure.{}({}.nvbuffer1)'.format(channel, meas,
+ channel),
+ 'end',
+ 'format.data = format.REAL32',
+ 'format.byteorder = format.LITTLEENDIAN',
+ 'printbuffer(1, {}, {}.nvbuffer1.readings)'.format(steps,
+ channel)]
+
+ self.write(self._parent._scriptwrapper(program=script, debug=True))
+ # we must wait for the script to execute
+ oldtimeout = self._parent.visa_handle.timeout
+ self._parent.visa_handle.timeout = 2*1000*steps*nplc/50 + 5000
+
+ # now poll all the data
+ # The problem is that a '\n' character might by chance be present in
+ # the data
+ fullsize = 4*steps + 3
+ received = 0
+ data = b''
+ while received < fullsize:
+ data_temp = self._parent.visa_handle.read_raw()
+ received += len(data_temp)
+ data += data_temp
+
+ # From the manual p. 7-94, we know that a b'#0' is prepended
+ # to the data and a b'\n' is appended
+ data = data[2:-1]
+
+ outdata = np.array(list(struct.iter_unpack('<f', data)))
+ outdata = np.reshape(outdata, len(outdata))
+
+ self._parent.visa_handle.timeout = oldtimeout
+
+ return outdata
+
+
+[docs]class Keithley_2600(VisaInstrument):
+ """
+ This is the qcodes driver for the Keithley_2600 Source-Meter series,
+ tested with Keithley_2614B
+
+ """
+ def __init__(self, name: str, address: str, **kwargs) -> None:
+ """
+ Args:
+ name: Name to use internally in QCoDeS
+ address: VISA ressource address
+ """
+ super().__init__(name, address, terminator='\n', **kwargs)
+
+ model = self.ask('localnode.model')
+
+ knownmodels = ['2601B', '2602B', '2604B', '2611B', '2612B',
+ '2614B', '2635B', '2636B']
+ if model not in knownmodels:
+ kmstring = ('{}, '*(len(knownmodels)-1)).format(*knownmodels[:-1])
+ kmstring += 'and {}.'.format(knownmodels[-1])
+ raise ValueError('Unknown model. Known model are: ' +
+ kmstring)
+
+ self.model = model
+
+ self._vranges = {'2601B': [0.1, 1, 6, 40],
+ '2602B': [0.1, 1, 6, 40],
+ '2604B': [0.1, 1, 6, 40],
+ '2611B': [0.2, 2, 20, 200],
+ '2612B': [0.2, 2, 20, 200],
+ '2614B': [0.2, 2, 20, 200],
+ '2635B': [0.2, 2, 20, 200],
+ '2636B': [0.2, 2, 20, 200]}
+
+ # TODO: In pulsed mode, models 2611B, 2612B, and 2614B
+ # actually allow up to 10 A.
+ self._iranges = {'2601B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 3],
+ '2602B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 3],
+ '2604B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 3],
+ '2611B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 1.5],
+ '2612B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 1.5],
+ '2614B': [100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 0.01, 0.1, 1, 1.5],
+ '2634B': [1e-9, 10e-9, 100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 10e-6, 100e-3, 1, 1.5],
+ '2635B': [1e-9, 10e-9, 100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 10e-6, 100e-3, 1, 1.5],
+ '2636B': [1e-9, 10e-9, 100e-9, 1e-6, 10e-6, 100e-6,
+ 1e-3, 10e-6, 100e-3, 1, 1.5]}
+
+ # Add the channel to the instrument
+ for ch in ['a', 'b']:
+ ch_name = 'smu{}'.format(ch)
+ channel = KeithleyChannel(self, ch_name, ch_name)
+ self.add_submodule(ch_name, channel)
+
+ # display
+ self.add_parameter('display_settext',
+ set_cmd=self._display_settext,
+ vals=vals.Strings())
+
+ self.connect_message()
+
+ def _display_settext(self, text):
+ self.visa_handle.write('display.settext("{}")'.format(text))
+
+[docs] def get_idn(self):
+ IDN = self.ask_raw('*IDN?')
+ vendor, model, serial, firmware = map(str.strip, IDN.split(','))
+ model = model[6:]
+
+ IDN = {'vendor': vendor, 'model': model,
+ 'serial': serial, 'firmware': firmware}
+ return IDN
+
+[docs] def display_clear(self):
+ """
+ This function clears the display, but also leaves it in user mode
+ """
+ self.visa_handle.write('display.clear()')
+
+[docs] def display_normal(self):
+ """
+ Set the display to the default mode
+ """
+ self.visa_handle.write('display.screen = display.SMUA_SMUB')
+
+[docs] def exit_key(self):
+ """
+ Get back the normal screen after an error:
+ send an EXIT key press event
+ """
+ self.visa_handle.write('display.sendkey(75)')
+
+[docs] def reset(self):
+ """
+ Reset instrument to factory defaults.
+ This resets both channels.
+ """
+ self.write('reset()')
+ # remember to update all the metadata
+ log.debug('Reset instrument. Re-querying settings...')
+ self.snapshot(update=True)
+
+[docs] def ask(self, cmd: str) -> str:
+ """
+ Override of normal ask. This is important, since queries to the
+ instrument must be wrapped in 'print()'
+ """
+ return super().ask('print({:s})'.format(cmd))
+
+ @staticmethod
+ def _scriptwrapper(program: List[str], debug: bool=False) -> str:
+ """
+ wraps a program so that the output can be put into
+ visa_handle.write and run.
+ The script will run immediately as an anonymous script.
+
+ Args:
+ program: A list of program instructions. One line per
+ list item, e.g. ['for ii = 1, 10 do', 'print(ii)', 'end' ]
+ """
+ mainprog = '\r\n'.join(program) + '\r\n'
+ wrapped = 'loadandrunscript\r\n{}endscript\n'.format(mainprog)
+ if debug:
+ log.debug('Wrapped the following script:')
+ log.debug(wrapped)
+ return wrapped
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_notebooks/Tutorial.html b/_notebooks/Tutorial.html
index a74ed4defd1..854ee262f16 100644
--- a/_notebooks/Tutorial.html
+++ b/_notebooks/Tutorial.html
@@ -37,7 +37,7 @@
-
+
@@ -538,7 +538,7 @@ Example: multiple 2D measurements with live plotting
- Next
+ Next
Previous
diff --git a/_notebooks/benchmarking/Agilent 34411A versus Keysight 34465A.html b/_notebooks/benchmarking/Agilent 34411A versus Keysight 34465A.html
index ff50b3f836c..799bfc179a2 100644
--- a/_notebooks/benchmarking/Agilent 34411A versus Keysight 34465A.html
+++ b/_notebooks/benchmarking/Agilent 34411A versus Keysight 34465A.html
@@ -37,7 +37,7 @@
-
+
@@ -110,6 +110,10 @@
Part two - QCoDeS looping
+Benchmark
+NPLC = 0.5, N = 100
+NPLC = 0.5, N = 1000
+NPLC = 0.05, N = 1000
Benchmark of Keysight 34465A
Results summary
QDac and Keysight 34465 sync and buffer
@@ -437,7 +441,7 @@ 2D Sweep
- Next
+ Next
Previous
diff --git a/_notebooks/benchmarking/Benchmark of Keithley 2600 lua script versus set-get.html b/_notebooks/benchmarking/Benchmark of Keithley 2600 lua script versus set-get.html
new file mode 100644
index 00000000000..1176af35679
--- /dev/null
+++ b/_notebooks/benchmarking/Benchmark of Keithley 2600 lua script versus set-get.html
@@ -0,0 +1,1236 @@
+
+
+
+
+
+
+
+
+
+
+ Benchmark — QCoDeS 0.1.7 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Benchmark¶
+Below we use two methods of the Keithley 2600 to make an IV-curve.
+Plugged into the terminal is a 5 MOhm resistor. The voltage is swept
+from 1 V to 10 V.
+The two methods are normal “naive” QCoDeS set-get and deployed script
+mode. In the former mode, a set
command is send for each voltage set
+point and a get
command is sent for each current value to be
+measured. In the latter mode, a Lua script is formed and uploaded to the
+SourceMeter. The script then runs locally on the machine and all data is
+polled in one go (in a binary format).
+
+Results¶
+
+
+
+
+
+
+Imports and initialisation¶
+import qcodes as qc
+from qcodes.instrument.base import Instrument
+from qcodes.instrument_drivers.tektronix.Keithley_2600 import Keithley_2600
+from qcodes.instrument_drivers.tektronix.Keithley_2600_channels import Keithley_2600 as Keithley_2600_channels
+from typing import List
+from qcodes import DataSet
+from qcodes.instrument.parameter import ArrayParameter
+import struct
+
+
+% matplotlib notebook
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+keith = Keithley_2600_channels('keith', 'TCPIP0::192.168.15.116::inst0::INSTR', model='2614B')
+
+
+Connected to: Keithley Instruments Inc. 2614B (serial:4084407, firmware:3.2.1) in 0.15s
+
+
+
+
+
+NPLC = 0.5, N = 100¶
+# Preparation for a simple I-V curve with a 5 MOhm resistor
+
+keith.smua.reset()
+keith.smua.nplc(0.5)
+keith.smua.mode('voltage')
+keith.smua.sourcerange_v(20)
+keith.smua.measurerange_i(100e-6)
+keith.smua.output('on')
+
+N = 100
+
+
+
+SET-GET¶
+%%timeit
+
+loop = qc.Loop(keith.smua.volt.sweep(1, 10, num=N)).each(keith.smua.curr)
+data = loop.get_data_set(name='N_{}_setget'.format(N))
+_ = loop.run() # run the loop
+
+
+Started at 2017-09-18 16:49:59
+DataSet:
+ location = 'data/2017-09-18/#076_N_100_setget_16-49-59'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:00
+Started at 2017-09-18 16:50:00
+DataSet:
+ location = 'data/2017-09-18/#077_N_100_setget_16-50-00'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:02
+Started at 2017-09-18 16:50:02
+DataSet:
+ location = 'data/2017-09-18/#078_N_100_setget_16-50-02'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:03
+Started at 2017-09-18 16:50:03
+DataSet:
+ location = 'data/2017-09-18/#079_N_100_setget_16-50-03'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:04
+Started at 2017-09-18 16:50:04
+DataSet:
+ location = 'data/2017-09-18/#080_N_100_setget_16-50-04'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:05
+Started at 2017-09-18 16:50:05
+DataSet:
+ location = 'data/2017-09-18/#081_N_100_setget_16-50-05'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:07
+Started at 2017-09-18 16:50:07
+DataSet:
+ location = 'data/2017-09-18/#082_N_100_setget_16-50-07'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:08
+Started at 2017-09-18 16:50:08
+DataSet:
+ location = 'data/2017-09-18/#083_N_100_setget_16-50-08'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:50:09
+1.29 s ± 15.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+
+
+SCRIPT¶
+%%timeit
+
+data = keith.smua.doFastSweep(1, 10, N, mode='IV')
+
+
+DataSet:
+ location = 'data/2017-09-18/#084_{name}_16-50-18'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:19
+DataSet:
+ location = 'data/2017-09-18/#085_{name}_16-50-19'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:20
+DataSet:
+ location = 'data/2017-09-18/#086_{name}_16-50-20'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:21
+DataSet:
+ location = 'data/2017-09-18/#087_{name}_16-50-21'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:22
+DataSet:
+ location = 'data/2017-09-18/#088_{name}_16-50-22'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:23
+DataSet:
+ location = 'data/2017-09-18/#089_{name}_16-50-23'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:24
+DataSet:
+ location = 'data/2017-09-18/#090_{name}_16-50-24'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:26
+DataSet:
+ location = 'data/2017-09-18/#091_{name}_16-50-26'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:50:27
+1.08 s ± 4.67 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+
+
+
+NPLC = 0.5, N = 1000¶
+# Preparation for a simple I-V curve with a 5 MOhm resistor
+
+keith.smua.reset()
+keith.smua.nplc(0.5)
+keith.smua.mode('voltage')
+keith.smua.sourcerange_v(20)
+keith.smua.measurerange_i(100e-6)
+keith.smua.output('on')
+
+N = 1000
+
+
+
+SET-GET¶
+%%timeit
+
+loop = qc.Loop(keith.smua.volt.sweep(1, 10, num=N)).each(keith.smua.curr)
+data = loop.get_data_set(name='N_{}_setget'.format(N))
+_ = loop.run() # run the loop
+
+
+Started at 2017-09-18 16:51:20
+DataSet:
+ location = 'data/2017-09-18/#092_N_1000_setget_16-51-20'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:51:32
+Started at 2017-09-18 16:51:32
+DataSet:
+ location = 'data/2017-09-18/#093_N_1000_setget_16-51-32'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:51:45
+Started at 2017-09-18 16:51:45
+DataSet:
+ location = 'data/2017-09-18/#094_N_1000_setget_16-51-45'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:51:58
+Started at 2017-09-18 16:51:58
+DataSet:
+ location = 'data/2017-09-18/#095_N_1000_setget_16-51-58'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:52:10
+Started at 2017-09-18 16:52:10
+DataSet:
+ location = 'data/2017-09-18/#096_N_1000_setget_16-52-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:52:23
+Started at 2017-09-18 16:52:23
+DataSet:
+ location = 'data/2017-09-18/#097_N_1000_setget_16-52-23'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:52:35
+Started at 2017-09-18 16:52:35
+DataSet:
+ location = 'data/2017-09-18/#098_N_1000_setget_16-52-35'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:52:48
+Started at 2017-09-18 16:52:48
+DataSet:
+ location = 'data/2017-09-18/#099_N_1000_setget_16-52-48'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:53:00
+12.6 s ± 21.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+
+
+SCRIPT¶
+%%timeit
+
+data = keith.smua.doFastSweep(1, 10, N, mode='IV')
+
+
+DataSet:
+ location = 'data/2017-09-18/#100_{name}_16-53-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:53:24
+DataSet:
+ location = 'data/2017-09-18/#101_{name}_16-53-24'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:53:35
+DataSet:
+ location = 'data/2017-09-18/#102_{name}_16-53-35'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:53:45
+DataSet:
+ location = 'data/2017-09-18/#103_{name}_16-53-45'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:53:56
+DataSet:
+ location = 'data/2017-09-18/#104_{name}_16-53-56'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:54:06
+DataSet:
+ location = 'data/2017-09-18/#105_{name}_16-54-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:54:17
+DataSet:
+ location = 'data/2017-09-18/#106_{name}_16-54-17'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:54:27
+DataSet:
+ location = 'data/2017-09-18/#107_{name}_16-54-27'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:54:38
+10.5 s ± 12.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+# Preparation for a simple I-V curve with a 5 MOhm resistor
+
+keith.smua.reset()
+keith.smua.nplc(0.05)
+keith.smua.mode('voltage')
+keith.smua.sourcerange_v(20)
+keith.smua.measurerange_i(100e-6)
+keith.smua.output('on')
+
+N = 100
+
+
+
+
+SET-GET¶
+%%timeit
+
+loop = qc.Loop(keith.smua.volt.sweep(1, 10, num=N)).each(keith.smua.curr)
+data = loop.get_data_set(name='N_{}_setget'.format(N))
+_ = loop.run() # run the loop
+
+
+Started at 2017-09-18 16:56:13
+DataSet:
+ location = 'data/2017-09-18/#108_N_100_setget_16-56-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:14
+Started at 2017-09-18 16:56:14
+DataSet:
+ location = 'data/2017-09-18/#109_N_100_setget_16-56-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:14
+Started at 2017-09-18 16:56:14
+DataSet:
+ location = 'data/2017-09-18/#110_N_100_setget_16-56-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:14
+Started at 2017-09-18 16:56:14
+DataSet:
+ location = 'data/2017-09-18/#111_N_100_setget_16-56-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:15
+Started at 2017-09-18 16:56:15
+DataSet:
+ location = 'data/2017-09-18/#112_N_100_setget_16-56-15'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:15
+Started at 2017-09-18 16:56:15
+DataSet:
+ location = 'data/2017-09-18/#113_N_100_setget_16-56-15'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:15
+Started at 2017-09-18 16:56:15
+DataSet:
+ location = 'data/2017-09-18/#114_N_100_setget_16-56-15'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:16
+Started at 2017-09-18 16:56:16
+DataSet:
+ location = 'data/2017-09-18/#115_N_100_setget_16-56-16'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+Finished at 2017-09-18 16:56:16
+370 ms ± 15.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+
+
+SCRIPT¶
+%%timeit
+
+data = keith.smua.doFastSweep(1, 10, N, mode='IV')
+
+
+DataSet:
+ location = 'data/2017-09-18/#116_{name}_16-57-00'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:00
+DataSet:
+ location = 'data/2017-09-18/#117_{name}_16-57-00'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:00
+DataSet:
+ location = 'data/2017-09-18/#118_{name}_16-57-00'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:01
+DataSet:
+ location = 'data/2017-09-18/#119_{name}_16-57-01'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:01
+DataSet:
+ location = 'data/2017-09-18/#120_{name}_16-57-01'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:01
+DataSet:
+ location = 'data/2017-09-18/#121_{name}_16-57-01'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:01
+DataSet:
+ location = 'data/2017-09-18/#122_{name}_16-57-01'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:01
+DataSet:
+ location = 'data/2017-09-18/#123_{name}_16-57-01'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:01
+DataSet:
+ location = 'data/2017-09-18/#124_{name}_16-57-01'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:02
+DataSet:
+ location = 'data/2017-09-18/#125_{name}_16-57-02'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:02
+DataSet:
+ location = 'data/2017-09-18/#126_{name}_16-57-02'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:02
+DataSet:
+ location = 'data/2017-09-18/#127_{name}_16-57-02'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:02
+DataSet:
+ location = 'data/2017-09-18/#128_{name}_16-57-02'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:02
+DataSet:
+ location = 'data/2017-09-18/#129_{name}_16-57-02'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:03
+DataSet:
+ location = 'data/2017-09-18/#130_{name}_16-57-03'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:03
+DataSet:
+ location = 'data/2017-09-18/#131_{name}_16-57-03'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:03
+DataSet:
+ location = 'data/2017-09-18/#132_{name}_16-57-03'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:03
+DataSet:
+ location = 'data/2017-09-18/#133_{name}_16-57-03'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:03
+DataSet:
+ location = 'data/2017-09-18/#134_{name}_16-57-03'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:03
+DataSet:
+ location = 'data/2017-09-18/#135_{name}_16-57-03'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:04
+DataSet:
+ location = 'data/2017-09-18/#136_{name}_16-57-04'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:04
+DataSet:
+ location = 'data/2017-09-18/#137_{name}_16-57-04'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:04
+DataSet:
+ location = 'data/2017-09-18/#138_{name}_16-57-04'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:04
+DataSet:
+ location = 'data/2017-09-18/#139_{name}_16-57-04'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:04
+DataSet:
+ location = 'data/2017-09-18/#140_{name}_16-57-04'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:05
+DataSet:
+ location = 'data/2017-09-18/#141_{name}_16-57-05'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:05
+DataSet:
+ location = 'data/2017-09-18/#142_{name}_16-57-05'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:05
+DataSet:
+ location = 'data/2017-09-18/#143_{name}_16-57-05'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:05
+DataSet:
+ location = 'data/2017-09-18/#144_{name}_16-57-05'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:05
+DataSet:
+ location = 'data/2017-09-18/#145_{name}_16-57-05'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:05
+DataSet:
+ location = 'data/2017-09-18/#146_{name}_16-57-05'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:06
+DataSet:
+ location = 'data/2017-09-18/#147_{name}_16-57-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:06
+DataSet:
+ location = 'data/2017-09-18/#148_{name}_16-57-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:06
+DataSet:
+ location = 'data/2017-09-18/#149_{name}_16-57-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:06
+DataSet:
+ location = 'data/2017-09-18/#150_{name}_16-57-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:06
+DataSet:
+ location = 'data/2017-09-18/#151_{name}_16-57-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:06
+DataSet:
+ location = 'data/2017-09-18/#152_{name}_16-57-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:07
+DataSet:
+ location = 'data/2017-09-18/#153_{name}_16-57-07'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:07
+DataSet:
+ location = 'data/2017-09-18/#154_{name}_16-57-07'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:07
+DataSet:
+ location = 'data/2017-09-18/#155_{name}_16-57-07'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:07
+DataSet:
+ location = 'data/2017-09-18/#156_{name}_16-57-07'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:07
+DataSet:
+ location = 'data/2017-09-18/#157_{name}_16-57-07'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:08
+DataSet:
+ location = 'data/2017-09-18/#158_{name}_16-57-08'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:08
+DataSet:
+ location = 'data/2017-09-18/#159_{name}_16-57-08'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:08
+DataSet:
+ location = 'data/2017-09-18/#160_{name}_16-57-08'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:08
+DataSet:
+ location = 'data/2017-09-18/#161_{name}_16-57-08'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:08
+DataSet:
+ location = 'data/2017-09-18/#162_{name}_16-57-08'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:08
+DataSet:
+ location = 'data/2017-09-18/#163_{name}_16-57-08'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:09
+DataSet:
+ location = 'data/2017-09-18/#164_{name}_16-57-09'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:09
+DataSet:
+ location = 'data/2017-09-18/#165_{name}_16-57-09'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:09
+DataSet:
+ location = 'data/2017-09-18/#166_{name}_16-57-09'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:09
+DataSet:
+ location = 'data/2017-09-18/#167_{name}_16-57-09'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:09
+DataSet:
+ location = 'data/2017-09-18/#168_{name}_16-57-09'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:10
+DataSet:
+ location = 'data/2017-09-18/#169_{name}_16-57-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:10
+DataSet:
+ location = 'data/2017-09-18/#170_{name}_16-57-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:10
+DataSet:
+ location = 'data/2017-09-18/#171_{name}_16-57-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:10
+DataSet:
+ location = 'data/2017-09-18/#172_{name}_16-57-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:10
+DataSet:
+ location = 'data/2017-09-18/#173_{name}_16-57-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:11
+DataSet:
+ location = 'data/2017-09-18/#174_{name}_16-57-11'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:11
+DataSet:
+ location = 'data/2017-09-18/#175_{name}_16-57-11'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:11
+DataSet:
+ location = 'data/2017-09-18/#176_{name}_16-57-11'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:11
+DataSet:
+ location = 'data/2017-09-18/#177_{name}_16-57-11'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:11
+DataSet:
+ location = 'data/2017-09-18/#178_{name}_16-57-11'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:11
+DataSet:
+ location = 'data/2017-09-18/#179_{name}_16-57-11'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:12
+DataSet:
+ location = 'data/2017-09-18/#180_{name}_16-57-12'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:12
+DataSet:
+ location = 'data/2017-09-18/#181_{name}_16-57-12'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:12
+DataSet:
+ location = 'data/2017-09-18/#182_{name}_16-57-12'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:12
+DataSet:
+ location = 'data/2017-09-18/#183_{name}_16-57-12'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:12
+DataSet:
+ location = 'data/2017-09-18/#184_{name}_16-57-12'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:13
+DataSet:
+ location = 'data/2017-09-18/#185_{name}_16-57-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:13
+DataSet:
+ location = 'data/2017-09-18/#186_{name}_16-57-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:13
+DataSet:
+ location = 'data/2017-09-18/#187_{name}_16-57-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:13
+DataSet:
+ location = 'data/2017-09-18/#188_{name}_16-57-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:13
+DataSet:
+ location = 'data/2017-09-18/#189_{name}_16-57-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:13
+DataSet:
+ location = 'data/2017-09-18/#190_{name}_16-57-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:14
+DataSet:
+ location = 'data/2017-09-18/#191_{name}_16-57-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:14
+DataSet:
+ location = 'data/2017-09-18/#192_{name}_16-57-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:14
+DataSet:
+ location = 'data/2017-09-18/#193_{name}_16-57-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:14
+DataSet:
+ location = 'data/2017-09-18/#194_{name}_16-57-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:14
+DataSet:
+ location = 'data/2017-09-18/#195_{name}_16-57-14'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:15
+DataSet:
+ location = 'data/2017-09-18/#196_{name}_16-57-15'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+acquired at 2017-09-18 16:57:15
+182 ms ± 6.48 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
+
+
+
+
+
+NPLC = 0.05, N = 1000¶
+# Preparation for a simple I-V curve with a 5 MOhm resistor
+
+keith.smua.reset()
+keith.smua.nplc(0.05)
+keith.smua.mode('voltage')
+keith.smua.sourcerange_v(20)
+keith.smua.measurerange_i(100e-6)
+keith.smua.output('on')
+
+N = 1000
+
+
+
+SET-GET¶
+%%timeit
+
+loop = qc.Loop(keith.smua.volt.sweep(1, 10, num=N)).each(keith.smua.curr)
+data = loop.get_data_set(name='N_{}_setget'.format(N))
+_ = loop.run() # run the loop
+
+
+Started at 2017-09-18 16:59:06
+DataSet:
+ location = 'data/2017-09-18/#197_N_1000_setget_16-59-06'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:10
+Started at 2017-09-18 16:59:10
+DataSet:
+ location = 'data/2017-09-18/#198_N_1000_setget_16-59-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:13
+Started at 2017-09-18 16:59:13
+DataSet:
+ location = 'data/2017-09-18/#199_N_1000_setget_16-59-13'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:16
+Started at 2017-09-18 16:59:16
+DataSet:
+ location = 'data/2017-09-18/#200_N_1000_setget_16-59-16'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:20
+Started at 2017-09-18 16:59:20
+DataSet:
+ location = 'data/2017-09-18/#201_N_1000_setget_16-59-20'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:23
+Started at 2017-09-18 16:59:23
+DataSet:
+ location = 'data/2017-09-18/#202_N_1000_setget_16-59-23'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:27
+Started at 2017-09-18 16:59:27
+DataSet:
+ location = 'data/2017-09-18/#203_N_1000_setget_16-59-27'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:30
+Started at 2017-09-18 16:59:30
+DataSet:
+ location = 'data/2017-09-18/#204_N_1000_setget_16-59-30'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+Finished at 2017-09-18 16:59:33
+3.38 s ± 39.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+
+
+SCRIPT¶
+%%timeit
+
+data = keith.smua.doFastSweep(1, 10, N, mode='IV')
+
+
+DataSet:
+ location = 'data/2017-09-18/#205_{name}_16-59-38'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:39
+DataSet:
+ location = 'data/2017-09-18/#206_{name}_16-59-39'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:41
+DataSet:
+ location = 'data/2017-09-18/#207_{name}_16-59-41'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:42
+DataSet:
+ location = 'data/2017-09-18/#208_{name}_16-59-42'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:43
+DataSet:
+ location = 'data/2017-09-18/#209_{name}_16-59-43'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:45
+DataSet:
+ location = 'data/2017-09-18/#210_{name}_16-59-45'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:46
+DataSet:
+ location = 'data/2017-09-18/#211_{name}_16-59-46'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:48
+DataSet:
+ location = 'data/2017-09-18/#212_{name}_16-59-48'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+acquired at 2017-09-18 16:59:49
+1.44 s ± 13.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_notebooks/benchmarking/Benchmark of Keysight DMM software trigger vs set-get.html b/_notebooks/benchmarking/Benchmark of Keysight DMM software trigger vs set-get.html
index 7e9697b2b36..4b7f6857d72 100644
--- a/_notebooks/benchmarking/Benchmark of Keysight DMM software trigger vs set-get.html
+++ b/_notebooks/benchmarking/Benchmark of Keysight DMM software trigger vs set-get.html
@@ -38,7 +38,7 @@
-
+
@@ -105,6 +105,10 @@
Drivers
Benchmarking
- Agilent 34411A versus Keysight 34465A
+- Benchmark
+- NPLC = 0.5, N = 100
+- NPLC = 0.5, N = 1000
+- NPLC = 0.05, N = 1000
- Benchmark of Keysight 34465A
- Pre-benchmark setting
- N = 1000, set-get
@@ -371,7 +375,7 @@ Results summaryNext
- Previous
+ Previous
diff --git a/_notebooks/benchmarking/QDac and Keysight 34465 sync and buffer.html b/_notebooks/benchmarking/QDac and Keysight 34465 sync and buffer.html
index 29e99e242f3..6b3ffd7463e 100644
--- a/_notebooks/benchmarking/QDac and Keysight 34465 sync and buffer.html
+++ b/_notebooks/benchmarking/QDac and Keysight 34465 sync and buffer.html
@@ -104,6 +104,10 @@
Drivers
Benchmarking
- Agilent 34411A versus Keysight 34465A
+- Benchmark
+- NPLC = 0.5, N = 100
+- NPLC = 0.5, N = 1000
+- NPLC = 0.05, N = 1000
- Benchmark of Keysight 34465A
- Results summary
- QDac and Keysight 34465 sync and buffer
diff --git a/_notebooks/driver_examples/Keithley_example.html b/_notebooks/driver_examples/Keithley_example.html
deleted file mode 100644
index 39b5b58eecc..00000000000
--- a/_notebooks/driver_examples/Keithley_example.html
+++ /dev/null
@@ -1,400 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- Example script for Keithley driver — QCoDeS 0.1.7 documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Example script for Keithley driver¶
-import matplotlib.pyplot as plt
-import time
-import numpy as np
-from imp import reload
-import qcodes as qc
-
-
-<IPython.core.display.Javascript object>
-
-
-
-Keithley driver¶
-What to do:
-
-- implement add functionality of the driver
-- add documentation to the functions
-
-import qcodes.instrument_drivers
-import qcodes.instrument_drivers.tektronix.Keithley_2700 as keith
-
-
-
-<module 'qcodes.instrument_drivers.tektronix.Keithley_2700' from 'd:\users\eendebakpt\qcodes\qcodes\instrument_drivers\tektronix\Keithley_2700.py'>
-
-k1 = keith.Keithley_2700('Keithley', 'GPIB1::15::INSTR')
-k1.add_parameter('READ', get_cmd='READ?', label='Keithley value', get_parser=float)
-
-
-Connected to: KEITHLEY INSTRUMENTS INC., MODEL 2700, 0792116, B06 /A02 in 0.17s
-
-
-print('current mode: %s' % k1.get('mode'))
-
-
-current mode: VOLT:DC
-
-
-for i in range(6):
- print('measure: %.6f' % k1.readnext() )
-
-
-measure: -0.095112
-measure: -0.104225
-measure: -0.112567
-measure: -0.129525
-measure: -0.137803
-measure: -0.146068
-
-
-station = qc.Station('Keithley')
-
-# could measure any number of things by adding arguments to this
-# function call, but here we're just measuring one, the meter mode
-station.set_measurement(k1.mode)
-
-qc.active_children()
-
-
-[]
-
-
-station.measure()
-
-
-['VOLT:DC']
-
-
-print(k1.nplc.__doc__)
-
-
-
-Get integration time in Number of PowerLine Cycles.
-To get the integrationtime in seconds, use get_integrationtime().
-Parameter class:
-* name nplc
-* label nplc
-* units APER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/_notebooks/driver_examples/QCodes example with SR830.html b/_notebooks/driver_examples/QCodes example with SR830.html
index 620e7a07814..0029d1f6271 100644
--- a/_notebooks/driver_examples/QCodes example with SR830.html
+++ b/_notebooks/driver_examples/QCodes example with SR830.html
@@ -38,7 +38,7 @@
-
+
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- List of parameters
- Buffered Acquisition
@@ -327,7 +326,7 @@ Buffered AcquisitionNext
- Previous
+ Previous
diff --git a/_notebooks/driver_examples/Qcodes example ATS_ONWORK.html b/_notebooks/driver_examples/Qcodes example ATS_ONWORK.html
index 0062e6841d7..7a6c6cc0217 100644
--- a/_notebooks/driver_examples/Qcodes example ATS_ONWORK.html
+++ b/_notebooks/driver_examples/Qcodes example ATS_ONWORK.html
@@ -103,7 +103,6 @@
Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with AMI430.html b/_notebooks/driver_examples/Qcodes example with AMI430.html
index a2912987345..48ef2256d80 100644
--- a/_notebooks/driver_examples/Qcodes example with AMI430.html
+++ b/_notebooks/driver_examples/Qcodes example with AMI430.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Agilent 34400A.html b/_notebooks/driver_examples/Qcodes example with Agilent 34400A.html
index e3bd951ff45..0699ab5de1e 100644
--- a/_notebooks/driver_examples/Qcodes example with Agilent 34400A.html
+++ b/_notebooks/driver_examples/Qcodes example with Agilent 34400A.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Decadac.html b/_notebooks/driver_examples/Qcodes example with Decadac.html
index 1f119a21e39..f60e119b270 100644
--- a/_notebooks/driver_examples/Qcodes example with Decadac.html
+++ b/_notebooks/driver_examples/Qcodes example with Decadac.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Ithaco.html b/_notebooks/driver_examples/Qcodes example with Ithaco.html
index 4d4d3cd1b75..3582c5c86c1 100644
--- a/_notebooks/driver_examples/Qcodes example with Ithaco.html
+++ b/_notebooks/driver_examples/Qcodes example with Ithaco.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Keithley 2600.html b/_notebooks/driver_examples/Qcodes example with Keithley 2600.html
index b9b2351308b..5b1a1eec2ed 100644
--- a/_notebooks/driver_examples/Qcodes example with Keithley 2600.html
+++ b/_notebooks/driver_examples/Qcodes example with Keithley 2600.html
@@ -103,14 +103,17 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
- Qcodes example with Agilent 34400A
- Qcodes example with Decadac
- Qcodes example with Ithaco
-- Qcodes example with Keithley 2600
+- Qcodes example with Keithley 2600
+
- Qcodes example with Keysight 33500B
- Qcodes example with Mercury IPS (Magnet)
- Qcodes example with QDac
@@ -192,320 +195,136 @@
Qcodes example with Keithley 2600¶
-%matplotlib nbagg
-import matplotlib.pyplot as plt
-import time
-import numpy as np
-
-import qcodes as qc
+NOTE This example is for the new (as of September 2017) channelised
+driver. If you are considering using the old driver, please reconsider.
+There is no functionality of the old driver that is not contained in the
+new one, but it might have a (slightly) different name.
+import qcodes as qc
-qc.halt_bg()
-qc.set_mp_method('spawn') # force Windows behavior on mac
-
-# this makes a widget in the corner of the window to show and control
-# subprocesses and any output they would print to the terminal
-qc.show_subprocess_widget()
-
-
-<IPython.core.display.Javascript object>
+from qcodes.instrument_drivers.tektronix.Keithley_2600_channels import Keithley_2600
-No loop running
-
-
-import qcodes.instrument_drivers.tektronix.Keithley_2600 as keith
-
-
-# spawn doesn't like function or class definitions in the interpreter
-# session - had to move them to a file.
-
-# now create this "experiment"
-k1 = keith.Keithley_2600('Keithley1', 'GPIB0::15::INSTR',channel='a')#,server_name=None)
-k2 = keith.Keithley_2600('Keithley2', 'GPIB0::15::INSTR',channel='b')#,server_name=None)
+# Create a station to hold all the instruments
-station = qc.Station(k1,k2)
+station = qc.Station()
-# could measure any number of things by adding arguments to this
-# function call, but here we're just measuring one, the meter amplitude
-station.set_measurement(k1.curr,k2.curr)
+# instantiate the Keithley and add it to the station
-# it's nice to have the key parameters be part of the global namespace
-# that way they're objects that we can easily set, get, and slice
-# this could be simplified to a station method that gathers all parameters
-# and adds them all as (disambiguated) globals, printing what it did
-# something like:
-# station.gather_parameters(globals())
-
-vsd1, vsd2, curr1, curr2 = k1.volt, k2.volt, k1.curr, k2.curr
-
-# once we have implemented a monitor, defining a station will start a
-# DataServer process, and you would see it in the subprocess widget,
-# or via active_children() as here:
-# qc.active_children()
-
-
-station.snapshot()
-
-
-{'instruments': {'Keithley1': {'functions': {},
- 'metadata': {'info': {'model': '2614B',
- 'serial_number': '4083825',
- 'software_revision': '3.2.1',
- 'vendor': 'Keithley Instruments Inc.'}},
- 'parameters': {'curr': {'ts': None, 'value': None},
- 'limiti': {'ts': None, 'value': None},
- 'limitv': {'ts': None, 'value': None},
- 'mode': {'ts': None, 'value': None},
- 'output': {'ts': None, 'value': None},
- 'rangei': {'ts': None, 'value': None},
- 'rangev': {'ts': None, 'value': None},
- 'volt': {'ts': None, 'value': None}}},
- 'Keithley2': {'functions': {},
- 'metadata': {'info': {'model': '2614B',
- 'serial_number': '4083825',
- 'software_revision': '3.2.1',
- 'vendor': 'Keithley Instruments Inc.'}},
- 'parameters': {'curr': {'ts': None, 'value': None},
- 'limiti': {'ts': None, 'value': None},
- 'limitv': {'ts': None, 'value': None},
- 'mode': {'ts': None, 'value': None},
- 'output': {'ts': None, 'value': None},
- 'rangei': {'ts': None, 'value': None},
- 'rangev': {'ts': None, 'value': None},
- 'volt': {'ts': None, 'value': None}}}}}
+keith = Keithley_2600('keithley', 'TCPIP0::192.168.15.116::inst0::INSTR')
+station.add_component(keith)
-# we can get the measured quantities right now
-station.measure()
+Connected to: Keithley Instruments Inc. 2614B (serial:4084407, firmware:3.2.1) in 0.09s
-[2.98023e-13, -9.41753e-13]
+'keithley'
-# start a Loop (which by default runs in a seprarate process)
-# the sweep values are defined by slicing the parameter object
-# but more complicated sweeps (eg nonlinear, or adaptive) can
-# easily be used instead
-
-# Notice that I'm using an explicit location and `overwrite=True` here so that
-# running this notebook over and over won't result in extra files.
-# But if you leave these out, you get a new timestamped DataSet each time.
-data = qc.Loop(vsd1[-5:5:0.5], 0.03).run(location='testsweep', overwrite=True)
-
-# now there should be two extra processes running, DataServer and a sweep
-# I'll omit the active_children call now because you can see them in the
-# subprocess widget
+The Keithley 2600 has two channels, here called smua
and smub
in
+agreement with the instrument manual.
+The two channels are basically two separate instruments with different
+integration times (nplc
), operation modes (mode
) etc.
+# Get an overview of the settings
+#
+# You will notice that the two channels have identical parameters but
+# potentially different values for them
+#
+keith.print_readable_snapshot()
-DataSet: DataMode.PULL_FROM_SERVER, location='testsweep'
- curr_0: curr
- curr_1: curr
- volt: volt
-started at 2016-04-20 15:37:23
+keithley:
+ parameter value
+--------------------------------------------------------------------------------
+IDN : {'vendor': 'Keithley Instruments Inc.', 'model': '2614B', '...
+display_settext : None
+timeout : 5 (s)
+keithley_smua:
+ parameter value
+--------------------------------------------------------------------------------
+curr : 3.0994e-07 (A)
+fastsweep : None
+limiti : 0.1 (A)
+limitv : 20 (V)
+measurerange_i : 0.1 (A)
+measurerange_v : 2.00000e+01 (V)
+mode : voltage
+nplc : 0.05
+output : on
+sourcerange_i : 1e-07 (A)
+sourcerange_v : 20 (V)
+volt : 1.9999 (V)
+keithley_smub:
+ parameter value
+--------------------------------------------------------------------------------
+curr : -3.6955e-13 (A)
+fastsweep : None
+limiti : 0.1 (A)
+limitv : 20 (V)
+measurerange_i : 1e-07 (A)
+measurerange_v : 2.00000e-01 (V)
+mode : voltage
+nplc : 1
+output : off
+sourcerange_i : 1e-07 (A)
+sourcerange_v : 0.2 (V)
+volt : 1.1206e-06 (V)
-# manually bring the data into the main process and display it as numbers
-data.sync()
-data.arrays
+
+Basic operation¶
+Each channel operates in either voltage
or current
mode. The
+mode controls the source behaviour of the instrument, i.e. voltage
+mode corresponds to an amp-meter (voltage source, current meter) and
+vice versa.
+# Let's set up a single-shot current measurement
+# on channel a
+
+keith.smua.mode('voltage')
+keith.smua.nplc(0.05) # 0.05 Power Line Cycles per measurement. At 50 Hz, this corresponds to 1 ms
+keith.smua.sourcerange_v(20)
+keith.smua.measurerange_i(0.1)
+#
+keith.smua.volt(1) # set the source to output 1 V
+keith.smua.output('on') # turn output on
+curr = keith.smua.curr()
+keith.smua.output('off')
+
+print('Measured one current value: {} A'.format(curr))
-{'curr_0': DataArray[20]: curr_0
- array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
- nan, nan, nan, nan, nan, nan, nan, nan, nan]),
- 'curr_1': DataArray[20]: curr_1
- array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
- nan, nan, nan, nan, nan, nan, nan, nan, nan]),
- 'volt': DataArray[20]: volt
- array([ -5., nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
- nan, nan, nan, nan, nan, nan, nan, nan, nan])}
+Measured one current value: -1.54972e-06 A
-# live-updating plot, that syncs the data and stops updating when it's finished
-# plot = qc.MatPlot(data.amplitude)
-plotQ1 = qc.QtPlot(data.volt, data.curr_0)
-plotQ2 = qc.QtPlot(data.volt, data.curr_1)
-
-
-data2 = qc.Loop(vsd1[-5:5:0.1],0).each(
- qc.Loop(vsd2[-2:2:.2], 0)
-).run(location='test2d', overwrite=True)
-
-# use the subplot and add features of qc.MatPlot
-# plot2 = qc.MatPlot(data2.amplitude_0, cmap=plt.cm.hot, figsize=(12, 4.5), subplots=(1, 2))
-# plot2.add(data2.amplitude_3, cmap=plt.cm.hot, subplot=2)
-
-# the equivalent in QtPlot
-plot2Q = qc.QtPlot(data2.curr_1, figsize=(1200, 500))
-# plot2Q.add(data2.curr_1, subplot=2)
-
-DataSet: DataMode.PULL_FROM_SERVER, location='test2d'
- curr_1: curr
- volt: volt
- curr_0: curr
- volt_0: volt
-started at 2016-04-20 15:22:46
+
+Fast IV curves¶
+Onboard the Keithley 2600 sits a small computer that can interpret
+Lua
scripts. This can be used to make fast IV-curves and is
+supported by the QCoDeS driver.
+# Let's make a fast IV curve by sweeping the voltage from 1 V to 2 V in 500 steps
+# (when making this notebook, nothing was connected to the instrument, so we just measure noise)
-k1.setattr(('metadata','test'), 11)
-k1.getattr('info')
+# This function performs the fast sweep and returns a QCoDeS DataSet
+data = keith.smua.doFastSweep(1, 2, 500, mode='IV')
-{'model': '2614B',
- 'serial_number': '4083825',
- 'software_revision': '3.2.1',
- 'vendor': 'Keithley Instruments Inc.'}
+DataSet:
+ location = 'data/2017-09-28/#001_{name}_14-43-10'
+ <Type> | <array_id> | <array.name> | <array.shape>
+ Measured | keithley_smua_iv_sweep | iv_sweep | (500,)
+acquired at 2017-09-28 14:43:11
-k1.ask_direct('*IDN?')
+# The DataSet may be plotted
+plot = qc.MatPlot()
+plot.add(data.arrays['keithley_smua_iv_sweep'])
-'Keithley Instruments Inc., Model 2614B, 4083825, 3.2.1'
+# Finally, tear down the instrument
+keith.close()
-station.snapshot(update=True)
-
-
-{'instruments': {'Keithley1': {'functions': {},
- 'metadata': {'test': 11},
- 'parameters': {'curr': {'ts': '2016-04-20 15:31:51', 'value': -2.14577e-13},
- 'limiti': {'ts': '2016-04-20 15:31:51', 'value': 0.1},
- 'limitv': {'ts': '2016-04-20 15:31:51', 'value': 20.0},
- 'mode': {'ts': '2016-04-20 15:31:51', 'value': 'voltage'},
- 'output': {'ts': '2016-04-20 15:31:51', 'value': 'ON'},
- 'rangei': {'ts': '2016-04-20 15:31:51', 'value': 1e-07},
- 'rangev': {'ts': '2016-04-20 15:31:51', 'value': 20.0},
- 'volt': {'ts': '2016-04-20 15:31:51', 'value': 4.90016}}},
- 'Keithley2': {'functions': {},
- 'parameters': {'curr': {'ts': '2016-04-20 15:31:51', 'value': -1.07288e-12},
- 'limiti': {'ts': '2016-04-20 15:31:51', 'value': 0.1},
- 'limitv': {'ts': '2016-04-20 15:31:51', 'value': 20.0},
- 'mode': {'ts': '2016-04-20 15:31:51', 'value': 'voltage'},
- 'output': {'ts': '2016-04-20 15:31:51', 'value': 'ON'},
- 'rangei': {'ts': '2016-04-20 15:31:51', 'value': 1e-07},
- 'rangev': {'ts': '2016-04-20 15:31:51', 'value': 2.0},
- 'volt': {'ts': '2016-04-20 15:31:51', 'value': 1.80006}}}}}
-
-
-plot2Q.add(data2.curr_0, subplot=2)
-
-
-data3 = qc.Loop(vsd1[-15:15:1], 0).each(
- qc.Loop(vsd2[-5:5:1], 0),
- qc.Loop(vsd2[5:-5:1], 0),
-).run(location='test_multi_d', overwrite=True)
-
-# several plots updating simultaneously
-# plot3 = qc.MatPlot(data3.curr_1_1, cmap=plt.cm.hot)
-# plot3b = qc.MatPlot(data3.curr_1_0, cmap=plt.cm.hot, figsize=(12, 4.5), subplots=(1,2))
-# plot3b.add(data3.curr_0_1, subplot=2)
-plot3Q = qc.QtPlot(data3.curr_1)
-plot3bQ = qc.QtPlot(data3.curr_1, figsize=(1200, 500))
-plot3bQ.add(data3.curr_0, subplot=2)
-
-
-DataSet: DataMode.PULL_FROM_SERVER, location='test_multi_d'
- curr_0_1: curr
- volt_0: volt
- curr_0_0: curr
- volt_1: volt
- curr_1_0: curr
- curr_1_1: curr
- volt: volt
-started at 2016-04-20 14:09:16
-
-
----------------------------------------------------------------------------
-
-AttributeError Traceback (most recent call last)
-
-<ipython-input-18-7bcb44f808c5> in <module>()
- 8 # plot3b = qc.MatPlot(data3.curr_1_0, cmap=plt.cm.hot, figsize=(12, 4.5), subplots=(1,2))
- 9 # plot3b.add(data3.curr_0_1, subplot=2)
----> 10 plot3Q = qc.QtPlot(data3.curr_1)
- 11 plot3bQ = qc.QtPlot(data3.curr_1, figsize=(1200, 500))
- 12 plot3bQ.add(data3.curr_0, subplot=2)
-
-
-C:\Github\Qcodes\qcodes\utils\helpers.py in __getattr__(self, key)
- 187 raise AttributeError(
- 188 "'{}' object and its delegates have no attribute '{}'".format(
---> 189 self.__class__.__name__, key))
- 190
- 191 def __dir__(self):
-
-
-AttributeError: 'DataSet' object and its delegates have no attribute 'curr_1'
-
-
-# An example of a parameter that returns several values of different dimension
-# This produces the last two arrays from data3, but only takes the data once.
-data4 = qc.Loop(c1[-15:15:1], 0.1).each(
- AverageAndRaw(meter.amplitude, c2[-10:10:0.2], 0.001)
-).run(location='test_complex_param', overwrite=True)
-
-# plot4 = qc.MatPlot(data4.amplitude, cmap=plt.cm.hot, subplots=(1,2), figsize=(12, 4.5))
-# plot4.add(data4.avg_amplitude, subplot=2)
-plot4Q = qc.QtPlot(data4.amplitude, figsize=(1200, 500))
-plot4Q.add(data4.avg_amplitude, subplot=2)
-
-
-DataSet: DataMode.PULL_FROM_SERVER, location='test_complex_param'
- avg_amplitude: avg_amplitude
- chan2: chan2
- chan1: chan1
- amplitude: amplitude
-started at 2016-02-02 12:18:09
-
diff --git a/_notebooks/driver_examples/Qcodes example with Keysight 33500B.html b/_notebooks/driver_examples/Qcodes example with Keysight 33500B.html
index c33c79dd8c7..96a93994b34 100644
--- a/_notebooks/driver_examples/Qcodes example with Keysight 33500B.html
+++ b/_notebooks/driver_examples/Qcodes example with Keysight 33500B.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Mercury IPS (Magnet).html b/_notebooks/driver_examples/Qcodes example with Mercury IPS (Magnet).html
index bda65918e15..6ef5f159b30 100644
--- a/_notebooks/driver_examples/Qcodes example with Mercury IPS (Magnet).html
+++ b/_notebooks/driver_examples/Qcodes example with Mercury IPS (Magnet).html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with QDac.html b/_notebooks/driver_examples/Qcodes example with QDac.html
index 158f1497d78..c1ddb620396 100644
--- a/_notebooks/driver_examples/Qcodes example with QDac.html
+++ b/_notebooks/driver_examples/Qcodes example with QDac.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with QDac_channels.html b/_notebooks/driver_examples/Qcodes example with QDac_channels.html
index 82179daa1a8..ad7c5608296 100644
--- a/_notebooks/driver_examples/Qcodes example with QDac_channels.html
+++ b/_notebooks/driver_examples/Qcodes example with QDac_channels.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Rohde Schwarz ZNB.html b/_notebooks/driver_examples/Qcodes example with Rohde Schwarz ZNB.html
index 1ec1a7f8b7c..92d75950fb8 100644
--- a/_notebooks/driver_examples/Qcodes example with Rohde Schwarz ZNB.html
+++ b/_notebooks/driver_examples/Qcodes example with Rohde Schwarz ZNB.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with TPS2012.html b/_notebooks/driver_examples/Qcodes example with TPS2012.html
index 24f2b9807e3..158a937861f 100644
--- a/_notebooks/driver_examples/Qcodes example with TPS2012.html
+++ b/_notebooks/driver_examples/Qcodes example with TPS2012.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Tektronix AWG5014C.html b/_notebooks/driver_examples/Qcodes example with Tektronix AWG5014C.html
index 9b99d4eb93e..cd57073d9c9 100644
--- a/_notebooks/driver_examples/Qcodes example with Tektronix AWG5014C.html
+++ b/_notebooks/driver_examples/Qcodes example with Tektronix AWG5014C.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with Triton.html b/_notebooks/driver_examples/Qcodes example with Triton.html
index c20f691ca11..d8bc6b383e7 100644
--- a/_notebooks/driver_examples/Qcodes example with Triton.html
+++ b/_notebooks/driver_examples/Qcodes example with Triton.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_notebooks/driver_examples/Qcodes example with ZI UHF-LI.html b/_notebooks/driver_examples/Qcodes example with ZI UHF-LI.html
index 42b96b650e8..fb3fedf703d 100644
--- a/_notebooks/driver_examples/Qcodes example with ZI UHF-LI.html
+++ b/_notebooks/driver_examples/Qcodes example with ZI UHF-LI.html
@@ -103,7 +103,6 @@
- Examples of using QCoDeS
- Basic examples
- Drivers
-- Example script for Keithley driver
- QCoDeS example with SR830
- Qcodes example ATS_ONWORK
- QCoDeS example with AMI430
diff --git a/_sources/_notebooks/benchmarking/Benchmark of Keithley 2600 lua script versus set-get.rst.txt b/_sources/_notebooks/benchmarking/Benchmark of Keithley 2600 lua script versus set-get.rst.txt
new file mode 100644
index 00000000000..2f17cd44886
--- /dev/null
+++ b/_sources/_notebooks/benchmarking/Benchmark of Keithley 2600 lua script versus set-get.rst.txt
@@ -0,0 +1,1013 @@
+
+Benchmark
+=========
+
+Below we use two methods of the Keithley 2600 to make an IV-curve.
+Plugged into the terminal is a 5 MOhm resistor. The voltage is swept
+from 1 V to 10 V.
+
+The two methods are normal "naive" QCoDeS set-get and deployed script
+mode. In the former mode, a ``set`` command is send for each voltage set
+point and a ``get`` command is sent for each current value to be
+measured. In the latter mode, a Lua script is formed and uploaded to the
+SourceMeter. The script then runs locally on the machine and all data is
+polled in one go (in a binary format).
+
+Results
+-------
+
+NPLC = 0.5 (10 ms ap. time), N = 100
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Set-get: 1.29 s
+
+Script: 1.08 s
+
+NPLC = 0.5 (10 ms ap. time), N = 1000
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Set-get: 12.6 s
+
+Script: 10.5 s
+
+NPLC = 0.05 (1ms ap. time), N = 100
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Set-get: 370 ms
+
+Script: 182 ms
+
+NPLC = 0.05 (1ms ap. time), N = 1000
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Set-get: 3.38 s
+
+Script: 1.44 s
+
+Imports and initialisation
+--------------------------
+
+.. code:: ipython3
+
+ import qcodes as qc
+ from qcodes.instrument.base import Instrument
+ from qcodes.instrument_drivers.tektronix.Keithley_2600 import Keithley_2600
+ from qcodes.instrument_drivers.tektronix.Keithley_2600_channels import Keithley_2600 as Keithley_2600_channels
+ from typing import List
+ from qcodes import DataSet
+ from qcodes.instrument.parameter import ArrayParameter
+ import struct
+
+.. code:: ipython3
+
+ % matplotlib notebook
+ import matplotlib.pyplot as plt
+ import numpy as np
+
+.. code:: ipython3
+
+ keith = Keithley_2600_channels('keith', 'TCPIP0::192.168.15.116::inst0::INSTR', model='2614B')
+
+
+.. parsed-literal::
+
+ Connected to: Keithley Instruments Inc. 2614B (serial:4084407, firmware:3.2.1) in 0.15s
+
+
+NPLC = 0.5, N = 100
+===================
+
+.. code:: ipython3
+
+ # Preparation for a simple I-V curve with a 5 MOhm resistor
+
+ keith.smua.reset()
+ keith.smua.nplc(0.5)
+ keith.smua.mode('voltage')
+ keith.smua.sourcerange_v(20)
+ keith.smua.measurerange_i(100e-6)
+ keith.smua.output('on')
+
+ N = 100
+
+SET-GET
+-------
+
+.. code:: ipython3
+
+ %%timeit
+
+ loop = qc.Loop(keith.smua.volt.sweep(1, 10, num=N)).each(keith.smua.curr)
+ data = loop.get_data_set(name='N_{}_setget'.format(N))
+ _ = loop.run() # run the loop
+
+
+.. parsed-literal::
+
+ Started at 2017-09-18 16:49:59
+ DataSet:
+ location = 'data/2017-09-18/#076_N_100_setget_16-49-59'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:00
+ Started at 2017-09-18 16:50:00
+ DataSet:
+ location = 'data/2017-09-18/#077_N_100_setget_16-50-00'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:02
+ Started at 2017-09-18 16:50:02
+ DataSet:
+ location = 'data/2017-09-18/#078_N_100_setget_16-50-02'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:03
+ Started at 2017-09-18 16:50:03
+ DataSet:
+ location = 'data/2017-09-18/#079_N_100_setget_16-50-03'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:04
+ Started at 2017-09-18 16:50:04
+ DataSet:
+ location = 'data/2017-09-18/#080_N_100_setget_16-50-04'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:05
+ Started at 2017-09-18 16:50:05
+ DataSet:
+ location = 'data/2017-09-18/#081_N_100_setget_16-50-05'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:07
+ Started at 2017-09-18 16:50:07
+ DataSet:
+ location = 'data/2017-09-18/#082_N_100_setget_16-50-07'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:08
+ Started at 2017-09-18 16:50:08
+ DataSet:
+ location = 'data/2017-09-18/#083_N_100_setget_16-50-08'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:50:09
+ 1.29 s ± 15.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+SCRIPT
+------
+
+.. code:: ipython3
+
+ %%timeit
+
+ data = keith.smua.doFastSweep(1, 10, N, mode='IV')
+
+
+.. parsed-literal::
+
+ DataSet:
+ location = 'data/2017-09-18/#084_{name}_16-50-18'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:19
+ DataSet:
+ location = 'data/2017-09-18/#085_{name}_16-50-19'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:20
+ DataSet:
+ location = 'data/2017-09-18/#086_{name}_16-50-20'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:21
+ DataSet:
+ location = 'data/2017-09-18/#087_{name}_16-50-21'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:22
+ DataSet:
+ location = 'data/2017-09-18/#088_{name}_16-50-22'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:23
+ DataSet:
+ location = 'data/2017-09-18/#089_{name}_16-50-23'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:24
+ DataSet:
+ location = 'data/2017-09-18/#090_{name}_16-50-24'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:26
+ DataSet:
+ location = 'data/2017-09-18/#091_{name}_16-50-26'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (100,)
+ acquired at 2017-09-18 16:50:27
+ 1.08 s ± 4.67 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+NPLC = 0.5, N = 1000
+====================
+
+.. code:: ipython3
+
+ # Preparation for a simple I-V curve with a 5 MOhm resistor
+
+ keith.smua.reset()
+ keith.smua.nplc(0.5)
+ keith.smua.mode('voltage')
+ keith.smua.sourcerange_v(20)
+ keith.smua.measurerange_i(100e-6)
+ keith.smua.output('on')
+
+ N = 1000
+
+SET-GET
+-------
+
+.. code:: ipython3
+
+ %%timeit
+
+ loop = qc.Loop(keith.smua.volt.sweep(1, 10, num=N)).each(keith.smua.curr)
+ data = loop.get_data_set(name='N_{}_setget'.format(N))
+ _ = loop.run() # run the loop
+
+
+.. parsed-literal::
+
+ Started at 2017-09-18 16:51:20
+ DataSet:
+ location = 'data/2017-09-18/#092_N_1000_setget_16-51-20'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:51:32
+ Started at 2017-09-18 16:51:32
+ DataSet:
+ location = 'data/2017-09-18/#093_N_1000_setget_16-51-32'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:51:45
+ Started at 2017-09-18 16:51:45
+ DataSet:
+ location = 'data/2017-09-18/#094_N_1000_setget_16-51-45'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:51:58
+ Started at 2017-09-18 16:51:58
+ DataSet:
+ location = 'data/2017-09-18/#095_N_1000_setget_16-51-58'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:52:10
+ Started at 2017-09-18 16:52:10
+ DataSet:
+ location = 'data/2017-09-18/#096_N_1000_setget_16-52-10'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:52:23
+ Started at 2017-09-18 16:52:23
+ DataSet:
+ location = 'data/2017-09-18/#097_N_1000_setget_16-52-23'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:52:35
+ Started at 2017-09-18 16:52:35
+ DataSet:
+ location = 'data/2017-09-18/#098_N_1000_setget_16-52-35'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:52:48
+ Started at 2017-09-18 16:52:48
+ DataSet:
+ location = 'data/2017-09-18/#099_N_1000_setget_16-52-48'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (1000,)
+ Measured | keith_smua_curr | curr | (1000,)
+ Finished at 2017-09-18 16:53:00
+ 12.6 s ± 21.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+SCRIPT
+------
+
+.. code:: ipython3
+
+ %%timeit
+
+ data = keith.smua.doFastSweep(1, 10, N, mode='IV')
+
+
+.. parsed-literal::
+
+ DataSet:
+ location = 'data/2017-09-18/#100_{name}_16-53-14'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:53:24
+ DataSet:
+ location = 'data/2017-09-18/#101_{name}_16-53-24'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:53:35
+ DataSet:
+ location = 'data/2017-09-18/#102_{name}_16-53-35'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:53:45
+ DataSet:
+ location = 'data/2017-09-18/#103_{name}_16-53-45'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:53:56
+ DataSet:
+ location = 'data/2017-09-18/#104_{name}_16-53-56'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:54:06
+ DataSet:
+ location = 'data/2017-09-18/#105_{name}_16-54-06'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:54:17
+ DataSet:
+ location = 'data/2017-09-18/#106_{name}_16-54-17'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:54:27
+ DataSet:
+ location = 'data/2017-09-18/#107_{name}_16-54-27'
+ | | |
+ Measured | keith_smua_iv_sweep | iv_sweep | (1000,)
+ acquired at 2017-09-18 16:54:38
+ 10.5 s ± 12.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
+
+
+.. code:: ipython3
+
+ # Preparation for a simple I-V curve with a 5 MOhm resistor
+
+ keith.smua.reset()
+ keith.smua.nplc(0.05)
+ keith.smua.mode('voltage')
+ keith.smua.sourcerange_v(20)
+ keith.smua.measurerange_i(100e-6)
+ keith.smua.output('on')
+
+ N = 100
+
+SET-GET
+-------
+
+.. code:: ipython3
+
+ %%timeit
+
+ loop = qc.Loop(keith.smua.volt.sweep(1, 10, num=N)).each(keith.smua.curr)
+ data = loop.get_data_set(name='N_{}_setget'.format(N))
+ _ = loop.run() # run the loop
+
+
+.. parsed-literal::
+
+ Started at 2017-09-18 16:56:13
+ DataSet:
+ location = 'data/2017-09-18/#108_N_100_setget_16-56-13'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:56:14
+ Started at 2017-09-18 16:56:14
+ DataSet:
+ location = 'data/2017-09-18/#109_N_100_setget_16-56-14'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:56:14
+ Started at 2017-09-18 16:56:14
+ DataSet:
+ location = 'data/2017-09-18/#110_N_100_setget_16-56-14'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:56:14
+ Started at 2017-09-18 16:56:14
+ DataSet:
+ location = 'data/2017-09-18/#111_N_100_setget_16-56-14'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:56:15
+ Started at 2017-09-18 16:56:15
+ DataSet:
+ location = 'data/2017-09-18/#112_N_100_setget_16-56-15'
+ | | |
+ Setpoint | keith_smua_volt_set | volt | (100,)
+ Measured | keith_smua_curr | curr | (100,)
+ Finished at 2017-09-18 16:56:15
+ Started at 2017-09-18 16:56:15
+ DataSet:
+ location = 'data/2017-09-18/#113_N_100_setget_16-56-15'
+ | | |