{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a1b2c3d4",
   "metadata": {},
   "source": [
    "# Simulation Diagnostics\n",
    "\n",
    "`scene.trace()` returns a `SimulationResult` that contains both the per-detector\n",
    "results and a complete flux budget for the simulation. Understanding this object\n",
    "is essential for verifying that a simulation is physically correct.\n",
    "\n",
    "**Flux accounting.** Every watt launched by a source must end up somewhere:\n",
    "\n",
    "```\n",
    "total_flux_in = total_flux_detected + total_flux_absorbed + total_flux_bulk_absorbed\n",
    "              + total_flux_escaped  + total_flux_lost\n",
    "```\n",
    "\n",
    "`total_flux_absorbed` is surface absorption (an `AbsorbingComponent` a ray hit\n",
    "directly); `total_flux_bulk_absorbed` is Beer-Lambert absorption accumulated\n",
    "while a ray travels through a lossy glass (nonzero extinction coefficient `k`)\n",
    "-- automatic whenever a lens/doublet uses such a material, no configuration\n",
    "needed. The demo lens below uses N-BK7, whose `k` at 0.55 µm is small but not\n",
    "exactly zero, so `total_flux_bulk_absorbed` reads a small (<0.1%) but genuine\n",
    "value throughout this notebook rather than a rounding artefact.\n",
    "\n",
    "The `flux_conservation_error` field tells you how well the simulation preserves\n",
    "energy. Values below 1e-4 are typical. The sections below build these checks up\n",
    "by hand; the \"Self-diagnosing results\" section further down runs the same\n",
    "checks automatically on every trace."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b2c3d4e5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:06.384867Z",
     "iopub.status.busy": "2026-08-18T17:54:06.383874Z",
     "iopub.status.idle": "2026-08-18T17:54:09.490348Z",
     "shell.execute_reply": "2026-08-18T17:54:09.490348Z"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "from optiland.coordinate_system import CoordinateSystem\n",
    "from optiland.nonsequential import (\n",
    "    NSQScene, Spectrum,\n",
    "    CollimatedSourceConfig, PointSourceConfig,\n",
    "    IrradianceDetectorConfig,\n",
    "    LensConfig,\n",
    ")\n",
    "\n",
    "spec = Spectrum.monochromatic(0.55)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c3d4e5f6",
   "metadata": {},
   "source": [
    "## 1. Full SimulationResult Structure"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d4e5f6a7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:09.492354Z",
     "iopub.status.busy": "2026-08-18T17:54:09.492354Z",
     "iopub.status.idle": "2026-08-18T17:54:09.763628Z",
     "shell.execute_reply": "2026-08-18T17:54:09.763628Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== SimulationResult ===\n",
      "  trace_time_sec         : 0.217 s\n",
      "  num_rays_total         : 50,000\n",
      "  num_rays_absorbed      : 0\n",
      "  num_rays_escaped       : 4,145\n",
      "  num_rays_flux_killed   : 0\n",
      "  num_rays_depth_killed  : 0\n",
      "\n",
      "  total_flux_in          : 1.000000 W\n",
      "  total_flux_detected    : 0.916491 W\n",
      "  total_flux_absorbed    : 0.000000 W\n",
      "  total_flux_bulk_absorbed: 0.000672 W\n",
      "  total_flux_escaped     : 0.082837 W\n",
      "  total_flux_lost        : 0.000000 W\n",
      "  flux_conservation_error: 4.16e-17\n",
      "\n",
      "  Detectors              : ['D']\n"
     ]
    }
   ],
   "source": [
    "scene = NSQScene()\n",
    "scene.add_source(\n",
    "    'S', CoordinateSystem(z=-80),\n",
    "    CollimatedSourceConfig(spectrum=spec, total_flux=1.0, aperture_radius=10.0),\n",
    ")\n",
    "scene.add_lens(\n",
    "    'L', CoordinateSystem(z=0),\n",
    "    LensConfig(r1=50, r2=-50, thickness=5, material='N-BK7', front_aperture_radius=12.5),\n",
    ")\n",
    "# f = 49.1 mm and a 47.4 mm back focal distance put the focus at z = 52.4 mm.\n",
    "scene.add_detector(\n",
    "    'D', CoordinateSystem(z=52.4),\n",
    "    IrradianceDetectorConfig(width=6, height=6, num_pixels_x=128, num_pixels_y=128),\n",
    ")\n",
    "\n",
    "result = scene.trace(num_rays=50_000, seed=42)\n",
    "\n",
    "# Print every field of SimulationResult\n",
    "print(\"=== SimulationResult ===\")\n",
    "print(f\"  trace_time_sec         : {result.trace_time_sec:.3f} s\")\n",
    "print(f\"  num_rays_total         : {result.num_rays_total:,}\")\n",
    "print(f\"  num_rays_absorbed      : {result.num_rays_absorbed:,}\")\n",
    "print(f\"  num_rays_escaped       : {result.num_rays_escaped:,}\")\n",
    "print(f\"  num_rays_flux_killed   : {result.num_rays_flux_killed:,}\")\n",
    "print(f\"  num_rays_depth_killed  : {result.num_rays_depth_killed:,}\")\n",
    "print()\n",
    "print(f\"  total_flux_in          : {result.total_flux_in:.6f} W\")\n",
    "print(f\"  total_flux_detected    : {result.total_flux_detected:.6f} W\")\n",
    "print(f\"  total_flux_absorbed    : {result.total_flux_absorbed:.6f} W\")\n",
    "print(f\"  total_flux_bulk_absorbed: {result.total_flux_bulk_absorbed:.6f} W\")\n",
    "print(f\"  total_flux_escaped     : {result.total_flux_escaped:.6f} W\")\n",
    "print(f\"  total_flux_lost        : {result.total_flux_lost:.6f} W\")\n",
    "print(f\"  flux_conservation_error: {result.flux_conservation_error:.2e}\")\n",
    "print()\n",
    "print(\"  Detectors              :\", list(result.detectors.keys()))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e5f6a7b8",
   "metadata": {},
   "source": [
    "## 2. Flux Budget Pie Chart"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f6a7b8c9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:09.765634Z",
     "iopub.status.busy": "2026-08-18T17:54:09.765634Z",
     "iopub.status.idle": "2026-08-18T17:54:09.821400Z",
     "shell.execute_reply": "2026-08-18T17:54:09.821400Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHqCAYAAABfi6TIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQ0UlEQVR4nO3dd3gU1cIG8Hf7JpteIJ0EQui9o9IREBCFK1zUSxcQsfAh9ivYrteCchXFRlFQsTdUlA7SCU0gEEiF9N6zdb4/kJVQEzbJ2d15f8/DA2xmZ98kkHfnzJkzCkmSJBAREdENU4oOQERE5OpYpkRERA5imRIRETmIZUpEROQglikREZGDWKZEREQOYpkSERE5iGVKRETkIJYpERGRg1imRBeJjo7GlClTGv11BwwYgPbt2zfaaw0YMKBRXotILlimJAurVq2CQqG44q8nnnhCdDy3s2vXLixatAjFxcWioxA1CrXoAESN6fnnn0dMTEyNxxrriFBOdu3aheeeew5TpkyBn5+f6DhEDY5lSrIyYsQIdO/eXXQMInIzHOYluoZFixZBoVBc9viFYePU1FQAwObNm6FUKvHss8/W2O6zzz6DQqHAsmXLavV68fHx6Nu3Lzw8PBATE4P33nvvmq97wdatW6FQKLB169Yaj3/wwQdo0aIFPDw80LNnT+zYseOKr5uWlobbb78dBoMBTZo0wbx58/Dbb79dcZ979+7F8OHD4evrC09PT/Tv3x87d+60f3zRokVYsGABACAmJsY+nH5pZiJ3wiNTkpWSkhLk5+fXeCwoKMjh/Q4aNAhz5szByy+/jDvuuANdu3ZFVlYWHnzwQQwZMgSzZ8++7j6Kiopw2223Yfz48Zg4cSK+/PJL3H///dBqtZg2bVqdMy1fvhyzZs1C37598cgjjyA5ORm33347AgICEBkZad+uoqICgwYNQlZWFh5++GGEhITgs88+w5YtWy7b5+bNmzFixAh069YNCxcuhFKpxMqVKzFo0CDs2LEDPXv2xNixY5GYmIjPP/8cb775pv3rGxwcXOfPgchlSEQysHLlSgnAFX9drFmzZtLkyZPtf1+4cOFl21y8v5SUFPtjFRUVUmxsrNSuXTupurpaGjlypOTj4yOlpaVdN1///v0lANLixYvtjxmNRqlz585SkyZNJJPJdNXXlSRJ2rJliwRA2rJliyRJkmQymaQmTZpInTt3loxGo327Dz74QAIg9e/f3/7Y4sWLJQDS999/b3+sqqpKat26dY192mw2qWXLltKwYcMkm81m37ayslKKiYmRhg4dan/stddeu2JOInfFYV6SlXfeeQcbNmyo8au+eHp6YtWqVUhISEC/fv3w888/480330RUVFStnq9WqzFr1iz737VaLWbNmoXc3FzEx8fXKcuBAweQm5uL2bNnQ6vV2h+fMmUKfH19a2y7fv16hIeH4/bbb7c/ptfrcd9999XY7vDhwzh9+jTuvvtuFBQUID8/H/n5+aioqMDgwYOxfft22Gy2OuUkchcc5iVZ6dmzZ4NOQLrppptw//3345133sGwYcPqNDwbFhYGg8FQ47G4uDgAQGpqKnr37l3rfaWlpQEAWrZsWeNxjUaD5s2bX7ZtixYtLjs3HBsbW+Pvp0+fBgBMnjz5qq9bUlICf3//WuckchcsU6JruNLkIwCwWq1XfNxoNNon7CQlJaGyshKenp7C8tSnC0edr732Gjp37nzFbby8vBo8B5EzYpkSXcOFo6zi4uIa10teOPK71MKFC5GQkIDXX38djz/+OJ544gm89dZbtXqtzMxMVFRU1Dg6TUxMBHB+ZaZL81zs0jzNmjUDcP5octCgQfbHzWYzUlJS0KlTpxrbnjhxApIk1SjrM2fO1NhnixYtAAA+Pj4YMmTINT+Xq5U+kbviOVOia7hQINu3b7c/VlFRgY8//viybffu3YvXX38djzzyCObPn48FCxZg6dKl2LZtW61ey2Kx4P3337f/3WQy4f3330dwcDC6det21TxWqxUffPBBjX11794dwcHBeO+992AymeyPr1q16rIiHjZsGDIyMvDjjz/aH6uursaHH35YY7tu3bqhRYsWeP3111FeXn5Z/ry8PPufL7wh4ApIJBc8MiW6hltvvRVRUVGYPn06FixYAJVKhRUrViA4OBjp6en27aqrqzF58mS0bNkSL730EgDgueeew08//YSpU6fizz//vOx86KXCwsLwyiuvIDU1FXFxcfjiiy9w+PBhfPDBB9BoNACAdu3aoXfv3njyySdRWFiIgIAArF27FhaLpca+NBoNXnzxRcyaNQuDBg3ChAkTkJKSgpUrV152znTWrFlYunQpJk6ciIcffhihoaH49NNPodfrAfx9lKlUKvHRRx9hxIgRaNeu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",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "labels = ['Detected', 'Absorbed', 'Bulk absorbed', 'Escaped', 'Lost']\n",
    "values = [\n",
    "    result.total_flux_detected,\n",
    "    result.total_flux_absorbed,\n",
    "    result.total_flux_bulk_absorbed,\n",
    "    result.total_flux_escaped,\n",
    "    result.total_flux_lost,\n",
    "]\n",
    "# Filter out zero categories\n",
    "labels_filt = [l for l, v in zip(labels, values) if v > 1e-9]\n",
    "values_filt = [v for v in values if v > 1e-9]\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(5, 5))\n",
    "ax.pie(values_filt, labels=labels_filt, autopct='%1.1f%%', startangle=90)\n",
    "ax.set_title('Flux budget')\n",
    "plt.tight_layout()\n",
    "plt.show()\n",
    "plt.close(fig)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7b8c9d0",
   "metadata": {},
   "source": [
    "## 3. Effect of Ray Count on Accuracy\n",
    "\n",
    "More rays give a smoother irradiance map and a more reliable flux estimate.\n",
    "Here we trace the same scene with different ray counts and compare peak irradiance:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b8c9d0e1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:09.823071Z",
     "iopub.status.busy": "2026-08-18T17:54:09.823071Z",
     "iopub.status.idle": "2026-08-18T17:54:10.509235Z",
     "shell.execute_reply": "2026-08-18T17:54:10.509235Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def build_scene():\n",
    "    s = NSQScene()\n",
    "    s.add_source('S', CoordinateSystem(z=-80),\n",
    "                 CollimatedSourceConfig(spectrum=spec, total_flux=1.0, aperture_radius=10.0))\n",
    "    s.add_lens('L', CoordinateSystem(z=0),\n",
    "               LensConfig(r1=50, r2=-50, thickness=5, material='N-BK7',\n",
    "                          front_aperture_radius=12.5))\n",
    "    s.add_detector('D', CoordinateSystem(z=52.4),\n",
    "                   IrradianceDetectorConfig(width=6, height=6,\n",
    "                                            num_pixels_x=64, num_pixels_y=64))\n",
    "    return s\n",
    "\n",
    "ray_counts = [1_000, 5_000, 20_000, 50_000]\n",
    "peaks = []\n",
    "for n in ray_counts:\n",
    "    r = build_scene().trace(num_rays=n, seed=42)\n",
    "    peaks.append(r.detectors['D'].irradiance.max())\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3))\n",
    "ax.semilogx(ray_counts, peaks, 'o-')\n",
    "ax.axhline(peaks[-1], color='r', linestyle='--', label=f'Reference ({ray_counts[-1]:,} rays)')\n",
    "ax.set_xlabel('Number of rays')\n",
    "ax.set_ylabel('Peak irradiance [W/mm²]')\n",
    "ax.set_title('Convergence of peak irradiance with ray count')\n",
    "ax.legend()\n",
    "ax.grid(True, alpha=0.4)\n",
    "plt.tight_layout()\n",
    "plt.show()\n",
    "plt.close(fig)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c9d0e1f2",
   "metadata": {},
   "source": [
    "## 4. Controlling Ray Termination\n",
    "\n",
    "Two parameters decide when a ray stops being traced:\n",
    "\n",
    "- **`max_depth`** (default 16): a ray is killed outright after this many\n",
    "  surface hits. Every interaction counts, so a ray passing through a singlet\n",
    "  already uses two (front face, back face) before it reaches a detector.\n",
    "  This is the one loss mechanism that is an *inherent, reported bias* --\n",
    "  raise it if deep paths (internal reflections, ghosts) matter to the\n",
    "  result; lower it to speed up runs where they do not.\n",
    "\n",
    "- **`min_flux_fraction`** (default 1e-6): below this fraction of a ray's\n",
    "  initial flux, the ray is **Russian-rouletted**, not deterministically\n",
    "  killed -- with probability *p* it is terminated, and survivors have their\n",
    "  flux boosted by `1/(1-p)` to compensate. This is unbiased in expectation\n",
    "  (unlike a hard cutoff, which would systematically lose flux), so raising\n",
    "  it trades variance for speed rather than introducing bias outright.\n",
    "\n",
    "Flux removed by either mechanism is reported as `total_flux_lost`, and it is\n",
    "part of the ledger, so `flux_conservation_error` stays near zero even when\n",
    "rays are being killed. `SimulationResult.diagnostics` (see below) separates\n",
    "the two into `depth_truncated_flux_fraction` and `rr_killed_flux_fraction`\n",
    "so a large `total_flux_lost` can be traced back to whichever mechanism\n",
    "caused it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d0e1f2a3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:10.510240Z",
     "iopub.status.busy": "2026-08-18T17:54:10.510240Z",
     "iopub.status.idle": "2026-08-18T17:54:10.956408Z",
     "shell.execute_reply": "2026-08-18T17:54:10.956408Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "max_depth=  1: detected 0.00000 W  (     0 rays)  lost=1.00000 W  depth_killed=30,000  err=2.2e-16\n",
      "max_depth=  2: detected 0.00000 W  (     0 rays)  lost=0.95780 W  depth_killed=28,753  err=0.0e+00\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "max_depth=  5: detected 0.91656 W  (27,515 rays)  lost=0.00093 W  depth_killed=    28  err=2.8e-16\n",
      "max_depth= 20: detected 0.91656 W  (27,515 rays)  lost=0.00000 W  depth_killed=     0  err=2.8e-16\n"
     ]
    }
   ],
   "source": [
    "# max_depth must be large enough for light to reach the detector at all:\n",
    "# a singlet needs two hits (front and back face) before the ray gets there.\n",
    "for max_b in [1, 2, 5, 20]:\n",
    "    r = build_scene().trace(num_rays=30_000, seed=42,\n",
    "                            max_depth=max_b, min_flux_fraction=1e-8)\n",
    "    irr = r.detectors['D']\n",
    "    print(f\"max_depth={max_b:>3}: detected {irr.total_flux:.5f} W  \"\n",
    "          f\"({irr.num_rays_hit:>6,} rays)  \"\n",
    "          f\"lost={r.total_flux_lost:.5f} W  \"\n",
    "          f\"depth_killed={r.num_rays_depth_killed:>6,}  \"\n",
    "          f\"err={r.flux_conservation_error:.1e}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1f2a3b4",
   "metadata": {},
   "source": [
    "## 5. Reproducibility with `seed`\n",
    "\n",
    "Setting `seed` fixes the NumPy random number generator. Two traces with the\n",
    "same `seed` produce identical results. Omitting `seed` gives a different result\n",
    "each time (useful for estimating Monte Carlo variance)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f2a3b4c5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:10.958415Z",
     "iopub.status.busy": "2026-08-18T17:54:10.957414Z",
     "iopub.status.idle": "2026-08-18T17:54:11.159626Z",
     "shell.execute_reply": "2026-08-18T17:54:11.159626Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Same seed (7, 7)   : flux1 = 0.919287 W,  flux2 = 0.919287 W  → identical: True\n",
      "Diff seed (7, 99)  : flux1 = 0.919287 W,  flux3 = 0.913693 W  → same: False\n"
     ]
    }
   ],
   "source": [
    "r1 = build_scene().trace(num_rays=10_000, seed=7)\n",
    "r2 = build_scene().trace(num_rays=10_000, seed=7)  # same seed\n",
    "r3 = build_scene().trace(num_rays=10_000, seed=99) # different seed\n",
    "\n",
    "f1 = r1.detectors['D'].total_flux\n",
    "f2 = r2.detectors['D'].total_flux\n",
    "f3 = r3.detectors['D'].total_flux\n",
    "\n",
    "print(f\"Same seed (7, 7)   : flux1 = {f1:.6f} W,  flux2 = {f2:.6f} W  → identical: {np.isclose(f1, f2)}\")\n",
    "print(f\"Diff seed (7, 99)  : flux1 = {f1:.6f} W,  flux3 = {f3:.6f} W  → same: {np.isclose(f1, f3)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3b4c5d6",
   "metadata": {},
   "source": [
    "## 6. Batch Size\n",
    "\n",
    "`batch_size` sets how many rays are traced in one chunk. It is a **performance\n",
    "control, not a physical parameter**: the result must not depend on it, beyond\n",
    "Monte Carlo noise from consuming the random stream differently.\n",
    "\n",
    "The default of 16,384 rays per batch is tuned so the working set stays in CPU\n",
    "cache, which is where the trace loop is fastest. Raising it costs speed without\n",
    "saving memory, and raising it beyond the ray count has no effect at all.\n",
    "Notebook 10 measures the speed curve directly.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a4b5c6d7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:11.161631Z",
     "iopub.status.busy": "2026-08-18T17:54:11.161631Z",
     "iopub.status.idle": "2026-08-18T17:54:11.810844Z",
     "shell.execute_reply": "2026-08-18T17:54:11.810844Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch_size=    1,000: flux = 0.915442 W  (conservation error 2.8e-16)\n",
      "batch_size=    5,000: flux = 0.915442 W  (conservation error 2.6e-16)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch_size=   20,000: flux = 0.915442 W  (conservation error 4.9e-16)\n",
      "batch_size=1,000,000: flux = 0.915442 W  (conservation error 4.9e-16)\n",
      "\n",
      "Spread across batch sizes: 2.22e-16 W (0.00% - Monte Carlo noise only)\n"
     ]
    }
   ],
   "source": [
    "fluxes = {}\n",
    "for bs in (1_000, 5_000, 20_000, 1_000_000):\n",
    "    r = build_scene().trace(num_rays=20_000, seed=42, batch_size=bs)\n",
    "    fluxes[bs] = r.detectors['D'].total_flux\n",
    "    print(f\"batch_size={bs:>9,}: flux = {fluxes[bs]:.6f} W  \"\n",
    "          f\"(conservation error {r.flux_conservation_error:.1e})\")\n",
    "\n",
    "spread = max(fluxes.values()) - min(fluxes.values())\n",
    "print(f\"\\nSpread across batch sizes: {spread:.2e} W \"\n",
    "      f\"({spread / np.mean(list(fluxes.values())) * 100:.2f}% - Monte Carlo noise only)\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa970be0",
   "metadata": {},
   "source": [
    "## 7. Self-Diagnosing Results: `result.report()`\n",
    "\n",
    "Sections 2-6 above hand-built several checks: does the flux ledger balance,\n",
    "how much is `max_depth`/`min_flux_fraction` losing, does the result depend\n",
    "on `batch_size`. `SimulationResult.diagnostics` (a `Diagnostics` object)\n",
    "computes the same kind of checks automatically, at negligible extra cost\n",
    "(a few running counters plus one pass over the detectors), and turns them\n",
    "into an explicit, threshold-based warning list rather than numbers you have\n",
    "to know to go looking for:\n",
    "\n",
    "- **`depth_truncated_flux_fraction`** -- fraction of launched flux killed by\n",
    "  the hard `max_depth` cutoff. The *only* loss mechanism here that is an\n",
    "  inherent, reported *bias*; a nonzero value is a direct signal to raise\n",
    "  `max_depth` if those deep paths matter.\n",
    "- **`rr_killed_flux_fraction`** -- fraction killed by Russian roulette\n",
    "  (section 4). Unbiased in expectation, so a nonzero value means the\n",
    "  per-trace estimator is noisy, not necessarily wrong.\n",
    "- **`flux_conservation_error`** -- the same field printed in section 1,\n",
    "  copied here for convenience.\n",
    "- **`unreached_geometry`** -- names of scene components no ray ever hit over\n",
    "  the whole trace: usually a misplaced or mis-oriented surface, occasionally\n",
    "  a deliberately unused spare aperture.\n",
    "- **`detectors`** -- a `DetectorDiagnostic` per detector: `mean_hits_per_pixel`,\n",
    "  `undersampled` (shot noise dominates the map below ~10 hits/pixel), and\n",
    "  `rays_needed_for_5pct` (an estimate of the ray count that would bring an\n",
    "  undersampled detector to ~5% relative Poisson error).\n",
    "- **`medium_stack_underflows`**, **`split_budget_saturated`** -- always 0 /\n",
    "  `False` for scenes like the ones in this notebook; reserved for a future\n",
    "  runtime medium-nesting stack and for scenes using bounded ghost-path\n",
    "  splitting, respectively.\n",
    "\n",
    "`result.report()` renders all of this as text with a trailing warning\n",
    "section; `repr(result)` shows just a warning count, so a problem is visible\n",
    "even from a bare REPL echo. Re-running the section 1 scene below is a\n",
    "realistic example, not a contrived one -- and it already has something to\n",
    "say."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c76f2d75",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:11.812858Z",
     "iopub.status.busy": "2026-08-18T17:54:11.812858Z",
     "iopub.status.idle": "2026-08-18T17:54:11.815884Z",
     "shell.execute_reply": "2026-08-18T17:54:11.815884Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NSQ trace diagnostics:\n",
      "  depth_truncated_flux_fraction: 0.0000%\n",
      "  rr_killed_flux_fraction:       0.0000%\n",
      "  flux_conservation_error:       0.0000%\n",
      "  unreached_geometry:            ['L.edge']\n",
      "  medium_stack_underflows:       0\n",
      "  split_budget_saturated:        False\n",
      "  detectors:\n",
      "    D: 45855 hits, 2.80 mean hits/pixel [undersampled]\n",
      "Warnings:\n",
      "  - 1 component(s) were never hit by any ray: L.edge. Check placement/orientation, or ignore if intentionally unused.\n",
      "  - Detector 'D' is undersampled: 2.8 mean hits/pixel (< 10), shot noise dominates the map; ~7,146,003 rays would bring it to ~5% relative error.\n",
      "\n",
      "SimulationResult(num_rays_total=50000, detectors=['D'], total_flux_in=1, total_flux_detected=0.916491, flux_conservation_error=4.163e-17, 2 diagnostic warning(s))\n"
     ]
    }
   ],
   "source": [
    "# Reuse the well-behaved scene from section 1.\n",
    "print(result.report())\n",
    "print()\n",
    "print(repr(result))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9630917d",
   "metadata": {},
   "source": [
    "Two warnings, and both are informative rather than alarming:\n",
    "\n",
    "- `L.edge` (the lens's cylindrical barrel) is unreached -- expected here,\n",
    "  since a 10 mm-radius collimated beam never gets near the 12.5 mm-radius\n",
    "  barrel of a lens it enters straight down the axis. This is the \"ignore if\n",
    "  intentionally unused\" case the docstring calls out.\n",
    "- Detector `D` is undersampled: 128x128 = 16,384 pixels but only ~46,000 hits,\n",
    "  so `mean_hits_per_pixel` is well under the 10-hit shot-noise floor. This\n",
    "  *is* actionable -- it is the same convergence question section 3 asked by\n",
    "  hand, now with a concrete ray-count estimate (`rays_needed_for_5pct`)\n",
    "  attached instead of a squint-and-guess plot.\n",
    "\n",
    "### Tripping the warnings on purpose\n",
    "\n",
    "To see a more serious case, build a scene with two deliberate problems: an\n",
    "order of magnitude too few rays for the detector (severe undersampling), and\n",
    "a spare mirror parked well outside the 10 mm-radius collimated beam so no\n",
    "ray can ever reach it (unreached geometry that is *not* an innocuous barrel)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "735766f8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:11.817071Z",
     "iopub.status.busy": "2026-08-18T17:54:11.817071Z",
     "iopub.status.idle": "2026-08-18T17:54:11.853200Z",
     "shell.execute_reply": "2026-08-18T17:54:11.853200Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NSQ trace diagnostics:\n",
      "  depth_truncated_flux_fraction: 0.0000%\n",
      "  rr_killed_flux_fraction:       0.0000%\n",
      "  flux_conservation_error:       0.0000%\n",
      "  unreached_geometry:            ['L.edge', 'spare_M.surface']\n",
      "  medium_stack_underflows:       0\n",
      "  split_budget_saturated:        False\n",
      "  detectors:\n",
      "    D: 278 hits, 0.07 mean hits/pixel [undersampled]\n",
      "Warnings:\n",
      "  - 2 component(s) were never hit by any ray: L.edge, spare_M.surface. Check placement/orientation, or ignore if intentionally unused.\n",
      "  - Detector 'D' is undersampled: 0.1 mean hits/pixel (< 10), shot noise dominates the map; ~1,768,057 rays would bring it to ~5% relative error.\n"
     ]
    }
   ],
   "source": [
    "from optiland.nonsequential import MirrorConfig\n",
    "\n",
    "\n",
    "def build_scene_with_spare_mirror():\n",
    "    s = build_scene()\n",
    "    # Well clear of the 10 mm-radius beam and the 12.5 mm-aperture lens: no\n",
    "    # ray can reach it, so diagnostics.unreached_geometry should flag it.\n",
    "    s.add_mirror(\n",
    "        'spare_M', CoordinateSystem(x=60.0, z=0),\n",
    "        MirrorConfig(radius=-100.0, aperture_radius=10.0, reflectance=0.9),\n",
    "    )\n",
    "    return s\n",
    "\n",
    "\n",
    "# 300 rays into a 64x64 = 4,096-pixel detector -- far below the ~10\n",
    "# hits/pixel needed before shot noise stops dominating the map.\n",
    "result_noisy = build_scene_with_spare_mirror().trace(num_rays=300, seed=42)\n",
    "print(result_noisy.report())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce1da88e",
   "metadata": {},
   "source": [
    "Depth truncation is easy to trigger too: rerun the `max_depth=1` case from\n",
    "section 4, where every ray was killed before reaching the lens's back face.\n",
    "`diagnostics.depth_truncated_flux_fraction` should read essentially 100%,\n",
    "and the warning list should say so in plain language."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d32c8432",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:11.855205Z",
     "iopub.status.busy": "2026-08-18T17:54:11.855205Z",
     "iopub.status.idle": "2026-08-18T17:54:11.928783Z",
     "shell.execute_reply": "2026-08-18T17:54:11.928783Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "depth_truncated_flux_fraction: 100.00%\n",
      "\n",
      "- 100.00% of launched flux was truncated by max_depth -- results are incomplete for paths deeper than max_depth; raise it if those paths matter.\n",
      "- 2 component(s) were never hit by any ray: L.back, L.edge. Check placement/orientation, or ignore if intentionally unused.\n",
      "- Detector 'D' is undersampled: 0.0 mean hits/pixel (< 10), shot noise dominates the map.\n"
     ]
    }
   ],
   "source": [
    "result_truncated = build_scene().trace(num_rays=30_000, seed=42, max_depth=1)\n",
    "\n",
    "print(f\"depth_truncated_flux_fraction: \"\n",
    "      f\"{result_truncated.diagnostics.depth_truncated_flux_fraction:.2%}\")\n",
    "print()\n",
    "for w in result_truncated.diagnostics.warnings():\n",
    "    print(f\"- {w}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ea6926e",
   "metadata": {},
   "source": [
    "## 8. Putting It Together\n",
    "\n",
    "A compact visual summary of the three checks worth running on any new scene:\n",
    "does the flux ledger balance, has the result converged in ray count, and is\n",
    "the beam where you expect it? `result.report()` above answers the first two\n",
    "numerically already; this is the same information laid out for a quick\n",
    "visual scan."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "ab728473",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T17:54:11.930802Z",
     "iopub.status.busy": "2026-08-18T17:54:11.929802Z",
     "iopub.status.idle": "2026-08-18T17:54:12.414229Z",
     "shell.execute_reply": "2026-08-18T17:54:12.414229Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1400x400 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result_final = build_scene().trace(num_rays=50_000, seed=42)\n",
    "irr_final = result_final.detectors['D']\n",
    "\n",
    "fig, axes = plt.subplots(1, 3, figsize=(14, 4))\n",
    "\n",
    "# --- flux budget -----------------------------------------------------------\n",
    "channels = {\n",
    "    'Detected': result_final.total_flux_detected,\n",
    "    'Absorbed': result_final.total_flux_absorbed,\n",
    "    'Bulk abs.': result_final.total_flux_bulk_absorbed,\n",
    "    'Escaped': result_final.total_flux_escaped,\n",
    "    'Lost': result_final.total_flux_lost,\n",
    "}\n",
    "present = {k: v for k, v in channels.items() if v > 1e-9}\n",
    "ax = axes[0]\n",
    "ax.bar(present.keys(), present.values(), color=['tab:green', 'tab:orange',\n",
    "                                                'tab:purple', 'tab:blue',\n",
    "                                                'tab:red'][:len(present)])\n",
    "ax.set_ylabel('Flux [W]')\n",
    "ax.set_title(f'Flux budget (error {result_final.flux_conservation_error:.1e})')\n",
    "ax.grid(True, axis='y', alpha=0.35)\n",
    "\n",
    "# --- convergence -----------------------------------------------------------\n",
    "ax = axes[1]\n",
    "ax.semilogx(ray_counts, peaks, 'o-')\n",
    "ax.axhline(peaks[-1], color='r', ls='--', label=f'{ray_counts[-1]:,} rays')\n",
    "ax.set_xlabel('Number of rays')\n",
    "ax.set_ylabel('Peak irradiance [W/mm$^2$]')\n",
    "ax.set_title('Convergence with ray count')\n",
    "ax.legend()\n",
    "ax.grid(True, alpha=0.35)\n",
    "\n",
    "# --- the beam itself -------------------------------------------------------\n",
    "ax = axes[2]\n",
    "im = ax.imshow(irr_final.irradiance, origin='lower', cmap='hot',\n",
    "               extent=[irr_final.x_coords[0], irr_final.x_coords[-1],\n",
    "                       irr_final.y_coords[0], irr_final.y_coords[-1]])\n",
    "plt.colorbar(im, ax=ax, label='W/mm$^2$')\n",
    "ax.set_xlabel('x [mm]')\n",
    "ax.set_ylabel('y [mm]')\n",
    "ax.set_title('Irradiance at the detector')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5c6d7e8",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "- `SimulationResult` tracks every flux channel: detected, absorbed, bulk-absorbed,\n",
    "  escaped, lost\n",
    "- `flux_conservation_error` validates the ledger and should sit near machine precision\n",
    "- More rays lower the Monte Carlo noise; watch a key metric converge before trusting it\n",
    "- `max_depth` must exceed the number of surfaces a ray has to cross and is the one\n",
    "  *biased* loss mechanism; `min_flux_fraction` sets an unbiased Russian-roulette\n",
    "  threshold, not a hard cutoff\n",
    "- Use `seed` for reproducible runs; omit it to sample Monte Carlo variance\n",
    "- `batch_size` affects speed only and must not change the answer\n",
    "- `result.diagnostics` / `result.report()` automate exactly these checks --\n",
    "  depth truncation, roulette loss, flux conservation, unreached geometry, and\n",
    "  per-detector undersampling -- with a threshold-based warning list. Read the\n",
    "  report before trusting a trace's numbers, especially for scenes more complex\n",
    "  than this notebook's single lens"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  },
  "nbsphinx": {
   "execute": "never"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
