spectroscopy_schedules#

Module containing schedules for common spectroscopy experiments.

Module Contents#

Functions#

heterodyne_spec_sched(...)

Generate a schedule for performing heterodyne spectroscopy.

heterodyne_spec_sched_nco(...)

Generate a batched schedule for performing fast heterodyne spectroscopy

two_tone_spec_sched(...)

Generate a schedule for performing two-tone spectroscopy.

two_tone_spec_sched_nco(...)

Generate a batched schedule for performing fast two-tone spectroscopy using

nv_dark_esr_sched(...)

Generates a schedule for a dark ESR experiment on an NV-center.

nv_dark_esr_sched_nco(...)

Generates a schedule for a dark ESR experiment on an NV-center, in which

heterodyne_spec_sched(pulse_amp: float, pulse_duration: float, frequency: float, acquisition_delay: float, integration_time: float, port: str, clock: str, init_duration: float = 1e-05, repetitions: int = 1, port_out: str | None = None) quantify_scheduler.schedules.schedule.Schedule[source]#

Generate a schedule for performing heterodyne spectroscopy.

Parameters:
  • pulse_amp – Amplitude of the spectroscopy pulse in Volt.

  • pulse_duration – Duration of the spectroscopy pulse in seconds.

  • frequency – Frequency of the spectroscopy pulse in Hertz.

  • acquisition_delay – Start of the data acquisition with respect to the start of the spectroscopy pulse in seconds.

  • integration_time – Integration time of the data acquisition in seconds.

  • port – Location on the device where the acquisition is performed.

  • clock – Reference clock used to track the spectroscopy frequency.

  • init_duration – The relaxation time or dead time.

  • repetitions – The amount of times the Schedule will be repeated.

  • port_out – Output port on the device where the pulse should be applied. If None, then use the same as port.

heterodyne_spec_sched_nco(pulse_amp: float, pulse_duration: float, frequencies: numpy.ndarray, acquisition_delay: float, integration_time: float, port: str, clock: str, init_duration: float = 1e-05, repetitions: int = 1, port_out: str | None = None) quantify_scheduler.schedules.schedule.Schedule[source]#

Generate a batched schedule for performing fast heterodyne spectroscopy using the SetClockFrequency operation for doing an NCO sweep.

Example use of the heterodyne_spec_sched_nco schedule

import numpy as np
from qcodes.instrument.parameter import ManualParameter

from quantify_scheduler.gettables import ScheduleGettable
from quantify_scheduler.device_under_test.quantum_device import QuantumDevice
from quantify_scheduler.device_under_test.transmon_element import BasicTransmonElement
from quantify_scheduler.schedules.spectroscopy_schedules import heterodyne_spec_sched_nco

quantum_device = QuantumDevice(name="quantum_device")
q0 = BasicTransmonElement("q0")
quantum_device.add_element(q0)

...

# Manual parameter for batched schedule
ro_freq = ManualParameter("ro_freq", unit="Hz")
ro_freq.batched = True
ro_freqs = np.linspace(start=4.5e9, stop=5.5e9, num=11)
quantum_device.cfg_sched_repetitions(5)

# Configure the gettable
qubit = quantum_device.get_element("q0")
schedule_kwargs = {
    "pulse_amp": qubit.measure.pulse_amp(),
    "pulse_duration": qubit.measure.pulse_duration(),
    "frequencies": ro_freqs,
    "acquisition_delay": qubit.measure.acq_delay(),
    "integration_time": qubit.measure.integration_time(),
    "port": qubit.ports.readout(),
    "clock": qubit.name + ".ro",
    "init_duration": qubit.reset.duration(),
}
spec_gettable = ScheduleGettable(
    quantum_device=quantum_device,
    schedule_function=heterodyne_spec_sched_nco,
    schedule_kwargs=schedule_kwargs,
    real_imag=False,
    batched=True,
)

...

