The wavelength of the transition between the $n_1$th and $n_2$th levels is given by,
\begin{equation} \frac{1}{\lambda} = R_{M} \left( \frac{1}{(n_1-\delta_1)^2} - \frac{1}{(n_2-\delta_2)^2} \right) \end{equation}where $\delta_x$ are the quantum defects, and $R_{M}$ is the reduced mass,
\begin{equation} R_{M} = \frac{R_{\infty}}{1+\frac{m_e}{M}} \end{equation}where $R_{\infty}$ is the Rydberg constant with an infinite mass nucleus, $m_e$ is the electron mass, and $M$ is the mass of the nucleus. $R_{\infty}$ is given by,
\begin{equation} R_{\infty} = \frac{m_e e^4}{8 \epsilon_0^2 h^3 c} = 1.0973731568508 \times 10^7 m^{-1} \end{equation}The frequency of the transition is then,
\begin{equation} f = \frac{c}{\lambda} \end{equation}where $c$ is the speed of light.
In [1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
class RydbergHelium:
def __init__(self):
self.z = 2
self.r_inf = 1.0973731568508 * 10**7
self.c = 2.99792458 * 10**8
self.h = 6.62607004 * 10**-34
self.e = 1.60217662 * 10**-19
self.m_e = 9.10938356 * 10**-31
self.m_p = 1.6726219 * 10**-27
def energy_level(self, n, l):
r_m = self.r_inf / (1 + (self.m_e/(2*self.z*self.m_p)))
defect = self.quantum_defect(n, l)
wavelength = 1 / ( r_m * ( 1/float(n-defect)**2 ) )
return self.h * self.c / wavelength
def energy_transition(self, n_from, n_to, l_from=6, l_to=6):
return np.abs(self.energy_level(n_from, l_from) - self.energy_level(n_to, l_to))
def quantum_defect(self, n, l):
# Routine to calculate the quantum defects of the triplet Rydberg states of helium
# From Martin, Phys. Rev. A, vol. 36, pp. 3575-3589 (1987)
# s p d f g h +
a = [0.29665486, 0.06835886, 0.00289043, 0.00043924, 0.00012568, 0.00004756, 0]
b = [0.03824614, -0.01870111, -0.0064691, -0.0017850, -0.0008992, -0.000552 , 0]
c = [0.0082574, -0.0117730, 0.001362, 0.000465, 0.0007, 0.00112 , 0]
d = [0.000359, -0.008540, -0.00325, 0, 0, 0 , 0]
if l <= 5:
idx = l;
else:
idx = 6
m = n - a[idx];
return a[idx] + b[idx]*m**(-2) + c[idx]*m**(-4) + d[idx]*m**(-6);
def energy_ionisation(self):
# E/hc = 1/lambda (cm^-1)
return (self.h * self.c) * (198310.6663720 * 100)
def energy_1s3p(self):
# E/hc = 1/lambda (cm^-1)
return (self.h * self.c) * (185564.561920 * 100) # J = 2
def energy_1s2s(self):
# E/hc = 1/lambda (cm^-1)
return (self.h * self.c) * (159855.9743297 * 100)
def energy_1s3p_nl(self, n, l):
return (self.energy_ionisation() - self.energy_1s3p()) - self.energy_level(n, l)
def frequency(self, E):
return E / self.h
def wavelength(self, E):
return self.h * self.c / E
In [3]:
atom = RydbergHelium()
abs_55s = atom.wavelength(atom.energy_1s3p_nl(55, 0)) * 10**9
ref_55s = 786.8166
offset = ref_55s - abs_55s
In [4]:
atom.wavelength(atom.energy_1s3p_nl(70, 0)) * 10**9 + offset
Out[4]:
In [5]:
atom.frequency(atom.energy_transition(70,72,0,0)) / 10**9
Out[5]:
In [ ]: