Chirped LGS

An LGS with chirped pump light

This notebook simulates atoms pumped by frequency-modulated laser light. Calculations are performed for both sinusoidal and ramp modulation. A simple two-level atomic system is assumed in order to reduce computation time.

from pylgs.lgssystem import LGSSystem
import numpy as np

Load a two-level LGS system and fix all parameters except for pump laser detuning.

lgs = LGSSystem(
    'NaD1_Toy', 
    dict(
        # Repump beam parameters
        # DetuningHz1=0,
        LaserWidthHz1=0.0e6,
        IntensitySI1=5.,
    
        # Environmental parameters
        SDampingCollisionRatePerS=4081.63,
        BeamTransitRatePerS=131.944,
        VccRatePerS=28571.,
        TemperatureK=185.,
        RecoilParameter=1
    )
)

Solve the system with sinusoidally modulated pump detuning and plot the return flux as a function of time:

mu = dict(nu=2*np.pi*4e3)
model, sol = lgs.adaptive_stationary_floquet_model(
    dict(
        DetuningHz1="620e5 * sin(nu * t)", 
    ),
    np.linspace(0, 2/4e3, 200),
    60,
    mu_refine=mu,
    rtol=.01,
)
model.reconstructed_total_flux(sol, mu).real.visualize()

Plot an animation in time of the return flux as a function of atomic velocity:

model.reconstructed_flux_distribution(sol, mu).real.visualize(markers=True, xaxis_range=(-.2, .2))

Plot each Fourier coefficient of the time-dependent return flux as a function of atomic velocity:

model.flux_distribution(sol, mu).real.visualize(markers=True, xaxis_range=(-.2, .2))

Solve the system with linearly chirped pump detuning and plot the return flux as a function of time:

mu = dict(nu=2*np.pi*4e3)
model, sol = lgs.adaptive_stationary_floquet_model(
    dict(
        DetuningHz1="620e5 * 2 * (nu * t)/(2 * pi)", 
    ),
    np.linspace(0, 2/4e3, 200),
    60,
    mu_refine=mu,
    rtol=.01,
)
model.reconstructed_total_flux(sol, mu).real.visualize()

Plot an animation in time of the return flux as a function of atomic velocity:

model.reconstructed_flux_distribution(sol, mu).real.visualize(markers=True, xaxis_range=(-.2, .2))

Plot each Fourier coefficient of the time-dependent return flux as a function of atomic velocity:

model.flux_distribution(sol, mu).real.visualize(markers=True, xaxis_range=(-.2, .2))