class PairStateInteractions(atom, n, l, j, nn, ll, jj, m1, m2, interactionsUpTo=1, s=0.5, s2=None, atom2=None)[source]#

Calculates Rydberg level diagram (spaghetti) for the given pair state

Initializes Rydberg level spaghetti calculation for the given atom species (or for two atoms of different species) in the vicinity of the given pair state. For details of calculation see Ref. 1. For a quick start point example see interactions example snippet. For inter-species calculations see inter-species interaction calculation snippet.




T. G Walker, M. Saffman, PRA 77, 032723 (2008)


Advanced interfacing of pair-state is2=None, atom2=Nonenteractions calculations (PairStateInteractions class). This is an advanced example intended for building up extensions to the existing code. If you want to directly access the pair-state interaction matrix, constructed by defineBasis, you can assemble it easily from diagonal part (stored in matDiagonal ) and off-diagonal matrices whose spatial dependence is \(R^{-3},R^{-4},R^{-5}\) stored in that order in matR. Basis states are stored in basisStates array.

>>> from arc import *
>>> calc = PairStateInteractions(Rubidium(), 60,0,0.5,                 60,0,0.5, 0.5,0.5,interactionsUpTo = 1)
>>> # theta=0, phi = 0, range of pqn, range of l, deltaE = 25e9
>>> calc.defineBasis(0 ,0 , 5, 5, 25e9, progressOutput=True)
>>> # now calc stores interaction matrix and relevant basis
>>> # we can access this directly and generate interaction matrix
>>> # at distance rval :
>>> rval = 4  # in mum
>>> matrix = calc.matDiagonal
>>> rX = (rval*1.e-6)**3
>>> for matRX in self.matR:
>>>     matrix = matrix + matRX/rX
>>>     rX *= (rval*1.e-6)
>>> # matrix variable now holds full interaction matrix for
>>> # interacting atoms at distance rval calculated in
>>> # pair-state basis states can be accessed as
>>> basisStates = calc.basisStates


defineBasis(theta, phi, nRange, lrange, ...)

Finds relevant states in the vicinity of the given pair-state

getC6perturbatively(theta, phi, nRange, ...)

Calculates \(C_6\) from second order perturbation theory.


Returns Le Roy radius for initial pair-state.

diagonalise(rangeR, noOfEigenvectors[, ...])

Finds eigenstates in atom pair basis.


getC6fromLevelDiagram(rStart, rStop[, ...])

Finds \(C_6\) coefficient for original pair state.

getC3fromLevelDiagram(rStart, rStop[, ...])

Finds \(C_3\) coefficient for original pair state.

getVdwFromLevelDiagram(rStart, rStop[, ...])

Finds \(r_{\rm vdW}\) coefficient for original pair state.

exportData(fileBase[, exportFormat])

Exports PairStateInteractions calculation data.


plotLevelDiagram([highlightColor, ...])

Plots pair state level diagram


Shows level diagram printed by PairStateInteractions.plotLevelDiagram


Saves plot made by PairStateInteractions.plotLevelDiagram


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


the first atom type (isotope)


total spin angular momentum, optional (default 0.5)


Specifies up to which approximation we include in pair-state interactions.


List of pair-states for calculation.


index of the original n,l,j,m1,nn,ll,jj,m2 pair-state in the PairStateInteractions.basisStates basis.


states relevant for calculation, defined in J basis (not resolving \(m_j\).


List of matrices defineing coupling strengths between the states in J basis (not resolving \(m_j\) ).


matrixElement[i] gives index of state in basis (that doesn't resolve \(m_j\) states), for the given index i of the state in PairStateInteractions.basisStates ( \(m_j\) resolving) basis.


Part of interaction matrix in pair-state basis that doesn't depend on inter-atomic distance.


Stores interaction matrices in pair-state basis that scale as \(1/R^3\), \(1/R^4\) and \(1/R^5\) with distance in matR[0], matR[1] and matR[2] respectively.