Skip to content

Commit c37d4ce

Browse files
committed
feat: implement software in resonator flux
1 parent e5c275a commit c37d4ce

2 files changed

Lines changed: 25 additions & 7 deletions

File tree

src/qibocal/protocols/flux_dependence/qubit_flux_dependence.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ class QubitFluxParameters(ResonatorFluxParameters):
5050
Otherwise the default amplitude defined on the platform runcard will be used"""
5151
drive_duration: int = 2000
5252
"""Duration of the drive pulse."""
53-
dc_source: bool = False
54-
"""Sweep bias offset on software when external DC source is used."""
5553

5654

5755
@dataclass

src/qibocal/protocols/flux_dependence/resonator_flux_dependence.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections import defaultdict
12
from dataclasses import dataclass, field
23
from 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

Comments
 (0)