{ "cells": [ { "cell_type": "markdown", "id": "intro", "metadata": {}, "source": [ "# Three-Level Ladder (Ξ): Autler–Townes Splitting\n", "\n", "When a strong coupling field drives one transition of a ladder (Ξ)\n", "system, it splits the coupled intermediate level into two dressed states\n", "separated by the coupling Rabi frequency $\\Omega_c$. A weak probe scanning\n", "across the lower transition then sees two absorption peaks instead of one\n", "— the **Autler–Townes (AT) doublet**.\n", "\n", "## Level structure\n", "\n", "```\n", " |2⟩ ────────────────\n", " │ γ₂₁ = 1.0\n", " Ω_c │ coupling (CW, strong)\n", " │\n", " |1⟩ ────────────────\n", " │ γ₁₀ = 1.0\n", " Ω_p │ probe (weak broadband pulse)\n", " │\n", " |0⟩ ════════════════ (ground)\n", "```\n", "\n", "## Physics\n", "\n", "The coupling field dresses states |1⟩ and |2⟩ into two eigenstates of\n", "the coupled Hamiltonian:\n", "\n", "$$\n", "|\\pm\\rangle = \\frac{1}{\\sqrt{2}}(|1\\rangle \\pm |2\\rangle),\n", "\\qquad E_{\\pm} = \\pm \\tfrac{1}{2}\\Omega_c\n", "$$\n", "\n", "(on resonance, $\\delta_c = 0$). The probe then couples $|0\\rangle$ to\n", "both dressed states, giving two absorption peaks at probe detunings\n", "$\\delta_p = \\pm\\Omega_c / 2$.\n", "\n", "The AT splitting $\\Delta_{\\mathrm{AT}} = \\Omega_c$ is directly readable\n", "from the spectrum and gives a clean linear measure of the coupling Rabi\n", "frequency — the basis of AT-based field sensing." ] }, { "cell_type": "markdown", "id": "method", "metadata": {}, "source": [ "## Method\n", "\n", "We use a weak broadband Gaussian probe to map the linear response of the\n", "dressed medium in a single solve. The Fourier transform of the transmitted\n", "probe (via `maxwellbloch.spectral.absorption`) gives the frequency-domain\n", "absorption spectrum directly.\n", "\n", "Four coupling strengths are compared: $\\Omega_c = 0$ (no coupling, single\n", "Lorentzian), 1, 2, and 5 $\\gamma$. The AT doublet emerges and widens\n", "linearly with $\\Omega_c$." ] }, { "cell_type": "code", "execution_count": 1, "id": "imports", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from maxwellbloch import mb_solve, plot" ] }, { "cell_type": "code", "execution_count": 2, "id": "json-template", "metadata": {}, "outputs": [], "source": [ "def at_json(omega_c, savefile):\n", " \"\"\"Return an MBSolve JSON string for a given coupling Rabi frequency.\"\"\"\n", " return f\"\"\"\n", "{{\n", " \"atom\": {{\n", " \"num_states\": 3,\n", " \"decays\": [\n", " {{\"channels\": [[0, 1]], \"rate\": 1.0}},\n", " {{\"channels\": [[1, 2]], \"rate\": 1.0}}\n", " ],\n", " \"fields\": [\n", " {{\n", " \"label\": \"probe\",\n", " \"coupled_levels\": [[0, 1]],\n", " \"rabi_freq\": 0.001,\n", " \"rabi_freq_t_func\": \"gaussian\",\n", " \"rabi_freq_t_args\": {{\"ampl\": 1.0, \"centre\": 0.0, \"fwhm\": 1.5}}\n", " }},\n", " {{\n", " \"label\": \"coupling\",\n", " \"coupled_levels\": [[1, 2]],\n", " \"rabi_freq\": {omega_c},\n", " \"rabi_freq_t_func\": \"ramp_onoff\",\n", " \"rabi_freq_t_args\": {{\"ampl\": 1.0, \"fwhm\": 0.2, \"on\": -2.0, \"off\": 8.0}}\n", " }}\n", " ]\n", " }},\n", " \"t_min\": -2.0,\n", " \"t_max\": 8.0,\n", " \"t_steps\": 240,\n", " \"z_min\": 0.0,\n", " \"z_max\": 1.0,\n", " \"z_steps\": 10,\n", " \"z_steps_inner\": 2,\n", " \"interaction_strengths\": [1.0, 1.0],\n", " \"savefile\": \"{savefile}\"\n", "}}\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "solve", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ω_c = 0.0 γ — solved\n", "Ω_c = 1.0 γ — solved\n", "Ω_c = 2.0 γ — solved\n", "Ω_c = 5.0 γ — solved\n" ] } ], "source": [ "omega_c_values = [0.0, 1.0, 2.0, 5.0]\n", "mbs_list = []\n", "\n", "for omega_c in omega_c_values:\n", " mbs = mb_solve.MBSolve().from_json_str(\n", " at_json(omega_c, f\"mbs-ladder-at-Oc{omega_c}\")\n", " )\n", " mbs.mbsolve(recalc=False)\n", " mbs_list.append(mbs)\n", " print(f\"Ω_c = {omega_c} γ — solved\")" ] }, { "cell_type": "markdown", "id": "spectrum-section", "metadata": {}, "source": [ "## Absorption spectra\n", "\n", "The four traces show the probe absorption at $z = z_\\mathrm{max}$.\n", "As $\\Omega_c$ increases from 0 to $5\\gamma$, the single Lorentzian\n", "peak splits into a resolved doublet with separation $\\Omega_c$." ] }, { "cell_type": "code", "execution_count": 4, "id": "plot-spectra", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "