Skip to content

Commit 0ec53b0

Browse files
committed
fix: update the offset in the dc source channel
1 parent c37d4ce commit 0ec53b0

4 files changed

Lines changed: 53 additions & 13 deletions

File tree

src/qibocal/protocols/flux_dependence/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88

99
__all__ = [
1010
"qubit_flux",
11+
"qubit_flux_dc",
1112
"resonator_flux",
13+
"resonator_flux_dc",
1214
"qubit_crosstalk",
1315
"flux_gate",
1416
"flux_amplitude_frequency",

src/qibocal/protocols/flux_dependence/qubit_flux_dependence.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from collections import defaultdict
22
from dataclasses import dataclass, field
3+
from functools import partial
34
from typing import Optional
45

56
import numpy as np
@@ -38,6 +39,7 @@
3839
"QubitFluxResults",
3940
"QubitFluxType",
4041
"qubit_flux",
42+
"qubit_flux_dc",
4143
]
4244

4345

@@ -101,6 +103,7 @@ def _acquisition(
101103
params: QubitFluxParameters,
102104
platform: CalibrationPlatform,
103105
targets: list[QubitId],
106+
dc_source: bool,
104107
) -> QubitFluxData:
105108
"""Data acquisition for QubitFlux Experiment."""
106109

@@ -144,7 +147,7 @@ def _acquisition(
144147
)
145148

