Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tune landscape protocol #634

Merged
merged 19 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/qibocal/protocols/characterization/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,13 @@
calibrate_state_discrimination,
)
from .signal_experiments.time_of_flight_readout import time_of_flight_readout
from .two_qubit_interaction import chevron, chsh_circuits, chsh_pulses, cz_virtualz
from .two_qubit_interaction import (
chevron,
chsh_circuits,
chsh_pulses,
cz_virtualz,
cz_virtualz_signal,
)


class Operation(Enum):
Expand Down Expand Up @@ -115,6 +121,7 @@ class Operation(Enum):
dispersive_shift_qutrit = dispersive_shift_qutrit
coupler_resonator_spectroscopy = coupler_resonator_spectroscopy
coupler_qubit_spectroscopy = coupler_qubit_spectroscopy
cz_virtualz_signal = cz_virtualz_signal
coupler_chevron = coupler_chevron
flipping_signal = flipping_signal
calibrate_state_discrimination = calibrate_state_discrimination
17 changes: 10 additions & 7 deletions src/qibocal/protocols/characterization/couplers/coupler_chevron.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from qibolab.platform import Platform
from qibolab.pulses import PulseSequence
from qibolab.qubits import QubitPairId
from qibolab.sweeper import Parameter, Sweeper
from qibolab.sweeper import Parameter, Sweeper, SweeperType

from qibocal.auto.operation import Results, Routine

