From 93380befd56b87ec25b2b4289cb930b3af73a7f4 Mon Sep 17 00:00:00 2001 From: ThorvaldLarsen Date: Thu, 21 Mar 2019 11:37:30 +0100 Subject: [PATCH 1/4] Add soft_sweep for buffermeasurment --- .../customised_instruments/SR830_ext.py | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/qdev_wrappers/customised_instruments/SR830_ext.py b/qdev_wrappers/customised_instruments/SR830_ext.py index 3fb6ef5d..560a0b78 100644 --- a/qdev_wrappers/customised_instruments/SR830_ext.py +++ b/qdev_wrappers/customised_instruments/SR830_ext.py @@ -1,5 +1,6 @@ from qcodes.instrument_drivers.stanford_research.SR830 import SR830, ChannelBuffer - +import time +import numpy as np # A conductance buffer, needed for the faster 2D conductance measurements # (Dave Wecker style) @@ -57,8 +58,51 @@ def get_raw(self): return rs -# Subclass the SR830 +class soft_sweep(): + ''' + Helper class to utilize buffers within doNd measurements. + How to: + do0d(lockin.soft_sweep(para_set, start, stor, num_points, delay), lockin.g_buff) + The class can be instanciated with a list of lockins if multiple needs to be measured at each point: + Nlockin_sweep = soft_sweep((lockin1,lockin2)) + do0d(Nlockin_sweep(para_set, start, stor, num_points, delay), lockin1.g_buff, lockin2.g_buff) + ''' + def __init__(self, lockins): + self.lockins = lockins + + def sweep(self, param_set, start, stop, + num_points, delay): + self.param_set = param_set + self.param_set.post_delay = delay + self.setpoints = np.linspace(start, stop, num_points) + for lockin in self.lockins: + lockin.buffer_SR('Trigger') + lockin.buffer_reset + lockin.buffer_start + # Get list of ChannelBuffer type attributes on lockin + buffer_list = [getattr(lockin, name) + for name in dir(lockin) + if isinstance(getattr(lockin, name),ChannelBuffer)] + for buffer_type in buffer_list: + buffer_type.prepare_buffer_readout() + buffer_type.setpoints = (tuple(self.setpoints),) + buffer_type.shape = self.setpoints.shape + buffer_type.setpoint_units = (param_set.unit,) + buffer_type.setpoint_names = (param_set.name,) + buffer_type.setpoint_labels = (param_set.label,) + time.sleep(0.1) + return self.perform_sweep + + def perform_sweep(self): + for set_val in self.setpoints: + self.param_set(set_val) + for lockin in self.lockins: + lockin.send_trigger() + self.param_set(self.setpoints[0]) + + +# Subclass the SR830 class SR830_ext(SR830): def __init__(self, name, address, **kwargs): super().__init__(name, address, **kwargs) @@ -117,6 +161,8 @@ def __init__(self, name, address, **kwargs): label='Resistance', parameter_class = ResistanceBuffer) + self.soft_sweep = soft_sweep([self]) + def _get_conductance(self): V = self.amplitude.get_latest() I = abs(self.R()/self.iv_gain.get_latest()) From c55de5e40205355028154f8729a2bbda00d5b899 Mon Sep 17 00:00:00 2001 From: ThorvaldLarsen Date: Thu, 21 Mar 2019 11:59:34 +0100 Subject: [PATCH 2/4] bug_fixing --- qdev_wrappers/customised_instruments/SR830_ext.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/qdev_wrappers/customised_instruments/SR830_ext.py b/qdev_wrappers/customised_instruments/SR830_ext.py index 560a0b78..d6808973 100644 --- a/qdev_wrappers/customised_instruments/SR830_ext.py +++ b/qdev_wrappers/customised_instruments/SR830_ext.py @@ -62,10 +62,10 @@ class soft_sweep(): ''' Helper class to utilize buffers within doNd measurements. How to: - do0d(lockin.soft_sweep(para_set, start, stor, num_points, delay), lockin.g_buff) + do0d(lockin.soft_sweep.sweep(para_set, start, stor, num_points, delay), lockin.g_buff) The class can be instanciated with a list of lockins if multiple needs to be measured at each point: Nlockin_sweep = soft_sweep((lockin1,lockin2)) - do0d(Nlockin_sweep(para_set, start, stor, num_points, delay), lockin1.g_buff, lockin2.g_buff) + do0d(Nlockin_sweep.sweep(para_set, start, stor, num_points, delay), lockin1.g_buff, lockin2.g_buff) ''' def __init__(self, lockins): self.lockins = lockins @@ -77,8 +77,6 @@ def sweep(self, param_set, start, stop, self.setpoints = np.linspace(start, stop, num_points) for lockin in self.lockins: lockin.buffer_SR('Trigger') - lockin.buffer_reset - lockin.buffer_start # Get list of ChannelBuffer type attributes on lockin buffer_list = [getattr(lockin, name) for name in dir(lockin) @@ -94,6 +92,9 @@ def sweep(self, param_set, start, stop, return self.perform_sweep def perform_sweep(self): + for lockin in self.lockins: + lockin.buffer_reset() + lockin.buffer_start() for set_val in self.setpoints: self.param_set(set_val) for lockin in self.lockins: From 948683d3698447f9a9d559ec1cb605ae61567276 Mon Sep 17 00:00:00 2001 From: ThorvaldLarsen Date: Thu, 21 Mar 2019 12:22:53 +0100 Subject: [PATCH 3/4] Remove prepare call Remove prepare call as it chnages the units of the channel. --- qdev_wrappers/customised_instruments/SR830_ext.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/qdev_wrappers/customised_instruments/SR830_ext.py b/qdev_wrappers/customised_instruments/SR830_ext.py index d6808973..2aedfc65 100644 --- a/qdev_wrappers/customised_instruments/SR830_ext.py +++ b/qdev_wrappers/customised_instruments/SR830_ext.py @@ -76,18 +76,17 @@ def sweep(self, param_set, start, stop, self.param_set.post_delay = delay self.setpoints = np.linspace(start, stop, num_points) for lockin in self.lockins: - lockin.buffer_SR('Trigger') # Get list of ChannelBuffer type attributes on lockin buffer_list = [getattr(lockin, name) for name in dir(lockin) if isinstance(getattr(lockin, name),ChannelBuffer)] for buffer_type in buffer_list: - buffer_type.prepare_buffer_readout() buffer_type.setpoints = (tuple(self.setpoints),) buffer_type.shape = self.setpoints.shape buffer_type.setpoint_units = (param_set.unit,) buffer_type.setpoint_names = (param_set.name,) buffer_type.setpoint_labels = (param_set.label,) + lockin._buffer1_ready = True time.sleep(0.1) return self.perform_sweep From e7a896d388bbdc792db2ccb3ae3a8d9c5cdac9dd Mon Sep 17 00:00:00 2001 From: ThorvaldLarsen Date: Thu, 21 Mar 2019 12:28:34 +0100 Subject: [PATCH 4/4] Set both channels ready --- qdev_wrappers/customised_instruments/SR830_ext.py | 1 + 1 file changed, 1 insertion(+) diff --git a/qdev_wrappers/customised_instruments/SR830_ext.py b/qdev_wrappers/customised_instruments/SR830_ext.py index 2aedfc65..b0563ed5 100644 --- a/qdev_wrappers/customised_instruments/SR830_ext.py +++ b/qdev_wrappers/customised_instruments/SR830_ext.py @@ -87,6 +87,7 @@ def sweep(self, param_set, start, stop, buffer_type.setpoint_names = (param_set.name,) buffer_type.setpoint_labels = (param_set.label,) lockin._buffer1_ready = True + lockin._buffer2_ready = True time.sleep(0.1) return self.perform_sweep