Tutorial 6: Caesium-133 D Line

Caesium is a heavy atom with hyperfine structure. Modelling of the 133Cs D line is shown in this tutorial using the LASED library.

[1]:
import LASED as las
import plotly.graph_objects as go
import time
import numpy as np

from IPython.display import Image  # To display images in Jupyter notebook

The data for Caesium can be accessed here. The 6\(^2\)S\(_{1/2}\) to the 6\(^2\)P\(_{3/2}\) transition will be modelled here with F’ = 4 to the F = 5 level as the resonant transition and all other terms will be detuned from this resonance. A level diagram of the system being modelled is shown below.

CsLevelDiagram

Setting up the System

[2]:
# 6^2S_{1/2} -> 6^2P_{3/2}
wavelength_cs = 852.356e-9  # Wavelength in nm
w_e = las.angularFreq(wavelength_cs)
tau_cs = 30.473 # in ns

I_cs = 7/2  # Isospin for sodium
PI = np.pi

# Energy Splittings
w1 = 9.192631770*2*PI # Splitting of 6^2S_{1/2}(F' = 3) -> (F' = 4) in Grad/s (Exact due to definition of the second)
w2 = 0.15121*2*PI  # Splitting between 6^2P_{3/2} F = 2 and F = 3 in Grad/s
w3 = 0.20124*2*PI  # Splitting between 6^2P_{3/2} F = 3 and F = 4 in Grad/s
w4 = 0.251*2*PI  # Splitting between 6^2P_{3/2} F = 4 and F = 5 in Grad/s

# Detunings
w_Fp3 = -1*w1
w_F2 = w_e-(w4+w3+w2)
w_F3 = w_e-(w4+w3)
w_F4 = w_e-w4
w_F5 = w_e

# Create states
# 6^2S_{1/2}
Fp3 = las.generateSubStates(label_from = 1, w = w_Fp3, L = 0, S = 1/2, I = I_cs, F = 3)
Fp4 = las.generateSubStates(label_from = 8, w = 0, L = 0, S = 1/2, I = I_cs, F = 4)

# 5^2P_{3/2}
F2 = las.generateSubStates(label_from = 17, w = w_F2, L = 1, S = 1/2, I = I_cs, F = 2)
F3 = las.generateSubStates(label_from = 22, w = w_F3, L = 1, S = 1/2, I = I_cs, F = 3)
F4 = las.generateSubStates(label_from = 29, w = w_F4, L = 1, S = 1/2, I = I_cs, F = 4)
F5 = las.generateSubStates(label_from = 38, w = w_F5, L = 1, S = 1/2, I = I_cs, F = 5)

# Declare excited and ground states
G_cs = Fp3 + Fp4
E_cs = F2 + F3 + F4 + F5

# Laser parameters
intensity_cs = 50 # mW/mm^-2
Q_cs = [0]

# Simulation parameters
start_time = 0
stop_time = 500 # in ns
time_steps = 501
time_cs = np.linspace(start_time, stop_time, time_steps)

Create a LaserAtomSystem object and time evolve the system using timeEvolution().

[3]:
cs_system = las.LaserAtomSystem(E_cs, G_cs, tau_cs, Q_cs, wavelength_cs, laser_intensity = intensity_cs)
tic = time.perf_counter()
cs_system.timeEvolution(time_cs)
toc = time.perf_counter()
print(f"The code finished in {toc-tic:0.4f} seconds")
Populating ground states equally as the initial condition.
The code finished in 8568.3967 seconds

Saving and Plotting

[4]:
cs_system.saveToCSV(f"cs133piExcitationI={intensity_cs}.csv")
[5]:
rho_to_plot = [ [abs(rho) for rho in cs_system.Rho_t(s, s)] for s in F5]

fig_csF5 = go.Figure()

for i, rho in enumerate(rho_to_plot):
    fig_csF5.add_trace(go.Scatter(x = time_cs,
                                y = rho,
                                name = f"m_F = {F5[i].m}",
                               mode = 'lines'))

fig_csF5.update_layout(title = "<sup>133</sup>Caesium 6<sup>2</sup>S<sub>1/2</sub> to 6<sup>2</sup>P<sub>3/2</sub> π-Excitation: Time Evolution of Population in the F = 5 Substates",
                 xaxis_title = "Time (ns)",
                 yaxis_title = "Population",
                font = dict(
                    size = 11))
fig_csF5.write_image(f"SavedPlots/CsF=5I={intensity_cs}.png")
Image(f"SavedPlots/CsF=5I={intensity_cs}.png")
[5]:
../_images/tutorials_Tutorial6-Caesium133DLine_10_0.png
[6]:
rho_to_plot = [ [abs(rho) for rho in cs_system.Rho_t(s, s)] for s in F4]

fig_csF4 = go.Figure()

