laboneq_applications.experiments.echo
¶
This module defines the Hahn echo experiment.
In the Hahn echo experiment, we perform a Ramsey experiment and place one extra refocusing pulse, typically y180, between the two x90 pulses. Due to this additional pulse, the quasi-static contributions to dephasing can be “refocused” and by that the experiment is less sensitive to quasi-static noise.
The pulses are generally chosen to be resonant with the qubit transition for a Hahn echo, since any frequency detuning would be nominally refocused anyway.
The Hahn echo experiment has the following pulse sequence:
qb --- [ prep transition ] --- [ x90_transition ] --- [ delay/2 ] ---
[ refocusing pulse ] --- [ delay/2 ] --- [ x90_transition ] --- [ measure ]
If multiple qubits are passed to the experiment workflow, the above pulses are applied in parallel on all the qubits.
EchoExperimentOptions
¶
Options for the Hahn echo experiment.
Additional attributes
refocus_pulse: String to define the quantum operation in-between the x90 pulses. Default: "y180".
refocus_qop = workflow.option_field('y180', description='String to define the quantum operation in-between the x90 pulses')
class-attribute
instance-attribute
¶
create_experiment(qpu, qubits, delays, options=None)
¶
Creates a Hahn echo Experiment.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
qpu
|
QPU
|
The qpu consisting of the original qubits and quantum operations. |
required |
qubits
|
QuantumElements
|
The qubits on which to run the experiments. May be either a single qubit or a list of qubits. |
required |
delays
|
QubitSweepPoints
|
The delays to sweep over for each qubit. The delays between the two x90
pulses and the refocusing pulse are |
required |
options
|
EchoExperimentOptions | None
|
The options for building the workflow as an instance of [EchoExperimentOptions], inheriting from [TuneupExperimentOptions]. See the docstrings of these classes for more details. |
None
|
Returns:
Name | Type | Description |
---|---|---|
Experiment |
Experiment
|
The generated LabOne Q Experiment instance to be compiled and executed. |
Raises:
Type | Description |
---|---|
ValueError
|
If the conditions in validation.validate_and_convert_qubits_sweeps are not fulfilled. |
ValueError
|
If the experiment uses calibration traces and the averaging mode is sequential. |
Example
options = TuneupExperimentOptions()
options.count = 10
options.cal_traces = True
setup = DeviceSetup("my_device")
qpu = QPU(
quantum_elements=[TunableTransmonQubit("q0"), TunableTransmonQubit("q1")],
quantum_operations=TunableTransmonOperations(),
)
temp_qubits = qpu.copy_quantum_elements()
create_experiment(
qpu=qpu,
qubits=temp_qubits,
delays=[np.linspace(0, 30e-6, 51), np.linspace(0, 30e-6, 51)],
options=options,
)
experiment_workflow(session, qpu, qubits, delays, temporary_parameters=None, options=None)
¶
The Hahn echo experiment workflow.
The workflow consists of the following steps:
Parameters:
Name | Type | Description | Default |
---|---|---|---|
session
|
Session
|
The connected session to use for running the experiment. |
required |
qpu
|
QPU
|
The qpu consisting of the original qubits and quantum operations. |
required |
qubits
|
QuantumElements
|
The qubits on which to run the experiments. May be either a single qubit or a list of qubits. |
required |
delays
|
QubitSweepPoints
|
The delays to sweep over for each qubit. The delays between the two x90
pulses and the refocusing pulse are |
required |
temporary_parameters
|
dict[str | tuple[str, str, str], dict | QuantumParameters] | None
|
The temporary parameters with which to update the quantum elements and
topology edges. For quantum elements, the dictionary key is the quantum
element UID. For topology edges, the dictionary key is the edge tuple
|
None
|
options
|
TuneUpWorkflowOptions | None
|
The options for building the workflow as an instance of [TuneUpWorkflowOptions]. See the docstrings of this class for more details. |
None
|
Returns:
Name | Type | Description |
---|---|---|
WorkflowBuilder |
None
|
The builder for the experiment workflow. |
Example
options = EchoWorkflowOptions()
options.count(10)
options.transition("ge")
qpu = QPU(
quantum_elements=[TunableTransmonQubit("q0"), TunableTransmonQubit("q1")],
quantum_operations=TunableTransmonOperations(),
)
temp_qubits = qpu.copy_quantum_elements()
result = run(
session=session,
qpu=qpu,
qubits=temp_qubits,
delays=[np.linspace(0, 30e-6, 51), np.linspace(0, 30e-6, 51)],
options=options,
)