quantum_device.close()
q0.close()
Parameters:
  • pulse_amp – Amplitude of the spectroscopy pulse in Volt.

  • pulse_duration – Duration of the spectroscopy pulse in seconds.

  • frequencies – Sample frequencies for the spectroscopy pulse in Hertz.

  • acquisition_delay – Start of the data acquisition with respect to the start of the spectroscopy pulse in seconds.

  • integration_time – Integration time of the data acquisition in seconds.

  • port – Location on the device where the acquisition is performed.

  • clock – Reference clock used to track the spectroscopy frequency.

  • init_duration – The relaxation time or dead time.

  • repetitions – The amount of times the Schedule will be repeated.

  • port_out – Output port on the device where the pulse should be applied. If None, then use the same as port.

two_tone_spec_sched(spec_pulse_amp: float, spec_pulse_duration: float, spec_pulse_port: str, spec_pulse_clock: str, spec_pulse_frequency: float, ro_pulse_amp: float, ro_pulse_duration: float, ro_pulse_delay: float, ro_pulse_port: str, ro_pulse_clock: str, ro_pulse_frequency: float, ro_acquisition_delay: float, ro_integration_time: float, init_duration: float = 1e-05, repetitions: int = 1) quantify_scheduler.schedules.schedule.Schedule[source]#

Generate a schedule for performing two-tone spectroscopy.

Parameters:
  • spec_pulse_amp – Amplitude of the spectroscopy pulse in Volt.

  • spec_pulse_duration – Duration of the spectroscopy pulse in seconds.

  • spec_pulse_port – Location on the device where the spectroscopy pulse should be applied.

  • spec_pulse_clock – Reference clock used to track the spectroscopy frequency.

  • spec_pulse_frequency – Frequency of the spectroscopy pulse in Hertz.

  • ro_pulse_amp – Amplitude of the readout (spectroscopy) pulse in Volt.

  • ro_pulse_duration – Duration of the readout (spectroscopy) pulse in seconds.

  • ro_pulse_delay – Time between the end of the spectroscopy pulse and the start of the readout (spectroscopy) pulse.

  • ro_pulse_port – Location on the device where the readout (spectroscopy) pulse should be applied.

  • ro_pulse_clock – Reference clock used to track the readout (spectroscopy) frequency.

  • ro_pulse_frequency – Frequency of the readout (spectroscopy) pulse in Hertz.

  • ro_acquisition_delay – Start of the data acquisition with respect to the start of the readout pulse in seconds.

  • ro_integration_time – Integration time of the data acquisition in seconds.

  • init_duration – The relaxation time or dead time.

  • repetitions – The amount of times the Schedule will be repeated.

two_tone_spec_sched_nco(spec_pulse_amp: float, spec_pulse_duration: float, spec_pulse_port: str, spec_pulse_clock: str, spec_pulse_frequencies: numpy.ndarray, ro_pulse_amp: float, ro_pulse_duration: float, ro_pulse_delay: float, ro_pulse_port: str, ro_pulse_clock: str, ro_pulse_frequency: float, ro_acquisition_delay: float, ro_integration_time: float, init_duration: float, repetitions: int = 1) quantify_scheduler.schedules.schedule.Schedule[source]#

Generate a batched schedule for performing fast two-tone spectroscopy using the SetClockFrequency operation for doing an NCO sweep.

For long-lived qubits, it is advisable to use a small number of repetitions and compensate by doing continuous spectroscopy (low amplitude, long duration pulse with simultaneous long readout).

The “dead-time” between two data points needs to be sufficient to properly reset the qubit. That means that init_duration should be >> T1 (so typically >200us).

Example use of the two_tone_spec_sched_nco schedule

import numpy as np
from qcodes.instrument.parameter import ManualParameter

from quantify_scheduler.gettables import ScheduleGettable
from quantify_scheduler.device_under_test.quantum_device import QuantumDevice
from quantify_scheduler.device_under_test.transmon_element import BasicTransmonElement
from quantify_scheduler.schedules.spectroscopy_schedules import two_tone_spec_sched_nco

quantum_device = QuantumDevice(name="quantum_device")
q0 = BasicTransmonElement("q0")
quantum_device.add_element(q0)

