{ "cells": [ { "cell_type": "markdown", "id": "introduction", "metadata": {}, "source": [ "# Wavefronts Tutorial\n", "\n", "This tutorial covers wavefront representation and propagation in Janssen.\n", "\n", "## Overview\n", "\n", "In wave optics, the complete description of a monochromatic beam requires storing the **complex field** $E(x,y)$, not just the intensity $I = |E|^2$. This is because:\n", "\n", "1. **Phase encodes propagation behavior**: Two beams with identical intensity can propagate completely differently\n", "2. **Interference requires phase**: Superposition of fields depends on relative phase\n", "3. **Focusing is a phase effect**: A converging beam has quadratic phase curvature\n", "\n", "This tutorial demonstrates these principles and shows how Janssen's differentiable implementation enables gradient-based optimization of beam parameters." ] }, { "cell_type": "code", "execution_count": null, "id": "imports", "metadata": {}, "outputs": [], "source": [ "import jax\n", "import jax.numpy as jnp\n", "import matplotlib.pyplot as plt\n", "import matplotlib.gridspec as mpgs\n", "import optax\n", "from janssen.models import gaussian_beam\n", "from janssen.prop import angular_spectrum_prop\n", "from janssen.utils import make_optical_wavefront\n", "\n", "# Configure matplotlib for publication figures\n", "plt.rcParams['font.family'] = 'sans-serif'\n", "plt.rcParams['font.sans-serif'] = ['TeX Gyre Heros']\n", "plt.rcParams['mathtext.fontset'] = 'custom'\n", "plt.rcParams['mathtext.rm'] = 'TeX Gyre Heros'\n", "plt.rcParams['mathtext.it'] = 'TeX Gyre Heros:italic'\n", "plt.rcParams['mathtext.bf'] = 'TeX Gyre Heros:bold'\n", "\n", "plt.rcParams['font.size'] = 6\n", "plt.rcParams['axes.titlesize'] = 7\n", "plt.rcParams['axes.titleweight'] = 'bold'\n", "plt.rcParams['axes.labelsize'] = 5\n", "plt.rcParams['xtick.labelsize'] = 5\n", "plt.rcParams['ytick.labelsize'] = 5\n", "plt.rcParams['legend.fontsize'] = 6\n", "plt.rcParams['figure.titlesize'] = 7" ] }, { "cell_type": "markdown", "id": "setup-header", "metadata": {}, "source": [ "## Setup: Physical Parameters\n", "\n", "We define a coordinate grid and physical parameters for our Gaussian beams." ] }, { "cell_type": "code", "execution_count": 7, "id": "setup-params", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wavelength: 500 nm\n", "Grid: 256x256, dx = 7.8 um\n", "Beam waist: 200 um\n", "Focal length: 50 mm\n" ] } ], "source": [ "# Physical parameters\n", "wavelength = 500e-9 # 500 nm\n", "k = 2 * jnp.pi / wavelength # wavenumber\n", "\n", "# Grid setup\n", "grid_size = 256\n", "physical_size = 2e-3 # 2 mm\n", "dx = physical_size / grid_size\n", "\n", "x = jnp.linspace(-physical_size/2, physical_size/2, grid_size)\n", "y = jnp.linspace(-physical_size/2, physical_size/2, grid_size)\n", "xx, yy = jnp.meshgrid(x, y)\n", "rr = jnp.sqrt(xx**2 + yy**2)\n", "\n", "# Beam parameters\n", "w0 = 200e-6 # 200 um waist\n", "focal_length = 50e-3 # 50 mm focal length for converging/diverging\n", "\n", "print(f\"Wavelength: {wavelength*1e9:.0f} nm\")\n", "print(f\"Grid: {grid_size}x{grid_size}, dx = {dx*1e6:.1f} um\")\n", "print(f\"Beam waist: {w0*1e6:.0f} um\")\n", "print(f\"Focal length: {focal_length*1e3:.0f} mm\")" ] }, { "cell_type": "markdown", "id": "three-beams-header", "metadata": {}, "source": [ "## 1. Three Gaussian Beams: Same Intensity, Different Phase\n", "\n", "We create three Gaussian beams at z=0:\n", "- **Collimated**: Flat phase (plane wave envelope)\n", "- **Converging**: Quadratic phase curving inward (will focus)\n", "- **Diverging**: Quadratic phase curving outward (will expand)" ] }, { "cell_type": "code", "execution_count": 8, "id": "create-beams", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Max intensity difference (collimated vs converging): 3.33e-16\n", "Max intensity difference (collimated vs diverging): 3.33e-16\n", "All three beams have IDENTICAL intensity at z=0!\n" ] } ], "source": [ "# Gaussian amplitude envelope (same for all three beams)\n", "amplitude = jnp.exp(-rr**2 / w0**2)\n", "\n", "# Phase profiles\n", "phase_collimated = jnp.zeros_like(rr) # Flat phase\n", "phase_converging = -k * rr**2 / (2 * focal_length) # Focusing phase (negative curvature)\n", "phase_diverging = +k * rr**2 / (2 * focal_length) # Diverging phase (positive curvature)\n", "\n", "# Complex fields\n", "E_collimated = amplitude * jnp.exp(1j * phase_collimated)\n", "E_converging = amplitude * jnp.exp(1j * phase_converging)\n", "E_diverging = amplitude * jnp.exp(1j * phase_diverging)\n", "\n", "# Verify intensities are identical\n", "I_collimated = jnp.abs(E_collimated)**2\n", "I_converging = jnp.abs(E_converging)**2\n", "I_diverging = jnp.abs(E_diverging)**2\n", "\n", "print(f\"Max intensity difference (collimated vs converging): {jnp.max(jnp.abs(I_collimated - I_converging)):.2e}\")\n", "print(f\"Max intensity difference (collimated vs diverging): {jnp.max(jnp.abs(I_collimated - I_diverging)):.2e}\")\n", "print(\"All three beams have IDENTICAL intensity at z=0!\")" ] }, { "cell_type": "code", "execution_count": 9, "id": "plot-at-z0", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqYAAAHDCAYAAAD2qtjrAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAlNpJREFUeJzs3XmcFNW9//9Xbd0zPcMMyA6yKauCxh2NGpd7jSbRxCWCUfRe8f6IoIYYH94Qbm7cviGRGNEIRDGKwS0Gk4iRGI1G4hYh3rhGcGEd9s0ZZnqmurbfH6equ2cYlGWmu6bn83w8yl6mu/p022/6U6dOndKCIAgQQgghhBCiyPRiN0AIIYQQQgiQwlQIIYQQQsSEFKZCCCGEECIWpDAVQgghhBCxIIWpEEIIIYSIBSlMhRBCCCFELEhhKoQQQgghYkEKUyGEEEIIEQtSmAohhBBCiFiQwjTGXn75ZU488UQqKioYPHgwM2fOZE8n6po/fz6maQJw2mmncdVVV7F69Wo0TeOVV14pWJtvu+02Bg8eXLDXE6JQ9iWPhRTlXQgBL730EpqmoWkapmkyfPhwHnvssWa/kW2tGL+1pUwK05has2YNZ511FkceeSQfffQRM2bM4MYbb+TJJ5/c63UMGjSIxsZGTjrppP1uRxTympqa/V6HEB1dW+SxvTz33HPMnTu32M0QIlb+/Oc/s337dsaNG8eECRM48cQTqa+vb5fXaovfWpEjhWlMPfbYY7iuyx133EG/fv245JJLWLZsGUceeSSTJk2ie/fu9OjRg6uvvhrXdVtdx5o1aygvL+e1117jpptuomfPnpx00klUV1fzne98hyOOOIJ+/fpxzz33AHDXXXfRu3dvunfvzte//nV27NjBRRddBMDJJ5+MbdtcfvnlVFdXM2zYMP785z8D8MILL3DIIYfQu3dvnn/++cJ8QEIU0L7mcf78+ei6ziWXXEJFRQWnnHIKu3bt4oILLuDf/u3fAHjwwQdJJpPs3LmTn//85/Tp04fevXvzk5/8BICbbrqJgw8+mHPPPZcZM2bw1ltvMXr0aHr27Mn555+f7f0566yzuPrqq7O9NhdeeCHdunXj0EMP5a233gJg5syZdO/enRNPPJHDDz9celhFyUskElRXVzN58mQ8z2PhwoVUVlaybds2LMvi4YcfBuBLX/oSF198MTt27OC8886jsrKSL3zhC7z55psADB48mPPOO49BgwZRU1PTapZa/tb26dOHs846i1Qqxfnnn4/ruuzYsYNzzjmH6upqLr30Uulh/QxSmMbUmjVr6N69OxUVFdn7jj32WJ5//nl+9atfsXDhQn7zm99w3333MX/+/L1aZ11dHffddx/nn38+c+bM4eGHH+YrX/kKP//5z/E8jyVLljBr1iz++Mc/smjRIv7yl7/w6KOPAqr4vP/++1m0aBF///vf+da3vsWll15KOp3m0ksvZezYsbz00kts3769PT4OIYpqf/IYBAHf/OY3efbZZ3nllVd4/vnnufzyy1myZAk7d+5k8eLFfO1rX2P9+vV873vf45577mHBggVMmzaNZcuWAbBhwwauv/56vve97/Htb3+b3r1787e//Y3Nmzfvsa2HHHII//znP7FtmwceeIAPPviAG2+8kZtuuokf//jHLF++vF0/KyHipG/fvnTt2pXbbrsNgB49evDVr36Vp556ik8//ZRXX32VCRMmMGPGDD744APefvttjjnmGC6//PLsOrZt28bLL79MbW3tXmVp+/bt3HzzzcybN48//OEPvPPOO9x+++3885//5G9/+xtdu3YtxFvvsNpnwIU4YAMGDGDbtm3U1tZSXV0NwBNPPMHTTz/N6NGjOf300wEYOXIk7777LkcdddTnrvPggw9m9OjRDB06lH79+nHEEUcwdOhQnn32WQzD4Itf/CIzZ86ksrISgEwmQyKRACCZTPLee+/R0NDAKaecguu61NbW8u6777J582bGjRvHqFGj+Pd//3d+//vft9OnIkRx7E8edV3nggsuyK4jnU5z8cUXU1VVxaJFi3j++eeZP38+77//PgCTJk1C0zSAbE/K4MGDs+t+++23+elPf8qoUaM4//zzWbp0aattPe+88xg8eDBDhw4lnU7zzjvvAHDFFVdQVVXFyJEj2+ETEiKeNm3axKeffsqPf/xjfvjDHwIwYcIErrjiCv74xz/SrVs3zj77bObMmcPatWs54YQTsG2b+vp6du7cCcDZZ5/NwIED+c1vfgN8fpYGDhzIiSeeSN++fQGV/bfffpuTTjqJI488kv/4j/9gzpw5BXj3HZP0mMbUJZdcgmma/Nd//RdvvPEGP/vZzxg3bhxjx47lvffe46WXXuKFF15g+fLljB49eq/WGf3otbwOqmfm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zY6QSziw75dMsC+EEEIIIWKhQ+3KF0IIIYQQpUsKUyGEEEIIEQtSmAohhBBCiFiQwlQIIYQQQsSCFKZCCCGEECIWpDAVQgghhBCxIIWpEEIIIYSIBSlMO4GlS5fy2muv7dNzdu3axf33399OLRJCgGRTiDiSXBZXhzrzk/hst912G+effz6/+MUvmDlzJl26dAHg97//PT/+8Y+57LLL6NOnDx988AEjRozgk08+4Xe/+x3nnXcew4cPZ+XKlQwZMoTa2loefPBB1q5di23bJJPJIr8zITo2yaYQ8SO5jCfpMS0hN9xwA9/5znc455xzsgHzfZ90Oo2maTiOw8yZMznooIO45ZZbGDNmDBs3bqSiooI777wT0zS58847iU4GNnDgQJYvX17MtyRESZBsChE/kst4ksK0hDiOg2mafPrpp9n7tm/fTmVlJQBdunRB0zSSySSVlZWYpuowr6qqAqBbt25ompa9v3///qxcubKwb0KIEiTZFCJ+JJfxJIVpCZkxYwa//OUvefXVV9m5cycA3bt3p76+fr/Wt379eg455JC2bKIQnZJkU4j4kVzGkxZEfdCiZE2bNo0f//jHaJq2T8/74Q9/yP/8z//IeBkh2olkU4j4kVwWl/SYdgLf+MY3eP311/fpObt27WLQoEESMCHakWRTiPiRXBaX9JgKIYQQQohYkB5TIYQQQggRC1KYCiGEEEKIWJDCVAghhBBCxIIUpkIIIYQQIhakMBVCCCGEELEghakQQgghhIgFKUyFEEIIIUQsSGEqhBBCCCFiQQrTGHv55Zc58cQTqaioYPDgwcycOZM9nQ9h/vz5mKYJwGmnncZVV13F6tWr0TSNV155pWBtvu222xg8eHDBXk+IQtmXPBZSlHchBLz00ktomoamaZimyfDhw3nsscea/Ua2tWL81pYyKUxjas2aNZx11lkceeSRfPTRR8yYMYMbb7yRJ598cq/XMWjQIBobGznppJP2ux1RyGtqavZ7HUJ0dG2Rx/by3HPPMXfu3GI3Q4hY+fOf/8z27dsZN24cEyZM4MQTT6S+vr5dXqstfmtFjhSmMfXYY4/hui533HEH/fr145JLLmHZsmUceeSRTJo0ie7du9OjRw+uvvpqXNdtdR1r1qyhvLyc1157jZtuuomePXty0kknUV1dzXe+8x2OOOII+vXrxz333APAXXfdRe/evenevTtf//rX2bFjBxdddBEAJ598MrZtc/nll1NdXc2wYcP485//DMALL7zAIYccQu/evXn++ecL8wEJUUD7msf58+ej6zqXXHIJFRUVnHLKKezatYsLLriAf/u3fwPgwQcfJJlMsnPnTn7+85/Tp08fevfuzU9+8hMAbrrpJg4++GDOPfdcZsyYwVtvvcXo0aPp2bMn559/frb356yzzuLqq6/O9tpceOGFdOvWjUMPPZS33noLgJkzZ9K9e3dOPPFEDj/8cOlhFSUvkUhQXV3N5MmT8TyPhQsXUllZybZt27Asi4cffhiAL33pS1x88cXs2LGD8847j8rKSr7whS/w5ptvAjB48GDOO+88Bg0aRE1NTatZavlb26dPH8466yxSqRTnn38+ruuyY8cOzjnnHKqrq7n00kulh/UzSGEaU2vWrKF79+5UVFRk7zv22GN5/vnn+dWvfsXChQv5zW9+w3333cf8+fP3ap11dXXcd999nH/++cyZM4eHH36Yr3zlK/z85z/H8zyWLFnCrFmz+OMf/8iiRYv4y1/+wqOPPgqo4vP+++9n0aJF/P3vf+db3/oWl156Kel0mksvvZSxY8fy0ksvsX379vb4OIQoqv3JYxAEfPOb3+TZZ5/llVde4fnnn+fyyy9nyZIl7Ny5k8WLF/O1r32N9evX873vfY977rmHBQsWMG3aNJYtWwbAhg0buP766/ne977Ht7/9bXr37s3f/vY3Nm/evMe2HnLIIfzzn//Etm0eeOABPvjgA2688UZuuukmfvzjH7N8+fJ2/ayEiJO+ffvStWtXbrvtNgB69OjBV7/6VZ566ik+/fRTXn31VSZMmMCMGTP44IMPePvttznmmGO4/PLLs+vYtm0bL7/8MrW1tXuVpe3bt3PzzTczb948/vCHP/DOO+9w++23889//pO//e1vdO3atRBvvcNqnwEX4oANGDCAbdu2UVtbS3V1NQBPPPEETz/9NKNHj+b0008HYOTIkbz77rscddRRn7vOgw8+mNGjRzN06FD69evHEUccwdChQ3n22WcxDIMvfvGLzJw5k8rKSgAymQyJRAKAZDLJe++9R0NDA6eccgqu61JbW8u7777L5s2bGTduHKNGjeLf//3f+f3vf99On4oQxbE/edR1nQsuuCC7jnQ6zcUXX0xVVRWLFi3i+eefZ/78+bz//vsATJo0CU3TALI9KYMHD86u++233+anP/0po0aN4vzzz2fp0qWttvW8885j8ODBDB06lHQ6zTvvvAPAFVdcQVVVFSNHjmyHT0iIeNq0aROffvopP/7xj/nhD38IwIQJE7jiiiv44x//SLdu3Tj77LOZM2cOa9eu5YQTTsC2berr69m5cycAZ599NgMHDuQ3v/kN8PlZGjhwICeeeCJ9+/YFVPbffvttTjrpJI488kj+4z/+gzlz5hTg3XdM0mMaU5dccgmmafJf//VfvPHGG/zsZz9j3LhxjB07lvfee4+XXnqJF154geXLlzN69Oi9Wmf0o9fyOqiemRtuuIHvfve7TJkyZbfnZjIZhg8fTrdu3ViyZAm//vWvmTJlCkOHDqVnz5488cQTfPDBBzz33HMH9saFiKH9yWPLjIHavTh+/HhuuukmDMPgK1/5CsOHDwfUAYzPPfcc11xzDV/84hcB0PXcP9FDhw7lmWee4cMPP+Tpp5/eY1tbvu7QoUMBNRzh5ZdfZsWKFQf2YQjRAWQyGWpra5k7dy6GYdC9e/fs3772ta9hWRY//OEPGT9+PJZlMXz4cEaMGMFrr73GnDlzuP7667OdNFEO9zZLrWV/6NChvPHGG7z33ns88sgjbf12S4oUpjE1ZMgQnn32WVavXs3pp5/O3Xffza233sr3v/99rrzySi644AIuvvhiJk2axH/+538e8Ov16NGDc889l2uuuYann36a6upq/vWvf/GFL3yBYcOGcd555zFp0iTOOOMMTjzxRH7wgx9w6KGH0r17dx566CFeffVVTj31VLp06dIG716IeGnLPF5++eWsXr2acePGkUgkOOqoo7jtttu48sor+frXv47jOIwZM2a3582ZM4ePP/6YE044AcMw9rrtxxxzDN///ve58cYbmTJlCgMHDtzn9y9ER/PlL3+Z7t278+ijj7JgwYLs3j9QewDHjx/P6tWrmTBhAgDTp0+nX79+HHPMMcyaNYujjz4ay7KarfNAsjRt2jQOOeQQxo4dy4cfftg2b7JEaUEc5jsRQgjxmRYuXEi3bt0488wzueGGG3j44YfZtGnT5z5v69atPPXUU3z5y1+mZ8+eHHrooUyYMCF7kJUQYu8cSJZeffVVVq9ezbe+9S2eeeYZzj33XD744AMZWtMK6TEVQogOIJPJ8MMf/pDhw4fz9NNPc++99+7V86qqqnjzzTf52te+xrBhwxgzZgzf/e5327m1QpSeA8lSKpXioYceYvTo0UyaNIlbbrmFESNGtHOLOybpMRVCCCGEELEgPaZCCCGEECIWpDAVQgghhBCxIIWpEEIIIYSIBSlMS8D27ds544wzit0MIUQLkk0h4kdyGW9SmJaAN998k2OPPTZ727Ztpk6dut/r8zyPSZMmccopp3D22WezZcsWAB555BE5t68Q+0CyKUT8SC7jTQrTDsy2bb7//e8zadIkHnzwQWbPng2oibi/8Y1v7Pd6Fy9ejOM4vPzyy4wfP57bb78dgG9+85vMmjULmchBiM8m2RQifiSXHYMUph3YpEmTOO644xgzZgyPP/44P//5z1m3bh1PPvkkX/rSlwAIgoBzzjmH0047jdGjR2dPdfhZXnnlFU4++WQATjnllOwWXyKRYMCAASxbtqz93pQQJUCyKUT8SC47BilMO6iPPvqI2tpaLrzwQlatWsXpp5/OiSeeyNq1a0kmk9lz9Wqaxp/+9CcefPBBRo0axe9+9zsAXnzxRU477bRmi+d5AOzYsYNBgwYBMHDgQHbu3Jl93ZEjR/LPf/6zwO9WiI5DsilE/EguOw6z2A0Q+2f58uV069aN7du30717d5qamvi///s/XNelf//+zR77/vvvc+uttzJv3jy6du0KwBlnnLHHwd8HHXQQq1atAmDNmjV069Yt+7cBAwbw4osvts+bEqIESDaFiB/JZcchPaYd1NFHH81f/vIX7r//fioqKvj617/OtGnTOOKII6ipqck+7o033uCnP/0pDzzwQDZg8Nlbf6eccgqvvvoqoM7ve8opp2SfV1NTw9ChQwvzJoXogCSbQsSP5LLjkFOSdmAvvvgi1113Hf3792f69OmceuqpAHzxi1/klVdeYefOnQwcOJAjjzwSy7IA+NOf/kR5eflnrtfzPKZMmcJ7771HVVUVDz30ED179gTg+uuvZ9y4cZxwwgnt++aE6MAkm0LEj+SyY5DCtIMbP348N910EyNHjszed+edd3LUUUdx2mmntelrOY7DJZdcwhNPPIGuS2e7EJ9FsilE/Egu408+qQ7uww8/ZPjw4c3umzx5Mn/4wx/a/LWeeOIJpk6dKgETYi9INoWIH8ll/EmPqRBCCCGEiAUp44UQQgghRCxIYSqEEEIIIWJBClMhhBBC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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot intensities and phases at z=0\n", "fig, axes = plt.subplots(2, 3, figsize=(7, 4.5))\n", "\n", "extent_mm = [-physical_size/2*1e3, physical_size/2*1e3, \n", " -physical_size/2*1e3, physical_size/2*1e3]\n", "\n", "titles = ['Collimated', 'Converging', 'Diverging']\n", "intensities = [I_collimated, I_converging, I_diverging]\n", "phases = [phase_collimated, phase_converging, phase_diverging]\n", "fields = [E_collimated, E_converging, E_diverging]\n", "\n", "# Top row: Intensities\n", "for idx, (ax, I, title) in enumerate(zip(axes[0], intensities, titles)):\n", " im = ax.imshow(I, cmap='hot', extent=extent_mm)\n", " ax.set_title(f'{title}\\n$I(z=0)$')\n", " ax.set_xlabel('x (mm)')\n", " ax.set_ylabel('y (mm)')\n", " ax.text(0.02, 0.98, f'({chr(97+idx)})', transform=ax.transAxes,\n", " fontweight='bold', va='top', color='white')\n", "\n", "# Bottom row: Phases\n", "for idx, (ax, phase, title) in enumerate(zip(axes[1], phases, titles)):\n", " # Mask phase outside beam\n", " phase_masked = jnp.where(amplitude > 0.01, phase, jnp.nan)\n", " vmax = jnp.nanmax(jnp.abs(phase_masked))\n", " if vmax < 0.1:\n", " vmax = 1.0 # For flat phase\n", " im = ax.imshow(phase_masked, cmap='RdBu_r', extent=extent_mm, vmin=-vmax, vmax=vmax)\n", " ax.set_title(f'{title}\\n$\\\\phi(z=0)$')\n", " ax.set_xlabel('x (mm)')\n", " ax.set_ylabel('y (mm)')\n", " ax.text(0.02, 0.98, f'({chr(100+idx)})', transform=ax.transAxes,\n", " fontweight='bold', va='top', color='black')\n", "\n", "plt.tight_layout()\n", "plt.savefig('Figures/wavefronts_intensity_phase_z0.pdf', bbox_inches='tight')\n", "plt.savefig('Figures/wavefronts_intensity_phase_z0.png', dpi=300, bbox_inches='tight')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "propagation-header", "metadata": {}, "source": [ "## 2. Propagation: Where Phase Matters\n", "\n", "Now we propagate all three beams and observe their dramatically different evolution." ] }, { "cell_type": "code", "execution_count": 10, "id": "propagate-beams", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Propagating collimated beam...\n", "Propagating converging beam...\n", "Propagating diverging beam...\n", "Done!\n" ] } ], "source": [ "# Propagation distances\n", "z_positions = jnp.linspace(0, focal_length, 50)\n", "\n", "# Storage for propagated intensities along central slice\n", "def propagate_and_slice(E0, z_vals):\n", " \"\"\"Propagate field and extract central x-slice at each z.\"\"\"\n", " slices = []\n", " center_idx = grid_size // 2\n", " for z in z_vals:\n", " if z == 0:\n", " E_z = E0\n", " else:\n", " # Create OpticalWavefront and propagate\n", " wavefront = make_optical_wavefront(E0, wavelength, dx, z_position=0.0)\n", " propagated = angular_spectrum_prop(wavefront, float(z))\n", " E_z = propagated.field\n", " I_z = jnp.abs(E_z)**2\n", " slices.append(I_z[center_idx, :]) # Central horizontal slice\n", " return jnp.stack(slices)\n", "\n", "# Propagate all three beams\n", "print(\"Propagating collimated beam...\")\n", "xz_collimated = propagate_and_slice(E_collimated, z_positions)\n", "print(\"Propagating converging beam...\")\n", "xz_converging = propagate_and_slice(E_converging, z_positions)\n", "print(\"Propagating diverging beam...\")\n", "xz_diverging = propagate_and_slice(E_diverging, z_positions)\n", "print(\"Done!\")" ] }, { "cell_type": "code", "execution_count": 11, "id": "plot-propagation", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAD8CAYAAAB+SswFAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAARPtJREFUeJztnXmcFNW593/VPRvbDDgoi7IjaCKu90YwJpF4Y4xXSVDjRkSj5BKXoCFeX0nidQkRIzF6vQgKGjEQfUMUI6jXJd5XgoiCxCXm4hIRAVETFmeAgWZmut4/umvmzJlzqk5tvUz9vp9Pf6aqzznPebqmnjq/fvrUKcu2bRuEEEIIIYQkgFSxHSCEEEIIIaRQUPwSQgghhJDEQPFLCCGEEEISA8UvIYQQQghJDBS/hBBCCCEkMVD8EkIIIYSQxEDxSwghhBBCEgPFLyGEEEIISQwUv4QQQgghJDFQ/JYpK1euxLhx49CjRw8MHToUs2fPhu5hfQsXLkRFRQUA4KSTTsKUKVOwceNGWJaFF198sWA+z5w5E0OHDi1Yf4QUCj/xWEiceCeEAC+88AIsy4JlWaioqMCoUaPw8MMPdxgjo6YYYy3xhuK3DPnwww9xyimn4KijjsJ7772HWbNm4dprr8Wjjz5qbGPIkCHYu3cvTjjhhMB+OBeSLVu2BLZBSLkTRTzGxbPPPot58+YV2w1CSopnnnkG27dvx7nnnosLL7wQ48aNw+7du2PpK4qxlkQPxW8Z8vDDD6OlpQW33347Bg4ciPPPPx9r167FUUcdhalTp6K+vh59+/bFZZddhpaWFqWNDz/8EN26dcNLL72EG2+8EQceeCBOOOEE1NXV4aqrrsKRRx6JgQMHYs6cOQCA//zP/0S/fv1QX1+Pb37zm9ixYwfOPvtsAMCJJ56ITCaDyZMno66uDoceeiieeeYZAMDzzz+P4cOHo1+/fnjuuecKc4AIKSB+43HhwoVIpVI4//zz0aNHD3zpS1/Crl27cOaZZ+Jf/uVfAAAPPPAAqqursXPnTvzqV79C//790a9fP9x6660AgBtvvBGHHHIIzjjjDMyaNQuvv/46jjjiCBx44IGYOHFiWxbrlFNOwWWXXdaWfTrrrLPQp08fjBgxAq+//joAYPbs2aivr8e4cePw+c9/npli0uWpqqpCXV0dLr/8crS2tuKRRx5Bz549sW3bNlRWVmLx4sUAgK985Ss455xzsGPHDkyYMAE9e/bE0UcfjXXr1gEAhg4digkTJmDIkCHYsmWLMpbksbZ///445ZRT0L17d0ycOBEtLS3YsWMHvvGNb6Curg6TJk1iprgAUPyWIR9++CHq6+vRo0ePtvf+6Z/+Cc899xzuv/9+PPLII/jd736H+fPnY+HChUY2GxsbMX/+fEycOBFz587F4sWLcdppp+FXv/oVWltbsWLFCtx555144oknsGzZMvzxj3/EQw89BCAncO+77z4sW7YML7/8Mi644AJMmjQJTU1NmDRpEsaOHYsXXngB27dvj+NwEFJUgsSjbdv49re/jaeffhovvvginnvuOUyePBkrVqzAzp078dRTT+H000/HRx99hB/96EeYM2cOFi1ahBkzZmDt2rUAgK1bt2L69On40Y9+hO9///vo168f/vSnP+HTTz/V+jp8+HC89tpryGQy+PWvf43169fj2muvxY033ohbbrkFb7/9dqzHipBSYsCAAejduzdmzpwJAOjbty/+9V//FY8//jg+++wzrFq1ChdeeCFmzZqF9evX44033sBxxx2HyZMnt9nYtm0bVq5ciYaGBqNY2r59O2666SYsWLAAf/jDH/Dmm2/itttuw2uvvYY//elP6N27dyE+euKJZ5ILiZVBgwZh27ZtaGhoQF1dHQBgyZIlWL58OY444giMHz8eAHDYYYfhL3/5C4455hhPm4cccgiOOOIIjBw5EgMHDsSRRx6JkSNH4umnn0Y6ncYXv/hFzJ49Gz179gQA7N+/H1VVVQCA6upqvPXWW9izZw++9KUvoaWlBQ0NDfjLX/6CTz/9FOeeey4OP/xwfO1rX8Njjz0W01EhpDgEicdUKoUzzzyzzUZTUxPOOecc1NbWYtmyZXjuueewcOFC/PWvfwUATJ06FZZlAUBbRmjo0KFttt944w384he/wOGHH46JEydizZo1Sl8nTJiAoUOHYuTIkWhqasKbb74JALjoootQW1uLww47LIYjREhp8sknn+Czzz7DLbfcguuvvx4AcOGFF+Kiiy7CE088gT59+uDUU0/F3LlzsWnTJhx//PHIZDLYvXs3du7cCQA49dRTMXjwYPzud78D4B1LgwcPxrhx4zBgwAAAudh/4403cMIJJ+Coo47CxRdfjLlz5xbg0ycbZn7LkPPPPx8VFRX43ve+h1deeQW//OUvce6552Ls2LF466238MILL+D555/H22+/jSOOOMLIpjOwyttALsN0zTXX4Ic//CGuuOKKTm3379+PUaNGoU+fPlixYgV+85vf4IorrsDIkSNx4IEHYsmSJVi/fj2effbZcB+ckBIkSDzKMQbkfoo977zzcOONNyKdTuO0007DqFGjAORuWn322Wdx5ZVX4otf/CIAIJVqv3yPHDkSTz75JN59910sX75c66vc78iRIwHkpm6sXLkS77zzTriDQUgZsH//fjQ0NGDevHlIp9Oor69vKzv99NNRWVmJ66+/Hueddx4qKysxatQojB49Gi+99BLmzp2L6dOntyWCnDg0jSVV7I8cORKvvPIK3nrrLfz2t7+N+uMSBRS/ZciwYcPw9NNPY+PGjRg/fjzuuusu/OxnP8N1112HSy65BGeeeSbOOeccTJ06Fd/97ndD99e3b1+cccYZuPLKK7F8+XLU1dXhf//3f3H00Ufj0EMPxYQJEzB16lR89atfxbhx4/DjH/8YI0aMQH19PR588EGsWrUKX/7yl9GrV68IPj0hpUWU8Th58mRs3LgR5557LqqqqnDMMcdg5syZuOSSS/DNb34Tzc3NGDNmTKd2c+fOxd/+9jccf/zxSKfTxr4fd9xxuO6663DttdfiiiuuwODBg31/fkLKja9//euor6/HQw89hEWLFrX9ignkfsk877zzsHHjRlx44YUAgJ/85CcYOHAgjjvuONx555049thjUVlZ2cFmmFiaMWMGhg8fjrFjx+Ldd9+N5kMSVyy7FNbjIYQQEphHHnkEffr0wcknn4xrrrkGixcvxieffOLZ7h//+Acef/xxfP3rX8eBBx6IESNG4MILL2y7sY4QYkaYWFq1ahU2btyICy64AE8++STOOOMMrF+/ntOQYoSZX0IIKXP279+P66+/HqNGjcLy5ctx7733GrWrra3FunXrcPrpp+PQQw/FmDFj8MMf/jBmbwnpeoSJpe7du+PBBx/EEUccgalTp+Lmm2/G6NGjY/Y42TDzSwghhBBCEgMzv4QQQgghJDFQ/BJCCCGEkMRA8UsIIYQQQhJDrA+5WL58ORYvXoxu3bph3LhxWLduHXr16oXbb789zm4JIS4wLgkpTRibhBSGWMXvqlWrMGDAAGQyGTz//PNYsmQJrrnmGmzZsgWHHHJI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S41sr127FnfeeScAYN68eW1Lb1x55ZXYvXs3GhoaMHXqVDz11FNobGzEQQcdhNtuuy2U7ZtvvhkbNmxAKpXCr3/960B+u9m/++67sXbtWlRVVeGuu+7Ctdde68t3ld17770X69atQ69evXD77bd3OvZhfA7rr5f9OI93FOeJg+o8j+Icj4tyjUs3+1GcK+UYlzr7UcUm47KwlGtsMi7N7DMu44vLksr8btiwAX/+8587vLd371689957uOeee/DXv/4V77zzDmpqarBgwQI899xzxrZ1z0mfM2cOFi5ciNGjR+Okk07C66+/jm7dumHMmDGhba9duxa9e/fG5z//ebz//vuB/Haz/49//AMLFy7E+PHjsXLlSt++q+w+//zzmD9/PizLwubNmzsc++bm5lA+h/XXy36cxzuK88RBPs+jOsfjolzj0s1+FOdKOcalzn5Uscm4LCzlGpuMSzP7jMv44rKkxO/o0aNx9tlnd3hvx44dOPjggwEA/fv3xyeffIJhw4YBgK87/cTnpG/durVD2eOPP45vfOMbqKqqwuzZszF37lz8z//8D1paWkLZ/slPfoI777wTmzdvxpYtWwL57Wb/xhtvxJo1a7BixQocf/zxvn1X2e3WrRsAYOjQodiwYUOHY79z585QPof118t+3Mc77HniIJ/nUZ3jcVGucelmP4pzpRzjUmc/qthkXBaWco1NxqWZfcZlfHFZ9GkPjzzyCB555BEAwPjx4zF69OgO5QcccEDbAf3444/Rv39/PP300wBy3wBMba9YsUL7nPSnnnoK9957L5qamvD3v/8dlmUhnU4jk8mgokJ9iLxsZ7NZbNq0CWPHjkWfPn3Qt29fbNy40chvU98feOABtLS04O6770YmkzH23UH17Ph9+3JPhd+4cSPOOOOMDse+T58+nn672Q7rr5v9sMfby3cg2HliQphzPC7KNS5N7Ic5V8o9LnX2o4pNxmX8lGtsMi7dYVyaEVVcFl38nn322R1U/QsvvNC2ffPNN2PatGkYNWoUrr76aowZMwajR49GJpPBD37wA5x66qnGttesWYMrrrii7Tnp8+fPx5e//GX06NEDBxxwAACge/fuWL16NR599FEceuih6NGjRyjbW7ZswZQpU9CjRw987nOfM/bb1P6cOXNw+OGHY8WKFZg2bZqx7w6XX355m91jjz0Wb7/9Nk4++WRMmzYNNTU1GDJkSIdjX1lZ6WnTzXZYf93sv/vuu6GOt5fvQc8TL8Ke43FRrnFpaj/ouVLucamzH1VsMi7jp1xjk3Hp3z7jsiNRxiXX+SWEEEIIIYmhpOb8EkIIIYQQEicUv4QQQgghJDFQ/BJCCCGEkMRA8UsIIYQQQhIDxS8hhBBCCEkMFL+EEEIIISQxUPwSQgghhJDEQPGbcNasWYOXXnrJV5tdu3bhvvvui8kjQgjA2CSkFGFcdg2K/oQ3UhiWLFmCNWvWYNmyZVi1ahUOPPBAAMBjjz2GW265Bd/5znfQv39/rF+/HqNHj8b777+PpUuXYsKECRg1ahQ2bNiAYcOGoaGhAQ888AA2bdqETCZTMs+4J6RcYWwSUnowLrs2zPwmhHPOOQfjx4/H9OnT24I4m82iqakJlmWhubkZs2fPxgEHHICbb74ZY8aMwccff4wePXrgjjvuQEVFBe644w44DwQcPHgw3n777WJ+JEK6BIxNQkoPxmXXhuI3IWzatAlPPPEEpk6d2vbe9u3b0bNnTwBAr169YFkWqqur0bNnT1RU5H4UqK2tBQD06dMHlmW1vX/wwQdjw4YNBf4UhHQ9GJuElB6My64NxW9CuPrqq9HS0oJ///d/x4cffggAqK+vx+7duwPZ++ijjzB8+PAoXSQkkTA2CSk9GJddG8t2cvIkkcyYMQO33HILLMvy1e7666/HT3/6U85fIiQmGJuElB6My64BM78J51vf+hZWr17tq82uXbswZMgQBjEhMcLYJKT0YFx2DZj5JYQQQgghiYGZX0IIIYQQkhgofgkhhBBCSGKg+CWEEEIIIYmB4pcQQgghhCQGil9CCCGEEJIYKH4JIYQQQkhioPglhBBCCCGJgeKXEEIIIYQkBopfQgghhBCSGP4/vk1B3QprYX4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot x-z propagation\n", "fig, axes = plt.subplots(1, 3, figsize=(7, 2.5))\n", "\n", "xz_data = [xz_collimated, xz_converging, xz_diverging]\n", "titles = ['Collimated', 'Converging', 'Diverging']\n", "\n", "extent_xz = [x[0]*1e3, x[-1]*1e3, 0, z_positions[-1]*1e3]\n", "\n", "for idx, (ax, data, title) in enumerate(zip(axes, xz_data, titles)):\n", " # Normalize each for visualization\n", " data_norm = data / jnp.max(data)\n", " im = ax.imshow(data_norm.T, cmap='hot', extent=extent_xz, \n", " aspect='auto', origin='lower')\n", " ax.set_xlabel('z (mm)')\n", " ax.set_ylabel('x (mm)')\n", " ax.set_title(title)\n", " ax.text(0.02, 0.98, f'({chr(103+idx)})', transform=ax.transAxes,\n", " fontweight='bold', va='top', color='white')\n", "\n", "plt.tight_layout()\n", "plt.savefig('Figures/wavefronts_propagation_xz.pdf', bbox_inches='tight')\n", "plt.savefig('Figures/wavefronts_propagation_xz.png', dpi=300, bbox_inches='tight')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "why-complex-header", "metadata": {}, "source": [ "## 3. Why Complex Fields?\n", "\n", "The key insight: **intensity alone cannot predict propagation**. The phase contains all the information about whether a beam will focus, diverge, or propagate as a collimated beam.\n", "\n", "This is why Janssen stores the full complex field $E(x,y) = A(x,y) e^{i\\phi(x,y)}$." ] }, { "cell_type": "code", "execution_count": 12, "id": "why-complex-plot", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_1967209/817667154.py:27: UserWarning: Glyph 8756 (\\N{THEREFORE}) missing from font(s) TeX Gyre Heros.\n", " plt.tight_layout()\n", "/tmp/ipykernel_1967209/817667154.py:28: UserWarning: Glyph 8756 (\\N{THEREFORE}) missing from font(s) TeX Gyre Heros.\n", " plt.savefig('Figures/wavefronts_why_complex.pdf', dpi=300, bbox_inches='tight')\n", "/tmp/ipykernel_1967209/817667154.py:28: UserWarning: Glyph 8756 (\\N{THEREFORE}) missing from font(s) TeX Gyre Heros.\n", " plt.savefig('Figures/wavefronts_why_complex.pdf', dpi=300, bbox_inches='tight')\n", "/tmp/ipykernel_1967209/817667154.py:29: UserWarning: Glyph 8756 (\\N{THEREFORE}) missing from font(s) TeX Gyre Heros.\n", " plt.savefig('Figures/wavefronts_why_complex.png', dpi=300, bbox_inches='tight')\n", "/home/qz7/janssen/.venv/lib/python3.12/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 8756 (\\N{THEREFORE}) missing from font(s) TeX Gyre Heros.\n", " fig.canvas.print_figure(bytes_io, **kw)\n" ] }, { "data": { "image/png": "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8CskIvj7+zNt2jQAatasyYkTJ545/b179zh58mSOQeZFGBgY5Ph/eno6ffv21UZZ9+/fJzk5WVuvRIkSz5R/WlpaljKSk5MxNDQkPDycHj160LdvX5o2bUpYWNi/akd6ejoAZmZmOS4/cuRIrpRna2ub4+sPl/u4bffrr78+cZtmun79uva3iJA/f/4n9seT2mZkZKT9rdPpMDY21v4GqFq1KseOHWPdunVMnz6dr776ih07djz/hlFemJqCeIXOnTtHamoqZcqUATJGsw9/ksHJySnbiPhhR44cwdnZGUPD3Hnf9PLyYtasWaSkpHDt2jVWrVoFQMOGDVmzZg1XrlwhOTmZrl27snTp0qfml5aWpgVDAG9vb5YuXcq9e/e4desWNWrUIDY2lj179uDp6cmIESMoWrQo/v7+Oc6H5qRhw4YsWbKEu3fvkpiYyKJFi546J/5vynu0Tc9Sv5y23bNu03379nHmzBnS0tL46aefaNq06RPT/pu2jRkzhi+++IJevXrx888/c+DAgRc6M1BenArAr1Dm/G/mCKRWrVpZPslw+vRpFi9e/MT0ERER2YL2xo0bX6g+gwYNonjx4jg5OdGqVSs6d+4MgJubGyNHjqRu3bqUKVMGW1tbBgwY8NT8vLy8aNiwofZ/27ZtadiwIa6urri6ujJ06FBcXFzw8fEhJCQEe3t73n//fQYMGMAXX3zx2KmMh7Vr1w5vb28qV65MlSpVaNasGW3btn1imn9T3qNteprHbbtn3abdunWjd+/elC1bFhHh008/fWLaf9O2AQMGcODAAezs7Khduzbff//9C18cVl6MTkRE35VQnszLyws/P79cW09RlNeDGgEriqLoiRoBK4qi6IkaASuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwkmcdPnxYL8+JU5Tcou4FoeRJwcHBuLu7AxAUFET16tX1XCNFeX5qBKzkScHBwTn+rSh5iQrAiqIoeqICsKIoip6oAKwoiqInKgAriqLoiQrAiqIoeqICsKIoip6oAKwoiqInKgAriqLoiQrASp6TnJxMQkKC9n9CQgLJycl6rJGivBj1VWQlz2nUqBF79uzJ8pq3tze7d+/WU40U5cWoAKzkOVZWVly/fj3La5aW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v3z58vG///2PRo0aYWdnh7OzMwUKFCApKemxdShatCgjRozA09MTBwcHatSoQYEHz9nLk/R7DfDFHDlyRJo1ayYNGzYUDw8PmTlzpty5c0c6deok9evXF09PTwkMDBSR7J+CaNiwoVy6dEnGjx8vK1asEBGRQYMGyZ49e0REpF27dnL8+HFZsmSJeHp6ire3t4wdO1YqVaokt27dkvbt28uwYcMkMTFRfHx8pGbNmtK6dWs5dOiQiIiMGzdOatSoIc2aNZM2bdr85z8FoS+nTp2SpUuXiojIjRs3xNvb+6lp/P39ZfPmzVp6Hx+fl1pHRWTy5Mly7949ERHp2bOnhIWFPXH91NRUmThxoqSnp0t6ero0atQoT38SQ92QXXkjJSUlMWTIEBITE7l8+TJjxoyh8VMeAHrt2jWGDRtGamoq165dY9q0ac80clZe3MKFC9m6dSv379/H0dGRH57hyRrffvstR44cISEhgcaNGzN8+PBXUNOXQwVgRVEUPclzF+EURVHeFCoAK4qi6IkKwIqiKHqiArDyWoiPj6dRo0avpKz9+/fj4+ND//79uXTp0isp802l+u3f+U8F4Fe5syjPJygoKMevor4MwcHBzJs3j/79+7N169ZXUuabSvXbv6TfT8G9Wtu3b5cRI0Y88/qpqakycOBAqVevnjRv3lwuX778Emv335SUlCSfffaZlC5dWqytrWXmzJmvpNyoqCgZMGCAXLx48ZWU96ZR/ZY78tw34V7E/fv3GT9+PCtXruTOnTs4ODgwePDgp6bbsmULKSkp7N+/n4ULFzJlyhSmTp36Cmr83zFo0CDatGlDREQEH330EQMHDqRt27baN95WrVpFeHg4bdq0oUaNGuzatYvbt2/Tvn375yqnZs2aODk54ejoSKtWrdi5cyfTp0/H1NT0JbTqzaf6LZfo+x3gVejdu7esWbNG2rRpI3/++aeUKVNGzp49+9R0I0eOlPnz54uIyOnTp6VWrVovu6r/KSdPnpT27duLiIirq6ukpaVJjx495O+//xYRkaCgILl48aKkpKRIy5YtZf78+do3Fp/H9evXxdTUVLsncc+ePaVbt27So0cP2bp1a66157/iZfTb+PHjJTo6Ostr/4V+e+NHwKdOnSIhIYFOnTrh6+uLt7c3np6enD9/nlKlSrF7926++uqrLGl27dpFvnz5uH79una7O3t7e27cuKGPJryxTpw4gYWFBfHx8VhZWZGUlERwcLD27bPbt29TvXp1AGbNmkXbtm05evRojnnt3LmTSZMmZXkt82Y/AQEB9O3bV7uF6ZIlS15Si/4bcrPfMo+/mJgYtm3bRuHChdmxYwfw3+i3Nz4AP21nadSo0WMvzFlaWhIdHQ1k3AbTwsLildX7v6B69eoMHjyYefPmYWZmRrt27Rg9erR2eikipKWlkS9fPs6dO4erqysrVqygW7du2fJq2rQpTZs2zbEcf39/vLy8XmZT/lNys98yjz9fX1/69OlD6dKltWX/hX574z8FUb16df7888/H7iy7d+/Gy8sry09aWhoA9evX125LeODAAerXr6+3dryJ7OzsWLhwIUuWLCE1NZXPP/+cXr16actr167N+vXrWbt2LVevXmXZsmWEhoYyefLk5yrH399f3Ro0F6l+yz3/iXtB7N69m6FDh2JnZ8fYsWOf+WbbaWlpDB48mLCwMAoXLqzdVk/JXV27dsXX15cKFSrouyrKc1D99u/9JwIwqJ3ldVa9enUOHz6MgcEbf0L2RlH99u/9ZwKw2lkURXnd/GcCsKIoyutGDQcVRVH0RAVgRVEUPflPBWBfX19+++03li9fzowZM4CMBwmOGTOGW7du4eHhwdq1a18o75s3b7J06dLcrO5/2tq1a6lRowZ37tzRd1WU11RMTAwtWrTQdzX+lTf+ixg56d69u/Z3QEAAy5Ytw8/PDzc3Nzp16vRCeWYG4J49e+ZWNf/TNm3axIwZMyhYsKC+q6IoL80bMQIOCAhgw4YNOS6bNWsWbm5uNG3aVHtM/MKFC/nmm28YP348Fy5cYNy4cYwfP57NmzezZs0avLy8GD16NB9//DFRUVG0atUKb29vvL29CQ8PJz09nQ8//JD69evTrFkz/v77b8aNG0dAQAAzZ87kjz/+oHnz5nh5eWV7FLfyj8f128GDB9m2bRtDhgzhzp07+Pr6Urt2bWrWrMnChQsB2Lp1K56enjRo0ED7CvLDHzH08vIiLi4Of39/rf8GDhxIeno60dHReHl5UbNmTTp27MidO3eIj4+nc+fONGrUiLfeeou4uLhXsg3ykicdZzt37sTNzQ0PDw/Gjh2LiDBu3Djmzp1LcnIyXl5e2nYfPnw4jRo1on79+kRFRZGUlESvXr1o1KgRDRo0YOXKlQDUqlWL4cOHU7t2bTp27Eh6ejrHjx+nbt26eHt74+vrC2R8827YsGE0adKEJk2asHfv3le1Sf49/dyCInelpqZKx44d5fz581lej4uLk5IlS8rdu3clJSVFKleuLCtWrJAFCxbI5MmTReSfx9Xv2bNHBg0aJCIZj65ftGiRiIjs3LlTdu/eLSIi33zzjXz77beyceNG6dKli4iIhIaGyhdffCHR0dHSvHlzERHx8fGRnTt3Snp6ukyePFnS09Nf/kbIgx7XbyIZN1A6ePCgBAcHi4eHh6Slpcndu3elZMmSEh8fLyVLlpTr169Lenq69O7dW27fvq31pUhGH166dElGjBghv/zyi4iIzJw5UxISEqRz586yZcsW7bXRo0fL5s2bpWfPnpKeni6bN2+WkJCQV7MR8pDH9VdaWpqUKVNGrly5ImlpaeLj4yPbt2+X+/fvS8OGDeXdd9+VxYsXi0hGv8yYMUNERFasWCHdunWT6OhomTt3roiIHDp0SFq2bCkiIg4ODrJ582YREWnatKkEBQVJmzZt5PfffxcRkSlTpkjz5s0lISFBypUrJ0lJSRIREaEtzwvy3BTE+PHjc3yHu3r1KmPHjtVGSJAxR1SrVi0KFCgA8MzfgANo2LAhkHETnu+//54NGzYQERFBo0aNiIiI0PJydXXF1dWVmJiYLHWcPHky3333HW3atHmBVr55nqffHnby5EkaNmyIgYEBBQoUoGrVqoSGhlK8eHHt3hw5pU1JSQHgww8/ZOLEiaxcuRIvLy9MTEwIDw/nm2++4dtvvyUlJYXKlSvTuHFj/P39adq0Kc7OzowZMybX2p4XPU9/Xb16lfj4eHx8fICMm/FcvHgRIyMjPvjgAz799FPmzJmjrZ9575XGjRszZcoULC0tOX36NEOGDCExMZH09HQA8ufPT/PmzQEoUaIEycnJnDp1isaNGwPg7e3Nrl27KFy4MOPGjaN9+/YULlyYTz755KVsk5dC3+8AuSE9PV369OmTbdRy5coVKVWqlNy9e1dSU1OfawR86dIlERHp0KGD7N+/X0REBg8eLF9//bWsW7dOunbtKiIikZGRMnjwYImOjpZmzZqJiMi4cePk0qVLkpycLA0aNJCIiIiXvxHyoMf1m8g/I+CgoCCpWbOmNgK2s7OTa9euia2trdy4cUPS09OlV69eEhcXJ3Z2dpKSkiI3b94UExMTuXTpkkyfPl1CQ0O1WyZu2bJF2rVrJ+Hh4SIiEhgYKPv27ZNt27bJ6tWrRURk7ty5MnLkyFe6LfKCx/VXamqqVK9eXRITE0VEZPXq1XL27Fm5ffu21K9fXz777DOZOnWqiGQdAS9fvly6dOkiM2bMkAkTJmhpM4+jh89oMveHdu3aZRsBx8TEaOkjIyOlZs2aL28j5LI8NwLOyaFDh6hevbp2h7NMNjY2jBkzhrp162JhYYGrq+tz592xY0dGjhyJiYkJderUYdmyZRw4cIAtW7ZQt25dkpOTmTFjBlZWVly8eJFFixbh5ORE7969MTY2xsnJiTJlyuRWU98oj+u3h1WvXp0WLVpQp04d0tLSmDRpElZWVsyaNYtmzZqRnp5Oq1atKFasGP3796dZs2ZYWlri4eEBQPny5Rk+fDiGhoYUKlSIWrVq4eTkRN++fTEwMKBYsWLMmTOHW7duMWTIEH799VeMjIwYN27cq9oMecbj+itfvnx89dVXeHp6UrRoUSpVqkSnTp0YNGgQn376Ka1bt6Zx48a0bNkSyLjJjqenJ/ny5WPhwoUkJiYydOhQ/vzzTzw8PLh06ZJ2veZR33zzDe+++y4//vgjbm5uANja2nLq1ClatWqFoaEhH3zwwUvdDrlJfRNOUZRXxsvLi99++43ixYvruyqvhTfiUxCKoih5kRoBK4qi6IkaASuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJCsCKoih6ogKwoiiKnqgArCiKoicqACuKouiJob4r8MLSUyH9vr5roSiKvhkYg0HeDGV5q9aSDid+gOhFcDNU37VRFOV1UaQyOPaGCh+DLu+c2OtERPRdiWd2eAic/Bkc3oJidcHQVN81UhRF31LvwuUDEPsHlB8MNX7Sd42eWd4JwPcuwe924PYZVHxP37VRFOV1EzEbQr6FDhehQHF91+aZ5J2x+qWdgEDZrvquiaIor6OyXQGBSzv0XZNnlncCcHJ8xpSDcZHnSubk1BArK7dsr8fEnMPEpDwtWrzzwlXatOlPvLzefq40CQm3MDYuT3Jy8guX+zpbs2YLTZr0yLX8du7cj7NzIz79dCIjR06mXr3OT03z4YdfMHFizqehI0Z8zbhxU7O9npBwCwMDR3S60tl+tm3z+7fNyJGIYGXlRkzMuWzLIiJOodOV5vTpGL3lHRp6gtKl675Q+c+iS5fB9Ow5DIBOnd5j4cLVz5U+s8+0NhoXyYgRyfG5W9GXKO9chBPhed8vrl6NJzr6HPny5ePWrdsULlxIWzZq1LfodDpq1XJ74SoFB4fh5lbxudKEhETg4lIWIyOjFy73dXbo0JF/tU0f9f7745g6dQxt2zbFwODZ+v/QoSNMnjwyx2X79wcwduyH2V4PDDyGhYU5164dQafT/as6P6uzZy+QlpaGg0PJbMsqViyHSIxe836R/ft5rFr1c5ayPv98yHOlDww8ho2N1SNtNHgQK/KGvDMCfgEBAUepVKk8jo6liI7+ZyRw6FAwoaGRODqWolatakRFxVK0qDuZ0+EpKSmYmlYgPv4GKSkpjBw5GTu7WhQvXoPBgz8nNTWVYcO+xNd3OjNmLOCrr2ZkK3vRojVUqNAIc/PKtG3bn4sXL7N+/Xa8vLpy9OhxGjXqBsDevYfw9u5K4cKu1K7dnvDwkwBcvHiZsmUb8OWX07Gxqc7ly1c5fTqGNm3exdKyKhUrNmH37r9zbHdycjIjR06mXDkvLCyqMGbMFK1ta9dupU6djhQqVImmTXty4UIckHEA1KrVjtGjv6VoUXdcXZtx4sRpevT4iCJFKuPl9TapqakkJNzC1LQCS5f+TuXKzbG0rMqkSTO1sv39Q7QAHBAQQuPG3Slc2JWaNdtx9GgEAL//vo3y5b1JT08HYPDgz+nf/zMevhyRnp6OmZkLUVGxdOgwiLt371G+vDdBQaFPzPvevSRCQyPx8KhCamoqY8ZMwdGxHvb2dVi9ejNBQWE5vkH4+4fg4VHlhYLvlCmz+eCDcfTsOQxr62pUqNCIyMgorR0TJvxIxYpNsLCowsCBo0lJSSEkJJzSpeuRkHCbsmUbZMvz669/ZsiQ8QDUr+/Dli17tGUDBoxi2rRfANiyZQ/VqrXS+jMsLPK58m7Vqg8//DAPb++uFCpUiWbNepGUlMT06fPp02c4GzbspF+/EVpZ9ep1plChSjRu3J3Y2PNaX9Su3R5f3x9wdKyHtXU11q7dCsDt23fo3/8zihWrgYNDXXx9fwAgNTVVO8aKFKlMTMx5qlVrzd69hzAzc8lyLJYr58VffwXm2Ge1arm9sjfMl0LyiohpIisLikjMM/98/vlQ6d+/qzRv3kB+/32OiMRIenq0eHpWl5UrZ4qBgYFcvRosK1b8KK1aeWvpQkK2iIODnYjEyLffjpIGDWpKVNQ+OXFil5iaFpDDhzeJSIyULl1Sjh3blq3cQ4d+F2trSwkI2CBXrgRJzZpVZerUsSISI336dJYff/QVkRjx8/tNihe3kT/++FUuXgyQ7t3bSf36NUUkRjZunCc6nU4mTx4pN24cldjYA2JpWUTmzp0s164dkXHjhoiVlYWkpkZlK79t2ybStm0TiYraJ4cPbxIjIyMJCNggy5bNEEfHUrJ//2qJiflLGjeuK716dRSRGJk7d7IYGhrKggXfyYUL/lKxYjkpXtxGNm2aL6dP7xVT0wJy4MBa8fP7TfLnzy9Dh/aRuLhA2bRpvgASGblbUlJOS4ECJhIXFyiBgRulSJHCsn79XLl8+bD069dF3NwqikiMpKScFgcHO9m6daHMnj1JvL095f79k9nasX37YvH0rC4iMXLz5jExNjaSpKTIJ+Z94MBaqVChrIjESN++PtK8eQM5c2a/hIfvFAsLcyldumSO+0qbNk1k3Lghz7V/Zf506dJaSpQoJnv2rJBLlwKkenVX+eKLoSISI4MGdZdmzerLyZN75PDhTWJrW1Tmz58iIjHi6ztMPvmkf455duzYQhYs+E5SUk6LqWkBuXIlSFvm5lZR9uxZIWfP/i0FC5rJjh1LJD4+RDp0aC4fftj7mfNOT4+WokWtpX79mhIZuVvCwnaIiYmx7N69XERixMurtmzcOE9EYmTDhl+kWDFr2bNnhZw7d1BatfKW9u2biUiM/O9/E8TQ0FDmzftW4uNDZODAbtKgQcZ+/P77PaVLl9Zy/vwh+euvNQLI1avBcuzYNu0Y8/P7TapXdxWRGLl9O1wASUgIFZEYmT17krRt2+SxfTZx4vCsr68smBEr8oi8MwXxAvz9j+Dj05r8+Q21EfDq1ZsxMzPFxsYSR8dSWFtbEhh4DA+PKlq6w4dDcXevDEBMzHmMjIxISrqPi4sTMTF/UaRIYa5ejefq1eu4uDhlKzc29gIFCpiQmHgXCwtzduxYgqFhxqYOCDjKe+9lzJGOHj2F778fR+vWjQD44INedOyY8QmPoKBQWrduxKhRHwAwbtw03nqrEQMGZIycR44cxMSJP3Ht2nWKFbPRyt6/PwB//xBiYv7CxMQEgIULv8PcvBCjR0/ht99+xNPTHYC+fX348ccFWnn9+vnQp48PAMWKWfPeez14663GiAgFCphQvLgNGzbswM2tItOnj0en09G6dSNKly7J6dOxJCbepWhRK4oVs+Hddz9j6NA+tGvXDIBPPulPjRptADA0NOTDD3szfPjXAOzbtyrHKZnDh0OpUSOjX44cCadSpfIYGxvj6zv9sXn7+2dMgYSHn2T9+h1ER+/H3LwwAF5etTEyyp+tHBHB3z+ETZv+zDZ3vH//aurV88iW5mFBQWFMmzYWLy9PAFxdy2NjY8Xx46dZt247Z87so2BBMwBat/5ndBwQcJR33umYY57BwWGMH/8Rx4+fxsbGEhsbKyBjhB8efopq1SoRGXkGnU5HUtJ9zMwKsHjx99pZxZPyDgoKxdd3GBcuxHHt2nWCg//Azi7jUwNFi1pjY2NFWloahw+H4uFRBRFh7NipTJ48UmvjBx/0YvjwSVr73323C+++m3E9pHbtasTH3wQyjh8LC3NSUlKoW7cGly4FYGlZhD/+2KUdYwEBR6lZsyoABQuaYWlZhIsXL5M/f34mTfqZrVsXZmtDZp8NHdrniX3zuntjpyDS09MJCDhKrVpuD6YgznP//n3Gjp3K1KljspwqBwYe0w70jP+PajvHmDGDcXJyoF69zpQv783evf7kz5+fwMBjVK/uqgXWh7Vr15SBA7vRr99IihZ15/vv52FmZsrt23eIioqlalUXbtxI4PDhUDp3bqWlS0i4TZkypYCMnbpjx+bask2bdrF48TrtwlDhwhllW1tbZil79+6/6dy5lRZ8Abp1a0di4l0MDHRa8P2nPHutvPbtm2nbLjj4n/9jY8+Tnp6Oo2MpgoPD6d69rXbap9PpSE5Owd6+hLZNk5OT2b59H1999aNWX1fXZpQoUUwru25dd8LDT/L99+OwtCySYx8ePnyMGjUqa/Vzd6/81Lwz6+Dnd4jmzRtowRfg7t17OU4/xMae58qVa1y9GoxITJafpwXfmzcTiI29QJs2TbTXgoLC8PCowrZtfrRu7a0F34e3uYg8eOOvmi3P+PgbxMVdxcXFKdu+efRoBKVLl8TcvDAeHlWZNGk4o0dPwcqqGiNHTqZAAZOn5n3lSjwuLk4EBYVSq5abFnyvXbtOfPwNXFyciIw8g4WFOcWLFyUm5jxhYZH06zdS2+ZvvdVP2+ZBQaF07NgiW/sBpk0bh06nw9W1OdWrt+b48dMYGBho/Qlkq6u9fQkuXrzCzJmLaNKkLpUqlc+xz65ejc8ycMqL3tgAfOpUNKmpaVSsWE6bA/7pp0U0aFCTqlUragdqWloawcH/7AwpKSls3rwHd3dXzp+/xNWr8cyaNYmrV4MZNqwfo0Z9C2TMe2W+az8sMfEuBw4EMW7cEKKi9rFjxxImT57F+fOXCAoKxdXVGRMTE6Kjz1G4cMEsAXzVqj9o1qw+wIODoxqQMad79uwFLl0K0ALDrVthxMcfIV++fFnKj4k5j7W1hfZ/WFgky5dvIDr6fLZAl1lecnIyoaEntAM9KioWExNjSpa0Bf55g9LpdAQHh2XJ59ChYHQ6HeXLOz7YptWIjb2AkVF+UlOjtPreuHGUY8e2ARkHet++I/Dyqs3GjX8+tg8fHgEHBYXi7u761Lwz6xATcz5L4IuLu8Levf7aNn2Yv38I5co5ZnszexbBweFUqlQOM7OMLwXduZPI6dMxVK3qkm2b37yZwK5dB2jUqE6WN7XseYZRuXIF8ufPz+HDx3B3d9WWrV+/A3d3V9LS0ti16wCDBnUnLGwHQUGbWLduG/7+IU/MOygolKpVXTA0NCQoKCzLPhwYeJRq1SqRL1++LPv36dMxODuXyfLGdO3aETZv/pWkpIwR+cMBNDDwKDVqVOHUqWh0Oli6dDrXr4fQrFl9Jk36WatHZrsePZbs7Utw/Phppk//FV/fYTlud3//ECpUKJvlDTYvemMDsL9/CDVqVCZfvnw4Opbi2LETTJ/+KxMmfKqdvtSq5caVK/EkJt7l9OkYkpKSGDJkPOfPX8LdvTIbNuykVau+REXFcv78JcLDT1KtWiUg48BzcnLI9nGymJjzNG7cne3b9xIff4OQkAisrIpQrJi1lub+/fuULFmchITbzJ+/kqtX45k6dS579hzik0/6c+nSFW7duoOzcxkAjIyMqFChLDNmLODatevs3v035ct74+8fkq3dzs5lWLNmKydPniEkJBwfnw+4efMWZcqU4siRcLZu3UNc3BVGjPiaW7fu0KtXR8LDT2JrW1Q7zc0ckWSOcjMCcGUSE+9y8mQ0v/66ipiYcwQEhNCr1ydMmPAJRkZG2jYtWdIWI6P8zJq1lOvXb7J27VbKlGlAbOwFkpOT6dTpPYYN68esWRNZtGgtCQm3srXj8uWrXL9+U9sGmSOmJ+V95co1Ll++RuXKzjg6lmLz5t0EB4dx6lQ03bt/RGpqmtZ/j+4rnp7ZA/OzCAoKzRJ8goPDqFixHCYmJpQpU4r163cQFhbJyZNn6Nz5A3r2bE+5co4EB4dTrlxp7t/Pfj+T4OAwqlfPqGdUVCzR0edJTU1l2zY/pk//FXf3yty7l0TTpj1ZvHgdN24kEB5+itTUNMqVK/3EvDMCX2Xt76yB85+puIf31QoVynLmzDl+/30b8fE3mDt3Oc7Ojbhz5y6hoZE4ONhhYWEOZAwWjh07gbu7K3PnrqBbt6FcuBBHdPQ5Tp2KoVq1SqSmpnL06HHc3Stz/fpNzp27pI3CAezt7Zgw4Ue6d2+Hvb1djtv94TPYPE2P88/P5zkvwn3wQS/57LP3RCRGrl8/KoD4+g4TkRg5e/ZvMTLKuKCTlnZG+vTpLEWKFJYqVSrI99+PE3v7jIsDV68GS7Nm9aVAAROxtraUXr06ytWrwSISI5MnjxRT0wKyd+/KLOWmpZ2RIUP6SJEihaVgQTNp1KiOHDmyWURi5M8/l0mRIoVl0qQRIhIjCxdOFTu74mJtbSk+Pq3l4sUAEYmRP/74VbsYl/kTHPyH1KhRRUxMjKVy5QqyatXPObb79u1w6dy5lZiZmYqtbVHx9R0m6enRWp2trS3Fzq64vPvu29qFjnnzvhUfn9ZaHh9//K58+eXH2v/e3p6ydu1s+fvvteLhUVVGjXpfihQpLFWrusjixd9L5kUyIyMjuXv3hNZWFxcnKVDARGrVcpNdu5ZLenq09OvXRQYN6q7l3bRpffn++3HZ2rF58wJtG9y6Fab11+PyzrxwWbduDRGJkcTE49K+fTMpWNBMateuJj/88Lm4u1fOcZvVqeMuQLafzLzmzPlaLC2LSFramWxpu3ZtI3PmfK39P23aOBkwoJuIxMjduyekW7e2UrCgmbi4OMnkySO1PMLDd0qxYtYycGC3bHn6+LTW8vztt5+kTBl7KVnSVgYM6Cb16nloF8m+/nqE2NhYadsh8/Un5d25cyv59deMi4DFi9tIZORubVmbNk1k2bIZIhIjixd/LwULmsmSJT+ISIwsXz5DSpcuKaamBaRx47raPj179iTp1q2tlkdQ0B9SrpyjiMTI6dN7xdOzuhgbG4mtbVEZMqSP3L17QsLCdmjHWHLyKalWrZI4O5fR8pgyZbSYmxeS+PiQxx7fdeq4y6xZE7Mvy2MX4fLOV5GPfw+h46FLmL5r8p/188+LCQmJ4JdfvtF3VV6pqKhYvv76Z+bPn/JKynNyashvv/2UZe73v2TIkPHY2RXTLkA/l1WuUPlLcPkk9yv2ErzRn4JQclfGqbHr01d8wwwcOJoZM8a/9HLS09M5ciScCxficHXNfuHpTZeamsqBA4fZsWM/R45s1nd1XgkVgJVnFhwcRt++Pvquxiu3a9fyV1LOqlV/MG7cNL766pMsn2L5r+jZcxinTsWwdu0sTE0L6Ls6r0TemYI4MR2OjoG3j+u7JoqivK5WukDVr6HCMH3X5JnknU9BmNpB2j1IvKDvmiiK8jpKPJ8RI0yz3//idZV3ArBti4xHj4T9lKdutqEoyisgAmEzM2KEbfOnr/+ayDtzwPkLZdzpPmAgXPGHYnUybj2Xl2/EoSjKvyPy4IkYf8PtaKg5NyNW5BF5Zw440+U9EL0ErgdBepK+a6Moir4ZmIClOzj2gmLe+q7Nc8l7AVhRFOUNkXfmgBVFUd4wKgAriqLoiQrAiqIoeqICsKIoip6oAKwoiqInKgAriqLoiQrAiqIoeqICsKIoip6oAKwoiqInKgAriqLoiQrAiqIoeqICsKIoip6oAKwoiqIn/wd5HOASJBgvyQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a schematic showing the key message\n", "fig, ax = plt.subplots(figsize=(3.5, 2.5))\n", "\n", "# Draw schematic\n", "ax.text(0.5, 0.85, 'Same Intensity at z=0', ha='center', fontsize=10, fontweight='bold')\n", "ax.text(0.5, 0.70, '$I = |E|^2$ identical for all three beams', ha='center', fontsize=8)\n", "\n", "ax.annotate('', xy=(0.5, 0.55), xytext=(0.5, 0.65),\n", " arrowprops=dict(arrowstyle='->', color='black', lw=2))\n", "\n", "ax.text(0.5, 0.45, 'Different Phase → Different Propagation', \n", " ha='center', fontsize=10, fontweight='bold', color='darkred')\n", "\n", "ax.text(0.17, 0.25, 'Collimated\\n$\\\\phi = 0$\\n→ diffracts', ha='center', fontsize=7)\n", "ax.text(0.50, 0.25, 'Converging\\n$\\\\phi \\\\propto -r^2$\\n→ focuses', ha='center', fontsize=7)\n", "ax.text(0.83, 0.25, 'Diverging\\n$\\\\phi \\\\propto +r^2$\\n→ expands', ha='center', fontsize=7)\n", "\n", "ax.text(0.5, 0.05, '∴ Must store complex field E, not just intensity I', \n", " ha='center', fontsize=9, style='italic', \n", " bbox=dict(boxstyle='round', facecolor='lightyellow', edgecolor='orange'))\n", "\n", "ax.set_xlim(0, 1)\n", "ax.set_ylim(0, 1)\n", "ax.axis('off')\n", "ax.text(0.02, 0.98, '(j)', transform=ax.transAxes, fontweight='bold', va='top')\n", "\n", "plt.tight_layout()\n", "plt.savefig('Figures/wavefronts_why_complex.pdf', bbox_inches='tight')\n", "plt.savefig('Figures/wavefronts_why_complex.png', dpi=300, bbox_inches='tight')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "gradient-header", "metadata": {}, "source": [ "## 4. Differentiability: Gradient of Focal Intensity\n", "\n", "Because Janssen is built on JAX, we can compute gradients of any quantity with respect to beam parameters. Here we compute $\\partial I(z=f) / \\partial w_0$: how the focal plane intensity changes with the beam waist." ] }, { "cell_type": "code", "execution_count": 13, "id": "gradient-computation", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Peak focal intensity: 23.9040\n", "Gradient dI_peak/dw0: 4.6823e+05 (1/m)\n", "Interpretation: increasing w0 by 1 um changes peak intensity by 0.4682\n" ] } ], "source": [ "def focal_intensity(w0_param):\n", " \"\"\"Compute intensity at focal plane for a converging Gaussian beam.\"\"\"\n", " # Create beam with given waist\n", " amplitude = jnp.exp(-rr**2 / w0_param**2)\n", " phase = -k * rr**2 / (2 * focal_length)\n", " E0 = amplitude * jnp.exp(1j * phase)\n", " \n", " # Create wavefront and propagate to focus\n", " wavefront = make_optical_wavefront(E0, wavelength, dx, z_position=0.0)\n", " propagated = angular_spectrum_prop(wavefront, focal_length)\n", " I_f = jnp.abs(propagated.field)**2\n", " \n", " return I_f\n", "\n", "def peak_focal_intensity(w0_param):\n", " \"\"\"Scalar: peak intensity at focus.\"\"\"\n", " I_f = focal_intensity(w0_param)\n", " return jnp.max(I_f)\n", "\n", "# Compute gradient map: how does each pixel's focal intensity depend on w0?\n", "# Use JAX's jacfwd to get the full Jacobian\n", "grad_peak = jax.grad(peak_focal_intensity)\n", "\n", "# Evaluate at nominal waist\n", "w0_test = 200e-6\n", "I_focal = focal_intensity(w0_test)\n", "dI_dw0 = grad_peak(w0_test)\n", "\n", "print(f\"Peak focal intensity: {jnp.max(I_focal):.4f}\")\n", "print(f\"Gradient dI_peak/dw0: {dI_dw0:.4e} (1/m)\")\n", "print(f\"Interpretation: increasing w0 by 1 um changes peak intensity by {dI_dw0 * 1e-6:.4f}\")" ] }, { "cell_type": "code", "execution_count": 14, "id": "gradient-plot", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Compute gradient map by finite difference (for visualization)\n", "eps = 1e-6\n", "I_f_plus = focal_intensity(w0_test + eps)\n", "I_f_minus = focal_intensity(w0_test - eps)\n", "dI_dw0_map = (I_f_plus - I_f_minus) / (2 * eps)\n", "\n", "# Plot focal intensity and gradient\n", "fig, axes = plt.subplots(1, 2, figsize=(7, 3))\n", "\n", "# Focal intensity\n", "ax = axes[0]\n", "extent_um = [-physical_size/2*1e6, physical_size/2*1e6,\n", " -physical_size/2*1e6, physical_size/2*1e6]\n", "im = ax.imshow(I_focal, cmap='hot', extent=extent_um)\n", "ax.set_xlabel('x (μm)')\n", "ax.set_ylabel('y (μm)')\n", "ax.set_title('Focal Intensity $I(z=f)$')\n", "ax.set_xlim(-50, 50)\n", "ax.set_ylim(-50, 50)\n", "plt.colorbar(im, ax=ax, shrink=0.8)\n", "ax.text(0.02, 0.98, '(k)', transform=ax.transAxes, fontweight='bold', va='top', color='white')\n", "\n", "# Gradient map\n", "ax = axes[1]\n", "vmax = jnp.max(jnp.abs(dI_dw0_map))\n", "im = ax.imshow(dI_dw0_map, cmap='RdBu_r', extent=extent_um, vmin=-vmax, vmax=vmax)\n", "ax.set_xlabel('x (μm)')\n", "ax.set_ylabel('y (μm)')\n", "ax.set_title('$\\\\partial I(z=f) / \\\\partial w_0$')\n", "ax.set_xlim(-50, 50)\n", "ax.set_ylim(-50, 50)\n", "plt.colorbar(im, ax=ax, shrink=0.8, label='(1/m)')\n", "ax.text(0.02, 0.98, '(k)', transform=ax.transAxes, fontweight='bold', va='top', color='black')\n", "\n", "plt.tight_layout()\n", "plt.savefig('Figures/wavefronts_gradient.pdf', bbox_inches='tight')\n", "plt.savefig('Figures/wavefronts_gradient.png', dpi=300, bbox_inches='tight')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "optimization-header", "metadata": {}, "source": [ "## 5. Optimization: Recovering Beam Waist from Target Focal Spot\n", "\n", "Given a target focal spot, can we recover the beam waist that produces it? This is an inverse problem that gradient descent can solve." ] }, { "cell_type": "code", "execution_count": 15, "id": "optimization", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Target w0: 200 um\n", "Initial w0: 350 um\n", "Initial loss: 3.899279\n", "\n", "Optimizing...\n", " Iter 10: w0 = 301.8 um, loss = 1.241943\n", " Iter 20: w0 = 262.8 um, loss = 0.341526\n", " Iter 30: w0 = 236.4 um, loss = 0.090567\n", " Iter 40: w0 = 220.5 um, loss = 0.024642\n", " Iter 50: w0 = 211.4 um, loss = 0.007023\n", "\n", "Final w0: 211.4 um (target: 200 um)\n", "Error: 11.41 um\n" ] } ], "source": [ "# Target: focal spot from w0 = 200 um\n", "w0_target = 200e-6\n", "I_target = focal_intensity(w0_target)\n", "\n", "# Start with wrong guess\n", "w0_init = 350e-6 # Start with 350 um (wrong!)\n", "\n", "def loss_fn(w0_param):\n", " \"\"\"MSE between predicted and target focal intensity.\"\"\"\n", " I_pred = focal_intensity(w0_param)\n", " return jnp.mean((I_pred - I_target)**2)\n", "\n", "grad_loss = jax.grad(loss_fn)\n", "\n", "# Optimization with Adam\n", "optimizer = optax.adam(learning_rate=5e-6)\n", "w0_current = w0_init\n", "opt_state = optimizer.init(w0_current)\n", "\n", "n_iterations = 50\n", "w0_history = [w0_current]\n", "loss_history = [float(loss_fn(w0_current))]\n", "\n", "print(f\"Target w0: {w0_target*1e6:.0f} um\")\n", "print(f\"Initial w0: {w0_init*1e6:.0f} um\")\n", "print(f\"Initial loss: {loss_history[0]:.6f}\")\n", "print(\"\\nOptimizing...\")\n", "\n", "for i in range(n_iterations):\n", " grads = grad_loss(w0_current)\n", " updates, opt_state = optimizer.update(grads, opt_state)\n", " w0_current = optax.apply_updates(w0_current, updates)\n", " \n", " w0_history.append(float(w0_current))\n", " loss_history.append(float(loss_fn(w0_current)))\n", " \n", " if (i + 1) % 10 == 0:\n", " print(f\" Iter {i+1}: w0 = {w0_current*1e6:.1f} um, loss = {loss_history[-1]:.6f}\")\n", "\n", "print(f\"\\nFinal w0: {w0_current*1e6:.1f} um (target: {w0_target*1e6:.0f} um)\")\n", "print(f\"Error: {abs(w0_current - w0_target)*1e6:.2f} um\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "optimization-plot", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr4AAAD8CAYAAACRiKc7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVm1JREFUeJzt3Xd4VMXXwPHv3fRAElpiCAThVaog0kFBinQpElBAmkonNIEfCipFRBARFI30IlVRUUFAUYoUCT0IghQBBQLSk0hI3Xn/GAhGillIcrN3z+d58pANczdnsjB7MnfmjKGUUgghhBBCCGFxNrMDEEIIIYQQIjtI4iuEEEIIIVyCJL5CCCGEEMIlSOIrhBBCCCFcgiS+QgghhBDCJUjiK4QQQgghXIIkvkIIIYQQwiVI4iuEEEIIIVyCJL5CCCGEEMIlSOIrTFe/fn1q1KgBwObNmzEMg48++giAPn36EBgYiN1uv+21derUoVu3bg5/zzp16mAYRtpH/vz5mT179r13QgghnNCmTZuoUaMGuXLlomjRorz77rvIga7CyiTxFaZr0qQJUVFRJCcns337dnLlysW2bdsA2LlzJ40aNcJmu/0/1TVr1jB16tQ7PvcLL7xA/fr1b/t3tWrV4tq1a1y4cIGqVavyv//97/47I4QQTuKPP/6gYcOGlC9fniNHjjBu3DiGDh3Kl19+aXZoQmQZSXyF6Zo0aUJCQgL79+9n+/btdO7cmcjISJKSkti7dy+NGzcmLi6Op59+mly5clGqVCnGjx8PQMOGDenduzcpKSl069YNPz8/8ufPz/Dhw1mxYgWffPIJa9euZdSoUbd8X5vNhre3N3ny5CFPnjyEhoYCsHjxYooUKUK+fPkYOHAgdrudhIQEOnXqREBAAIUKFWL+/PkA/PTTT5QvXx5fX18qVKjApk2b+OWXXzAMg82bN6OU4sEHH2To0KGcOHGC2rVrkytXLmrWrMnvv/8OgGEYPPfcc4SEhNCxY0ceeeQRALZs2YJhGGnthBAiMy1ZsoSUlBTee+89QkJCaN++PTt27KB8+fL07NmT/PnzU6BAgbQxdt68edhsNtq3b0+uXLmoVasWcXFxhIWFpU0wzJ07Fy8vLy5fvsykSZMIDg7mgQceSBuzR40aReHChWnevDnjxo0jKiqKsmXLEhgYSKtWrXB3dwfgxx9/pGTJkvj7+9OpUyfi4+PZsGEDhmHQrl07/P39KV++PCdPnkQpxcsvv5wW74QJE+74HEKghDCZ3W5XRYoUUdOmTVPFihVTu3btUj4+PmrNmjUKUH/99Zdav369atmypTpx4oQKDw9XPj4+Simlateurbp27ar27NmjADVp0iT1/fffq5YtW6oLFy6ojh07qjp16qjk5OR037N27drK3d1d5c+fX+XKlUt5eXmpHTt2qAsXLigvLy/13nvvqT179igvLy+1dOlSNWXKFJU7d251+PBhNWnSJBUSEqKuXr2qgoKCVJs2bdSRI0dUq1atVKFChZTdblfly5dXQ4YMUfv371eA+uWXX1SbNm1UzZo11bFjx1Tjxo1V06ZNlVJKASosLEydOXNG/fDDDwpQhw4dUkOHDlU1a9bM9tdDCOEaevXqpR544IFbvh4REaHc3NzUunXr1I8//qhsNpuaOXOmmjt3rgLUl19+qTZu3Jj2+VdffaXc3d3VpUuXVJs2bVRYWJjat2+fAtTnn3+uvv/+ewWo7du3q5EjRyrDMNS6detUYmKiqlatmqpXr546cOCAqlGjhnJzc1OpqakqKChIDRw4UB0+fFgFBwerCRMmqPXr1ytAvf/+++rgwYNpY/Xy5csVoLZt26aWLl2q8ufPr06cOHHb5xBCZnyF6QzDoEmTJqxevZpz587x6KOPUrFiRSIiIqhUqRJBQUGUKFECPz8/mjdvzvr160lKSkr3HKVKlaJnz56MGDGCjh07UrhwYXLlyoWbmxtubm5pswj/VLlyZaKiooiMjCRv3rxMmzaNo0ePkpiYyJgxY6hfvz7Jycls3ryZAwcOULJkSYoXL87LL7/M6dOn+fvvvzl37hwdOnTg4Ycfpn379pw+fZorV67QqVMnvv76a1avXk358uUpV64c+/fvZ9euXVSpUoWNGzeyefPmtFhatmxJcHAwdevWpXDhwixbtowVK1bQuXPnLP/5CyFcU2hoKBcuXCAmJibta0uXLmXFihWULVuWunXr8tRTT1GqVCn27dsH6DtlYWFh1KpVC4D4+HiaNm2Kv78/y5cv54cffqBTp078+uuvAPTs2ZPnn38eIG3MK1q0KHXr1sXT05O9e/fSsmVLSpcuTatWrQA4f/48586dY86cOdSoUYOLFy+mGy/DwsIoVaoUwcHBxMfHc+DAAfLnz0/VqlV59tlnuXDhAt7e3nd9DuG6JPEVOUKTJk1YsWIFlSpVwt3dnerVq7NixQoaN24MwLx581i1ahWrVq2iTJkyt1y/a9curl69yp49exg5ciQRERFERkYC3JIk3+Dl5UXhwoUpW7YspUqV4uzZsxQrVgx3d3fefvttNm/ezMCBA2nSpAklSpRIS1xnz57Nk08+SUBAAEFBQSxevJjff/+dJUuWEBISQp48eXj++ec5duwYERERdOrUCYASJUpQq1Yttm3bxrvvvsvLL7+cFsuNNcxubm506dKFqVOncuzYMZ599tlM/TkLIcQN7du3x93dne7du7Nt2zYmTpxI27ZtqV69Ovv372fDhg2sXbuW3377jbJlywJ6ouLfPD09adeuHaNGjcLNzY2mTZtSokQJQI/da9asoW/fvjzxxBMA6fZsPPzww6xcuZLDhw+zYsUKAAoUKEDevHnp27cv27ZtY+jQoTz33HNp1/w7hhIlSnDx4kVWr17Nt99+S/Xq1UlJSbnrcwgXZvaUsxBKKRUXF6c8PDzUkCFDlFJKff755wpQmzZtUkoptWXLFlWyZElVsGBB1bFjRwWo3377LW2pw5UrV1SLFi1Urly5VEhIiOrYsaP6+++/1eLFi1WePHluucVVu3ZtVbt27bTHXbt2VUFBQSo+Pl7NmTNHhYSEqKCgINWuXTt14cIFdfXqVdW2bVuVO3duVahQITV//nyllFIbNmxQ5cqVU97e3qp8+fJp8SqlVOPGjZXNZlOnT59WSil1+PBhVaNGDZU7d271+OOPq++//14ppZc6LFiwIO26w4cPK0A9++yzmf+DFkKIf1i/fr2qUqWK8vHxUaGhoWrMmDEqISFBde/eXeXNm1fly5dP9e7dWyUnJ6u5c+cqNze3tGv/OXZFRkYqQPXu3Tvt79966y1VoEABVbhwYdWzZ08VHx+vRo4cqR566KG0Nhs3blT/93//p/LkyaPq1KmT9vzffvut+r//+z+VN29e1axZM3Xs2LG0pQ4nT55USin14IMPqjFjxqjU1FTVt29flSdPHlWgQIG08f52zyGEoZTULREiJ7lw4QJFihRh6dKlNGvWzOxwhBAiy3zxxRfkzZuXp556iiFDhrBw4ULOnj1rdljCwm5d+CiEMM2FCxcoVqwYLVu2pGnTpmaHI4QQWSopKYk33niD3r17YxgG06dPNzskYXEy4yuEEEIIIVyCbG4TQgghhBAuQRJfIYQQQgjhEiTxFUIIIYQQLkESXyGEEEII4RKcuqqD3W4nOjoaPz+/2xbVFkKInEApRVxcHCEhIemK9+d0MsYKIZyBI2OsUye+0dHRhIaGmh2GEEJkyMmTJylcuLDZYWSYjLFCCGeSkTHWqRNfPz8/QHfU398/Q9fY7XbOnz9PYGCgU828ZIRV+2bVfoF1+yb9Si82NpbQ0NC0MctZ3MsYC/L6Oxur9gus2zfpV3qOjLFOnfjeuPXm7+/vUOKbkJCAv7+/pf6xgHX7ZtV+gXX7Jv26PWdZLhAREUFERASpqamAY2MsyOvvbKzaL7Bu36Rft5eRMdapE18hxL1TSpGYmJglz22320lOTiYhIcFyg3JG+uXh4YGbm1s2Rpa5wsPDCQ8PJzY2loCAALPDEUKITGPpxPe1117js88+Y+DAgezZs4f27dtTr149s8MSIkeIjo4mNjY2S55bKYXdbicuLs5pZjkzIqP9MgyDwoULkzt37myMTgghxH+xbOJ77do1lixZQoECBQDo0qULEyZMkMRXCCAlJYXY2Fjy58/v0C3sjFJKkZKSgru7u+US3//ql1KK8+fPc+rUKYoXL+7UM79CCGE1lk18V61aRY0aNTh9+jQANWvWpH379pw/f97kyIQwX0pKCqA3L3l7e2f687ty4gsQGBjIiRMnSE5OlsRXCCFyEOssvvuXgwcPUqJEibTHNpuN4sWL89tvh/nsMx/sdhODEyKHsFJSmpO48s9VKVi8GBISzI5ECCFuZdnE9/Tp0zzwwAPpvhYcHMyIEacZODCAvn0NlDIpOCFcSLt27ahTpw758uWjTp06dO7cOVOed8OGDZw6deq2f3fmzBlq1KjBo48+yqhRowDYvn07NWrUoHbt2vz5558AjBgxgpo1axIeHo6SASFNREQEZcqUoUqVKg5fu2oVdOpk44knApk5E5KTsyBAIYS4R5ZNfAsVKsRff/2V7mtnz56lTp1CGIZi+nSDIUOQ5FeILPbpp5+yYcMGqlatyoYNG5g/f36mPO/dEt+ZM2fSr18/oqKiiIyM5OTJk4wePZoVK1bwzjvvMGnSJE6fPs3+/fvZvHkzqamp7N27N1PisoLw8HAOHDjAjh07HL42KQkKFVJER7vRq5eN0qVh0SK4XhlNCCFMZdnEt3Tp0hw6dCjtsVKKo0eP0qdPCd57T+9knzQJRo40K0IhcpCrV+/88e971ndq54DTp0/TtGlT6tSpwxtvvAFAWFgYPXr0YNWqVYwdO5YKFSrQu3dvevXqRUpKCu3bt6dSpUr069ePixcvMm/ePIYOHcqff/7J0KFD0z1/1apVady4MTabjaCgIAzD4OLFixQoUIAKFSoQFRXFnj17qFixIgCVK1dm9+7d6Z7jhRde4OzZswA0btwYgHnz5tGxY0cqV67MgAEDaN68OY899tgtv2S7slat4NAhxahRsQQGKn7/HTp2hPLlYdkymWwQQpjLsolvkyZNiIyMZOXKlfTt25fNmzfz2GOPERgYSPv215gyRS/yHTMG3nnH5GCFMFvu3Hf+aN06fdugoNu3c8Cff/7J8OHD2bBhA+vXrwfg0qVLdO/enYoVK7Ju3Tp27tyZlph+/fXXlC5dml27duHm5sb+/ft54YUXmDBhAkWKFGHChAnpnr9x48bkyZOHiRMnkpSUROHChcmVKxcAXl5euLu7ExMTQ0hICAAhISFcvnw5Q7EXK1aMbdu2sXTpUhYuXEinTp3YtGmTQ/23Oh8f6NkznqNHFW+9BQEB8Ouv+p9S9eqwbp3ZEQohXJVlE19fX1/at2/PV199BeiZmoEDB6b9fXg4jB+vP3/1VfjwQxOCFMJFFSpUiCVLljBkyJC0WVUPDw8qVqzIiRMnqFKlCm5ublSuXBmAo0ePsmzZMurUqcOWLVvSrrmT5ORkOnXqxLlz51iwYAEAcXFxgC51mJSUREBAQNpSiZMnT5InT54MxV62bFnc3NwoX748AQEB5M+fP61Khkgvd2547TU4flz/6esL27fDU09Bw4awa5fZEQohXI1lE1+AsWPH0rFjRwBmz55N/fr10/39K6/A9bus9O8Ps2dnd4RC5BB//33njy+/TN/23Lnbt3PAlClT6Ny5M2+99RZKKZRSuLm54ebmxoMPPsiOHTtITU1l27ZtABQtWpROnTqxYcMG3nrrLWrVqgVwxw1pH374IU888QQTJkzAw8MD0CXGzp8/T1RUFBUrVqRChQrs2bMHgN27d1OpUqVbnmf37t1cuHAhbTOcuDd588Jbb8GxY9C3L3h4wA8/QOXK8NxzcPiw2REKIVyFpRPfjBg9GgYN0p93767L8AjhcnLluvPHv+v83qmdA5o1a8agQYNo06YNVapUSZuVBShYsCC1atWiQoUK7Ny5E29vb8LCwvj555+pVasW33zzDQULFqREiRKMHTv2tmt8t2/fzqJFi6hTpw516tTh6NGjjBo1ihYtWjBs2DAGDRpEoUKFePTRR6lZsyYeHh6UL1/+ljjfeecdmjdvjq+vr0P9E7f3wAP67tpvv+l1v4YBn38OZcpAnz7wHxP5Qghx3wzlxDV8bpwjHxMTk+HTp+x2O+fOnSMoKAibTef9SulBd9o0cHPTA3GrVlkZeda4Xd+swKr9AvP6lpCQwPHjxylWrFiOO8AiJSWF+fPn89JLL/H1119z4sSJdMuUsssLL7zA+PHjCQ4OTvtaRvv175/vvYxVOcG9xp3Rf9f79sGwYbBypX6cKxcMHgxDhoCf3/1Gn/msOhZZtV9g3b5Jv9JzZKyyzk/rPhgGRERAly665E7btrB6tdlRCeGa3N3dOXv2LO3bt2fmzJk8//zzZofkcu6njq8jypWDb7+FDRugalVdHOTNN+Ghh+Cjj6QGsBAi80nie53NBrNm6fVmyckQFiY7j4Uwy/Dhw1myZAkrV64kKCjIlBjmzZuXbrbXldxPHd97Ubs2REbqu23Fi8P589CvH5QtC19/LSXQhBCZJ1sT302bNtG2bVtefPFF4uLiOHbsGGFhYQBMnz6dHj16MHjw4OwMKR13d1i4EJo316VLW7SAn382LRwhspwTr3TK0eTn6jjDgDZtdNmziAgIDNSb3lq10onx9u1mRyiEsAL37Pxmhw4d4pNPPmHZsmX89NNPrF27Fr/rC7nWrl3L0qVLGTJkCKdOnaJw4cK3XJ+YmEhiYmLa49hYfRCF3W7HbrdnKAa73Y5S6o7t3dzg00+hZUuDH380aNJE8cMPiutVlXK0/+qbs7Jqv8C8vt1YO3WjxFdWSE5OTquoYCX/1S+lFBcuXMAwDNzc3Bwan4Su+NCnj9789s47+qChTZugWjVo3x7GjYMHHzQ7SiGEs8rWxLdbt26sWbOGiRMn8swzz9CnTx/euX56hI+PD6DLFkVHR9828R03bhyjR4++5evnz58n4d+nS92B3W4nJiYGpdRdF05Pnw4dOuQjMtKTRo0UX355iTJlcnatzoz2zdlYtV9gbt9sNhvnzp3j3LlzWfL8drvdcq8XZLxf/v7+XLx4EcjaXzCsyt8fxo6FXr102cn582HJEn3626BBuv66E+0TFELkENma+C5fvpzmzZvj5+dH3bp1uXTpElu3bmXdunVpieuJEydo0aLFba+/UYbohtjYWEJDQwkMDHSoqoNhGAQGBv7nm9d330GjRopt22y0a5efDRsUpUplsLMmcKRvzsSq/QJz+xYYGEhSUlKW3Ja32+1cunSJfPnyWeo1y2i/PDw8cHNzS3ucFZUzXEVoKMybBwMG6IoP69frWd/Zs/XJm1276jt1QgiREdma+KamptKzZ08Mw2DPnj2ULl2abt26Ua9ePY4ePUr//v3x9vamSJEit73ey8sLLy+vW75us9kcenM1DCND1wQE6OS3Xj3Ys8egQQODjRv1juOcKqN9czZW7ReY27cbd1oym91u5++//8bX19dSr9m99stKPwOzVKgAa9fqKhBDhuj1vz176uoPkybBv84nEkKI28rWxLdVq1a0+leB3FmzZgHQo0eP7Awlw/LkgTVroG5d2L9fJ8EbN8oaMyGEyG6GoTcfN2oEU6fqA4j27YMGDfTX33tPV4UQQog7kWmIDChQAH78EUqUgD//1OfMR0ebHZUQQrgmT0+99OHoUf2nuzusWAGPPKJng2NizI5QCJFTSeKbQQ88oG+zFSsGv/+uk9+//jI7KiGEcF358sH77+tZ3yZNdA32G7O+M2boA4mEEOKfJPF1QOHC+lCL0FB91nz9+nDhgtlRCSGEaytVClat0kcflyypD8Do2ROqVIEtW8yOTgiRk0ji66CiRXXyW7CgXvPbsCFcvmx2VEIIkXmy68jizNa0qZ79nTxZb07eswdq1oQOHeD0abOjE0LkBJL43oOHH9bJb1CQHlgbN4brZ2kIIYTTy+4jizOThwcMHKirPnTrpjfELV6sZ4LHjYN/nIEkhHBBkvjeo1Kl9Jrf/Pn1UZpNmsDff5sdlRBCCNATEzNnwo4d8PjjcPUqDB8OZcvqJRFCCNckie99KFsWfvhBlzz7+WddTic+3uyohBBC3FCpEmzeDAsX6iVqR49Cs2Z6vP79d7OjE0JkN0l871OFCvD99+DnBxs2QMuWcO2a2VEJIYS4wTD0Ot9Dh2DoUF3+7NtvdfmzN96QCQshXIkkvpmgalV9wluuXLreb1iYrCMTQoicxs8P3nnn5qEXiYnw1lt66dqyZZAFp3cLIXIYSXwzyeOP63I6vr46CW7TBpKSzI5KCCHEv5Uqpe/ULVumT+E8eRJat9Z7NY4cMTs6IURWksQ3Ez35pD49yNtb30Zr104XVBdCCJGzGAa0agUHDsBrr+nT4L7/Xu/dkOUPQliXJL6ZrF49+OYb8PKCr77S68pSUsyOSgghxO34+urlDvv26brsSUn6cZkysHy52dEJITKbJL5ZoGFDfQvN0xM+/xw6dZLkVwghcrISJfQytS+/1Kdz/vGH3qzcogWcOGF2dEKIzCKJbxZp2lQnvR4e8Omn0KWLnBsvhBA5mWHozckHD8Irr+jqDytW6NnfceNk34YQViCJbxZq0QKWLtWD5+LF8OKLkvwKIUROlysXjB8Pe/dC7dq6ROXw4VChgsGWLZ5mhyeEuA+S+GaxZ56Bzz4DNzdYsABeekmSXyGEcAZlysD69XrsDgqC334zaNMmH126GJw7Z3Z0Qoh7ka2J76ZNm2jbti0vvvgin3zyCe3bt6dbt26cPXuW6dOn06NHDwYPHpydIWWLsDC93MHNDebP1+fH2+1mRyWEEOK/GAZ07KgPv+jdW2EYioULDUqWhBkzZCwXwtlka+J76NAhPvnkExo0aMAff/zBwoUL6dq1KytWrGDt2rXMmDEDwzA4depUdoaVLdq00csd3Nxg3jzo0UMGTCGEcBZ58sBHHylWrrxEhQqKK1egZ0+oWVMviRBCOAf37Pxm3bp1Y82aNUycOJFvv/2WI0eOMG/ePEaNGsXmzZsBKFq0KNHR0RQuXPiW6xMTE0n8x5FosbGxANjtduwZzCLtdjtKqQy3z0xt2ujqDp06GcyebaCUYvp0hS2Tfv0ws29Zyar9Auv2Tfp163Vm++KLL9i0aRO9e/emVKlSZofjtCpUSCYyUjF1qsHrr8PWrVCpErz8MowapdcHCyFyrmxNfJcvX07z5s3x8/Nj1qxZ+Pr68sEHH+Dt7U1CQgIAJ06coEWLFre9fty4cYwePfqWr58/fz7t+v9it9uJiYlBKYUtszJOB9SrBx9+6E2/fgHMmWNw7do1Jk6MzZTk1+y+ZRWr9gus2zfpV3pxcXFZGNVNycnJLFiwAE9PT0qWLMn7778PwNSpU7l48SITJ05kwYIFkvjeJ3d3GDBAT2YMGKBLoE2cqCv5RETA00+bHaEQ4k6yNfFNTU2lZ8+eGIbBiRMnCAwMpFu3brRv356nnnqK/v374+3tTZEiRW57/bBhwxg0aFDa49jYWEJDQwkMDMTf3z9DMdjtdgzDIDAw0LQ35F69ICBA0bkzLFnii5eXDzNn3v/Mb07oW1awar/Aun2TfqXn7e2dhVHddOzYMXbv3k316tWJiIhg5syZrF27luXLl2MYBpAzZp+tolAh+OILWLkSwsN17d9mzXRC/MEHEBJidoRCiH/L1sS3VatWtGrV6p6v9/LywsvL65av22w2h96EDMNw+JrM1qGDXu/boQPMm2cABrNm6a/dj5zQt6xg1X6Bdfsm/bopu34GJUuWpE2bNpw6dQqlFL6+vhQrVoxVq1bx0EMPMXz4cLp27XrH6zNjOdmN9q601KVJE33y25tvGkyeDF98YfD994q331b07Hn/43pWs+rrBdbtm/Tr1usyKlsTX5Feu3Z6x7BOfkEpmD075w+SQoiczzAM4uPjOX78OAULFqR169a0bt36rtdkxnIycN2lLoMHQ+PG7gwd6s/u3Z7062cwd24S774bS5kyOff4Tqu+XmDdvkm/0nNkOZkkviZr21Ynv88/D598omv8zpsnya8Q4v706dOH8PBwlFJMmTIlQ9dkxnIycO2lLkFBEBkJM2bYGT7cYPduTxo1ys+gQfDGGwpf32wOOgOs+nqBdfsm/UrPkeVkkvjmAM89p5Pf9u1h4UKd/M6frzdQCCGEI+rUqZP2edWqVR269sZysoiICCIiIki9ftrOvSxZceWlLjabXvP7zDPQvz8sW2YwYYJeAjF1KjRsmH3xZpRVXy+wbt+kXzc51PZeghKZ79ln9Qlv7u6wZImeAU5ONjsqIYQrCg8P58CBA+zYscPsUJxaoUK64sPXX+vPjx2DRo2gUyc4f97s6IRwTZL45iCtW+sdwh4euixO27aQlGR2VEIIIe5Hy5Zw8CD066fv7i1cCKVL6zt7SpkdnRCuRRLfHKZlS/jqK/D01H+2aQP/2GQthBDCCfn5wZQp+sCLcuXg4kXo0kXPAB87ZnZ0QrgOSXxzoKefhuXLwdsbVqyAsDBwYEO1EELcl4iICMqUKUOVKlXMDsVyqlWDXbvg7bfBywt++AHKloV339UnewohspYkvjlUo0bw7bfg4wOrVumi6Fevmh2VEMIVyBrfrOXhAcOG6dq/devCtWswdKhOivfsMTs6IaxNEt8c7KmnYPVqyJ0b1q6Fxo3hej15IYQQTq54cT22z54NefLA7t1QpQq88opOhoUQmU8S3xyudm19KywgADZvhgYN4PJls6MSQliZLHXIPoYBL72kN789+6wuZzlhgl4HvG6d2dEJYT2S+DqB6tX1AJg/P2zfDvXqSSkcIUTWkaUO2S84GJYu1aXPQkLg99/1Xb9u3eDKFbOjE8I6JPF1EhUrwoYN+lSgqCioUwfOnDE5KCGEEJmqZUs4cAB69dKPZ8+GMmV0lR8hxP2TxNeJlC0LGzfqQugHDkCtWnDihNlRCSGEyEwBATB1qh7vS5TQkxxhYbq85dmzZkcnhHOTxNfJlCypB8NixfStsFq14NAhs6MSQliJrPHNGWrVgr17YfhwcHPTp8CVLg1z58rBF0LcK0l8ndD//R9s2qQHwFOn9OAYFWV2VEIIq5A1vjmHtzeMHQs7d+olb1eu6M1wDRvC8eNmRyeE85HE10kVKgQ//QQVKuiNbnXr6hOBhBBCWM9jj8G2bbrig7c3/PijXv72wQe6EoQQImMk8XVigYGwfj088YSeBWjUyGDTJk+zwxJCCJEF3N3hf/+DX37RpS7j42HgQP0e8OuvZkcnhHPI1sR306ZNtG3blhdffJEVK1bwwgsv8NJLL5Gamsr06dPp0aMHgwcPzs6QnF5AAHz/vb7tdfWqQceOeWX3rxBCWFjx4rrE5bRp4OenZ4IrVIAxYyApyezohMjZsjXxPXToEJ988gkNGjSga9euzJ07lwoVKrB161bWrl3LjBkzMAyDU6dOZWdYTi9XLli+HFq1UiQlGTz3nMGcOWZHJYRwVrK5Leez2aBnT13hp1kzSE6GESP0yW87d5odnRA5l3t2frNu3bqxZs0aJk6cSPny5TEMg2LFihEdHY2Pjw8ARYsWJTo6msKFC99yfWJiIomJiWmPY6+f32u327Hb7RmKwW63o5TKcHtn4eEBS5bYefHFJJYs8aVrV7h40Y4VJtCt+pqBdfsm/br1OmcSHh5OeHg4sbGxBAQEmB2OuIvChfXEx6efQv/+ehlEtWowZAiMGgXX31qFENdla+K7fPlymjdvjp+fH3Xq1AHg+PHjPPbYYyQkJABw4sQJWrRocdvrx40bx+jRo2/5+vnz59Ou/y92u52YmBiUUths1lribLfbef31GPLmLczHH/sxdKiNP//8m+HD/8YwzI7u3ln9NbNi36Rf6cXFxWVhVMLVGQa0bw/16+vk99NP9Sa4r77SB2DUqmV2hELkHNma+KamptKzZ08Mw2DChAn07NkTpRR9+vTh4MGD9O/fH29vb4oUKXLb64cNG8agQYPSHsfGxhIaGkpgYCD+/v4ZisFut2MYBoGBgZZ6Q4abffvgAx+KFLHz6qs2PvooN9eu5WLqVIWbm9kR3htXeM2s1jfpV3re3t5ZGJUQWmAgLFmik+DeveHIEXjySejbF8aNg9y5zY5QCPNla+LbqlUrWrVqddu/69Gjx39e7+XlhZeX1y1ft9lsDr0JGYbh8DXO4kbfXnnFRv78eg3Y7NkGFy8aLF7svLe9XOE1s1rfpF83We1nIHK2Fi10wvu//8GsWfDRR7BiBcycCQ0amB2dEOaS0djCunWDzz8HT0/4+mto1EiXPRNCCGFtefLoRPeHH6BoUfjjD139p2tXeR8Qrk0SX4sLC4M1a8DfX5/2VqsWnD5tdlRCiJxMqjpYR/36sG8f9Oun1wLPmQNlyugNcUK4Ikl8XUDt2jrpLVgQ9u+Hxx+H334zOyohRE4lRxZbS+7cMGUKbNwIJUrAmTPQsiV06AAXLpgdnRDZSxJfF/Hoo/Dzz3rQ+/NPfdJPZKTZUQkhhMguNWtCVBQMHarrAC9erGd/ly4FpcyOTojsIYmvCylaFLZsgapV4dIlqFcPvvnG7KiEEEJkFx8feOcdPfHxyCNw/jy0b2+ja9c8nD1rdnRCZD1JfF1MgQL6qMunn4Zr16BVK4iIMDsqIYQQ2alKFdi1S5/25u6uWL3am7JlDRYskNlfYW2S+LqgXLl0lYcePfQA17evvvXlZIdLCSGEuA9eXjB6NGzfrihXLpnLlw06d9ZHIJ86ZXZ0QmQNSXxdlLs7TJsGY8fqx+++qzc6/ONEaCGEEC6gfHlYufIiY8fa8fSEVav0MohZs2T2V1iPJL4uzDBg+HCYP18nwp9+qus8XrpkdmRCuKbly5czZMgQevXqxf/+9z+WS80pkU08PODVV/Xmt+rVITYWunfX7wknTpgdnRCZRxJfQadOsHo1+Pnpcjc1asDRo2ZHJYRr+eCDD3jggQd4++23mTZtGmPHjiUoKIgpU6ZkeyxSx9d1lS4NmzfDe+/pjXA//ghly+q9ILIcTliBJL4C0EXOt2yBIkXg8GH9G//mzWZHJYTreOKJJ6hWrRqnri+uXLduHdWrV6d///7ZHovU8XVtbm4waBDs3asPPbp6Ve8FqVdPJkWE85PEV6QpVw62bYPKleHiRXjqKV3nUQiR9WbMmAHAxIkTAVi2bJmZ4QhB8eKwYQN8+KHeFP3TT7om/OTJkJpqdnRC3BtJfEU6wcF6cGvVCpKS9Ia3N9+UDQ5CCOGKbDY927tvn57xvXZNzwbXqiUngArnJImvuIWvL3zxBfzvf/rxyJF6HXBCgrlxCWFlu3fv5u2332bnzp2MHTuW3bt3mx2SEGmKFdPrfadP1/tBtm6Fxx6DCRMgJcXs6ITIOHdHGickJDBz5kyOHDlCYmIi3t7eFC9enG7duuHt7Z1VMQoT2Gx6QCteHPr0gUWL9Nqur76CggXNjk4I6/nyyy8B6NChA4Zh0LFjR5MjEiI9w9D13xs31n9+/z288oqeKJkzR2+CEyKncyjxnT9/Pq1btyYkJCTta9HR0SxYsIDu3btnenDCfN27w8MPQ+vWev1v1ar6mOOKFc2OTAhriYyMxMPDg+DgYKZMmUKVKlUYPHiw2WEJcYsiRXQloE8+gYEDYccO/Z4wYoROhD08zI5QiDtzaKlDjx49uHr1KosXL077CAkJkaTX4urWhe3boVQpfZpPzZpwfXJKCJFJtm7dSlhYGKtWreLTTz/ljz/+MDskIe7IMOCFF+DAAWjeHJKT4Y03oFo1XQ1CiJzK4TW+w4cPJzg4mEKFClGoUCGHrt2yZQtt2rShe/fuTJkyhd69e9OrVy9SU1MZM2YMvXr1Yty4cY6GJLLBww9DZKS+xXXtGrRpoze9SV1HITKHUoqUlBTc3fWNuKtXr5ockRD/LSRE3wVcuBDy5YM9e3RloJEj9QZpIXIah5Y6ABQtWpSkpCT8/f0d/mY7d+5kxowZJCYmMnz4cGbMmMGkSZM4cOAAR44cYf78+XTs2JHk5GQ8bnOvJDExkcR/nKkbGxsLgN1ux57BDMxut6OUynB7Z5LVffPzg+XLYehQg/ffNxg5EqKiFHPnKvz8suRbAvKaOSPp163X/Zdy5crRuXNnXn/9dcaMGUPlypXvNUwhspVh6ApATz0F4eGwbJmeGPnqK5g7FypVMjtCIW5yOPH95ZdfKF26NH/99ReGYfD4449n+NoBAwZw6tQpxo8fT5UqVWjcuDFxcXF07NgxbfY4ODiYy5cvExQUdMv148aNY/To0bd8/fz58yRksOSA3W4nJiYGpRQ2m7WKWmRX3155BR580IdXXvHnq68MDhxIYe7cKxQrljWFHeU1cz7Sr/Ti4uL+s03Dhg1p2LAhAJ07d8YwjHuOUwgzBAfrjW6ff64T4H379NKHoUP1+l/ZAy9yAocT3woVKvD444/j5+fn8MAcGRnJypUrGTt2LOHh4fz4448sWrSIqKgooqOjAThz5gx58+a97fXDhg1j0KBBaY9jY2MJDQ0lMDAwwzPQdrsdwzAIDAy01BsyZG/f+veHqlUVbdrAoUMeNG1agEWLFI0bZ/73ktfM+Ui/0stI1ZsqVapQsmRJnnrqqbQ7XsOHD7/nWO9HREQEERERpMopBcJBhgHPPaf3hvTrB599BuPGwddf68oP1aubHaFwdQ4nvj4+PixdujTt8YgRIzJ87ccff0xycjLh4eE0aNCA/v37Ex8fz5QpU4iKimLgwIGUK1futsscALy8vPDy8rrl6zabzaE3IcMwHL7GWWRn3x5/HHbt0hUftm41aNbMYNw4/dt9Zk9WyWvmfKRfN2Wk7enTp1m/fj1r164lKSmJ+vXr30+Y9yU8PJzw8HBiY2MJCAgwLQ7hvAID4dNPoW1b6N0bDh6EJ56Al1+GMWPAx8fsCIWrcjjxvXGOfExMDPv373co8Z0/f366x126dEn7/LXXXnM0FJEDFCwI69frk31mzYJXX9WlbebOJUvX/QphNe7u7jRo0IDixYuzePFiJk2aRN26dc0OS4j70qoV1K6ty54tWADvvaf3isyZoysECZHdHE58Z86cmfb5/24c7SVcmpcXzJih6zgOGKBLne3frzc4lCljdnRCOIcpU6Zw4sQJihYtyosvvmjaMgchMlu+fDB/vl4C0bMnHDkCTz6pl0K8/TbkymV2hMKVOJz4du/eHcMwiImJYe/evcTExAAwY8aMTA9OOA/D0LezKlTg+rpffdjF7Nn6VpcQ4u727NmDu7s7+/btY9++fRiGIeOqsJRmzeDXX2HwYD3jO2UKrFih3yfk5obILvc14yvEv1WvDrt3Q/v2sG4dtGun6/9OmCCn+QhxN82aNaNFixbp9jgkJyezYsUKwsLCTIxMiMyTJ49OdJ97Tp8Mevw41KsHvXrp9wlZIieymsOJrxD/JShIn+H+xhswfjy8/75e9/vpp1C4sNnRCZEzVatWjbfffpvLly+TkJCAt7c3efPmpWvXrmaHJkSma9RIL4kbOhSmT4dp02DVKpg5E65X9RMiSziU+E6ZMgU3NzfKly9PwYIFOXPmDFFRUSil6NevX1bFKJyQu7suYVOtGnTpAlu2wGOP6c0NTZqYHZ0QOU/hwoUZOXKk2WEIkW38/XXC+9xz0K2bnv1t1AheeklvgsuTx+wIhRU5VGeof//+hIWF8ddff/HVV1/x119/ERYWJkmvuKNnntFLHypWhIsXoWlTGDYMUlLMjkwIIUROUK8e/PKL3uwGev1v2bKwcqW5cQlrcrjAZsGCBWndujVDhgyhdevWhISEZEVcwkIeegh+/lmf5AN6+UO9enD6tLlxCZHTJCUlce3aNSIjIzl37pzZ4QiRbXLn1pvdNm6E4sX1+0OzZtCpE1y6ZHZ0wkruqbL84cOHmTt3LnPmzOHw4cOZHZOwIC8v+OgjWLpUb17YtEkvfVi1yuzIhMg5unXrxm+//cYnn3wi5cyES6pVC6KidOUHmw0WLtRlMZctMzsyYRX3lPhOnTqVzp0707lzZ2bPnp3ZMQkLe/ZZvfShQgW4cAGefloXNk9MNDsyIczn4+PD8uXL6dWrl8NHwgthFb6+MHGi3htSujT89Zc+IbRtWzh/3uzohLNzOPE9ceIENWvWZM6cOcydO5dq1aplRVzCwh5+WC99GDBAP/7gA70J7uBBc+MSwmy9e/emdOnSeHt706lTJ7PDEcJUN8pjDh8Obm76jmGZMrpCkFJmRyeclcOJ78KFC9m0aROVKlWie/fuUl9S3BNvb13m7NtvoUAB2LsXKlXSpWxkQBOuKioqiipVqjBhwgSioqLMDkcI03l7w9ixsH07PPqovlPYvj2EhcGZM2ZHJ5yRw4lvsWLFKFeuHK+88gr169fPipiEC3n6ab2bt359uHYNevTQJ79duGB2ZEJkv6ioKI4dO0aTJk04efKk2eEIkWNUrKjrwY8erQ9D+vprPfv7yScyWSIc43Diu2LFCr799lv69u3L6NGjsyIm4WIKFtQHXkyYoOv/LlsG5crBd9+ZHZkQ2cvPz49p06bx4IMPkigL34VIx9MTRoyAXbugcmW4cgVeeEFPoMjviSKjHE58+/XrR7t27Zg2bRqzZs3KipiEC7LZ4H//g23b9GaGs2f1QRfh4RAfb3Z0QmSPMWPGMGLECLy9vZkyZUqmP//hw4d5/fXXM/15hchO5crB1q26NKaXF6xeDY88AjNmyOyv+G8OJ75r167lwoULdOrUibZt22ZFTMKFVayof5vv318//vhjqFTJICpKTtcW1te1a1e++eYbvvnmG4eOKk5OTmbOnDksXLiQHTt20KFDBzp06EBsbGy6dnnz5sXf3z+zwxYi27m7wyuv6NJnNWpAXBz07KmXzR07ZnZ0IidzOJsYMWJEVsQhRBofH13poVkzfRvr8GGDZs3y8+qr+jaXp6fZEQqRNRISEtJmZDt06JDh644dO8bu3bupXr06ERERzJw5k7Vr17J8+XISEhKIioqiUaNGNG/eHF9f3zs+T2JiYrolFjcSZ7vdjt1uz3A8drsdpZRD1zgD6VfOU6IE/PSTrhP/2msG69YZlCunePttdf3QJOft290482t2N/faL0fayzSayLEaNIB9+6BPH8VnnxmMHQvLl8O8eXpmWAirqVKlCs899xwAjz/+eIavK1myJG3atOHUqVMopfD19aVYsWKsWrWKoUOHZvh5xo0bd9u9G+fPnychISHDz2O324mJiUEphc12T+XicyTpV87Vvj3UqOHG4MH+/PyzFwMHGixalMTEiZcJDLzi1H27HSu8Zrdzr/2Ki4vLcNtsTXy3bNnC5MmTyZs3L507d2bOnDlcu3aN6dOnM2XKFE6fPs2DDz7IsGHDsjMskYPlyweLFyvq17/CsGF52LfPoFo1Xdfxtddk9ldYy8CBAxk4cCAA8+fPv6fnMAyD+Ph4jh8/TsGCBW/5+759+97x2mHDhjFo0KC0x7GxsYSGhhIYGOjQEgm73Y5hGAQGBlruTVn6lXMFBenZ35kz7bzyisGOHZ40bBjE4ME+vPGGL56eztu3f7PKa/Zv99ovb2/vDLfN1sR3586dzJgxg8TERIYMGYKfnx8FChTA09OTI0eOMH/+fDp27EhycjIeHh63XJ8Zt+GsensArNs3u93O008n0LRpKv37u/HllwZvvgnffKOYPVtRoYLZEd47K79m0q/01zlq8+bNdO7c2eHr+vTpQ3h4OEophzfIeXl54eXlRUREBBEREaSmpgJgs9kcfnM1DOOersvppF85m80GvXvrSg89e8J33xm8/bY/33+vmDPH4NFHzY4w81jlNfu3e+mXI22zNfEdMGAAp06dYvz48axevZro6GjmzJnD7t27KVSoEADB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OfzmahjGPV2X00m/nI9V+5aT+9W4MezbB+PH64/vvjMoV87g9ddhyBBde/1O7qVfjrSVxFcIIZxcnX8UKq5atep9P19ERAQRERGkpqbe93MJIVyTjw+MHg3PP683va1bB6+/DgsWwNSpULeuOXHlvF8ThBBCmCo8PJwDBw6wY8cOs0MRQji5kiXhxx9h0SJ44AFdI71ePejYEf76K/vjkcRXCCGEEEJkGcPQM7+//Qbh4frxokU6Kf74Y8jOm0uS+AohhEgnIiKCMmXKUKVKFbNDEUJYSJ488NFHsG0bVKyoa/+Gh0ONGrBrV/bEkK1rfLds2cLkyZPJmzcvjz76KLt27cJmszFz5kxmzZrFrl278PPz47333nPsia9evf0xIW5u8M+dflevgt2OER+vP//nYmibTS9I+WfbO/l32/h4UOr2bQ1DHwd1L22vXYO71abLlSt925SU2/ft320TEu7+65UjbX19SatRkpgIKSmZ09bH52YfkpLu3K/btCU5+c7P6+1989+KI22Tk3X7O/HyAnd3x9ve7TUD8PTUh6Rfb8s/aqzetW1qqn7t7sTDQ7d3tK3drv+tZbTtnfoF+mdwY4eDUvr/xp040vZ2/+8zo63Nln5HhqNjhBMJDw8nPDyc2NhYAgICzA5HCGExVarogy+mToXXXoMdO/TXevc26N/fICgoC7+5ykbvv/++unjxooqOjlbPPPOMstvtasqUKWrTpk3q2WefVUopNXjwYHXy5MnbXp+QkKBiYmLSPk6ePKkAFaPfCm/5sDdpolJTU9M+7L6+t22nQNlr107ftkCBO7etXDl92wcfvHPbMmXSty1T5s5tH3wwfdvKle/ctkCB9G1r175zW1/f9G2bNLljWwXp27Zuffe2sbE323bufPe2Z8/ebNu7993b/v77zTgGDbp7219+ufm8I0bcvW1k5M3nfeedu7ddu/Zm2w8/vHvb5ctvtp09++5tP/00rW3KkiV3bzt79s3nXb787m0//PBm27Vr7972nXduto2MvGtb+4gRN9v+8svd2w4erFJTU1VycrL6a9u2u7ft3fvm8549e/e2nTvfbBsbe/e2rVun+zd817YOjhHJyckqOjpaJScnOzRGXAkNVYCKiYnJvgE3E8TExNxT3KmpqerMmTP6528h0i/nY9W+WalfZ84o9fzzN4fQwMAUtWSJY/1y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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot optimization convergence\n", "fig, axes = plt.subplots(1, 2, figsize=(7, 2.5))\n", "\n", "# w0 vs iteration\n", "ax = axes[0]\n", "ax.plot(range(len(w0_history)), [w*1e6 for w in w0_history], 'b-', linewidth=1.5)\n", "ax.axhline(y=w0_target*1e6, color='r', linestyle='--', label=f'Target: {w0_target*1e6:.0f} μm')\n", "ax.set_xlabel('Iteration')\n", "ax.set_ylabel('$w_0$ (μm)')\n", "ax.set_title('Waist Recovery')\n", "ax.legend()\n", "ax.grid(True, alpha=0.3)\n", "ax.text(0.02, 0.98, '(l)', transform=ax.transAxes, fontweight='bold', va='top')\n", "\n", "# Loss vs iteration\n", "ax = axes[1]\n", "ax.semilogy(range(len(loss_history)), loss_history, 'b-', linewidth=1.5)\n", "ax.set_xlabel('Iteration')\n", "ax.set_ylabel('Loss (MSE)')\n", "ax.set_title('Convergence')\n", "ax.grid(True, alpha=0.3)\n", "\n", "plt.tight_layout()\n", "plt.savefig('Figures/wavefronts_optimization.pdf', bbox_inches='tight')\n", "plt.savefig('Figures/wavefronts_optimization.png', dpi=300, bbox_inches='tight')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "publication-header", "metadata": {}, "source": [ "## Publication Figure\n", "\n", "Combined figure for the Janssen paper showing:\n", "- (a-c) Three Gaussian beams at z=0: identical intensity\n", "- (d-f) Their phase profiles: flat, converging, diverging \n", "- (g-i) Propagation in z: completely different evolution\n", "- (j) Why we store complex fields\n", "- (k) Gradient: sensitivity of focal intensity to waist\n", "- (l) Optimization: recovering waist from target focal spot" ] }, { "cell_type": "code", "execution_count": 37, "id": "publication-figure", "metadata": {}, "outputs": [ { "data": { "image/png": "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a9c2LTtgwAC6d+8OQGZmJvfeey9arZYlS5awevVqhg8fXmTdxozcPANeuXIl69evZ9++fYSGhjJ06FA6duxI165d2bt3r2m52267jRYtWgBw6623mh7n5uYC0KpVK7p06cKIESMAOHDggKns/v37AXjiiSd44IEHAP0+5MDAQF566SWOHj3KU089RZ06day+J99++y27d+9m9+7d3Hnnnabply5d4uLFi3z33Xd06dKF5ORkNm7cWKTs3r17GTBgAC1atKB///6m6ePHjycxMZGWLVty9uxZmjZtapr3ySefkJCQwF9//UVYWJjVNlU35t+RP/74g6+//pqFCxfi5+fntO+KqN4st9sajYamTZty5MgRJ7bKfvZs65s1a0ZwcDB9+/blzz//NG1vjVq0aMETTzzBa6+9RlxcHHXr1iUwMBCtVotWq7U69rBjx47s3r2brVu3EhYWxtdff82xY8fIycnhrbfe4rbbbiMvL4+NGzdy4MABmjdvTtOmTRk7diznz58nPT2dixcv8uCDD9KkSROGDh3K+fPnuXr1KsOGDWPx4sWsWrWKdu3a0aZNG/bt28fOnTvp1KkTf//9d5FtdP/+/YmMjOTmm2+mbt26LFy4kGXLlhX77XJHTk1qzp8/X+wHNTIyslwDcR2hT58+LFu2jA4dOuDl5cUNN9zAsmXLiux6AooNeg0NDWXQoEH873//IygoyLQLxeiuu+6idu3ajBo1is2bNzN79mz69evH1q1bad26NSkpKfz000/s3LmTzZs307p1a6t1WRtsu3//frZs2WLaxWPsSgRMG55Zs2axZs0ann76abp160ZqairvvPMOrVu35osvvuD8+fNW349atWpRt25d0xfWKCIigrCwMJ5++mn++ecfXnzxRe67774iZVu2bMmSJUs4fPgwS5YsAUCn07Fq1Sreeust/vnnHw4fPlyk2/raa69l6tSpREdHW21PdWT+HVmxYgWZmZn4+/sDzv2uiOrL1bbb5VHatn7WrFmsXLmSlStX0rJly2Lld+7cSUZGBv/++y8TJ05kypQpbN26FaBYAmTk6+tL3bp1ad26NS1atCAxMZGGDRvi5eXFu+++y8aNGxkzZgx9+vShWbNmpqRkxowZ3HjjjYSGhlK7dm1+/PFHjh8/zk8//UR0dDQ1atTggQce4MSJE0yZMoVhw4YB+u1/jx49+Oeff/joo48YO3asqS3GMUNarZYRI0YwdepUTpw4wb333uvQ99kZnJrUxMTEcOHChSLTEhMTqVu3rlPac+utt6LVauncuTMAN9xwAzqdrlhSY81DDz3EmTNnePDBB9FqtUXmhYaGsnbtWhRFoXfv3rz00kuMGjWKsWPH0qdPHyZMmMDYsWO5+eabTfPt1ahRI0aOHMnrr7/O+++/XySpufbaa3n77bd55JFH6N+/P3l5ebRp04bRo0eTnZ3N33//TVRUFA8//LDN0f7WaLVa5syZw88//0ynTp3477//6Nq1a5Flvv76axITE7n++utNR3lpNBquvfZann/+eXr06GFqu9EHH3zAe++9Z3c7qgPz78jEiRNp2bIlH3zwAeDc74qovlxtu10epW3re/bsSa1atejcuTN+fn4UFBRw+PBhU/nWrVuTmppK+/bteffdd4mLi6NTp0707t2bvXv38tFHH5VYf+PGjdm+fTvBwcFMmzaNt99+m5tuuon4+Hg6derEE088wYABA+jZsycTJ07ksccew9fXl3nz5nHo0CFat27NiRMn+OWXX1AUhaioKG6//XbOnDnD0KFDAZg0aRJpaWm0b9+eH374odg22mjEiBGcOXOGfv36UaNGDQe8u86lqKoTRuUaLFiwgAULFuDj40NERASTJk2iS5cufPnll3To0MFZzSqXAwcO0KpVK/bs2UObNm2qpM6HHnqIc+fOudWRB6JsjN+R+Ph4Bg8eTKNGjbjnnns4fvw4X3zxBRERETz//PPObqaoRixjctSoUcTGxvLvv/9Sq1YtZzdPlFFSUhL16tVj3rx53H333c5uToXZPulIFejTpw/jxo2jQ4cOREREcPr0aTIyMrjuuuuc2awy27VrFzfffDMvvPBClSU0onowfkf27t1r2gWYlZWFqqosXryYdevWObmForqxjMkNGzbQvn17SWjcUFJSEg0bNqR///5Fxk26M6f21AAMHDiQpUuXsmDBAvbu3UtUVFS5Tm4khKeaMGEC11xzTZHz0mzYsIFvvvmGuXPnOrFloroyj8lHH32UoUOHVuiEn0I4itOTGiGEEEIIR3D6GYWFEEIIIRxBkhohhBBCeARJaoQQQgjhEZx69JMQonIkJSXx22+/ma6zJVxLVlYWp06donfv3kRERDi7OZVOp9MRHx9PcHCw1ZOICmFJ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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create publication figure\n", "import string\n", "from matplotlib_scalebar.scalebar import ScaleBar\n", "\n", "fig = plt.figure(figsize=(7, 8.0))\n", "# Grid: 46 rows x 30 cols for finer control with tighter spacing\n", "gs = mpgs.GridSpec(46, 30, figure=fig, hspace=0.4, wspace=0.4)\n", "\n", "subfig_idx = 0\n", "def get_label():\n", " global subfig_idx\n", " label = f'({string.ascii_lowercase[subfig_idx]})'\n", " subfig_idx += 1\n", " return label\n", "\n", "extent_mm = [-physical_size/2*1e3, physical_size/2*1e3,\n", " -physical_size/2*1e3, physical_size/2*1e3]\n", "\n", "# Column positions: 8 cols per figure, 2 col gap between them\n", "# 0:1 empty, 1:9 fig1, 9:11 gap, 11:19 fig2, 19:21 gap, 21:29 fig3, 29:30 empty\n", "col_starts = [1, 11, 21]\n", "col_width = 8\n", "\n", "# Row layout (46 rows total):\n", "# Row 1 (a-c): rows 1:9 - Intensities (8 rows)\n", "# Gap: rows 9:10 (1 row)\n", "# Row 2 (d-f): rows 10:18 - Phases (8 rows)\n", "# Gap: rows 18:19 (1 row)\n", "# Colorbar: rows 19:20 (1 row)\n", "# Gap: rows 20:22 (2 rows)\n", "# Row 3 (g-i): rows 22:28 - Propagation (6 rows)\n", "# Gap: rows 28:32 (4 rows) - increased from 2 to 4\n", "# Row 4 (j-l): rows 32:40 - Why complex, Gradient, Optimization (8 rows)\n", "\n", "# Row 1: Intensities at z=0 (a-c)\n", "titles = ['Collimated', 'Converging', 'Diverging']\n", "intensities = [I_collimated, I_converging, I_diverging]\n", "\n", "for idx in range(3):\n", " ax = fig.add_subplot(gs[1:9, col_starts[idx]:col_starts[idx]+col_width])\n", " im = ax.imshow(intensities[idx], cmap='hot', extent=extent_mm)\n", " # Title inside figure, top center, white\n", " ax.text(0.5, 0.95, titles[idx], transform=ax.transAxes,\n", " fontweight='bold', va='top', ha='center', color='white')\n", " ax.axis('off')\n", " # Add scalebar (dx is in mm since extent is in mm)\n", " scalebar = ScaleBar(1e-3, 'm', length_fraction=0.3, location='lower right',\n", " color='white', box_alpha=0, font_properties={'size': 6})\n", " ax.add_artist(scalebar)\n", " # Label outside top-left corner\n", " ax.text(-0.05, 1.05, get_label(), transform=ax.transAxes,\n", " fontweight='bold', va='bottom', ha='right')\n", "\n", "# Row 2: Phases at z=0 (d-f)\n", "phases = [phase_collimated, phase_converging, phase_diverging]\n", "vmax_phase = jnp.pi # Use pi for phase range\n", "\n", "for idx in range(3):\n", " ax = fig.add_subplot(gs[10:18, col_starts[idx]:col_starts[idx]+col_width])\n", " phase_masked = jnp.where(amplitude > 0.01, phases[idx], jnp.nan)\n", " im_phase = ax.imshow(phase_masked, cmap='RdBu_r', extent=extent_mm,\n", " vmin=-vmax_phase, vmax=vmax_phase)\n", " # Title inside figure, top center, black\n", " ax.text(0.5, 0.95, f'Phase: {titles[idx]}', transform=ax.transAxes,\n", " fontweight='bold', va='top', ha='center', color='black')\n", " # Turn off ticks but keep spines for the box\n", " ax.set_xticks([])\n", " ax.set_yticks([])\n", " # Add box around the figure\n", " for spine in ax.spines.values():\n", " spine.set_visible(True)\n", " spine.set_linewidth(1)\n", " spine.set_edgecolor('black')\n", " # Add scalebar (dx is in mm since extent is in mm)\n", " scalebar = ScaleBar(1e-3, 'm', length_fraction=0.3, location='lower right',\n", " color='black', box_alpha=0, font_properties={'size': 6})\n", " ax.add_artist(scalebar)\n", " # Label outside top-left corner\n", " ax.text(-0.05, 1.05, get_label(), transform=ax.transAxes,\n", " fontweight='bold', va='bottom', ha='right')\n", "\n", "# Horizontal colorbar for phase - 1 row thick\n", "cbar_ax = fig.add_subplot(gs[19:20, 1:29])\n", "cbar = fig.colorbar(im_phase, cax=cbar_ax, orientation='horizontal')\n", "cbar.set_label('Phase (rad)', fontweight='bold', labelpad=2)\n", "cbar.set_ticks([-jnp.pi, -jnp.pi/2, 0, jnp.pi/2, jnp.pi])\n", "cbar.set_ticklabels([r'$-\\pi$', r'$-\\pi/2$', r'$0$', r'$\\pi/2$', r'$\\pi$'])\n", "\n", "# Row 3: Propagation x-z (g-i)\n", "xz_data = [xz_collimated, xz_converging, xz_diverging]\n", "extent_xz = [0, z_positions[-1]*1e3, x[0]*1e3, x[-1]*1e3]\n", "\n", "for idx in range(3):\n", " ax = fig.add_subplot(gs[22:28, col_starts[idx]:col_starts[idx]+col_width])\n", " data_norm = xz_data[idx] / jnp.max(xz_data[idx])\n", " im = ax.imshow(data_norm.T, cmap='hot', extent=extent_xz,\n", " aspect='auto', origin='lower')\n", " ax.set_xlabel('z (mm)')\n", " ax.set_ylabel('x (mm)')\n", " # Title inside figure, top center, white\n", " ax.text(0.5, 0.95, f'Propagation: {titles[idx]}', transform=ax.transAxes,\n", " fontweight='bold', va='top', ha='center', color='white')\n", " # Label outside top-left corner\n", " ax.text(-0.05, 1.05, get_label(), transform=ax.transAxes,\n", " fontweight='bold', va='bottom', ha='right')\n", "\n", "# Row 4: (j) Why complex, (k) Gradient, (l) Optimization\n", "\n", "# (j) Why complex - text schematic\n", "ax = fig.add_subplot(gs[32:40, col_starts[0]:col_starts[0]+col_width])\n", "ax.text(0.5, 0.80, 'Same $I$ at $z=0$', ha='center', fontsize=8, fontweight='bold')\n", "ax.text(0.5, 0.55, '↓', ha='center', fontsize=14)\n", "ax.text(0.5, 0.35, 'Different $\\\\phi$', ha='center', fontsize=8, fontweight='bold', color='darkred')\n", "ax.text(0.5, 0.15, '↓', ha='center', fontsize=14)\n", "ax.text(0.5, 0.0, 'Different propagation', ha='center', fontsize=8, fontweight='bold', color='darkblue')\n", "ax.set_xlim(0, 1)\n", "ax.set_ylim(-0.1, 1)\n", "ax.axis('off')\n", "ax.set_title('Why Complex Fields?')\n", "# Label outside top-left corner\n", "ax.text(-0.05, 1.05, get_label(), transform=ax.transAxes,\n", " fontweight='bold', va='bottom', ha='right')\n", "\n", "# (k) Gradient map - with scalebar and box outline like phase images\n", "ax = fig.add_subplot(gs[32:40, col_starts[1]:col_starts[1]+col_width])\n", "extent_um = [-physical_size/2*1e6, physical_size/2*1e6,\n", " -physical_size/2*1e6, physical_size/2*1e6]\n", "vmax = jnp.max(jnp.abs(dI_dw0_map))\n", "im = ax.imshow(dI_dw0_map, cmap='RdBu_r', extent=extent_um, vmin=-vmax, vmax=vmax)\n", "ax.set_xlim(-50, 50)\n", "ax.set_ylim(-50, 50)\n", "# Title inside figure, top center, black\n", "ax.text(0.5, 0.95, '$\\\\partial I(z{=}f) / \\\\partial w_0$', transform=ax.transAxes,\n", " fontweight='bold', va='top', ha='center', color='black')\n", "# Turn off ticks but keep spines for the box\n", "ax.set_xticks([])\n", "ax.set_yticks([])\n", "# Add box around the figure\n", "for spine in ax.spines.values():\n", " spine.set_visible(True)\n", " spine.set_linewidth(1)\n", " spine.set_edgecolor('black')\n", "# Add scalebar (extent is in um, so 1e-6 m per unit)\n", "scalebar = ScaleBar(1e-6, 'm', length_fraction=0.3, location='lower right',\n", " color='black', box_alpha=0, font_properties={'size': 6})\n", "ax.add_artist(scalebar)\n", "# Label outside top-left corner\n", "ax.text(-0.05, 1.05, get_label(), transform=ax.transAxes,\n", " fontweight='bold', va='bottom', ha='right')\n", "\n", "# (l) Optimization convergence\n", "ax = fig.add_subplot(gs[32:40, col_starts[2]:col_starts[2]+col_width])\n", "ax.plot(range(len(w0_history)), [w*1e6 for w in w0_history], 'b-', linewidth=1.5)\n", "ax.axhline(y=w0_target*1e6, color='r', linestyle='--', linewidth=1, label=f'Target')\n", "ax.set_xlabel('Iteration')\n", "ax.set_ylabel('$w_0$ (μm)')\n", "ax.set_title('Waist Recovery')\n", "ax.legend(loc='upper right', fontsize=5)\n", "ax.grid(True, alpha=0.3)\n", "# Label outside top-left corner\n", "ax.text(-0.05, 1.05, get_label(), transform=ax.transAxes,\n", " fontweight='bold', va='bottom', ha='right')\n", "\n", "plt.savefig('Figures/wavefronts_publication_figure.pdf', bbox_inches='tight',\n", " facecolor='white', edgecolor='none')\n", "plt.savefig('Figures/wavefronts_publication_figure.png', dpi=300, bbox_inches='tight',\n", " facecolor='white', edgecolor='none')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "summary", "metadata": {}, "source": [ "markdown## Summary\n", "\n", "This tutorial demonstrated:\n", "\n", "1. **Complex field representation**: Storing both amplitude and phase is essential for wave optics\n", "2. **Phase determines propagation**: Beams with identical intensity but different phase evolve completely differently\n", "3. **Differentiability**: JAX enables computing gradients of any downstream quantity w.r.t. beam parameters\n", "4. **Inverse problems**: Gradient descent can recover beam parameters from target specifications\n", "\n", "### Key Functions\n", "\n", "| Function | Description |\n", "|----------|-------------|\n", "| `gaussian_beam()` | Generate Gaussian beam field |\n", "| `angular_spectrum_prop()` | Propagate field using angular spectrum method |\n", "| `jax.grad()` | Compute gradients for optimization |" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.10.0" } }, "nbformat": 4, "nbformat_minor": 5 }