This document provides a guide to the Python module designed for atomic physics calculations. The idea behind this module is to explore atomic physics, properties of atoms, and understand their electron dynamics in light fields.
The package should be primarily used for bosonic isotopes, where the hyperfine structure is not present. We decided to initially release the package with simplified structure such that to get a feeling for the usefullness of the tool to the community. In case of interest, we can extend this package to include calculations for the fermionic isotopes.
I hope this will be helpfull for many.
The documentation is divided into three subsections, which each discuss different potential use-cases of atomphys:
- (1) Core - Here we discuss how atomphys can be used as python API for NIST database and other databases
- (2) Calculations - Here we discuss the theory behind the calculations with which atomphys can help
- (3) Helper functions for qutip - Here we discuss how atomphys can be usef to build light-atom hamiltonians that can be directly parsed to qutip and can be solved
Install the necessary libraries via pip:
pip install git+https://github.com/tiqi-group/atomphys.gitAt the center of the atomphys package there is an atom. We decided to define atom as a graph data structure. This is because it is natural to think about an atom as a graph, where the states are the vertices, and the transitions are the edges of the graph.
It allows us then to build upon great work that has been done on graphs in order to plot atoms, explore them, list all the properties, and their vertices, and edges.
But it would be extremaly tideous to build up such structure from scratch. Instead one can load an atom directly from NIST database, or from a custom json database.
To load an atom from NIST, you can call from_nist() function. As a name you need to parse the element name of an atom you are interested. For instance if you are interested in Calcium atom/ion you need to call from_nist('Ca')/from_nist('Ca+').
atomphys.from_nist(name, _ureg)Returns an atom with states and transitions found in NIST database. If NIST is not complete for your purposes, the missing transitions can be added manually.
Alternatively one can use:
atomphys.from_json(name, _ureg)Returns an atom with states and transitions found in the custom database. Database has to be a json file with a format given below
{"name": "Ca",
"states": [{"configuration": "3p6.4s2", "term": "1S0", "energy": "0.0 Ry"}, {"configuration": "3p6.4s.4p", "term": "3P0", "energy": "0.1381289573728982 Ry"}, ... ],
"transitions": [{"A": "2.74e+03 s^-1", "state_i": {"energy": "0.0 Ry", "term": "1S0"}, "state_f": {"energy": "0.138604292491823", "term": "3P1"}}, {"A": "4.89e+05 s^-1", "state_i": {"energy": "0.1381289573728982 Ry", "term": "3P0"}, "state_f": {"energy": "0.1853094352973106", "term": "3D1"}}...]
}
Above example 'Ca' database was taken from {Mills 2018}.
Upon importing your atom, it allows you to interact with it in a similar way you would interact with a databse / or a graph. It makes it easy to interact in an easy way with NIST database, or any other database that you would use. For the functionalities of the atom one should refer to the API reference, which should list all possible actions that can be performed.
Atom is formed by collection of states (nodes), connected via transitions (edges). Each State and Transition is a separate object with properties and possible functions associated with it. The representation of the atom as a graph could be used for the optimal repumping schemes, or optimal control schemes.
Before diving into the specific formulas and derivations used, it's worth pausing to consider the key concepts in atomic physics that we focus on and their significance. Atomic physics heavily relies on the calculation of matrix elements, denoted as
However, computing these matrix elements is challenging due to their basis involved. Is there a way to simplify (break-down) this process using symmetry principles? Fortunately, the answer is yes, thanks to the Wigner-Eckart Theorem.
The Wigner-Eckart Theorem states that the matrix elements of spherical tensor operators, within the framework of angular momentum eigenstates, can be broken down into two components: one that is independent of the angular momentum orientation (so called reduced matrix element) and another that is a Clebsch-Gordan coefficient.(https://en.wikipedia.org/wiki/Wigner%E2%80%93Eckart_theorem)
Here,
As the reduced matrix element, doesn't depend on basis this is the most basic block from which we will start the calculation.
Following James (equation 5.9) and (equation 5.10) [1]
we can rewrite
Equivalent result can be derived from Wigner-Weisskopf Decay. Example of such derivation can be found in Scully's Quantum Optics[2]
Now in order to transform it to actual quantities that we want we can use Wigner-Eckart theorem.
keeping only tensorial parts of the equations we drop
Electric matrix elements are just the conventional dipole/quadrupole elements scaled by a funamental charge,
Rabi Frequency is the fundamental quantity regarding interaction of atom with light. It tells us about how much coupling do we obtain between two eigenstates of our atom, given the presence of the oscilating electric field.
Given the complexities and the confusion surrounding the derivations of dipole and quadrupole Rabi frequencies, a re-derivation is presented here. This derivation draws from S Mavadia's thesis, Weissbluth book. Starting point is minimum-coupling-hamiltonian, for even more comprehensive form of the light-matter interaction refer to Weissbluth. This derivation operates within the Coulomb gauge and assumes a electromagnetic vacuum (no charged particles flying around).
Consider an arbitrary electromagnetic vector field,
The minimum-coupling Hamiltonian in Coulomb's gauge is expressed as:
where
Focusing on electron dynamics rather than absolute energy levels allows us to simplify our Hamiltonian. We can neglect constant energy terms
Neglecting $\frac{q_\alpha^2\mathbf{A}\left(\mathbf{x}\alpha, t\right)^2}{2 m\alpha}$ and
Taylor expanding
From now on, Lets define
As in the end we would like to see how the light field interacts with consecutive terms of the multipole expansion formed by the atom, we need to get rid of
As
Lets then solve consecutive terms of the Taylor expansion
, where
This is more tricky, because now we need to to commute
Lets solve the symmetric and antisymmetric part separately:
Symmetric part:
Anti-symmetric part:
Therefore one can re-write 1st Order term as:
, where the first term corresponds to the electric quadrupole coupling and the second term corresponds to magnetic dipole coupling
Collecting all the terms up to the 1st Order of Taylor expansion of
In atomphys for now we don't support calculation of the magnetic dipole matrix elements, and so we will therefore only focus on the first two terms, assuming the light field interating with our atom doesn't have intrinsically large magnetic dipole moment.
Let us constrain our choice of
Working in vacuum in Coulombs gauge we can write
The interaction then can be written as:
, where Rabi Frequency is defined as follows:
As we saw, we can decompose it through the taylor expansion into the consecutive terms corresponding to different nature of the transition. Usually only one of the coupling types is dominant and the other can be neglected. The dominant type depends on the nature of the transition and the electric field structure.
This is the final expression of the rabi-frequencies. As far as we are interested in only electric multipole expansion we took all required terms from the dirac equation. We worked in vacuum and in Coulomb gauge. Not switching the gauge allowed us to not to make any mistakes that arise from working in multiple gauges.
Other common derivation is using PZW Gauge, which naturally has a form of multipole expansion. I, however, prefered not to work in it, as from what I have seen it wasnt a popular choice of understanding the problem. Coulomb's gauge was a preffered choice, however for many they missed a step to split the first Taylor expansion term into symmetric and antisymmetric part, which forced them to fudge a factor of 1/2.
In order to introduce the theory behind the AC Stark Shifts, I will closely follow Beloy's Thesis [Beloy 2009]. I intend to present the calculation of AC Stark Shift in its more primitive form, without expanding the formula into most basic units. This allows one to directly understand the simplicity of the AC Stark Shift calculations, not make any assumptions about the structure of the Electric Field or allowed transitions. Normal derivations of AC Stark Shift only consider dipole transitions driven by running wave field.
Expression of AC Stark Shift in terms of Rabi Frequencies is possible, as we developed good apparatus to calculate Rabi Frequencies.
Consider oscilating electric field
Such field interacts with an atom perturbing the hamiltonian by additional term(see section Rabi Frequencies):
It is noted that
Lets start our perturbation theory from here
Using derivation in [Beloy 6], we know that:
That's it. You would think that there is much more complicated maths in order to calculate AC Stark Shift, but acctually there isn't. All the long derivations presented in most thesis is to bring it to a simple form, which can only be done when according assumptions have been made. Because of numerical comfort we can keep above expression as final.
Thanks to such expression we didn't need to make any assumptions about the nature of the electric field, and about the nature of the electronic transitions.
Taking second order AC Stark Shift as the largest contribution to overall stark shift we say:
Polarizability of an atom in state
James 1998: "Quantum dynamics of cold trapped ions, with application to quantum computation." https://arxiv.org/abs/quant-ph/9702053
[Quantum Optics Scully, Zubairy Page 206.]
[Jackson Chapter 5]
[Beloy 2009]
[Lindenfelser]
[Beck]
This package is based on the package written by Matt Grau 'atomphys'. In order to change few data-structures and simplify overall package structure we (W.Adamczyk and C.Mordini) decided to rebuild it. This allowed us to add qutip helper functions, integrate other databases, and add visualising tools. States, Atoms and Transitions are now also not using registries, but graphs instead. P.Leindecker contributed valuable advice of how to build the package such that its API is well integrateable to web-development.
Wojciech Adamczyk [email protected], Dr Carmelo Mordini [email protected], Philipp Leindecker [email protected], Prof Matt Grau [email protected], Prof Jonathan Home [email protected]