Time evolution of quantum interference in fluorescence spectra
In this tutorial, the photon scattering rate of 7Li is calculated using different coherent and perturbative
solvers included in qspec.simulate
.
The resulting scattering rates reproduce the simulated fluorescence spectra shown in Fig. 2
by Brown et al. [1].
This tutorial is also part of qspec's publication.
import numpy as np import qspec.simulate as sim f_sp = 446810183.163 # Transition frequency (MHz) a_sp = 36.891 # Einstein coefficient (rad MHz) s_hyper = [401.75825] # HFS constants (MHz) p_hyper = [-3.055038, -0.29670] s = sim.construct_electronic_state( 0., s=0.5, l=0, j=0.5, i=1.5, hyper_const=s_hyper, label='s') p = sim.construct_electronic_state( f_sp, s=0.5, l=1, j=1.5, i=1.5, hyper_const=p_hyper, label='p') decay = sim.DecayMap(labels=[('s', 'p')], a=[a_sp]) li7 = sim.Atom(s + p, decay) intensity = 1. # uW /mm**2 polarization = sim.Polarization([0, 1, 0]) # Linear polarization laser = sim.Laser(f_sp, intensity, polarization) inter = sim.Interaction(li7, [laser]) inter.controlled = True # Error controlled integrator t = 0.2 # Integration time (us) delta = np.linspace(-325, -275, 201) # Frequency detunings (MHz) theta, phi = 0., 0. # Angles from z-axis in x- and y-direction (rad) n = inter.rates(t, delta) # Rate equations, 0.2 us y_rates = li7.scattering_rate(n, theta, phi, as_density_matrix=False) rho = inter.master(t, delta) # Master equation, 0.2 us y_master = li7.scattering_rate(rho, theta, phi) rho = inter.master(0.4, delta) # Master equation, 0.4 us y4_master = li7.scattering_rate(rho, theta, phi) sr = sim.ScatteringRate(li7, laser=laser) y_brown = sr.generate_y(delta, theta, phi)[:, 0, 0] # Brown et al.
Using matplotlib
, we can generate the plot from the publication.
import matplotlib.pyplot as plt scale = 1e3 x_lim = delta[0], delta[-1] fig, (m, r) = plt.subplots( 2, 1, sharex='all', height_ratios=[3, 1], figsize=(6, 5)) m.plot(delta, y_brown * scale, '-k', label=r'Brown $et\,al.$', zorder=20) m.plot(delta, y_rates[:, -1] * scale, '-C0', label=r'rates, $t = 0.2\,\mu$s', zorder=0) m.plot(delta, y_master[:, -1] * scale, '-C1', label=r'master, $t = 0.2\,\mu$s', zorder=60) m.plot(delta, y4_master[:, -1] * scale, '--C3', label=r'master, $t = 0.4\,\mu$s', linewidth=1.5, zorder=30) r.plot(delta, (y_brown - y_rates[:, -1]) * scale, '-k', zorder=20) r.plot(delta, (y_master[:, -1] - y_rates[:, -1]) * scale, '-C1', zorder=60) r.plot(delta, (y4_master[:, -1] - y_rates[:, -1]) * scale, '--C3', linewidth=1.5, zorder=10) r.hlines(0, *x_lim, 'C0', '-', zorder=0) m.legend() m.set_ylabel(r'$\mathrm{d}\Gamma / \mathrm{d}\Omega$ (kHz)') m.set_xlim(*x_lim) r.set_xlabel('Relative frequency (MHz)') r.set_ylabel('Residuals (kHz)') y_lim = m.get_ylim() r.set_ylim(-(y_lim[1] - y_lim[0]) / 6, (y_lim[1] - y_lim[0]) / 6) plt.subplots_adjust(left=0.09, bottom=0.1, right=0.99, top=0.99, hspace=0.05) plt.show()