Expand Down Expand Up @@ -50,9 +50,9 @@ def _aquisition(
"""
# define the parameter to sweep and its range:
delta_amplitude_range = np.arange(
params.amplitude_min,
params.amplitude_max,
params.amplitude_step,
params.amplitude_min_factor,
params.amplitude_max_factor,
params.amplitude_step_factor,
)
delta_duration_range = np.arange(
params.duration_min, params.duration_max, params.duration_step
Expand All @@ -64,7 +64,7 @@ def _aquisition(
for pair in targets:
sequence = PulseSequence()

ordered_pair = order_pair(pair, platform.qubits)
ordered_pair = order_pair(pair, platform)

# initialize in system in 11(CZ) or 10(iSWAP) state
if params.native_gate == "CZ":
Expand All @@ -85,7 +85,9 @@ def _aquisition(
(ordered_pair[1], ordered_pair[0]),
start=sequence.finish + params.dt,
)

data.native_amplitude[ordered_pair] = getattr(
native_gate.coupler_pulses(*pair)[:1][0], "amplitude"
)
sequence.add(native_gate)

ro_pulse1 = platform.create_MZ_pulse(
Expand All @@ -101,6 +103,7 @@ def _aquisition(
Parameter.amplitude,
delta_amplitude_range,
pulses=[p for p in native_gate.coupler_pulses(*pair)][:1],
type=SweeperType.FACTOR,
)
sweeper_duration = Sweeper(
Parameter.duration,
Expand All @@ -125,7 +128,7 @@ def _aquisition(
ordered_pair[0],
ordered_pair[1],
delta_duration_range,
delta_amplitude_range,
delta_amplitude_range * data.native_amplitude[ordered_pair],
results[ordered_pair[0]].magnitude,
results[ordered_pair[1]].magnitude,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,14 @@ def _acquisition(
# Coupler pulse while Drive pulse - MZ

if params.measured_qubits is None:
params.measured_qubits = [
order_pair(pair, platform.qubits)[0] for pair in targets
]
params.measured_qubits = [order_pair(pair, platform)[0] for pair in targets]

sequence = PulseSequence()
ro_pulses = {}
qd_pulses = {}
couplers = []
for i, pair in enumerate(targets):
ordered_pair = order_pair(pair, platform.qubits)
ordered_pair = order_pair(pair, platform)
measured_qubit = params.measured_qubits[i]

qubit = platform.qubits[measured_qubit].name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,13 @@ def _acquisition(
# Coupler pulse while MZ

if params.measured_qubits is None:
params.measured_qubits = [
order_pair(pair, platform.qubits)[0] for pair in targets
]
params.measured_qubits = [order_pair(pair, platform)[0] for pair in targets]

sequence = PulseSequence()
ro_pulses = {}
couplers = []
for i, pair in enumerate(targets):
ordered_pair = order_pair(pair, platform.qubits)
ordered_pair = order_pair(pair, platform)
measured_qubit = params.measured_qubits[i]

qubit = platform.qubits[measured_qubit].name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def _acquisition(
platform (Platform): Qibolab platform object.
qubits (dict): list of targets qubit pairs to perform the action.
"""
order_pairs = np.array([order_pair(pair, platform.qubits) for pair in targets])
order_pairs = np.array([order_pair(pair, platform) for pair in targets])
data = AvoidedCrossingData(qubit_pairs=order_pairs.tolist())
# Extract the qubits in the qubits pairs and evaluate their flux dep
unique_qubits = np.unique(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .chevron import chevron
from .chsh import chsh_circuits, chsh_pulses
from .cz_virtualz import cz_virtualz
from .cz_virtualz_signal import cz_virtualz_signal
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
class ChevronParameters(Parameters):
"""CzFluxTime runcard inputs."""

amplitude_min: float
amplitude_min_factor: float
"""Amplitude minimum."""
amplitude_max: float
amplitude_max_factor: float
"""Amplitude maximum."""
amplitude_step: float
amplitude_step_factor: float
"""Amplitude step."""
duration_min: float
"""Duration minimum."""
Expand All @@ -54,6 +54,9 @@ class ChevronResults(Results):
duration: dict[QubitPairId, int]
"""Virtual Z phase correction."""

def __contains__(self, key: QubitPairId):
return super().__contains__(key) | super().__contains__((key[1], key[0]))


ChevronType = np.dtype(
[
Expand All @@ -70,6 +73,10 @@ class ChevronResults(Results):
class ChevronData(Data):
"""Chevron acquisition outputs."""

native_amplitude: dict[QubitPairId, float] = field(default_factory=dict)
"""CZ platform amplitude for qubit pair."""
sweetspot: dict[QubitPairId, float] = field(default_factory=dict)
"""Sweetspot value for high frequency qubit."""
andrea-pasquale marked this conversation as resolved.
Show resolved Hide resolved
data: dict[QubitPairId, npt.NDArray[ChevronType]] = field(default_factory=dict)

def register_qubit(self, low_qubit, high_qubit, length, amp, prob_low, prob_high):
Expand Down Expand Up @@ -106,8 +113,9 @@ def _aquisition(
for pair in targets:
# order the qubits so that the low frequency one is the first
sequence = PulseSequence()
ordered_pair = order_pair(pair, platform.qubits)

ordered_pair = order_pair(pair, platform)
# initialize in system in 11 state
initialize_lowfreq = platform.create_RX_pulse(
ordered_pair[0], start=0, relative_phase=0
)
Expand Down Expand Up @@ -157,9 +165,9 @@ def _aquisition(

# define the parameter to sweep and its range:
delta_amplitude_range = np.arange(
params.amplitude_min,
params.amplitude_max,
params.amplitude_step,
params.amplitude_min_factor,
params.amplitude_max_factor,
params.amplitude_step_factor,
)
delta_duration_range = np.arange(
params.duration_min, params.duration_max, params.duration_step
Expand All @@ -169,8 +177,13 @@ def _aquisition(
Parameter.amplitude,
delta_amplitude_range,
pulses=[cz.get_qubit_pulses(ordered_pair[1]).qf_pulses[0]],
type=SweeperType.ABSOLUTE,
type=SweeperType.FACTOR,
)

data.native_amplitude[ordered_pair] = (
cz.get_qubit_pulses(ordered_pair[1]).qf_pulses[0].amplitude
)
data.sweetspot[ordered_pair] = platform.qubits[ordered_pair[1]].sweetspot
sweeper_duration = Sweeper(
Parameter.duration,
delta_duration_range,
Expand All @@ -191,7 +204,7 @@ def _aquisition(
ordered_pair[0],
ordered_pair[1],
delta_duration_range,
delta_amplitude_range,
delta_amplitude_range * data.native_amplitude[ordered_pair],
results[ordered_pair[0]].magnitude,
results[ordered_pair[1]].magnitude,
)
Expand Down Expand Up @@ -314,8 +327,12 @@ def _plot(data: ChevronData, fit: ChevronResults, target: QubitPairId):
fitting_report = table_html(
table_dict(
target[1],
["CZ amplitude", "CZ duration"], # Change name from the params
[fit.amplitude[target], fit.duration[target]],
["CZ amplitude", "CZ duration", "Bias point"],
[
fit.amplitude[target],
fit.duration[target],
fit.amplitude[target] + data.sweetspot[target],
andrea-pasquale marked this conversation as resolved.
Show resolved Hide resolved
],
)
)

Expand Down
Loading
Loading