...

# Manual parameter for batched schedule
spec_freq = ManualParameter("spec_freq", unit="Hz")
spec_freq.batched = True
spec_freqs = np.linspace(start=4.5e9, stop=5.5e9, num=11)
quantum_device.cfg_sched_repetitions(5)

# Configure the gettable
qubit = quantum_device.get_element("q0")
schedule_kwargs = {
    "spec_pulse_amp": 0.5,
    "spec_pulse_duration": 8e-6,
    "spec_pulse_port": qubit.ports.microwave(),
    "spec_pulse_clock": qubit.name + ".01",
    "spec_pulse_frequencies": spec_freqs,
    "ro_pulse_amp": qubit.measure.pulse_amp(),
    "ro_pulse_duration": qubit.measure.pulse_duration(),
    "ro_pulse_delay": 300e-9,
    "ro_pulse_port": qubit.ports.readout(),
    "ro_pulse_clock": qubit.name + ".ro",
    "ro_pulse_frequency": 7.04e9,
    "ro_acquisition_delay": qubit.measure.acq_delay(),
    "ro_integration_time": qubit.measure.integration_time(),
    "init_duration": 300e-6,
}
spec_gettable = ScheduleGettable(
    quantum_device=quantum_device,
    schedule_function=two_tone_spec_sched_nco,
    schedule_kwargs=schedule_kwargs,
    real_imag=False,
    batched=True,
)

...

quantum_device.close()
q0.close()
Parameters:
  • spec_pulse_amp – Amplitude of the spectroscopy pulse in Volt.

  • spec_pulse_duration – Duration of the spectroscopy pulse in seconds.

  • spec_pulse_port – Location on the device where the spectroscopy pulse should be applied.

  • spec_pulse_clock – Reference clock used to track the spectroscopy frequency.

  • spec_pulse_frequencies – Sample frequencies for the spectroscopy pulse in Hertz.

  • ro_pulse_amp – Amplitude of the readout (spectroscopy) pulse in Volt.

  • ro_pulse_duration – Duration of the readout (spectroscopy) pulse in seconds.

  • ro_pulse_delay – Time between the end of the spectroscopy pulse and the start of the readout (spectroscopy) pulse.

  • ro_pulse_port – Location on the device where the readout (spectroscopy) pulse should be applied.

  • ro_pulse_clock – Reference clock used to track the readout (spectroscopy) frequency.

  • ro_pulse_frequency – Frequency of the readout (spectroscopy) pulse in Hertz.

  • ro_acquisition_delay – Start of the data acquisition with respect to the start of the readout pulse in seconds.

  • ro_integration_time – Integration time of the data acquisition in seconds.

  • init_duration – The relaxation time or dead time.

  • repetitions – The amount of times the Schedule will be repeated.

nv_dark_esr_sched(qubit: str, repetitions: int = 1) quantify_scheduler.schedules.schedule.Schedule[source]#

Generates a schedule for a dark ESR experiment on an NV-center.

The spectroscopy frequency is taken from the device element. Please use the clock specified in the spectroscopy_operation entry of the device config.

This schedule can currently not be compiled with the Zurich Instruments backend.

Parameters:
  • qubit – Name of the DeviceElement representing the NV-center.

  • repetitions – Number of schedule repetitions.

Returns:

Schedule with a single frequency

nv_dark_esr_sched_nco(qubit: str, spec_clock: str, spec_frequencies: numpy.ndarray, repetitions: int = 1) quantify_scheduler.schedules.schedule.Schedule[source]#

Generates a schedule for a dark ESR experiment on an NV-center, in which the NCO frequency is swept.

Note

This schedule currently cannot be compiled with the Zurich Instruments backend.

Parameters:
  • qubit – Name of the DeviceElement representing the NV-center.

  • spec_clock – Reference clock of the spectroscopy operation.

  • spec_frequencies – Sample frequencies for the spectroscopy pulse in Hertz.

  • repetitions – Number of schedule repetitions.

Returns:

Schedule with NCO frequency sweeping for spectroscopy operation.