for i, rho in enumerate(rho_to_plot):
    fig_csF4.add_trace(go.Scatter(x = time_cs,
                                y = rho,
                                name = f"m_F = {F4[i].m}",
                               mode = 'lines'))

fig_csF4.update_layout(title = "<sup>133</sup>Caesium 6<sup>2</sup>S<sub>1/2</sub> to 6<sup>2</sup>P<sub>3/2</sub> π-Excitation: Time Evolution of Population in the F = 4 Substates",
                 xaxis_title = "Time (ns)",
                 yaxis_title = "Population",
                font = dict(
                    size = 11))
fig_csF4.write_image(f"SavedPlots/CsF=4I={intensity_cs}.png")
Image(f"SavedPlots/CsF=4I={intensity_cs}.png")
[6]:
../_images/tutorials_Tutorial6-Caesium133DLine_11_0.png
[7]:
rho_to_plot = [ [abs(rho) for rho in cs_system.Rho_t(s, s)] for s in F3]

fig_csF3 = go.Figure()

for i, rho in enumerate(rho_to_plot):
    fig_csF3.add_trace(go.Scatter(x = time_cs,
                                y = rho,
                                name = f"m_F = {F3[i].m}",
                               mode = 'lines'))

fig_csF3.update_layout(title = "<sup>133</sup>Caesium 6<sup>2</sup>S<sub>1/2</sub> to 6<sup>2</sup>P<sub>3/2</sub> π-Excitation: Time Evolution of Population in the F = 3 Substates",
                 xaxis_title = "Time (ns)",
                 yaxis_title = "Population",
                font = dict(
                    size = 11))
fig_csF3.write_image(f"SavedPlots/CsF=3I={intensity_cs}.png")
Image(f"SavedPlots/CsF=3I={intensity_cs}.png")
[7]:
../_images/tutorials_Tutorial6-Caesium133DLine_12_0.png
[8]:
rho_to_plot = [ [abs(rho) for rho in cs_system.Rho_t(s, s)] for s in F2]

fig_csF2 = go.Figure()

for i, rho in enumerate(rho_to_plot):
    fig_csF2.add_trace(go.Scatter(x = time_cs,
                                y = rho,
                                name = f"m_F = {F2[i].m}",
                               mode = 'lines'))

fig_csF2.update_layout(title = "<sup>133</sup>Caesium 6<sup>2</sup>S<sub>1/2</sub> to 6<sup>2</sup>P<sub>3/2</sub> π-Excitation: Time Evolution of Population in the F = 2 Substates",
                 xaxis_title = "Time (ns)",
                 yaxis_title = "Population",
                font = dict(
                    size = 11))
fig_csF2.write_image(f"SavedPlots/CsF=2I={intensity_cs}.png")
Image(f"SavedPlots/CsF=2I={intensity_cs}.png")
[8]:
../_images/tutorials_Tutorial6-Caesium133DLine_13_0.png
[9]:
rho_to_plot = [ [abs(rho) for rho in cs_system.Rho_t(s, s)] for s in Fp3]

fig_csFp3 = go.Figure()

for i, rho in enumerate(rho_to_plot):
    fig_csFp3.add_trace(go.Scatter(x = time_cs,
                                y = rho,
                                name = f"m_F = {Fp3[i].m}",
                               mode = 'lines'))

fig_csFp3.update_layout(title = "<sup>133</sup>Caesium 6<sup>2</sup>S<sub>1/2</sub> to 6<sup>2</sup>P<sub>3/2</sub> π-Excitation: Time Evolution of Population in the F' = 3 Substates",
                 xaxis_title = "Time (ns)",
                 yaxis_title = "Population",
                font = dict(
                    size = 11))
fig_csFp3.write_image(f"SavedPlots/CsFp=3I={intensity_cs}.png")
Image(f"SavedPlots/CsFp=3I={intensity_cs}.png")
[9]:
../_images/tutorials_Tutorial6-Caesium133DLine_14_0.png
[10]:
rho_to_plot = [ [abs(rho) for rho in cs_system.Rho_t(s, s)] for s in Fp4]

fig_csFp4 = go.Figure()

for i, rho in enumerate(rho_to_plot):
    fig_csFp4.add_trace(go.Scatter(x = time_cs,
                                y = rho,
                                name = f"m_F = {Fp4[i].m}",
                               mode = 'lines'))

fig_csFp4.update_layout(title = "<sup>133</sup>Caesium 6<sup>2</sup>S<sub>1/2</sub> to 6<sup>2</sup>P<sub>3/2</sub> π-Excitation: Time Evolution of Population in the F' = 4 Substates",
                 xaxis_title = "Time (ns)",
                 yaxis_title = "Population",
                font = dict(
                    size = 11))
fig_csFp4.write_image(f"SavedPlots/CsFp=4I={intensity_cs}.png")
Image(f"SavedPlots/CsFp=4I={intensity_cs}.png")
[10]:
../_images/tutorials_Tutorial6-Caesium133DLine_15_0.png