import qcodes as qc
import numpy as np
from qcodes.instrument.parameter import ManualParameter
from qcodes.utils.validators import Numbers
from qcodes.loops import Loop
Logging hadn't been started. Activating auto-logging. Current session state plus future input saved. Filename : C:\Users\a-halakh\.qcodes\logs\command_history.log Mode : append Output logging : True Raw input log : False Timestamping : True State : active Qcodes Logfile : C:\Users\a-halakh\.qcodes\logs\200324-28996-qcodes.log False
If you want to sweep multiple parameters at once qcodes offers the combine function. You can combine any number of any kind paramter. We'll use a ManualParameter for this example.
p1 = ManualParameter('p1', vals=Numbers(-10, 10))
p2 = ManualParameter('p2', vals=Numbers(-10, 10))
p3 = ManualParameter('p3', vals=Numbers(-10, 10))
p4 = ManualParameter('p4', vals=Numbers(-10, 10))
# set to -1 so we get some data out
p4.set(-1)
combined = qc.combine(p1, p2, p3, name='combined')
sweep_vals = np.array([[1, 1,1], [1, 1,1]])
# 2d loop with a inner loop over a combined parameter
loop = Loop(p1.sweep(0,10,1)).loop(combined.sweep(sweep_vals), delay=0.001).each(p4)
data = loop.get_data_set(name='testsweep')
data = loop.run()
Started at 2020-03-24 18:35:07 DataSet: location = 'data/2020-03-24/#004_testsweep_18-35-07' <Type> | <array_id> | <array.name> | <array.shape> Setpoint | p1_set | p1 | (11,) Setpoint | combined_set | combined | (11, 2) Measured | p4 | p4 | (11, 2) Measured | p1 | p1 | (11, 2) Measured | p2 | p2 | (11, 2) Measured | p3 | p3 | (11, 2) Finished at 2020-03-24 18:35:07
The combined_set just stores the indices
print(data.combined_set)
DataArray[11,2]: combined_set array([[0., 1.], [0., 1.], [0., 1.], [0., 1.], [0., 1.], [0., 1.], [0., 1.], [0., 1.], [0., 1.], [0., 1.], [0., 1.]])
But the acutal set values are saved, but labeled as "measured"
data.p3
DataArray[11,2]: p3 array([[1., 1.], [1., 1.], [1., 1.], [1., 1.], [1., 1.], [1., 1.], [1., 1.], [1., 1.], [1., 1.], [1., 1.], [1., 1.]])
If an aggregator function is given, the aggregated values are saved instead of the indices.
# define an aggregator function that takes as arguments the parameters you whish to aggegate
def linear(x,y,z):
return x+y+z
combined = qc.combine(p1, p2, p3, name='combined', label="Sum", unit="a.u", aggregator=linear)
x_vals = np.linspace(1, 2, 2)
y_vals = np.linspace(1, 2, 2)
z_vals = np.linspace(1, 2, 2)
# 2d loop with a inner loop over a combined parameter
loop = Loop(p1.sweep(0,10,1)).loop(combined.sweep(x_vals, y_vals, z_vals), delay=0.001).each(p4)
data = loop.get_data_set(name='testsweep')
data = loop.run()
Started at 2020-03-24 18:35:07 DataSet: location = 'data/2020-03-24/#005_testsweep_18-35-07' <Type> | <array_id> | <array.name> | <array.shape> Setpoint | p1_set | p1 | (11,) Setpoint | combined_set | combined | (11, 2) Measured | p4 | p4 | (11, 2) Measured | p1 | p1 | (11, 2) Measured | p2 | p2 | (11, 2) Measured | p3 | p3 | (11, 2) Finished at 2020-03-24 18:35:07
the combined_set now stores the aggregated values
print(data.combined_set)
DataArray[11,2]: combined_set array([[3., 6.], [3., 6.], [3., 6.], [3., 6.], [3., 6.], [3., 6.], [3., 6.], [3., 6.], [3., 6.], [3., 6.], [3., 6.]])
# snapshot of the combined parameter
combined.snapshot()
OrderedDict([('__class__', 'qcodes.instrument.parameter.CombinedParameter'), ('unit', 'a.u'), ('label', 'Sum'), ('full_name', 'combined'), ('aggregator', '<function linear at 0x0000024683100828>'), ('p1', {'value': 2.0, 'raw_value': 2.0, 'ts': '2020-03-24 18:35:07', '__class__': 'qcodes.instrument.parameter.ManualParameter', 'full_name': 'p1', 'post_delay': 0, 'label': 'p1', 'inter_delay': 0, 'vals': '<Numbers -10<=v<=10>', 'unit': '', 'name': 'p1'}), ('p2', {'value': 2.0, 'raw_value': 2.0, 'ts': '2020-03-24 18:35:07', '__class__': 'qcodes.instrument.parameter.ManualParameter', 'full_name': 'p2', 'post_delay': 0, 'label': 'p2', 'inter_delay': 0, 'vals': '<Numbers -10<=v<=10>', 'unit': '', 'name': 'p2'}), ('p3', {'value': 2.0, 'raw_value': 2.0, 'ts': '2020-03-24 18:35:07', '__class__': 'qcodes.instrument.parameter.ManualParameter', 'full_name': 'p3', 'post_delay': 0, 'label': 'p3', 'inter_delay': 0, 'vals': '<Numbers -10<=v<=10>', 'unit': '', 'name': 'p3'})])