Fine and Hyperfine Structure with Sublevels¶
In many situtations, accurate modeling requires solving for the entire atomic structure (i.e. explicit handling of the magnetic sublevels). These situations include calculating changes in probing polarization and ellipticity angles, non-degenerate states due to ambient magnetic fields, or inhomogeneous coupling strengths due to sublevel structure. As described in Atomic Structure Primer, each sublevel must be treated independently within the basis, leading to much larger basis sizes and an associated increase in the complexity of defining the system. With the release of rydiqule v2, the ability to handle calculations involving sublevels has been greatly improved, and this document will discuss those features and the associated physics conventions we use.
Sublevels in Sensor¶
In Sensor
, states can be defined using arbitrary tuples,
and groups of states can be readily specified by using nested lists within the tuple.
Groups of “states” readily represent a manifold of sublevels.
For example, the following code creates a system with four states: a single ground state and a manifold of three excited states. It then adds a coupling from the ground to each excited state.
g = (0, 0)
e = (1, [-1, 0, 1])
s = rq.Sensor([g, e])
s.add_coupling((g, e), detuning=1, rabi_frequency=2, label='probe')
Here we see that the excited state manifold can be specified by a single object (representing 3 distinct sublevel states),
both at Sensor
creation, and when applying couplings (as well as decoherences).
Another key feature is that the couplings and decoherences can define coupling_coefficients
which allow for scaling prefactors to be applied to a Rabi frequency for each “sublevel” coupling in the manifold.
Modifying the above example
g = (0, 0)
e = (1, [-1, 0, 1])
(e1, e2, e3) = rq.expand_statespec(e)
cc = {
(g,e1): 1/sqrt(2),
(g,e2): 0,
(g,e3): -1/sqrt(2)
}
s = rq.Sensor([g, e])
s.add_coupling((g, e), detuning=1, rabi_frequency=2, coupling_coefficients=cc, label='probe')
The above represents a typical \(F=0\rightarrow F'=1\) hyperfine transition that is probed with linearly polarized light, in a quantization axis that is aligned with the optical propagation axis.
Sublevels in Cell¶
In Cell
, we combine the features of Sensor
with a specialized named tuple class to track quantum numbers of states (A_QState
)
and ARC integration wrapped by an internal RQ_AlkaliAtom
interface
to enable automatic calculation of many atomic parameters directly from A_QState
state specifications.
State Definition¶
We support three bases for defining the atomic states using A_QState
:
NLJ: which averages over sublevel structure, described here
FS: the fine structure basis, where \(J\) and \(m_J\) are good quantum numbers
HFS: the hyperfine structure basis, where \(f\) and \(m_f\) are good quantum numbers
In each case, \(n,l,j\) are mandatory arguments in the definition of the A_QState
.
Providing the 'all'
argument to the other parameters will instruct Cell
to
expand the allowed fine or hyperfine states. for example, to define the entire D2 hyperfine transition structure in Cell
g = rq.A_QState(5, 0, 0.5, f='all', m_f='all')
e = rq.A_QState(5, 1, 1.5, f='all', m_f='all')
c = rq.Cell('Rb85', [g,e])
Note
While it is simple to define large atomic bases this way,
the hamiltonian size grows very quickly when using sublevels.
This is especially true when setting f='all'
.
Be sure your model actually needs all these levels.
Coherent Coupling Definition¶
We support four classes of transitions between states in these bases:
NLJ \(\rightarrow\) NLJ
FS \(\rightarrow\) FS
HFS \(\rightarrow\) HFS
HFS \(\rightarrow\) FS (and the inverse)
Note that we can perform models where different bases are used to describe different states, namely HFS and FS. This is particularly useful for Rydberg atoms, where the ground states are best described in the hyperfine basis, but Rydberg states are best described in the fine structure basis. An example of a typical, simplified definition would be
g = rq.A_QState(5, 0, 0.5, f=3, m_f='all')
i = rq.A_QState(5, 1, 1.5, f=4, m_f='all')
r = rq.A_QState(50, 2, 2.5, m_J='all')
c = rq.Cell('Rb85', [g,i,r])
c.add_coupling((g,i),
beam_power=5e-6, # watts
beam_waist=200e-6, # m, 1/e^2
detuning=0, q=0, label='probe')
c.add_coupling((i,r),
beam_power=50e-3,
beam_waist=180e-6,
detuning=0, q=0, label='couple')
Rydiqule is handling quite a bit automatically here.
First, it assumes a gaussian beam profile of waist beam_waist
and total power beam_power
to calculate the field strength,
which is then used to calculate Rabi frequencies between the outer product of all possible sublevels between the two manifolds.
Dipole-allowed transitions will have the associated quantities saved to the graph:
dipole_moment
: the transition dipole moment, in units of \(a_0 e\)coherent_cc
: the angular part of the dipole moment, used to scale the base Rabi frequency, in units of \(\langle J||d||J'\rangle/2\)rabi_frequency
: the reduced Rabi frequency, i.e. \(E\cdot\langle J||d||J'\rangle/2\hbar\)
The transition Rabi frequency is given by rabi_frequency*coherent_cc
.
The reason for breaking this up is because the coherent_cc
(which are at least proportional to Clebsch-Gordon coefficients)
are used when calculating observables to properly weight
various density matrix components corresponding to a single field.
Our convention of defining the base rabi_frequency
relative to the
reduced J matrix element ensures that a common Rabi frequency can be defined for a field spanning many manifolds of sublevels.
The functions that calculate these quantities in rydiqule are
get_dipole_matrix_element()
,
get_reduced_rabi_frequency()
,
get_reduced_rabi_frequency2()
,
and get_spherical_dipole_matrix_element()
.
Details are given below on how the reduced Rabi frequency, spherical matrix element, and total dipole matrix element are defined.
Note
NLJ transitions use a slight different specification internally.
While the angular part is well defined,
rydiqule does not use it since there are no
other states to meaningfully compare against.
For NLJ states, we instead enforce coherent_cc=1
and the saved Rabi frequency is the full Rabi frequency.
There are alternate methods of specifying the coupling strength in Cell
.
In all cases, the dipole_moment
, coherent_cc
, and rabi_frequency
are defined the same way.
The first is the
beam_power
/beam_waist
definition used above. The functiongaussian_center_field()
calculates the field amplitude at the center of the gaussian spatial mode. Thenget_reduced_rabi_frequency2()
calculates the reduced Rabi frequency.The second is by providing the
e_field
directly, which is largely equivalent the abovebeam_power
/beam_waist
definition, but does not require assuming a gaussian profile (primarily used for RF transitions between Rydberg states).The third is by providing the
rabi_frequency
directly. In this case, rydiqule will assume the reduced Rabi frequency has been provided, and calculate the spherical matrix elements accordingly.
Incoherent Coupling Definition¶
Much like coherent couplings, decoherences between states can be specified between manifolds,
using a similar base value/coefficient paradigm.
In Cell
, however,
all decoherences due to state natural lifetimes are automatically calculated from the provided basis states.
This is done by leveraging ARC to automatically calculate the natural lifetimes of each state
as well as the dephasing rates between all states provided in the system definition.
These calculations are provided by get_state_lifetime()
and get_transition_rate()
.
Of course, it is common to not provide all possible states that every state could decay to.
In this situation, rydiqule has three configurable methods for dealing with discrepancies between
the natural lifetime of the state
and the total sum of dephasing rates out of a state.
Selecting between these options is controlled by the gamma_mismatch
argument to Cell
.
'ground'
: Send extra dephasing to the ground state. Here the “ground state” is defined as all atomic states defined in the system that share the samen,l,j
quantum numbers with the lowest energy in the system. This is rydiqule’s default behavior.'all'
: Proportionally scale existing dephasings so the sum matches the natural lifetime.'none'
: Ignore the discrepancy.
Dipole Matrix Element Definitions¶
Here we define how the dipole matrix elements are defined for different kinds of transitions.
In each case, we follow ARC’s general model of using the Wigner-Eckart theorem to divide the dipole matrix element into angular and radial parts.
In particular, we reference
all calculations to the symmetric reduced matrix element J
for the transition \(\langle J||d||J'\rangle\).
It is calculated by getReducedMatrixElementJ()
.
It only depends on n,l,j
, has no angular dependence, and is the common element for all types of transitions Cell
supports.
Note that we use a slightly different convention for defining
the spherical dipole matrix element and reduced matrix element than what ARC uses internally.
Namely, we move a factor of two off the reduced matrix element onto the spherical matrix element.
This results in the coherent_cc
parameter being closer to 1,
making the Rabi frequency more natural to define.
This convention is chosen merely for convenience.
The final Rabi frequency in the hamiltonian is identical to what ARC provides.
NLJ¶
NLJ dipole matrix elements are defined as the average magnitude of all dipole-allowed transitions between sublevels of the two manifolds:
Here, \(N\) is defined as the number of non-zero elements in the sum. The spherical matrix element is simply defined as the total matrix element divided by the reduced matrix element in the J basis.
This is equivalent to taking the average of the Clebsch-Gordon coefficients for each dipole-allowed transition.
Note
While the spherical matrix element is well defined,
rydiqule does not use it in Cell
since there are no
other states to meaningfully compare against.
For NLJ states, we instead enforce coherent_cc=1
and the saved Rabi frequency is the full Rabi frequency.
FS to FS¶
Fine structure dipole matrix elements are calculated using
getDipoleMatrixElement()
and the spherical matrix element is calculated using
and getSphericalDipoleMatrixElement()
with arguments j,m_j,j',m_j',q
.
The functional definition (using Wigner3J symbols) is
The Clebsch-Gordon coefficients are related to the spherical matrix element by
Note
Rydiqule’s convention is for \(\texttt{coherent_cc}=2s_\text{FS}\).
This results in coherent_cc=1
for stretch states between some \(J\rightarrow J'\) manifolds.
For example, \(\langle J=1/2, m_J=\pm1/2|d|J'=3/2, m_J'=\pm3/2\rangle\) has coherent_cc=1
.
Note, however, that \(\langle J=1/2, m_J=\pm1/2|d|J'=1/2, m_J'=\mp1/2\rangle\) has coherenct_cc=4/3
.
HFS to HFS¶
Hyperfine structure dipole matrix elements are calculated using
getDipoleMatrixElementHFS()
.
The spherical matrix element is calculated using
getSphericalDipoleMatrixElement()
(using arguments f,m_f,f',m_f',q
)
and _reducedMatrixElementFJ()
(which gives the reduced F matrix element in terms of the reduced J matrix element).
The functional definition is
where the reduced F matrix element is defined as
\[\begin{split}\langle n l j f ||d|| n' l' j' f' \rangle \ = (-1)^{j+I+f'+1}\sqrt{(2f+1)(2f'+1)} ~ \ \left\{ \begin{matrix}\ f & 1 & f' \\ \ j' & I & j \ \end{matrix}\right\}~ \ \langle n l j||d || n' l' j' \rangle\end{split}\]
Clebsch-Gordon coefficients for these transitions are related to the spherical matrix element by
Note
Rydiqule’s convention is for \(\texttt{coherent_cc}=2s_\text{HFS}\).
This generally results in coherent_cc=1
for stretch states between \(J\rightarrow J'\) manifolds.
For example, in a \(J=1/2\rightarrow J'=3/2\) manifold, the
\(\langle F=2, m_F=\pm2|d|F'=3, m_F'=\pm3\rangle\) moments have coherent_cc=1
.
For a \(J=1/2\rightarrow J'=1/2\) manifold, the
\(\langle F=1, m_F=\pm1|d|F'=2, m_F'=\pm2\rangle\) and
\(\langle F=2, m_F=\pm2|d|F'=1, m_F'=\pm1\rangle\) moments have coherent_cc=1
.
HFS to FS¶
Dipole matrix elements between fine and hyperfine structure sublevels are calculated using
getDipoleMatrixElementHFStoFS()
.
The spherical matrix element is calculated using
getSphericalMatrixElementHFStoFS()
.
The spherical part is calculated by expanding the fine basis state into its hyperfine components and summing the elements weighted by Clebsch-Gordon coefficients.
Note
For these transitions, our definition of reduced Rabi frequency can result in coherent_cc>1
,
in similar situations as FS to FS transitions.