Atomic
The atomic interface expresses quantum information experiments in terms of light-matter interactions.
System ¶
The system describes the properties of the trapped-ion quantum device.
Ion ¶
An ion is described by its set of electronic energy levels. Each energy level has its associated quantum numbers:
- Principal quantum number
- Spin angular momentum, \(S\)
- Orbital angular momentum, \(L\)
- Spin-orbital angular momentum, \(J = S + L\)
- Nuclear angular momentum, \(I\)
- Spin-orbital-nuclear angular momentum, \(F = J + I\)
- Magnetization, \(m_F\)
- Energy, \(E\)
with the set of electronic energy levels, we assign two states to be the qubit states.
Manipulating the qubit states involves driving transitions between the qubit states of the ions, either directly or indirectly.
Example
Definiition of an Ion
for \(^{171}\mathrm{Yb}^+\):
downstate = Level(
principal=6,
spin=1/2,
orbital=0,
nuclear=1/2,
spin_orbital=1/2,
spin_orbital_nuclear=0,
spin_orbital_nuclear_magnetization=0,
energy=0,
)
upstate = Level(
principal=6,
spin=1/2,
orbital=0,
nuclear=1/2,
spin_orbital=1/2,
spin_orbital_nuclear=1,
spin_orbital_nuclear_magnetization=0,
energy=2*pi*12.643e9,
)
estate = Level(
principal=5,
spin=1/2,
orbital=1,
nuclear=1/2,
spin_orbital=1/2,
spin_orbital_nuclear=0,
spin_orbital_nuclear_magnetization=0,
energy=2*pi*811.52e12,
)
Yb171 = Ion(
mass=171,
charge=1,
position=[0,0,0],
levels=[
downstate,
upstate,
estate,
],
transitions=[
Transition(
level1=downstate,
level2=upstate,
einsteinA=...,
),
Transition(
level1=downstate,
level2=estate,
einsteinA=...,
),
Transition(
level1=estate,
level2=upstate,
einsteinA=...,
),
],
)
Phonon ¶
In the trapped-ion system the system exhibits collective phonon modes, which are bosonic degrees of freedom.
These phonon modes are characterized by:
- Energy (eigenfrequency)
- Profile of the collective phonon mode in terms of the ions' motion (eigenvector)
Example
Definition of the set of phonon modes for a trapped-ion system with a single ion:
Other¶
Not Implemented
The system is further described by a list of experimental parameters that require calibration to determine, e.g.:
- Maximum laser power
- Laser lock frequency
- etc.
These parameters will in the future be included in the System
.
The System
will be retrieved from a calibration database to determine the current state of the system and the status of all calibrations required to run quantum experiments.
Pulse Program ¶
The pulse program for a quantum experiment is described by a Protocol
. The protocol defines the list of optical channels in the experiment and the real-time scheduling of pulses of the optical channels in order to perform the quantum experiment.
Optical Channel ¶
An optical channel is described by a Beam
with the following parameters:
- Transition of the ion for which to reference the Beam to.
- Rabi frequency to drive the referenced transition with.
- Detuning from the resonance of the referenced transition.
- Phase of the beam relative to the clock of the ion.
- Polarization of the beam.
- Wavevector of the beam.
- Target ion addressed by the beam.
Example
Beam used to drive a microwave Rabi oscillation in the X-axis:
Note
The following parameters may be specified with the math interface:
- Rabi frequency
- Detuning
- Phase
Pulse ¶
A pulse turns on an optical channel for a duration of time.
Example
Pulse that drives a microwave Rabi oscillation in the X-axis for a duration \(T\):
Composition of Protocols¶
The pulse program for a quantum experiment is usually more complex than a pulse of a single beam. This is handled with SequentialProtocol
and ParallelProtocol
.
Sequential protocol applies a set of pulses or subprotocols sequentially in time.
Example
The following protocol is for a Rabi flop and a measurement:
microwave_beam = Beam(
transition=Transition(level1=downstate,level2=upstate,...),
rabi= 2*pi*1e6,
detuning=0,
phase=0,
polarization=...
wavevector=...
target=0
)
detection_beam = Beam(
transition=Transition(level1=upstate,level2=estate,...),
rabi= 2*pi*1e6,
detuning=0,
phase=0,
polarization=...
wavevector=...
target=0
)
protocol = SequentialProtocol(
sequence=[
Pulse(beam=raman1_beam,duration=T),
Pulse(beam=raman2_beam,duration=100e-6)
]
)
Sequential protocol applies a set of pulses or subprotocols parallel in time.
Example
The following protocol is for a two-photon Raman transition:
raman1_beam = Beam(
transition=Transition(level1=downstate,level2=estate,...),
rabi= 2*pi*1e6,
detuning=2*pi*1e9,
phase=0,
polarization=...
wavevector=...
target=0
)
raman2_beam = Beam(
transition=Transition(level1=upstate,level2=estate,...),
rabi= 2*pi*1e6,
detuning=2*pi*1e9,
phase=0,
polarization=...
wavevector=...
target=0
)
protocol = ParallelProtocol(
sequence=[
Pulse(beam=raman1_beam,duration=T),
Pulse(beam=raman2_beam,duration=T)
]
)