Skip to content

Commit 4343449

Browse files
feat: Drop phase from flux protocols
1 parent d3285e3 commit 4343449

4 files changed

Lines changed: 43 additions & 54 deletions

File tree

src/qibocal/protocols/flux_dependence/qubit_crosstalk.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ class QubitCrosstalkData(QubitFluxData):
7070
)
7171
"""Raw data acquired for (qubit, qubit_flux) pairs saved in nested dictionaries."""
7272

73-
def register_qubit(self, qubit, flux_qubit, freq, bias, signal, phase):
73+
def register_qubit(self, qubit, flux_qubit, freq, bias, signal):
7474
"""Store output for single qubit."""
75-
ar = utils.create_data_array(freq, bias, signal, phase, dtype=QubitFluxType)
75+
ar = utils.create_data_array(freq, bias, signal, dtype=QubitFluxType)
7676
if (qubit, flux_qubit) in self.data:
7777
self.data[qubit, flux_qubit] = np.rec.array(
7878
np.concatenate((self.data[qubit, flux_qubit], ar))
@@ -120,10 +120,6 @@ def _acquisition(
120120
freq_sweepers = []
121121
offset_sweepers = []
122122

123-
delta_frequency_range = np.arange(
124-
-params.freq_width / 2, params.freq_width / 2, params.freq_step
125-
)
126-
127123
for qubit in targets:
128124
natives = platform.natives.single_qubit[qubit]
129125
charging_energy[qubit] = platform.calibration.single_qubits[
@@ -159,21 +155,18 @@ def _acquisition(
159155
freq_sweepers.append(
160156
Sweeper(
161157
parameter=Parameter.frequency,
162-
values=platform.config(qd_channel).frequency + delta_frequency_range,
158+
values=platform.config(qd_channel).frequency + params.frequency_range,
163159
channels=[qd_channel],
164160
)
165161
)
166162

167-
delta_offset_range = np.arange(
168-
-params.bias_width / 2, params.bias_width / 2, params.bias_step
169-
)
170163
for q in params.flux_qubits:
171164
flux_channel = platform.qubits[q].flux
172165
offset0 = platform.config(flux_channel).offset
173166
offset_sweepers.append(
174167
Sweeper(
175168
parameter=Parameter.offset,
176-
values=offset0 + delta_offset_range,
169+
values=offset0 + params.bais_range,
177170
channels=[flux_channel],
178171
)
179172
)

src/qibocal/protocols/flux_dependence/qubit_flux_dependence.py

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from qibocal.auto.operation import Data, QubitId, Results, Routine
1717
from qibocal.calibration import CalibrationPlatform
1818
from qibocal.config import log
19-
from qibocal.result import magnitude, phase
19+
from qibocal.result import magnitude
2020
from qibocal.update import replace
2121

2222
from ... import update
@@ -29,7 +29,6 @@
2929
table_html,
3030
)
3131
from . import utils
32-
from .resonator_flux_dependence import ResonatorFluxParameters
3332

3433
__all__ = [
3534
"QubitFluxData",
@@ -41,7 +40,7 @@
4140

4241

4342
@dataclass
44-
class QubitFluxParameters(ResonatorFluxParameters):
43+
class QubitFluxParameters(utils.FluxFrequencySweepParameters):
4544
"""QubitFlux runcard inputs."""
4645

4746
drive_amplitude: Optional[float] = None
@@ -70,7 +69,6 @@ class QubitFluxResults(Results):
7069
("freq", np.float64),
7170
("bias", np.float64),
7271
("signal", np.float64),
73-
("phase", np.float64),
7472
]
7573
)
7674
"""Custom dtype for resonator flux dependence."""
@@ -89,10 +87,10 @@ class QubitFluxData(Data):
8987
data: dict[QubitId, npt.NDArray[QubitFluxType]] = field(default_factory=dict)
9088
"""Raw data acquired."""
9189

92-
def register_qubit(self, qubit, freq, bias, signal, phase):
90+
def register_qubit(self, qubit, freq, bias, signal):
9391
"""Store output for single qubit."""
9492
self.data[qubit] = utils.create_data_array(
95-
freq, bias, signal, phase, dtype=QubitFluxType
93+
freq, bias, signal, dtype=QubitFluxType
9694
)
9795

9896
@property
@@ -117,13 +115,6 @@ def _acquisition(
117115
) -> QubitFluxData:
118116
"""Data acquisition for QubitFlux Experiment."""
119117

120-
delta_frequency_range = np.arange(
121-
-params.freq_width / 2, params.freq_width / 2, params.freq_step
122-
)
123-
delta_offset_range = np.arange(
124-
-params.bias_width / 2, params.bias_width / 2, params.bias_step
125-
)
126-
127118
sequence = PulseSequence()
128119
ro_pulses = {}
129120
qd_pulses = {}
@@ -151,7 +142,7 @@ def _acquisition(
151142
freq_sweepers.append(
152143
Sweeper(
153144
parameter=Parameter.frequency,
154-
values=frequency0 + delta_frequency_range,
145+
values=frequency0 + params.frequency_range,
155146
channels=[qd_channel],
156147
)
157148
)
@@ -161,7 +152,7 @@ def _acquisition(
161152
offset_sweepers.append(
162153
Sweeper(
163154
parameter=Parameter.offset,
164-
values=offset0 + delta_offset_range,
155+
values=offset0 + params.bias_range,
165156
channels=[flux_channel],
166157
)
167158
)
@@ -192,7 +183,6 @@ def _acquisition(
192183
data.register_qubit(
193184
qubit,
194185
signal=magnitude(result),
195-
phase=phase(result),
196186
freq=freq_sweepers[i].values,
197187
bias=offset_sweepers[i].values,
198188
)

src/qibocal/protocols/flux_dependence/resonator_flux_dependence.py

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from dataclasses import dataclass, field
2-
from typing import Optional
32

43
import numpy as np
54
import numpy.typing as npt
@@ -9,9 +8,9 @@
98
from qibocal.calibration import CalibrationPlatform
109

1110
from ... import update
12-
from ...auto.operation import Data, Parameters, QubitId, Results, Routine
11+
from ...auto.operation import Data, QubitId, Results, Routine
1312
from ...config import log
14-
from ...result import magnitude, phase
13+
from ...result import magnitude
1514
from ..utils import (
1615
GHZ_TO_HZ,
1716
HZ_TO_GHZ,
@@ -26,18 +25,9 @@
2625

2726

2827
@dataclass
29-
class ResonatorFluxParameters(Parameters):
28+
class ResonatorFluxParameters(utils.FluxFrequencySweepParameters):
3029
"""ResonatorFlux runcard inputs."""
3130

32-
freq_width: int
33-
"""Width for frequency sweep relative to the readout frequency [Hz]."""
34-
freq_step: int
35-
"""Frequency step for sweep [Hz]."""
36-
bias_width: Optional[float] = None
37-
"""Width for bias sweep [V]."""
38-
bias_step: Optional[float] = None
39-
"""Bias step for sweep [a.u.]."""
40-
4131

4232
@dataclass
4333
class ResonatorFluxResults(Results):
@@ -61,7 +51,6 @@ class ResonatorFluxResults(Results):
6151
("freq", np.float64),
6252
("bias", np.float64),
6353
("signal", np.float64),
64-
("phase", np.float64),
6554
]
6655
)
6756
"""Custom dtype for resonator flux dependence."""
@@ -82,10 +71,10 @@ class ResonatorFluxData(Data):
8271
data: dict[QubitId, npt.NDArray[ResFluxType]] = field(default_factory=dict)
8372
"""Raw data acquired."""
8473

85-
def register_qubit(self, qubit, freq, bias, signal, phase):
74+
def register_qubit(self, qubit, freq, bias, signal):
8675
"""Store output for single qubit."""
8776
self.data[qubit] = utils.create_data_array(
88-
freq, bias, signal, phase, dtype=ResFluxType
77+
freq, bias, signal, dtype=ResFluxType
8978
)
9079

9180
@property
@@ -110,12 +99,6 @@ def _acquisition(
11099
) -> ResonatorFluxData:
111100
"""Data acquisition for ResonatorFlux experiment."""
112101

113-
delta_frequency_range = np.arange(
114-
-params.freq_width / 2, params.freq_width / 2, params.freq_step
115-
)
116-
delta_offset_range = np.arange(
117-
-params.bias_width / 2, params.bias_width / 2, params.bias_step
118-
)
119102
# taking advantage of multiplexing, apply the same set of gates to all qubits in parallel
120103
sequence = PulseSequence()
121104
ro_pulses = {}
@@ -137,14 +120,14 @@ def _acquisition(
137120
freq_sweepers.append(
138121
Sweeper(
139122
parameter=Parameter.frequency,
140-
values=readout_frequency(q, platform) + delta_frequency_range,
123+
values=readout_frequency(q, platform) + params.frequency_range,
141124
channels=[qubit.probe],
142125
)
143126
)
144127
offset_sweepers.append(
145128
Sweeper(
146129
parameter=Parameter.offset,
147-
values=offset0 + delta_offset_range,
130+
values=offset0 + params.bias_range,
148131
channels=[qubit.flux],
149132
)
150133
)
@@ -177,7 +160,6 @@ def _acquisition(
177160
data.register_qubit(
178161
qubit,
179162
signal=magnitude(result),
180-
phase=phase(result),
181163
freq=freq_sweepers[i].values,
182164
bias=offset_sweepers[i].values,
183165
)

src/qibocal/protocols/flux_dependence/utils.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,48 @@
1+
from dataclasses import dataclass
2+
13
import numpy as np
24
import plotly.graph_objects as go
35
from plotly.subplots import make_subplots
46

7+
from ...auto.operation import Parameters
58
from ..utils import HZ_TO_GHZ
69

710

11+
@dataclass(kw_only=True)
12+
class FluxFrequencySweepParameters(Parameters):
13+
"""Parameters to define flux DC sweep."""
14+
15+
freq_width: int
16+
"""Width for frequency sweep relative to the readout frequency [Hz]."""
17+
freq_step: int
18+
"""Frequency step for sweep [Hz]."""
19+
bias_width: float
20+
"""Width for bias sweep [V]."""
21+
bias_step: float
22+
"""Bias step for sweep [V]."""
23+
24+
@property
25+
def frequency_range(self) -> np.ndarray:
26+
return np.arange(-self.freq_width / 2, self.freq_width / 2, self.freq_step)
27+
28+
@property
29+
def bias_range(self) -> np.ndarray:
30+
return np.arange(-self.bias_width / 2, self.bias_width / 2, self.bias_step)
31+
32+
833
def is_crosstalk(data):
934
"""Check if keys are tuple which corresponds to crosstalk data structure."""
1035
return all(isinstance(key, tuple) for key in data.data.keys())
1136

1237

13-
def create_data_array(freq, bias, signal, phase, dtype):
38+
def create_data_array(freq, bias, signal, dtype):
1439
"""Create custom dtype array for acquired data."""
1540
size = len(freq) * len(bias)
1641
ar = np.empty(size, dtype=dtype)
1742
frequency, biases = np.meshgrid(freq, bias)
1843
ar["freq"] = frequency.ravel()
1944
ar["bias"] = biases.ravel()
2045
ar["signal"] = signal.ravel()
21-
ar["phase"] = phase.ravel()
2246
return np.rec.array(ar)
2347

2448

0 commit comments

Comments
 (0)