diff --git a/tutorials/1-getting-started/DTGS162_differentiable_optimization.ipynb b/tutorials/1-getting-started/DTGS162_differentiable_optimization.ipynb
new file mode 100644
index 000000000..a8efa3033
--- /dev/null
+++ b/tutorials/1-getting-started/DTGS162_differentiable_optimization.ipynb
@@ -0,0 +1,422 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "c61307dc",
+ "metadata": {},
+ "source": [
+ "# DTGS162. Optimizing parameters of a differentiable model\n",
+ "\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "e9fa528e",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:31.366301Z",
+ "iopub.status.busy": "2026-08-03T12:19:31.366173Z",
+ "iopub.status.idle": "2026-08-03T12:19:31.369318Z",
+ "shell.execute_reply": "2026-08-03T12:19:31.368689Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# !pip install deeptrack # Uncomment if running on Colab/Kaggle."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9be2b83",
+ "metadata": {},
+ "source": [
+ "DeepTrack simulations can participate directly in PyTorch computation graphs. This makes it possible to optimize physical and acquisition parameters by backpropagating an image-domain loss through the simulation.\n",
+ "\n",
+ "In this tutorial, you will recover the position and radius of a `MieSphere` from a target brightfield image. The same pattern applies to other continuous properties implemented by differentiable operations."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "ef835bdc",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:31.370743Z",
+ "iopub.status.busy": "2026-08-03T12:19:31.370646Z",
+ "iopub.status.idle": "2026-08-03T12:19:33.262751Z",
+ "shell.execute_reply": "2026-08-03T12:19:33.262286Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "from __future__ import annotations\n",
+ "\n",
+ "import deeptrack as dt\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import torch\n",
+ "\n",
+ "\n",
+ "torch.manual_seed(0)\n",
+ "torch.set_default_dtype(torch.float64)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7ec882b6",
+ "metadata": {},
+ "source": [
+ "## 1. Creating a target image\n",
+ "\n",
+ "Start by defining a microscope and a particle with known properties. The target image represents the observation whose parameters you want to recover.\n",
+ "\n",
+ "The backend context makes every compatible operation return PyTorch tensors while leaving the global backend unchanged after the block."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "f77a84cd",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:33.263799Z",
+ "iopub.status.busy": "2026-08-03T12:19:33.263671Z",
+ "iopub.status.idle": "2026-08-03T12:19:33.274537Z",
+ "shell.execute_reply": "2026-08-03T12:19:33.274098Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "config = dt.backend.config\n",
+ "\n",
+ "true_position = (15.5, 17.25) # px\n",
+ "true_radius_um = 0.55\n",
+ "refractive_index = 1.45\n",
+ "\n",
+ "with config.with_backend(\"torch\"):\n",
+ " microscope = dt.Brightfield(\n",
+ " NA=0.7,\n",
+ " wavelength=680e-9,\n",
+ " refractive_index_medium=1.33,\n",
+ " resolution=1e-6,\n",
+ " magnification=10,\n",
+ " output_region=(0, 0, 32, 32),\n",
+ " padding=(4, 4, 4, 4),\n",
+ " )\n",
+ "\n",
+ " mie_properties = dict(\n",
+ " position_unit=\"pixel\",\n",
+ " input_polarization=0.0,\n",
+ " output_polarization=0.0,\n",
+ " L=5,\n",
+ " collection_angle=0.3,\n",
+ " offset_z=1e-5,\n",
+ " mode=\"hybrid\",\n",
+ " )\n",
+ "\n",
+ " target_particle = dt.MieSphere(\n",
+ " position=true_position,\n",
+ " radius=true_radius_um * 1e-6,\n",
+ " refractive_index=refractive_index,\n",
+ " **mie_properties,\n",
+ " )\n",
+ " target_image = microscope(target_particle).update()().detach()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8728f21b",
+ "metadata": {},
+ "source": [
+ "## 2. Defining learnable properties\n",
+ "\n",
+ "PyTorch optimizers update instances of `torch.nn.Parameter`. Here, both particle position and radius are learnable. The properties are supplied as functions so that DeepTrack creates a fresh computation graph whenever the pipeline is updated.\n",
+ "\n",
+ "We initialize the learnable properties with our best guess of the target values. The optimizer will update these values to minimize the loss.\n",
+ "\n",
+ "Radius is optimized in micrometers and converted to meters inside the property function. Keeping learnable values near unit scale improves numerical conditioning."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "39333209",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:33.275453Z",
+ "iopub.status.busy": "2026-08-03T12:19:33.275395Z",
+ "iopub.status.idle": "2026-08-03T12:19:33.282805Z",
+ "shell.execute_reply": "2026-08-03T12:19:33.282427Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "initial_position = (13.0, 14.5) # px\n",
+ "initial_radius_um = 0.40\n",
+ "\n",
+ "position = torch.nn.Parameter(torch.tensor(initial_position))\n",
+ "radius_um = torch.nn.Parameter(torch.tensor(initial_radius_um))\n",
+ "\n",
+ "with config.with_backend(\"torch\"):\n",
+ " fitted_particle = dt.MieSphere(\n",
+ " position=lambda: (position[0], position[1]),\n",
+ " radius=lambda: radius_um * 1e-6,\n",
+ " refractive_index=refractive_index,\n",
+ " **mie_properties,\n",
+ " )\n",
+ " fitted_pipeline = microscope(fitted_particle)\n",
+ " initial_image = fitted_pipeline.update()().detach()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "66f6732c",
+ "metadata": {},
+ "source": [
+ "The parameters use separate learning rates because a useful step in pixels is much larger than a useful step in micrometers."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "45125d64",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:33.283704Z",
+ "iopub.status.busy": "2026-08-03T12:19:33.283644Z",
+ "iopub.status.idle": "2026-08-03T12:19:33.285153Z",
+ "shell.execute_reply": "2026-08-03T12:19:33.284792Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "optimizer = torch.optim.Adam(\n",
+ " [\n",
+ " {\"params\": [position], \"lr\": 0.15},\n",
+ " {\"params\": [radius_um], \"lr\": 0.01},\n",
+ " ]\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7860700d",
+ "metadata": {},
+ "source": [
+ "## 3. Running the optimization\n",
+ "\n",
+ "At each step, calculate the mean squared error between the simulated and target images and backpropagate it to the particle properties.\n",
+ "\n",
+ "DeepTrack caches resolved feature values. Calling `update()` after each optimizer step invalidates that cache and rebuilds the image from the new parameter values."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "cce8cb29",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:33.285837Z",
+ "iopub.status.busy": "2026-08-03T12:19:33.285787Z",
+ "iopub.status.idle": "2026-08-03T12:19:34.137673Z",
+ "shell.execute_reply": "2026-08-03T12:19:34.137253Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Parameter Target Fitted\n",
+ "x position [px] 15.500 15.500\n",
+ "y position [px] 17.250 17.250\n",
+ "radius [um] 0.550 0.550\n",
+ "final MSE 1.157e-10\n"
+ ]
+ }
+ ],
+ "source": [
+ "history = {\"loss\": [], \"x\": [], \"y\": [], \"radius_um\": []}\n",
+ "\n",
+ "with config.with_backend(\"torch\"):\n",
+ " for _ in range(150):\n",
+ " optimizer.zero_grad()\n",
+ "\n",
+ " fitted_image = fitted_pipeline.update()()\n",
+ " loss = torch.mean((fitted_image - target_image) ** 2)\n",
+ " loss.backward()\n",
+ " optimizer.step()\n",
+ "\n",
+ " history[\"loss\"].append(loss.detach().item())\n",
+ " history[\"x\"].append(position[0].detach().item())\n",
+ " history[\"y\"].append(position[1].detach().item())\n",
+ " history[\"radius_um\"].append(radius_um.detach().item())\n",
+ "\n",
+ "optimized_image = fitted_pipeline.update()().detach()\n",
+ "history = {name: np.asarray(values) for name, values in history.items()}\n",
+ "\n",
+ "print(\"Parameter Target Fitted\")\n",
+ "print(f\"x position [px] {true_position[0]:8.3f} {position[0].item():8.3f}\")\n",
+ "print(f\"y position [px] {true_position[1]:8.3f} {position[1].item():8.3f}\")\n",
+ "print(f\"radius [um] {true_radius_um:8.3f} {radius_um.item():8.3f}\")\n",
+ "print(f\"final MSE {history['loss'][-1]:.3e}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26bc50ce",
+ "metadata": {},
+ "source": [
+ "## 4. Inspecting the result\n",
+ "\n",
+ "The loss and parameter histories show how the optimizer moves through the differentiable simulation toward the target properties."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "7516da41",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:34.138671Z",
+ "iopub.status.busy": "2026-08-03T12:19:34.138615Z",
+ "iopub.status.idle": "2026-08-03T12:19:34.361124Z",
+ "shell.execute_reply": "2026-08-03T12:19:34.360798Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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+8V+9vVniMxDDhCxT9i4caObPn26mzx5slu9enWB9vHtt9+a6H3zzTfhtq1bt7pLL73Uff7553vVv3Ttpyj6mu5+CSHEbxk0FW1FY2HHjh2mc999913SNoXF8uXL7XMmTpzo3n333bQ6QNjnkCFD3M0335y2/Qohfjt89tlnburUqW7KlClu/fr1BdoHGog+/vTTT+G2tWvXmm5hI+4N6dpPUfQ13f0S+zdygIgihQvtK664wlWrVs098MADbsyYMe7MM890TZs2NadIfvjyyy9N9DZv3hxuO+SQQ1ynTp1cqVKl9qqf6dpPUfQ13f0SQojfMmgq2orGwoYNG0zntm/fnrRNYYNx3Lt377Tt74gjjrB9clxCiOziq6++chdccIE79dRT3ahRo9yjjz5q/1944YUWEZEfWIRER6IOYvQFffzd7363V/1M136Koq/p7pfYvym+rzsgsouOHTuaUKxcudL96U9/sm07d+400W7WrJmtkB188MEWnjxt2jTXtm1b82r/61//csccc4w7+eST7T14WfF4A+2OOuooV65cOXOmtGvXzv3+97+316L7wQj+5JNPXOXKlW2igGXLltn+eV61atWwn/Qhup+FCxcm9K6fffbZ7o9//KN74YUX7Hnx4sXtuGrWrGn/56evHhxB77zzjhnm9erVc4ceemj4WvR4WMFctWqVHc8pp5yS67j/8MMPbvHixTbW9K1ChQpJ+9WoUaNw1ZTjPuCAA9xpp53m/vCHPyTsR6LzI4TIDt5++22LRmjevHm47dNPPzUNQx9KliyZoz3G+WuvveY6dOhgc8GaNWvc8ccfb484//73v917773nDjvsMFe/fn3T5SgYm+ja7t27TdfQL0BT0Vba02bGjBm2fdKkSa506dKuYsWKrkaNGmGbVD8z2neOkf6jeyeeeGK+xiyVMcjvuAohsgNst5YtW7pffvnFoh+8bcaC1nnnnedat27t3nrrLbPdtmzZ4mbPnu0uvvhi99FHH5mGYKexCOkXJV9//XX7/+WXX3YHHXSQ2ZRoEfpYokQJey26H+x3PveEE05wxx13nAuCwHSJhbTTTz/d9NVTpkyZHPthH+wrDvY/ti4aDbTHJsf2LFasWL766lm3bp374IMPTPOxpWnv8ceD44TjYVw4Fh65wVzDnPP999+7M844w5UtWzZpv84666zQWcV7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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "steps = np.arange(1, len(history[\"loss\"]) + 1)\n",
+ "fig, axes = plt.subplots(1, 3, figsize=(11, 3.2))\n",
+ "\n",
+ "axes[0].semilogy(steps, history[\"loss\"])\n",
+ "axes[0].set(xlabel=\"Optimization step\", ylabel=\"Image MSE\")\n",
+ "\n",
+ "axes[1].plot(history[\"x\"], history[\"y\"], label=\"Optimization path\")\n",
+ "axes[1].scatter(*initial_position, marker=\"o\", label=\"Initial\")\n",
+ "axes[1].scatter(*true_position, marker=\"x\", s=70, label=\"Target\")\n",
+ "axes[1].set(xlabel=\"x position [px]\", ylabel=\"y position [px]\")\n",
+ "axes[1].axis(\"equal\")\n",
+ "axes[1].legend()\n",
+ "\n",
+ "axes[2].plot(steps, history[\"radius_um\"], label=\"Fitted radius\")\n",
+ "axes[2].axhline(true_radius_um, color=\"tab:red\", linestyle=\"--\", label=\"Target\")\n",
+ "axes[2].set(xlabel=\"Optimization step\", ylabel=\"Radius [um]\")\n",
+ "axes[2].legend()\n",
+ "\n",
+ "fig.tight_layout()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fecdbe6c",
+ "metadata": {},
+ "source": [
+ "Finally, compare the target, initial, and optimized images."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "3e5a5e0e",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-08-03T12:19:34.362075Z",
+ "iopub.status.busy": "2026-08-03T12:19:34.362013Z",
+ "iopub.status.idle": "2026-08-03T12:19:34.531659Z",
+ "shell.execute_reply": "2026-08-03T12:19:34.531328Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABLoAAAEaCAYAAAAWvD4pAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlcelbwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWghJREFUeJzt3QeYG8X5+PFX0t252xgbA640Y4rphJpATMcEQ2IIvfeOCQFCQkzoPUBoCaE3QwihmBJqwIbQDcY21RiwsTEY93q+k/7PO/np/rrzaUba0d6upO/neRZ8Gs1qtWVm99WURCaTyQgAAAAAAABQ5pJRbwAAAAAAAABQCgS6AAAAAAAAUBEIdAEAAAAAAKAiEOgCAAAAAABARSDQBQAAAAAAgIpAoAsAAAAAAAAVgUAXAAAAAAAAKgKBLgAAAAAAAFQEAl0AUEHmzZsnS5YsCe39pcoLwG3+/PmyePHislmvy8KFC80CAOWooaFB5s6da/7vkk6nzXvr6+tjs01ANSHQFXN6I6qFl2tZsGCBxEkmkzHbtWzZsqg3BSgr+gDq8yDYp08f+d3vfrdCQGrp0qUFv9/ns4BKpw8v+a6noNd8voDxBhtsICeffHLJPivs9brssssu8otf/KLNPxdAZdHni9znoLYKoP/nP/+R7t27y9ixY53v/eyzz8x7H3zwwdhsE1BNCHTF3GmnnSZrrLFG09K3b19TmPXu3bvZ67vvvrvEycyZM8123nrrrVFvClBW9AFUHwaDWmmllaRDhw7NXuvRo4f84Q9/KPj9AJrTwNaVV14pgwcPlnbt2pnrZpVVVpHDDz/cPMz4WGuttUxd35pu3bpJx44dS344wlovALSFv/zlL+Y5o1+/fuY5SMvjTp06ydChQ2X8+PGhfW5tba0pP2tqakL7DAClwVUac3fccYdZsl588UXZdddd5aqrrpJTTz010m0DED/Tpk0L9f1AtdEWkRp8/uabb+TGG2+Ufffd1wS7Jk6cKGeddZZsvvnm8thjj8luu+1W8s/WzwhDWOsFgLb0wgsvyDbbbGN6kowbN072339/+fnPfy4ff/yxrLrqqiX/vB133NG0IAMQf7ToqrDujdqFUbtVtEbTFi1a1PS39hlv2V1C+3fn9vF2jcGjv3I3NjY2e03/1q4YSvNmt42xfIBg9PrJ7Spl6zaVe81muxC3bOafWw60do1rWdHW3QGAuDrhhBPkww8/lOeee04OOOAAE+RSG264oYwePVo23nhj8/p3332X97rKd83qNabXqdbHrV1zrY2l1XLd+YYIsJUTLdebW1e3XHLLi1y6zcuXLxcbvR8Je3waAEgkEuZHB229PmfOHPnHP/6Rd6do2aflrk2+ctU1Hpbms607ey/W8j3Z8bxyy9Tsa7pouc9wMEBxCHRVgJNOOqmpC6P+eqHdEXbaaSd5//33m71v2223NTfj7777rvzkJz+Rzp07N3WX+Prrr2WvvfaS9u3bS5cuXcy/v//+ezMGz29/+9sVbp51XB5N0/dqHv0lO/sLsf6ioutXF110UdO2/f73v2+zfQJUCr2Z0ub5l1xyiXmoXmeddcx1p830b7rpJuu4WTNmzDDXngafb7/99qZr8Zhjjmn1/bm/WGbfq90e9fP0V1Jaf6HafPHFF/LII4/IgQceKJtttlmr3Vguvvhi8yByyy23NL2erTuffvrppmu2Z8+e5jrOPuBoAEmvMX0oe/jhh5uuOb3WbGNpZdf97LPPysCBA013Hf2MV1991aRrObHuuuuaz1x99dXl0UcfXWG7W643t67OXbTsOeSQQ5rep9uuXYZ0/drlWRet71966aVm69dgnZYzep+h27H11lvTigxA6LTcyt7/5NIfIo466ijT7VwXLZcOPfRQmTVrVrMf+fSHDb3v0e6J+v/hw4fLJ5984hwP6+2335atttrKPBNpXi1fWwvy65Auml+HeMk1adIk87rWBVmffvppU1k8YMAA83ynXTX/+Mc/rtDIAMCKCHRVgHvuuacp4q+/UmQHP9R+6j/++GOz92rwSm9otSDV92sXDL3Z3nnnnWXKlCkmSKV/a1BKg2Atf3HQglWDYHfffbf8/e9/N5+nlYdWBj/72c9k6tSpsuWWW5rCWV1++eVN23bddde16X4BKsl7770nTz31lLz11lvmIVJv2PQafeedd/Lm0bH89NpLpVKmq3P2Whw1apT1szRInn2vBrZff/11Uz7st99+eVuMApVIAzhaD9rGwdTAsD7c6NACufTHn/vuu0/eeOMNc81edtll8qc//UkuvPBCk64BKr3GVl55ZTnssMOarjkNYLnoQ5G2WHjzzTfNw5l23dlnn33k+eefN/W7fqa22tIfoXTdLR+qWsqtq7PLKaecYtKyP1wp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Z1stlw6vCrR+blTCu8MJVxz3pc++TiZCPE6Z/PeT7Tt2Knp1AwcONC261B133JH3fS+88IKcd955Mn78eOnWrZvss88+cu2115pWWL7SJQ6elaPq/vYAAAAAAABt5M0335Thw4fL+eefLwsXLpSPPvpIvv32WznmmGO8162Btg4dOsiGG24od911l1Qrui4CAAAAAAC0gSuuuEIOP/xw04pLWy9rq/vLLrtMtthiC9N6t0uXLnkHl89VU1NjFqUD3l988cVy7LHHmvwPP/ywHH/88dLY2GheqzaJTIF9MOjy0BxdHoo4yejy0AxdF4s7P+i6GP6545uXroulQ9fF0mEIgvIoP2zoutgcXRfLE10Xy7u7HV0X47Gvy6nrYq59993XBKIeffTRZq/3799fZsyY0eoYXu+9955pjfX+++/LdtttZ13/aaedJldffXXe9BNOOEFef/11mTBhglQbWnQBAAAAAAC0kZEjR8of/vCHvOmbb765LF261OszNtxwQ7n33nulGjFGFwAAAAAAQBvQLorPPPNM6J8zbtw46du3r1QjAl0AAAAAAAAloGNraWssnf1QF/137nhbF1xwgemaeMopp8jkyZNNN8bHH39chg0bFvgztXXY7bffLlOmTJHp06fLddddZ1pznX322VV5TOm6CAAAAAAAUAJ9+vQxsylmrbTSStKzZ0+ZNm1aU7fEMWPGyIUXXihbb721tG/fXrbZZhszmHxQZ5xxhlx66aVy5ZVXmjEdBw0aJI899pgZ8L4aFTwYfffu3a3pttVoFNPGlu4zEKnPAMquQWxbGziuLQayt/HZVz6D1IY5uHKYg1zbzjufc1Zntgia14drX+UWtq3p3LmzhCWqAeXDPH/CutbCuk7DHPQ/jvvZle66DuNYXrq4BqqmHq/seryQ9DiWHz6ox1EO4jgYvU9JkQ5xxHjXgONhKdcB54OK6/EP69xJRDgYPaJD10UAAAAAAABUBAJdAAAAAAAAqAiM0QUAAACgaDrAcn19fUHvraurM+PQAABKgzI4PwJdAAAAAIp+wFpzzTXlu+++K+j9q622mpkNjGAXAJSmDO7RobMsFvv40NVaBhPoAgAAAFAUbcmlQa5vvvlGunbtan3v/PnzpX///iZPtTxkAUCYtDzVINfh0kfqHCNS1Uta7v3u26oqgwl0AQAAAAikS5cuZrEJc7ZaAKhmHRIpqbPMsqpSmYTfdJuVHOjymYo9qmncXVNa26YH95la3CdvmHz2pS1vmFOHu/h8dljHwWf69zDzuoR5HKOaej6scz6qYxwmn2Pkkx5V+RFluRUV6vHmqMfL/1qkHo8HrbfiWreVPcfDq01YezzpUVR4lTKZdDR5K1DC47xLOc5Jn/MunQknr+ucTXhcZ3Gg3y/l+I5J/U+VFcO06AIAAAAQOIjuCqS70gEAwdQlE1Ln+NEooy26qqwYJtAFAAAAIBBadAFAdFKJhFms75Hq68lAoAsAAABAIAS6ACA6qQK6Lqak+hDoAgAAABAIgS4AiA4tulpHoAsAAABAIAS6ACA62pjLNZx+QqoPgS4AAAAAgTAYPQDEezD6tA5GX2UIdAEAAAAIhBZdABD1GF2uweirT00xlVjQaYNdeV3pNgnLQbWludKTyWRon+vzfW15faZ2juoYufazb3pQPueOK69tm32m3/Y5RoXw+c5B1+sS1rXkSo9reegjrHPad90+50dY6/Up46M6voV8dhzrCOrx4uqIsM49nzKAerxwUZYPPgh0eUgEv491nS3pkE6npKP6tCZnHPe5tnRXXouER95qlLGdl45zNuGR13Zu+ZzPrryuczruGIy+dbToAgAAABAIgS4AiA6D0beOQBcAAACAQAh0AUB0tEWatuqyvkeqD4EuAAAAAIEQ6AKA6NCiq3UEugAAAAAEwqyLABCduqRInaNFV2N5DgHphUAXAAAAgKobSB8Ayh0tulpHoAsAAABAIHRdBIDopP5v5kXrezJSdQoOdPlMaR3mNO+2aaujmrbeta988trSw8zrw7affacdT6VSgT63kPSgfD7X9X2jOk6u9DD3ta1scZU7Pnlt+zrMz42Kbbtcx8/1nXzO+bDOO5+8UR1D38+lHi/dvopjPV5IelCu68V2HVOPt109HhUCXQ6J/NeHT6mejufthEgmHSzNkZ5w5Y1IxnJ8fUX1nW2fG+ZplwhxX5bltVSgZCJhWnW53lNtaNEFAAAAIBACXQAQHW3N5WzRlZCqQ6ALAAAAQCAMRg8A0alLJsxi0yDVF+ki0AUAAAAgEFp0AUDMB6NPEOgCAAAAgIIQ6AKA6Oj4W64xuJIEugAAAACgMAS6ACA6iVRCEsloJmGLM7ouAgAAAAiEQBcARCeZSkjSEehKEugCAAAAgMIQ6AKACKWSkkgm7e9JZKTa1BRTiYXF1pTO1cwuaTmorrw+Tfh0hpmg+8qW15bmSm9sbAxtm32Ov88xSqVS1nTbd7Z9rivdldfG55z12c++16jrO/tcp2F9rzCvtbC2uRybDvueWz7HMKrr1Mb1uWGds76oxyu7Hvc998KqH6jH43GNluOsi2PGjJFHH31UBgwYIGeddZbz/QsXLpRHHnlEJk6cKD169JC9995bNtpoI4maz1FNR3RK2BqHRHUXk0kEr/OdfNYd4nZZD3/GcU1Z0hOuvBauvF6nrGVfOhosWa+V8ixZC5eqTUoqZT8PU42VvhdWFGKJAQAAAKAaWnS5lkJpwGrw4MFy3nnnyeuvvy5PPvmkM8+nn34qW265pbz11lvSt29f+frrr2WLLbaQv/71r57fDgDiTVtzFbJUG8boAgAAABCLrou1tbUyatQoE+w69thj5YsvvnDm0RZcGuTq1q1b02udOnWSa665Rk444YSCPxsAynKMrpSjR5GUX48SXwS6AAAAAMQi0NWuXTsT5CpGz549V3ht9uzZ0qtXr6LWAwBlOeuiI9CVINAFAAAAAKUPdM2fP3+FoJYupXLVVVfJ559/Lh9//LFZ77333luydQNAfANdjrE0JbwxYOOq+jprAgAAACgJDWJlB6TPt2QDXf369TPdC7PL5ZdfXtKjMHDgQNl4441l0KBB8sEHH8g777xT0vUDQNykapL/G5DettQED/s8//zzst5668lxxx0n5YSuiwAAAABCb9E1depU6dq1a9PrpWzNpX75y182/Xv99dc3Y3wNGzZMOnbsWNLPAYC4SKaSZrG+JxMs0DVz5kwT4NIfJrT8rspAl21qadc07rZ0nymtfaaPD3Nqcdv04T7TM4c57bjPlNe27XIdI9d3sp0frnPHNuW5K68t3ed898kbZOruUn22z7Xmc976XC8+57zr+/qcl1GVaT77Oaryw8W2r13b5HON+whz3T6fTT0e/3rclR7mdehTN1GPF76vKiHQpUGu3EBXmHTWxUWLFsmMGTNk7bXXljhKB78sK1MiGU5ex3ozHscozENouyNw3k9a0jIZR1ljS3fl9TmGtnV7rNd1Z5WphjG6MsXfX2q5fdhhh8kZZ5whb7/9tsydO1fKCV0XAQAAAHgFulxLKekD14knnijjxo0zf7/++usrjP/10EMPmcHo+/fvX9LPBoA4BrpcS7GuvPJKU3aPGDFCyhFdFwEAAADEYtZF9fvf/15+/PFHE8CaN2+eCWqp2267zfx/4cKF8te//lV22WUX2WyzzcwMi1tvvbVpubXyyivLe++9JwsWLJAHH3xQamtrObIAKlYxXRfnFzghyJtvvinXX3+9vP/++5H2NvBBoAsAAABAbAJdG2ywgQlUbbrppq2md+/eXW699VbZfPPNzd977723DBkyRMaOHSs//PCDHHPMMbLddtsR5AJQ+QppsZVJNE0IkmvkyJFy4YUXNntNf1w46KCD5Oabb5bevXtLuSLQBQAAACCQ7MyKrvcU45BDDrGmd+rUqamVV1bnzp1ljz32KOpzAKDcpWpSkqpN2d8jhU8IorPV6vu0Za0uavr06aYc19kXn3rqKTPDbdwR6AIAAAAQmxZdAIDCJFMJs1jfk04UPCGItoadMGFCs9d+85vfmG6Pt99+uwwYMKAsDg2BLgAAAACBEOgCgJjPupgufJytjh07mpZbubp06WJmnG75epwR6AIAAAAQCIEuAIhOIpU0i/U9aXt6JSpZoMs2Gn8y6ZgFwJLuymv7XFczadt4Aa6xBDSimU9DQ0NonxtW02/XbAqu4xDWNvuM+eDaZlveVMrRz9mS7srrc63Y9qXvjBiu/FHNuGH7zj5dJVx5fY6T7RyoqakJnNfnGLi+r0+ZZsvrutZ8yoe4dpXxOU4+dZov6vHyrsd9j6EN9Xh51ONRIdBVfpJRnWqJZGh5bSVro6PYbUznf4NrdDlXkZ72KPOTljLBNfa4rTxJOfZlylaOZYobb69UEh7ntOXwFrTuuEum/td90fqetN9nXHfddUWPtRjESy+9JGPGjJH1119fDjjgAJk5c6bMmDEj78QkNtUX2gMAAABQ0kCXawEAlF4imSho8aGzL/bt21fCNGLECBk+fLg89NBD8sorr5jXOnToIPvvv7/MmTOn6PUR6AIAAADgNeuiawEAlJ7OuJiqcyy19h5HUZs0aZI88MADMnHiRDnrrLOaXteB83fbbTe57777il4nY3QBAAAACISuiwAQnYLG6ErFu33TuHHjTECrT58+K3S7XWutteSLL74oep0EugAAAAAEQqALAKKTSCbN4npPnLVr1y5v98QJEyaYYFexCHQBAAAACIRAFwBEJ5lKmsX1njgbMmSIHHfccfLiiy82tejSuuWuu+6S+++/X957772i10mgCwAAAEBgDDYPABEpoOuixDzQ1aNHDxPU2nfffc0M9LW1tTJq1ChZsGCBXHXVVbLxxhtHF+iKalrysCrlxsZGa17b1OOuvD4Dclqnik3ZB5mzpbvy+kx577OfffalzxTvPjdsrunBbee0K6/PcYiSz762pfscY5/jpIWvTV1dXeC8tnTXdepzLS1fvjxQmqqvrw+8bp9j6MobVrnlOnfKFfV4edfjrnTXeetTTtv2l089Tz1eHgoZbJ7B6FvnORFaYKF+bCL4s5utpGl03OamLemNrjLMktn1ua7b77TH/bnt/HDGNSx5M44TIGP54IRjLjvb50rGY1IKR96E5byL6jprK8maGknW2sM6SdsFEhMa5Pryyy/l8ccfl6lTp0r37t1lr732kkGDBgVaHy26AAAAAARC10UAiHowekejlZT9R6e46NWrlxx//PElWVe827ABAAAAiH2gy7UAAMKbddG1xJ225HrrrbeavfbNN9/IrbfeGmh98f/GAAAAAGKJQBcAREeHWylkibNp06bJOeecs8JYXP3795d//vOf8sorrxS9znh/YwAAAACxRaALAKJTCS26XnvtNdlyyy2lQ4cOK6Ttuuuu8vzzzxe9TsboAgAAABAIY3QBQHQKCWQlYh7oat++vXz99detpn311VfSs2fPotcZ728MAAAAIPazLroWAEB4sy5al5p4t28aMmSIjB8/Xq666ippaGhoel27Ld55552y9957F73OeH9jAAAAALFFiy4AiE4ltOjq3r273HPPPXLooYfKpZdeKv369ZOZM2fKjz/+KJdccolstdVW4QW6EolE4HRXXtvgaK6B02yzuLh+PfLJ29iYf4pOn1+tUo6pQevq6vKmtWvXzprXll5bW2vN6zOAXW5UtqVly5ZZ87rS6+vr86YtX748kuPvc8662NYd5YxGrs/22de2dJ/v7CqXaiy/fNiuQ9Va//JC0lzXqW2bfK5D17W2ZMkS8WE7Tj7Xqev4284dnzrN9bmudYeV13fd1OPlXY+76vKw6nFX+RFmPe5znKjHS4dAV3jCqxHCY6sh05nw8jZa7xeCf27G43Nd3PvDcv+c/1Hkf+mWIj/tcWL53KekEh7Blkw6cHrC53PLQDKVNIvrPXH3q1/9SiZPnixPPPGEfPvtt7LyyivLnnvuKeutt16g9dGiCwAAAEAgBLoAIDqJZEISjh+zEsnyCJuvvvrqcuKJJ5ZkXQS6AAAAAARCoAsAolMJXRez3njjDdOqq2Vr8PXXX1+23357KQaBLgAAAACBFDLYPIPRA0C4g9Fb39Pg6OsaMR1OQLspvvTSS7LqqquuMMzDIYccQqALAAAAQNugRRcARCeRSknSMT5owpEeNQ1wTZo0Sb788ksZMGBASdZJiy4AAAAAgRDoAoDoVELXxVmzZslOO+1UsiCXivc3BgAAAFAWwa58CwAg3ECXa4mzTTbZRCZOnFjS+qJkLbpsU426prQOazp1146yTS1tSwtz6vH27dtb83bq1ClvWufOna15bem29bqmLHftC9vU4gsXLrTmXbBggTXdln/x4sXWvLZpy13nju07+4xT4XNxh3UdlYLte7m+c1g3yK5yqaYmf/HYrl07a96OHTsGvk5teW3XoYvtfHddL65zy3XOR1XWxvG8c4nygZB6vLzrcde6XeWH7Vqz1eOuuph6vDLqcRtadAXnPOKZ4HWgl0Q4D8WuGi6dCV4/2rY47djRCcuqXfGBRMa+cttmJxx7JOlRJvhMsmc765Ku+yfLNruOf2glYFTXURvRGRfdsy4mJc569OghXbp0kYMPPlgOPfRQ6dat2wqzMa699tpFrZOuiwAAAAACIdAFANGphK6Ljz/+uLz66qvm36NGjVoh/YQTTpDbbrutqHUS6AIAAAAQCLMuAkB0kjUp96yLyxskzo477jg58sgjA/W0yZvHc5sAAAAAVCladAFAdBLJlFlc74kzHRLCNixEEAS6AAAAAARCoAsAIqRBLFcgK1l8EOmrr76S1157TZYsWSJbbLGFbLnllhK2l156ScaMGSPrr7++HHDAATJz5kyZMWOGbLrppkWvK96dNQEAAACU7YyLzLwIACHSgeYLWYpw6qmnyq677iovvviivPfee7LLLrvIYYcdFuqkSSNGjJDhw4fLQw89JK+88op5rUOHDrL//vvLnDlzil4fgS4AAAAAgRDoAoDoJFKpgpZiDBs2TD755BO599575W9/+5uMHTtW7r//fnnqqackDJMmTZIHHnhAJk6cKGeddVbT6127dpXddttN7rvvvqLXSddFAAAAAIEwGD0ARKimVqSmzvGexqJWqcGlXIMHD5aVVlpJJk+eLGEYN26c+cw+ffpIIpFolrbWWmvJF198EV6gq+UHlpLPum3N57TitbGlu/LaPjfpaBpYV5f/ROzUqZM178orr5w3bZVVVgmcV09cm3bt2gXeVwsWLMibNnfuXGveH374wZpu29euppW27W5oaAict7HRXpDYBtpz7Uvb9w3zGnXtT9e+jiqvbX+5rlPb7B62a1i1b98+b1rnzp2teW3ptuvQZdmyZdZ02/5wXQ/19fWB05cvX27NazuvXdeLTZjnXVxRj1d2Pe6qy13lh+16stXjrrqcejw+9XhYGKPLznpUM8HrMa+8ieCdelw1YNqjikzadpbj+vC5epKp4Lld3zcT0r6K6l7Ep5xyfV/b8U+EeT2UuUQyaRbXe9T8+fOl5b1BIc8XOnaW1vVbbbWVhEG3IV/3xAkTJphgV7HouggAAAAgELouAkCEEv83GL1tSfyvoUW/fv2kW7duTcvll1/uXP306dPliCOOkIMOOki23377UL7CkCFD5I033jBjgmWDqVq33HnnnabL5D777FP0Oum6CAAAACAQWnQBQHnMujh16lQz7lWWqzWXznqoA9FvsMEGJugUlh49eshdd90l++67r+n9VFtbK6NGjTItyq+66irZeOONi14ngS4AAAAAgRDoAoDy6LrYtWvXZoEum++//1522mknM27WE088YR2apRQ0yPXll1/K448/bgJy3bt3l7322ksGDRoUaH0EugAAAAAEQqALAMqjRVehdHxNDXL17t1bnnzySenQoYOESQNpn3/+uZx99tly/PHHl2SdBLoAAAAABMKsiwAQnURtrSRq7RNlJWrtE0u1tPfee5sZFocPHy433HBD0+tbb721GU+r1BYtWiQffPBBSddJoAsAAABAILToAoAIabdER9dFcaW3oF0Gf/7zn5tZ23Nnbl+yZImEYccdd5QLLrjAdJfs1atXSdZJoAsAAACAV7CrnDU2NpoWBYWOXQMAldx18YILLpC2pGNy6SyQ6623ngmyrbrqqs3St912W9O6LJRAV5gVmM+6tbm0rdKysaXb1utSU2PfrbaB3FwVrC3C2bdvX2teW/oqq6xizduxY8e8aQ0N9qaQc+fOzZv23XffWfPqjAs2tuPk2q7ly5cHPndsn+s6d2zr1lkm4nodZqd6DZLX53PDYvs+rmPhOi9t17hrIEfbteYzCKTr3LJdL67Pdf26Y/ts13EIS5jnbFjXii/q8cqux111ua1scZUBtnrcVZdTj1dWQKhSW3TpzF464LI+SB199NGmdUFU9VMzmeDPI2FJexxKnz2aEse+SOcvwxLLl1qzJhqXB1qvqvE4RpmEo5VNKn93tEzKfi+aqakLtF7VaDnGkV3Jrn1VZtdRKSWSKbO43hNns2fPNvdHuuj4YLrkGjBgQNHrpEUXAAAAgKoNdGlLgnvuucdMb7/LLrvIGmusIUcddZQcccQRzgAzAERKg4CurokJj0BhGxg6dKhZSine3xgAAABA7ANdriXOtPXWfvvtJ08//bR88803cswxx5jAl7Yi2HPPPeUf//iH1NfXR72ZAJC3RZdrqTYEugAAAAB4zbroWspF79695Xe/+518+umncskll8gLL7wgv/71r03Xxj/96U+ydKm9GxwAtCkdbqGm1rHUxP6gaPfF0047TTbddFNTBqvPP/9crrvuukDri/83BgAAABBLldB1Mdf06dPl3nvvNd0YtXWXBrl03K4pU6bINddcI5MmTZKHH3446s0EACORSpnFJuFIj5qOYb3bbrtJjx49ZNCgQTJnzhzz+jrrrCMPPvigSRs8eHBR6yTQBQAAACBWga5x48bJo48+asbIOumkk5zvnzVrljz55JPy9ddfmzG2tCtily5dCvos3b7HHnvMBLeee+452WCDDeSUU06Rww47TLp37970vp133lm22Wabor8LAJTTrIttbezYsaZ7+LPPPiu33367Kf+z3cp33XVXUxcUG+ii6yIAAACAWIzRtWjRIhNM0sHgR48eXVDrqVGjRslWW20lr7/+uiSTSbn77rtl7bXXNt0PCzFv3jw58sgjZfXVVzfrGD9+vJx++unNglzZbo0aAAOA2AW6XEuMaYvZzTbbzJTfLWe81clCsi28Yteiy+dXHldeW59/13gAtnSf6eNTjqaBPtOS26YO79evnzWvNv3LR8cdsLH9Imabkly1nB40V4cOHZzNGG0WL15svVGysaUvW7YskvPOJ68WDGHy6XYQxy4LrmnDbemuvLZj4SofbOmuvEHX60p3nVth7suoVNr57ot6PP71uKsud7VssdXltnrcVZdTj8enHi+XFl1aH11//fUm2HXsscfKF1984cyz0UYbyYQJE6Rjx47m7z/+8Y+y3Xbbye9//3vTEsCltrZWRowYIRdddNEK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tJr29meVbgO65U3rsf4P1rzdB+ffX7WOZ9VkMv92pVN11rwZa3rwYIvrlLSd09Zz0tybxTsIVKljdI0ZM8aUrzvssINp0ZX9caE1+p6DDz64qPXTogsAAABAVQe61lhjDXn00UdXeF0HoweA2CrTQNfSpUtl1qxZsnDhwqZ/56PvKRaBLgAAAABVHejKHTh/8eLFK7TGdbVOBIBKC3Sl02mZN2+edOvWzdlrrVi77rqrWXL/LqX4hfYAAAAAlNWsi64l7saPHy/bbbedGRajS5cuzZY+ffpEvXkA0KpMMiWZZI1jSRW9926++WYzM2Lv3r3N//XvckKLLgAAAABV3aJLZ1lcd911ZfTo0SuMl+ca9xUAIqPjv7rGj00UN77s008/LWeeeabpzj1s2DB54oknZP/995c111xThg4dKqXwyiuvyD333FPQe4cMGSJHHHFEUeun1AYAAABQtYEunXDhk08+kbfffts60REAVEPXxZtuukn22GMP2Weffczf++67r5kZUV8vVaCrpXfffVcmTZok2267rfTv39+M2aUD1q+88som0FUsAl0AAAAAqjbQVVtbKz169JCGhvwz5AFAHGUSSbO43lMMDfqfc845K8x8eO2110qpaPAqG8DS2Zu33HJLeeutt+QnP/lJ03umTZsmO++8swwaNKjo9TNGFwAAAACvQJdribuTTjpJRowYIUuWLIl6UwCg+BZdrkVE5s+f32xZtmzZCqtrbGyU2bNnS8+ePZu9ruN0/fjjjya91P773/+ally5QS7Vt29f02Xx+eefL3qdtOgCUBCdcSiMvK71+nyu7cbaNTCu7Vfd+vp6a16dIjfo9Li27dJfnH26Zdi0nGGq0O9TyP6w7UvXcbAdQ59zJ6q85fCwBwDF0HLNpyyPA33gu+2222TGjBly9913S69evZqV5Trj2MSJE0v/wQFnQvPlOhpex8vnfjGd/wE60WC/F2mc92PetMXTZljz/vjxtLxp37493Zr3q9n2wOi85fmvjc419uO/1oz894yN9fZgQ02nDnnTunXrYc1b23Xl/Intu1jzStrSKjJZZ8/qcdolE8HXmwp+ysZCWhJmcb1H9evXT3KNHDlSLrzwwmav6eyKWv61vH/Xv/X1Us++mH0+mjJliil7Wt5H6+vdu3cvep0EugAAAABUbddFHZfrsssuy5teV2d/QAeAqKT1xwZHGZv+v/SpU6c2m2yjXbt2K7xXA02rrbaazJw5s9nr+vfqq6/u1Qghn913311OO+00Ofjgg+WUU04xATltPfbwww+bHx+0xVexCHQBAAAAqNpAlwayjjzyyKg3AwCKlimklab8jwa5Ws4q2xodj+uFF16QP/7xj02v/fvf/zavh0G7Sb700ktyxhlnyM9+9rOm19dbbz158sknzfhdxSLQBQAAAKBqA125pk+fbgZA3mqrraLeFABw0q6Zru6Z6SKLYB2IXsfMuuiii2T//fc3Lavee+89ufnmm0M7Iptttpm89tprpiWXlsHahVxbkAXFYPQAAAAAqnow+u+++87M7tWnTx/Zbbfdml7XWcEmTJgQ6bYBQFuWwZtvvrk8++yz8vLLL5tuhf/5z3/M3xqMCpvOgLvJJpt4BbkULboAAAAAVHWLrlNPPdV0nxk/fnyzrjMnn3yyXHLJJTJq1KhItw8A2qpFl9ppp53MUq4IdAEAAAAIRGdcdM266EqPmgbidPwZ7S7Tkk53f+aZZ0ayXQDgokGsxhACXeWuTQJdPiPzRzUFvA9XZd5yqs5cy5Yts+ZdvHixdWpkmzlz5uRNmzVrljXv8uXLA6Up7Webz7x586x5Fy1aZE1funRpoP2sGhsbQ/nlMapzNqzzuRTC+s4+xynM69Q27a5rm+vr6/Om1dQEL7Jd14PtOy1ZYp8627U/bJ8d5sNPHOsHl7hex9Tj8a/HXXW5q662pdvqcVddTj1eGfV4pbfo0rpXr93OnTuvcM7qdZlKpaTc2B5sfR56XbV2wrZu1ymeSQdL0+T6/M8E9Qvyl7tq8az86T/Ms5fpUxbZy9b5Dfm3u1PKvkPaJ/Ond/3e/oy0bO6CvGnpRfa6Rmz3jI7j4MPrvt5ycjl2s3Mg97irhDI4DIzRBQAAAKBqx+hq166dmd3rqaeeahZw1B9Fr7jiCtluu+0i3T4AyCdd4BJnjz76qBkA/5NPPinZOgl0AQAAAKjaQJe6+uqr5bDDDjNjdWnrrnPPPVc23XRTefrpp2XkyJFRbx4AtEqL10KWOOvXr5+89NJLsv7665sfFv7+97/LggX5WyUWgkAXAAAAgKoOdOnMYq+88orpxrvGGmvI6NGjZYsttpB33nnHPHwBQJwHo3ctcbb11lvLe++9Jx9++KEZF/G8884zsy4eddRRMmbMmEDrJNAFAAAAoGoDXTrm66WXXipbbrmlPPjgg/Lxxx/LxIkT5e6775b+/fubNACIo0oog7M23nhjueGGG2T69Oly1113yRdffCE77LCDrLvuuqbVrWss01wEugAAAAB4zbroWuIe6NKHqHxp11xzTZtvEwAUQqdX01kXrYuUDw3KjR07Vp544gnTymvgwIGy5557yq233iqDBg2Szz77rKD1EOgCAAAAINXemqA1EyZMkFVWWSXqzQCAVqUzmYKWuPvmm2/koosukrXXXlv22msv89qzzz5rAlvayktbd+28885yxx13FLS+4HPVAwAAAKhq5Ty1vXaDWWuttcz26b979uzZLF1nXZw3b55ccMEFkW0jANho6eoqYTMx34UPP/ywHHzwwbLRRhvJiBEj5NBDD5Xu3bs3e08ymTQtuyZNmtS2ga7cqXjbMq9+4SBprs91bZOtwtZK0UZncsln4cKF1ryzZ8/OmzZjxgxr3k6dOuVNa2hosObt0qVL4Lw//PBD3rRp06YFzqv05iOfJUuWWPPqYKP5uJrY+5w7PuesLd3nOvLl+mxbuus72641nxtrV17bee2zr13Xi3aRyCeVSgX+XFe5ZLsebGmqvr4+8Hf2efgJ81rzucZ9RPkwSD1e3vW461qz1eOuvK662FaXU4+XRz3uK66BLJcOHTrITTfdJIsXL5bTTjvN/DtXXV2daV2wySabSDVJh3UuOOpeSSSDpWlyTV3+j621P/Km6vLfX3VI2a9LV/oSS3VSl7Tnta066fhcm0TSfj+Z8LjftB2n8iwl4q+QwebTMd/5q666qjz11FMydOjQFdLmzJljnut79+4thxxySMHrpEUXAAAAgKpr0VVbWysHHnigCfRqQGvHHXeMepMAoDgZLWPd74mzTz75RD744INWA13a2kvTbrvttqLWSaALAAAAQCCFDDYf98Hoa2pqmoJcuq3awqtlaztXi0oAiEJjJmMW13vK1YIFC6Rz585F5yPQBQAAAKDqWnTlGj9+vJx44ony7rvvrtBlv1u3bjJ37tzItg0AKrHr4tixY2XUqFEyceJEM9TBqaee2ixdf3TQLo033nhj0esm0AUAAACgqgNdOvjxuuuuK6NHj5auXbuu0OILAOJIi1dXEZuJaRG8aNEiM86njsOV/XcuLYsvvvhiOeCAA4peN6U2AAAAgKoN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mf/RNNHOPqB1Y8f8z0G1/da15u2czH/v3m4l+6xx3deda01fvmhp3rRkrf1RvH2Prvm3a/W+1ry1fdfOn7jSata8mfb5PzdT2z7w8Xedzbaz0nZKqpQlPeG6jkK6ztqKXpKuWRXT/5c+depU6dr1/x/ffOXvT37yk2bva422wGrpjTfekF/84hfy29/+1gS7CrXtttvKueeeK3PmzJHu3btLKdCiCwAAAEDoga5CWxMAAErfdbFr167OAFY2iNVaIMvmv//9r+yxxx5y2mmnycUXX1xU3ilTpkjnzp1lww03lL322ku6deu2QiBs+PDhRa2TQBcAAACA0AejL7Q1AQCgMMsb01LTmHa+J0xvv/22CXKdfvrpcskllxSdf/bs2WbAeV20ntAl14ABA4peJ4EuAAAAAKG36Cq0NQEAoDA6GI+r62JjyDtzv/32M8Movfvuuybglfv6scce68w/dOhQs5QSgS4AAAAAsRiMvhA61td1110nv/71r2WDDTYo6boBoFK7Lobl7rvvbnW88GK7P5YSgS4AAAAAsQl0XX/99TJ37lx5//33TZeW7Dhe2f9roOtPf/qTDB48uCnQ5coDAJWoMZMxi+s9Ydppp52816Hlto7bOGbMGNlzzz3l8ssvl88//1yeeuqpoga2zyLQBQAAACB2LbqGDRvW6uva/VEfiFprzZUvDwBUonQ6I42O2VDTjvSoNTY2ym677SY9evSQQYMGmdkX1TrrrCMPPvigSdMfNopBoAsAAABAbAJdZ555pjVdA10tW2q58gBAJWosINDVGPNA19ixY03Xx2effVZuv/12GTdunHk9kUjIrrvuKo8++mh0gS5bBeaaiUW/QJA0F1feVCqVN63Q2WOC5NWIZT5Lly4N/Lmt9YvNtWjRorxptbW11rzJZFKCamhoyJu2bNkya15Xuu07L1++PPA56zp3bPvDta9s6T7nu+/4F2Fep2Fex2Hta9v+8NnXpR6npC34Hl9buut6ieq887lWbMc4zsefery863FXXR5WPe6qq8Osx2370qcuLtd6vBxmXUSRMulQ8iaS9kfAhAQ/xxOS/zx2DZgtlofxZF1HCSxl/741de3zZ+2xmjVv3YK51vRMvaVOcJU1nfJP3JDq3suat7HDSvm3yZKm0u275E1rsJwb5nNDKscSPumu68jnOouB+oaMJBvSzvfE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4ZM3tHPH53x25C3Pkvf/y2QK6LqYoesiAAAAABT4kJUJ5YeHqVOnyuOPPy69evWSAw44oKA8H330kYwZM0Y6deokQ4cOlVVWWaXozwWAckLXxdaF0xwGAAAAQFUFu/ItxViyZInsu+++8tOf/lT+8pe/yK233lpQvquuukq23XZbef311+Wee+6RddddV955552A3wgAyivQ5VqqDYEuAAAAAKEEuYoNdul7jzzySPnyyy9lhx12KCjP559/Lueff77ceeed8sADD8jLL78su+22mxx33HEcVQAVjUBX6wh0AQAAAIhFoKtjx46mRVcq5RpZ6f977LHHZKWVVpLhw4c3vXbiiSfKhx9+KJ999lnR3wkAykUmnS4g2JWWasOsiwAAAAAC0UkSXANjZwNd8+fPb/Z6u3btzOLr448/lnXWWadZcGy99dZrStNujABQiRob6iXjGHA/3WCflbES0aILAAAAQOgtuvr16yfdunVrWi6//PKS7PUFCxaYFl25sn9rGgBUKrouerbo8pla2jUdto3PLC4+eV3bbNsfrs/1mbY8rGnrffaVz+f65C0kPYpzxzkNseXcCmPWokL57MuohHne2hT6y3U58dnmMPdHVPsyrPMjzPLSZ7sU9Xh51+O+dVNU5y31ePkrpJzOvkdnUuzatWvT66VozZXt7jhjxoxmr82bN8/8X2dgLFe2PZv2qB6TjtYf1qs249EFypXXlu7YZmtHV0desZTpGfve8DoOLknLR3vdEbiOQzl2c7McY9chCvMYtonGRskkHYPNN1bfYPR0XQQAAAAQeqBLg1y5ga5SGTRokLz44ovmc7LB08mTJ5v/Dxw4sOSfBwBxkck0ijhmVczoe6oMXRcBAAAAxGIw+kIsXLhQrrnmmqaB5ocNGyYzZ86U559/vuk9d999twlyDR48uKSfDQBxwmD0raNFFwAAAIDQW3QV6vbbbzddDz/66COZNWuWCWqps88+2/x/7ty58tvf/lbWWGMNM9D8xhtvLCNGjJCDDjpIjj76aJk+fbqZiXH06NEcVQAVP0aXs0VXuvpadBHoAgAAABD6rIuF+uGHH2T27Nnys5/9zPz93XffNUvv0qWL/OY3vzFdFrOuvfZa2XPPPeW1114zga+LLrrIzMQIAJUs3bBcEo6OepmG5VJtCHQBAAAAiE2LrvPPP9+arjM2Zlt55dpll13MAgDVghZdrSPQBQAAACA2gS4AQGHS6UZJ0HVxBQS6AAAAAARCoAsAopNpTIskGt3vqTIFB7qSyWRov9Ro3/6gbJ/r2iafz3WNRRDFesP8tSys7+srrPPOdW745PXZZttx8D1GYR7jsM5Nn/W68tr2R5ifG0elHnulVHnjuj98rtMwr0Pq8bbZ19TjxaEeL825EyUCXXa2o+pTA2Y8PjftyJxK2J/7rDIez1e2vB7rdclYvm/CsS9SEqJMBPs5xH0prvPKI2/G43wvd5lMAYPRZxiMHgAAAAAiG4weAFBgGdxQLwlHEZtprK+63UnXRQAAAACBEcgCgGhkli/934D0No3MuggAAAAAVnV1dbLaaqvJd999V9Ce0vdqHgBACcvgSY9QBreCFl0AAAAAitK+fXuZMmWK1NfXF/xQpnkAAP4og+0IdAEAAAAI9KBF8AoAokEZnJ/HlBoAAAAAAABAGbboCnNactdMLmGxbbPr+9i2y5XXlh7m1NI+x8gnr893CnOadlu667zzOXd8RDkteVjrj+sAtmGWPeUmqnM6Sj7XWly/E/V4c9TjhaMer4x6HNFIWg5r2qN6zXikJ3zyJkJsJ5HxuPfyuG+zfiWfbdLsHvsr4fnZgfeV47k/MNe+sKS7znefawmViRZdAAAAAAAAqAgEugAAAAAAAFARCHQBAAAAAACgIhDoAgAAAAAAQEUg0AUAAAAAAICKQKALAAAAAAAAFYFAFwAAAAAAACpCIpPJZKLeCAAAAAAAAMAXLboAAAAAAABQEQh0AQAAAAAAoCIQ6AIAAAAAAEBFINAFAAAAAACAikCgCwAAAAAAABWBQBcAAAAAAAAqAoEuAAAAAAAAVAQCXQAAAAAAAKgIBLoAAAAAAAAgleD/AQSb4Q3aRYntAAAAAElFTkSuQmCC",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "target = target_image[..., 0].cpu().numpy()\n",
+ "initial = initial_image[..., 0].cpu().numpy()\n",
+ "optimized = optimized_image[..., 0].cpu().numpy()\n",
+ "residual = optimized - target\n",
+ "\n",
+ "intensity_limits = (\n",
+ " min(target.min(), initial.min(), optimized.min()),\n",
+ " max(target.max(), initial.max(), optimized.max()),\n",
+ ")\n",
+ "residual_limit = np.max(np.abs(residual))\n",
+ "\n",
+ "fig, axes = plt.subplots(1, 4, figsize=(12, 3), constrained_layout=True)\n",
+ "for axis, image, title in zip(\n",
+ " axes[:3],\n",
+ " (target, initial, optimized),\n",
+ " (\"Target\", \"Initial\", \"Optimized\"),\n",
+ "):\n",
+ " view = axis.imshow(image, cmap=\"gray\", vmin=intensity_limits[0], vmax=intensity_limits[1])\n",
+ " axis.set_title(title)\n",
+ " axis.axis(\"off\")\n",
+ "\n",
+ "residual_view = axes[3].imshow(\n",
+ " residual,\n",
+ " cmap=\"RdBu_r\",\n",
+ " vmin=-residual_limit,\n",
+ " vmax=residual_limit,\n",
+ ")\n",
+ "axes[3].set_title(\"Residual\")\n",
+ "axes[3].axis(\"off\")\n",
+ "\n",
+ "fig.colorbar(view, ax=axes[:3], shrink=0.75, label=\"Intensity\")\n",
+ "fig.colorbar(residual_view, ax=axes[3], shrink=0.75, label=\"Intensity difference\");"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c7c2b747",
+ "metadata": {},
+ "source": [
+ "The recovered position and radius closely match the target values. This workflow can be extended to other continuous scatterer or microscope properties, provided all operations between the parameter and loss support PyTorch autograd.\n",
+ "\n",
+ "**NOTE:** Differentiability does not guarantee that parameters are uniquely identifiable. Discrete choices such as `L`, `mode`, and the output region should remain fixed during gradient-based optimization, and correlated physical parameters may require additional observations or constraints."
+ ]
+ }
+ ],
+ "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.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/4-developers/DTDV431_mie_position_optimization.ipynb b/tutorials/4-developers/DTDV431_mie_position_optimization.ipynb
deleted file mode 100644
index e9dceba1d..000000000
--- a/tutorials/4-developers/DTDV431_mie_position_optimization.ipynb
+++ /dev/null
@@ -1,183 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "raw",
- "id": "e4834f5c",
- "metadata": {
- "vscode": {
- "languageId": "raw"
- }
- },
- "source": [
- "# TODO: Polish DTDV431 Mie Particle Position Optimization with PyTorch Autodifferentiation"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Mie Particle Position Optimization with PyTorch Autodifferentiation\n",
- "\n",
- "This notebook fits the `(x, y)` position of a single `MieSphere` by backpropagating through a `Brightfield` image. It is intentionally small and uses fixed `L`, `collection_angle`, and `offset_z` so the optimized variables are continuous.\n",
- "\n",
- "The important detail is calling `pipeline.update()()` inside the optimization loop. DeepTrack caches feature outputs, so `update()` is needed after each optimizer step."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import numpy as np\n",
- "import torch\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "from deeptrack.backend import config\n",
- "from deeptrack.optical.optics import Brightfield\n",
- "from deeptrack.optical import scatterers\n",
- "\n",
- "torch.manual_seed(0)\n",
- "torch.set_default_dtype(torch.float64)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "true_x, true_y = 15.5, 17.25\n",
- "\n",
- "with config.with_backend(\"torch\"):\n",
- " optics = Brightfield(\n",
- " NA=0.7,\n",
- " wavelength=680e-9,\n",
- " refractive_index_medium=1.33,\n",
- " resolution=1e-6,\n",
- " magnification=10,\n",
- " output_region=(0, 0, 32, 32),\n",
- " padding=(4, 4, 4, 4),\n",
- " )\n",
- "\n",
- " mie_kwargs = dict(\n",
- " radius=0.5e-6,\n",
- " refractive_index=1.45,\n",
- " position_unit=\"pixel\",\n",
- " input_polarization=0.0,\n",
- " output_polarization=0.0,\n",
- " L=5,\n",
- " collection_angle=0.3,\n",
- " offset_z=1e-5,\n",
- " mode=\"hybrid\",\n",
- " )\n",
- "\n",
- " target_sample = scatterers.MieSphere(\n",
- " position=(true_x, true_y),\n",
- " **mie_kwargs,\n",
- " )\n",
- " target = optics(target_sample).update()().detach()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "with config.with_backend(\"torch\"):\n",
- " x = torch.tensor(13.0, requires_grad=True)\n",
- " y = torch.tensor(14.5, requires_grad=True)\n",
- "\n",
- " fitted_sample = scatterers.MieSphere(\n",
- " position=(x, y),\n",
- " **mie_kwargs,\n",
- " )\n",
- " pipeline = optics(fitted_sample)\n",
- " optimizer = torch.optim.Adam([x, y], lr=0.2)\n",
- "\n",
- " history = []\n",
- " for step in range(50):\n",
- " optimizer.zero_grad()\n",
- " image = pipeline.update()()\n",
- " loss = ((image - target) ** 2).mean()\n",
- " loss.backward()\n",
- " optimizer.step()\n",
- "\n",
- " history.append(\n",
- " (step, loss.item(), x.detach().item(), y.detach().item())\n",
- " )\n",
- "\n",
- "history = np.array(history)\n",
- "print(f\"true position: ({true_x:.2f}, {true_y:.2f})\")\n",
- "print(f\"fitted position: ({history[-1, 2]:.2f}, {history[-1, 3]:.2f})\")\n",
- "print(f\"final loss: {history[-1, 1]:.3e}\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "fig, axes = plt.subplots(1, 2, figsize=(9, 3.5))\n",
- "\n",
- "axes[0].semilogy(history[:, 0], history[:, 1])\n",
- "axes[0].set_xlabel(\"step\")\n",
- "axes[0].set_ylabel(\"MSE loss\")\n",
- "\n",
- "axes[1].plot(history[:, 2], history[:, 3], marker=\".\", label=\"fit\")\n",
- "axes[1].scatter([true_x], [true_y], c=\"tab:red\", label=\"target\")\n",
- "axes[1].set_xlabel(\"x [px]\")\n",
- "axes[1].set_ylabel(\"y [px]\")\n",
- "axes[1].axis(\"equal\")\n",
- "axes[1].legend()\n",
- "\n",
- "fig.tight_layout()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "fitted_image = pipeline.update()().detach()\n",
- "residual = fitted_image - target\n",
- "\n",
- "fig, axes = plt.subplots(1, 3, figsize=(10, 3))\n",
- "for ax, array, title in zip(\n",
- " axes,\n",
- " (target, fitted_image, residual),\n",
- " (\"target\", \"fitted\", \"residual\"),\n",
- "):\n",
- " ax.imshow(array[..., 0].cpu().numpy(), cmap=\"gray\")\n",
- " ax.set_title(title)\n",
- " ax.axis(\"off\")\n",
- "\n",
- "fig.tight_layout()"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "py_env_book (3.10.15)",
- "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.10.15"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}