1+ from collections import defaultdict
12from dataclasses import dataclass , field
23from typing import Optional
34
@@ -37,6 +38,8 @@ class ResonatorFluxParameters(Parameters):
3738 """Width for bias sweep [V]."""
3839 bias_step : Optional [float ] = None
3940 """Bias step for sweep [a.u.]."""
41+ dc_source : bool = False
42+ """Sweep bias offset on software when external DC source is used."""
4043
4144
4245@dataclass
@@ -119,7 +122,8 @@ def _acquisition(
119122 sequence += ro_sequence
120123
121124 qubit = platform .qubits [q ]
122- offset0 = platform .config (qubit .flux ).offset
125+ flux_channel = qubit .dc_flux if params .dc_source else qubit .flux
126+ offset0 = platform .config (flux_channel ).offset
123127
124128 freq_sweepers .append (
125129 Sweeper (
@@ -132,7 +136,7 @@ def _acquisition(
132136 Sweeper (
133137 parameter = Parameter .offset ,
134138 values = offset0 + delta_offset_range ,
135- channels = [qubit . flux ],
139+ channels = [flux_channel ],
136140 )
137141 )
138142
@@ -150,14 +154,30 @@ def _acquisition(
150154 bare_resonator_frequency = bare_resonator_frequency ,
151155 charging_energy = charging_energy ,
152156 )
153- results = platform .execute (
154- [sequence ],
155- [offset_sweepers , freq_sweepers ],
157+ execution_params = dict (
156158 nshots = params .nshots ,
157159 relaxation_time = params .relaxation_time ,
158160 acquisition_type = AcquisitionType .INTEGRATION ,
159161 averaging_mode = AveragingMode .CYCLIC ,
160162 )
163+ if params .dc_source :
164+ results = defaultdict (list )
165+ for ioffset in range (len (delta_offset_range )):
166+ updates = [
167+ {sweeper .channels [0 ]: {"offset" : sweeper .values [ioffset ]}}
168+ for sweeper in offset_sweepers
169+ ]
170+ results_ = platform .execute (
171+ [sequence ], [freq_sweepers ], updates = updates , ** execution_params
172+ )
173+ for key , value in results_ .items ():
174+ results [key ].append (value )
175+ results = {key : np .array (value ) for key , value in results .items ()}
176+ else :
177+ results = platform .execute (
178+ [sequence ], [offset_sweepers , freq_sweepers ], ** execution_params
179+ )
180+
161181 # retrieve the results for every qubit
162182 for i , qubit in enumerate (targets ):
163183 result = results [ro_pulses [qubit ].id ]
0 commit comments