SweepMeasurementBuilder Example¶
This is an example of building a PulseSchedule from a SweepMeasurementConfig using SweepMeasurementBuilder.
In [ ]:
Copied!
import numpy as np
import tunits
from qxschema.sweep_measurement_config import (
DataAcquisitionConfig,
FrequencyConfig,
ParameterSweepConfig,
ParameterSweepContent,
ParametricSequenceConfig,
ParametricSequencePulseCommand,
SweepMeasurementConfig,
)
from qubex.measurement import SweepMeasurementBuilder
import numpy as np
import tunits
from qxschema.sweep_measurement_config import (
DataAcquisitionConfig,
FrequencyConfig,
ParameterSweepConfig,
ParameterSweepContent,
ParametricSequenceConfig,
ParametricSequencePulseCommand,
SweepMeasurementConfig,
)
from qubex.measurement import SweepMeasurementBuilder
In [ ]:
Copied!
# Define a parametric sequence
sequence = ParametricSequenceConfig(
delta_time=tunits.Time(2.0, "ns"),
variable_list=["amplitude", "duration"],
command_list=[
ParametricSequencePulseCommand(
name="Gaussian",
channel_list=["Q01"],
argument_list=[32, 1.0, 4.0],
),
ParametricSequencePulseCommand(
name="Blank",
channel_list=["Q01"],
argument_list=["2 * duration"],
),
ParametricSequencePulseCommand(
name="Gaussian",
channel_list=["Q01"],
argument_list=[32, "amplitude", 4.0],
),
ParametricSequencePulseCommand(
name="Barrier",
channel_list=[],
argument_list=[],
),
ParametricSequencePulseCommand(
name="FlatTop",
channel_list=["Q02"],
argument_list=[128, "amplitude", 16.0],
),
],
)
sequence
# Define a parametric sequence
sequence = ParametricSequenceConfig(
delta_time=tunits.Time(2.0, "ns"),
variable_list=["amplitude", "duration"],
command_list=[
ParametricSequencePulseCommand(
name="Gaussian",
channel_list=["Q01"],
argument_list=[32, 1.0, 4.0],
),
ParametricSequencePulseCommand(
name="Blank",
channel_list=["Q01"],
argument_list=["2 * duration"],
),
ParametricSequencePulseCommand(
name="Gaussian",
channel_list=["Q01"],
argument_list=[32, "amplitude", 4.0],
),
ParametricSequencePulseCommand(
name="Barrier",
channel_list=[],
argument_list=[],
),
ParametricSequencePulseCommand(
name="FlatTop",
channel_list=["Q02"],
argument_list=[128, "amplitude", 16.0],
),
],
)
sequence
In [ ]:
Copied!
# Define sweep settings (sweep amp)
sweep = ParameterSweepConfig(
sweep_content_list={
"amplitude_sweep": ParameterSweepContent(
category="sequence_variable",
sweep_target=["amplitude"],
value_list=np.linspace(0.5, 2.0, 4),
),
"duration_sweep": ParameterSweepContent(
category="sequence_variable",
sweep_target=["duration"],
value_list=np.arange(32, 128, 32),
),
"frequency_sweep": ParameterSweepContent(
category="frequency_shift",
sweep_target=["Q01"],
value_list=np.linspace(-0.05, 0.05, 4),
),
},
sweep_axis=[["amplitude_sweep", "frequency_sweep"], ["duration_sweep"]],
)
sweep
# Define sweep settings (sweep amp)
sweep = ParameterSweepConfig(
sweep_content_list={
"amplitude_sweep": ParameterSweepContent(
category="sequence_variable",
sweep_target=["amplitude"],
value_list=np.linspace(0.5, 2.0, 4),
),
"duration_sweep": ParameterSweepContent(
category="sequence_variable",
sweep_target=["duration"],
value_list=np.arange(32, 128, 32),
),
"frequency_sweep": ParameterSweepContent(
category="frequency_shift",
sweep_target=["Q01"],
value_list=np.linspace(-0.05, 0.05, 4),
),
},
sweep_axis=[["amplitude_sweep", "frequency_sweep"], ["duration_sweep"]],
)
sweep
In [ ]:
Copied!
frequency = FrequencyConfig(
channel_to_frequency={"Q01": tunits.Frequency(5.0, "GHz")},
channel_to_frequency_reference={},
channel_to_frequency_shift={"Q01": tunits.Frequency(10.0, "MHz")},
keep_oscillator_relative_phase=True,
)
data_acq = DataAcquisitionConfig(
shot_count=1000,
shot_repetition_margin=tunits.Time(300, "us"),
data_acquisition_duration=tunits.Time(512, "ns"),
data_acquisition_delay=tunits.Time(128, "ns"),
data_acquisition_timeout=tunits.Time(10, "s"),
flag_average_waveform=True,
flag_average_shots=True,
delta_time=tunits.Time(2.0, "ns"),
channel_to_averaging_time={"Q01": tunits.Time(236, "ns")},
channel_to_averaging_window={"Q01": np.array([0.0 + 0.0j, 1.0 + 1.0j])},
)
config = SweepMeasurementConfig(
channel_list=["Q01", "Q02"],
sequence=sequence,
frequency=frequency,
data_acquisition=data_acq,
sweep_parameter=sweep,
)
config
frequency = FrequencyConfig(
channel_to_frequency={"Q01": tunits.Frequency(5.0, "GHz")},
channel_to_frequency_reference={},
channel_to_frequency_shift={"Q01": tunits.Frequency(10.0, "MHz")},
keep_oscillator_relative_phase=True,
)
data_acq = DataAcquisitionConfig(
shot_count=1000,
shot_repetition_margin=tunits.Time(300, "us"),
data_acquisition_duration=tunits.Time(512, "ns"),
data_acquisition_delay=tunits.Time(128, "ns"),
data_acquisition_timeout=tunits.Time(10, "s"),
flag_average_waveform=True,
flag_average_shots=True,
delta_time=tunits.Time(2.0, "ns"),
channel_to_averaging_time={"Q01": tunits.Time(236, "ns")},
channel_to_averaging_window={"Q01": np.array([0.0 + 0.0j, 1.0 + 1.0j])},
)
config = SweepMeasurementConfig(
channel_list=["Q01", "Q02"],
sequence=sequence,
frequency=frequency,
data_acquisition=data_acq,
sweep_parameter=sweep,
)
config
In [ ]:
Copied!
config.to_dict()
config.to_dict()
In [ ]:
Copied!
config.to_json()
config.to_json()
In [ ]:
Copied!
builder = SweepMeasurementBuilder(config=config)
print(builder.sweep_shape)
schedule = builder.build_schedule(indices=(3, 2))
schedule.plot()
builder = SweepMeasurementBuilder(config=config)
print(builder.sweep_shape)
schedule = builder.build_schedule(indices=(3, 2))
schedule.plot()
In [ ]:
Copied!
builder.resolve_sweep_state(sweep_indices=(3, 2))
builder.resolve_sweep_state(sweep_indices=(3, 2))
In [ ]:
Copied!
schedule.get_sequences()
schedule.get_sequences()
In [ ]:
Copied!
schedule.get_sampled_sequences()
schedule.get_sampled_sequences()
In [ ]:
Copied!
for indices in builder.iterate():
schedule = builder.build_schedule(indices=indices)
print(f"Sweep indices: {indices}")
schedule.plot()
for indices in builder.iterate():
schedule = builder.build_schedule(indices=indices)
print(f"Sweep indices: {indices}")
schedule.plot()