# StarkMap#

class StarkMap(atom)[source]#

Calculates Stark maps for single atom in a field

This initializes calculation for the atom of a given type. For details of calculation see Zimmerman 1. For a quick working example see Stark map example snippet.

Parameters

Examples

State $$28~S_{1/2}~|m_j|=0.5$$ polarizability calculation

>>> from arc import *
>>> calc = StarkMap(Caesium())
>>> calc.defineBasis(28, 0, 0.5, 0.5, 23, 32, 20)
>>> calc.diagonalise(np.linspace(00.,6000,600))
>>> print("%.5f MHz cm^2 / V^2 " % calc.getPolarizability())
0.76705 MHz cm^2 / V^2


Stark map calculation

>>> from arc import *
>>> calc = StarkMap(Caesium())
>>> calc.defineBasis(28, 0, 0.5, 0.5, 23, 32, 20)
>>> calc.diagonalise(np.linspace(00.,60000,600))
>>> calc.plotLevelDiagram()
>>> calc.showPlot()
<< matplotlib plot will open containing a Stark map >>


Examples

Advanced interfacing of Stark map calculations (StarkMap class) Here we show one easy way to obtain the Stark matrix (from diagonal mat1 and off-diagonal part mat2 ) and basis states (stored in basisStates ), if this middle-product of the calculation is needed for some code build on top of the existing ARC package.

>>> from arc import *
>>> calc = StarkMap(Caesium())
>>> calc.defineBasis(28, 0, 0.5, 0.5, 23, 32, 20)
>>> # Now we have matrix and basis states, that we can used in our own code
>>> # Let's say we want Stark map at electric field of 0.2 V/m
>>> eField = 0.2 # V/m
>>> # We can easily extract Stark matrix
>>> # as diagonal matrix (state detunings)
>>> #  + off-diagonal matrix (propotional to electric field)
>>> matrix = calc.mat1+calc.mat2*eField
>>> # and the basis states as array [ [n,l,j,mj] , ...]
>>> basisStates = calc.basisStates
>>> # you can do your own calculation now...


References

1

M. L. Zimmerman et.al, PRA 20:2251 (1979) https://doi.org/10.1103/PhysRevA.20.2251

## Calculate#

 defineBasis(n, l, j, mj, nMin, nMax, maxL[, ...]) Initializes basis of states around state of interest diagonalise(eFieldList[, drivingFromState, ...]) Finds atom eigenstates in a given electric field

## Analyse#

 getPolarizability([maxField, showPlot, ...]) Returns the polarizability of the state (set during the initalization process). getState(state, electricField, minN, maxN, maxL) Returns basis states and coefficients that make up for a given electric field the eigenstate with largest contribution of the original state. exportData(fileBase[, exportFormat]) Exports StarkMap calculation data.

## Visualise#

 plotLevelDiagram([units, highlightState, ...]) Makes a plot of a stark map of energy levels showPlot([interactive]) Shows plot made by plotLevelDiagram savePlot([filename]) Saves plot made by plotLevelDiagram

## Attributes#

Internal variables of the class. This is for low-level access to intermediate results (low level API).

 s spin manifold in which we are working default value of 0.5 is correct for Alkaline Atoms. y y[i] is an array of eigenValues corresponding to the energies of the atom states at the electric field eFieldList[i]. ax pointer towards matplotlib figure axis after plotLevelDiagram is called to create figure fig pointer towards matplotlib figure after plotLevelDiagram is called to create figure mat1 diagonal elements of Stark-matrix (detuning of states) calculated by defineBasis in the basis basisStates. mat2 off-diagonal elements of Stark-matrix divided by electric field value. To get off diagonal elemements multiply this matrix with electric field value. Full Stark matrix is obtained as fullStarkMatrix = mat1 + mat2 *eField. Calculated by defineBasis in the basis basisStates. basisStates List of basis states for calculation in the form [ [n,l,j,mj], ...]. eFieldList Saves electric field (in units of V/m) for which energy levels are calculated highlight highlight[i] is an array of values measuring highlighted feature in the eigenstates at electric field intensity eFieldList[i]. indexOfCoupledState Index of coupled state (initial state passed to defineBasis) in basisStates list of basis states