146149
flux_channel = (
147-
platform.qubits[q].dc_flux if params.dc_source else platform.qubits[q].flux
150+
platform.qubits[q].dc_flux if dc_source else platform.qubits[q].flux
148151
)
149152
offset0 = platform.config(flux_channel).offset
150153
offset_sweepers.append(
@@ -173,7 +176,7 @@ def _acquisition(
173176
{platform.qubits[q].probe: {"frequency": readout_frequency(q, platform)}}
174177
for q in targets
175178
]
176-
if params.dc_source:
179+
if dc_source:
177180
results = defaultdict(list)
178181
for ioffset in range(len(delta_offset_range)):
179182
updates.extend(
@@ -321,15 +324,31 @@ def _plot(data: QubitFluxData, fit: QubitFluxResults, target: QubitId):
321324
return figures, ""
322325

323326

324-
def _update(results: QubitFluxResults, platform: CalibrationPlatform, qubit: QubitId):
327+
def _update(
328+
results: QubitFluxResults,
329+
platform: CalibrationPlatform,
330+
qubit: QubitId,
331+
dc_source: bool,
332+
):
325333
update.drive_frequency(results.frequency[qubit], platform, qubit)
326334
update.sweetspot(results.sweetspot[qubit], platform, qubit)
327-
update.flux_offset(results.sweetspot[qubit], platform, qubit)
335+
if dc_source:
336+
update.dc_flux_offset(results.sweetspot[qubit], platform, qubit)
337+
else:
338+
update.flux_offset(results.sweetspot[qubit], platform, qubit)
328339
platform.calibration.single_qubits[qubit].qubit.maximum_frequency = int(
329340
results.frequency[qubit]
330341
)
331342
update.crosstalk_matrix(results.matrix_element[qubit], platform, qubit, qubit)
332343

333344

334-
qubit_flux = Routine(_acquisition, _fit, _plot, _update)
345+
qubit_flux = Routine(
346+
partial(_acquisition, dc_source=False),
347+
_fit,
348+
_plot,
349+
partial(_update, dc_source=False),
350+
)
335351
"""QubitFlux Routine object."""
352+
qubit_flux_dc = Routine(
353+
partial(_acquisition, dc_source=True), _fit, _plot, partial(_update, dc_source=True)
354+
)

src/qibocal/protocols/flux_dependence/resonator_flux_dependence.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from collections import defaultdict
22
from dataclasses import dataclass, field
3+
from functools import partial
34
from typing import Optional
45

56
import numpy as np
@@ -23,7 +24,7 @@
2324
)
2425
from . import utils
2526

26-
__all__ = ["ResonatorFluxParameters", "resonator_flux"]
27+
__all__ = ["ResonatorFluxParameters", "resonator_flux", "resonator_flux_dc"]
2728

2829

2930
@dataclass
@@ -38,8 +39,6 @@ class ResonatorFluxParameters(Parameters):
3839
"""Width for bias sweep [V]."""
3940
bias_step: Optional[float] = None
4041
"""Bias step for sweep [a.u.]."""
41-
dc_source: bool = False
42-
"""Sweep bias offset on software when external DC source is used."""
4342

4443

4544
@dataclass
@@ -97,6 +96,7 @@ def _acquisition(
9796
params: ResonatorFluxParameters,
9897
platform: CalibrationPlatform,
9998
targets: list[QubitId],
99+
dc_source: bool,
100100
) -> ResonatorFluxData:
101101
"""Data acquisition for ResonatorFlux experiment."""
102102

@@ -122,7 +122,7 @@ def _acquisition(
122122
sequence += ro_sequence
123123

124124
qubit = platform.qubits[q]
125-
flux_channel = qubit.dc_flux if params.dc_source else qubit.flux
125+
flux_channel = qubit.dc_flux if dc_source else qubit.flux
126126
offset0 = platform.config(flux_channel).offset
127127

128128
freq_sweepers.append(
@@ -160,7 +160,7 @@ def _acquisition(
160160
acquisition_type=AcquisitionType.INTEGRATION,
161161
averaging_mode=AveragingMode.CYCLIC,
162162
)
163-
if params.dc_source:
163+
if dc_source:
164164
results = defaultdict(list)
165165
for ioffset in range(len(delta_offset_range)):
166166
updates = [
@@ -320,14 +320,28 @@ def _plot(data: ResonatorFluxData, fit: ResonatorFluxResults, target: QubitId):
320320

321321

322322
def _update(
323-
results: ResonatorFluxResults, platform: CalibrationPlatform, qubit: QubitId
323+
results: ResonatorFluxResults,
324+
platform: CalibrationPlatform,
325+
qubit: QubitId,
326+
dc_source: bool,
324327
):
325328
update.dressed_resonator_frequency(results.frequency[qubit], platform, qubit)
326329
update.readout_frequency(results.frequency[qubit], platform, qubit)
327330
update.coupling(results.coupling[qubit], platform, qubit)
328-
update.flux_offset(results.sweetspot[qubit], platform, qubit)
331+
if dc_source:
332+
update.dc_flux_offset(results.sweetspot[qubit], platform, qubit)
333+
else:
334+
update.flux_offset(results.sweetspot[qubit], platform, qubit)
329335
update.sweetspot(results.sweetspot[qubit], platform, qubit)
330336

331337

332-
resonator_flux = Routine(_acquisition, _fit, _plot, _update)
338+
resonator_flux = Routine(
339+
partial(_acquisition, dc_source=False),
340+
_fit,
341+
_plot,
342+
partial(_update, dc_source=False),
343+
)
333344
"""ResonatorFlux Routine object."""
345+
resonator_flux_dc = Routine(
346+
partial(_acquisition, dc_source=True), _fit, _plot, partial(_update, dc_source=True)
347+
)

src/qibocal/update.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,11 @@ def flux_offset(offset: float, platform: Platform, qubit: QubitId):
208208
platform.update({f"configs.{platform.qubits[qubit].flux}.offset": offset})
209209

210210

211+
def dc_flux_offset(offset: float, platform: Platform, qubit: QubitId):
212+
"""Update flux offset parameter in platform for specific qubit."""
213+
platform.update({f"configs.{platform.qubits[qubit].dc_flux}.offset": offset})
214+
215+
211216
def frequency_12_transition(frequency: int, platform: Platform, qubit: QubitId):
212217
channel = platform.qubits[qubit].drive_extra[1, 2]
213218
platform.update({f"configs.{channel}.frequency": frequency})

0 commit comments

Comments
 (0)