{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d4368390",
   "metadata": {},
   "source": [
    "# Mechanisms in BrainCell\n",
    "\n",
    "This notebook now stays intentionally narrow.\n",
    "\n",
    "`Ion` and `Channel` already have dedicated walkthroughs in `6.channel.ipynb` and `7.ion.ipynb`. Here we only keep the minimum density background needed to make point mechanisms concrete, then spend most of the notebook on **probes**.\n",
    "\n",
    "At the declaration layer, the current multi-compartment mechanism surface still splits into two families:\n",
    "\n",
    "- `Density`: installed with `cell.paint(region, ...)`\n",
    "- `Point`: installed with `cell.place(locset, ...)`\n",
    "\n",
    "`CableProperty` is closely related, but it is a passive cable declaration rather than a `Mechanism` subclass.\n",
    "\n",
    "| Family | Declaration | Attach with | What matters most | Coverage here |\n",
    "| --- | --- | --- | --- | --- |\n",
    "| Passive cable declaration | `CableProperty` | `cell.paint(region, ...)` | Passive defaults such as `v_rest`, `cm`, `ra`, `temperature` | Short reminder |\n",
    "| Density mech | `Ion` | `cell.paint(region, ...)` | Runtime ion containers and ion-side state | See `7.ion.ipynb` |\n",
    "| Density mech | `Channel` | `cell.paint(region, ...)` | Distributed conductance mechanisms bound to ions | See `6.channel.ipynb` |\n",
    "| Point mech | `CurrentClamp` / `SineClamp` / `FunctionClamp` | `cell.place(locset, ...)` | Current injection at point locations | Short refresher |\n",
    "| Point mech | `StateProbe` / `MechanismProbe` / `CurrentProbe` | `cell.place(locset, ...)` | Read runtime state and current back out of the cell | Main focus |\n",
    "| Point mech | `ProbeMechanism` / `Synapse` / `Junction` | `cell.place(locset, ...)` | Older or narrower workflows | Overview only |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0ac317a2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-26T03:57:49.086220Z",
     "iopub.status.busy": "2026-04-26T03:57:49.085320Z",
     "iopub.status.idle": "2026-04-26T03:57:51.859359Z",
     "shell.execute_reply": "2026-04-26T03:57:51.858281Z"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "os.environ.setdefault(\"JAX_PLATFORMS\", \"cpu\")\n",
    "os.environ.setdefault(\"MPLBACKEND\", \"Agg\")\n",
    "\n",
    "import brainunit as u\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from braincell import Branch, Cell, Morphology\n",
    "from braincell.filter import AllRegion, BranchSlice, RootLocation, Terminals, at\n",
    "from braincell.mech import (\n",
    "    CableProperty,\n",
    "    Channel,\n",
    "    CurrentClamp,\n",
    "    CurrentProbe,\n",
    "    FunctionClamp,\n",
    "    Ion,\n",
    "    MechanismProbe,\n",
    "    SineClamp,\n",
    "    StateProbe,\n",
    ")\n",
    "\n",
    "\n",
    "def build_demo_morphology() -> Morphology:\n",
    "    soma = Branch.from_lengths(\n",
    "        lengths=[20.0] * u.um,\n",
    "        radii=[8.0, 8.0] * u.um,\n",
    "        type=\"soma\",\n",
    "    )\n",
    "    dend = Branch.from_lengths(\n",
    "        lengths=[60.0] * u.um,\n",
    "        radii=[2.0, 1.2] * u.um,\n",
    "        type=\"basal_dendrite\",\n",
    "    )\n",
    "    axon = Branch.from_lengths(\n",
    "        lengths=[80.0] * u.um,\n",
    "        radii=[1.0, 0.6] * u.um,\n",
    "        type=\"axon\",\n",
    "    )\n",
    "    morpho = Morphology.from_root(soma, name=\"soma\")\n",
    "    morpho.attach(parent=\"soma\", child_branch=dend, child_name=\"dend\", parent_x=1.0)\n",
    "    morpho.attach(parent=\"soma\", child_branch=axon, child_name=\"axon\", parent_x=0.0)\n",
    "    return morpho\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89bf0c9a",
   "metadata": {},
   "source": [
    "## 1. Density declarations: only the minimum background\n",
    "\n",
    "The density side has three layers:\n",
    "\n",
    "1. `CableProperty` sets passive cable defaults.\n",
    "2. `Ion` declares ion containers and any ion-side runtime state.\n",
    "3. `Channel` installs distributed mechanisms that bind to those ions.\n",
    "\n",
    "For the full density story, use the neighboring notebooks instead of this one:\n",
    "\n",
    "- `4.cell.ipynb` for the paint/place workflow on `Cell`\n",
    "- `6.channel.ipynb` for channel templates, gates, and generated ODEs\n",
    "- `7.ion.ipynb` for ion templates, Nernst handling, and dynamic ion state\n",
    "\n",
    "That is enough context for probes, because probes only become interesting after `Cell.init_state()` has materialized runtime state from these declarations.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d02835f",
   "metadata": {},
   "source": [
    "### 1.1 `CableProperty`: paintable, central, but passive\n",
    "\n",
    "`CableProperty` uses the same `paint(...)` entry point as density mechanisms, so it still belongs in the mental model even though it does not inherit from `Mechanism`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3eb5d501",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-26T03:57:51.863818Z",
     "iopub.status.busy": "2026-04-26T03:57:51.863499Z",
     "iopub.status.idle": "2026-04-26T03:57:51.911936Z",
     "shell.execute_reply": "2026-04-26T03:57:51.911085Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "soma\n",
      "├── dend\n",
      "└── axon\n",
      "\n",
      "Cell(root='soma', n_branches=3, n_paint_rules=1, n_place_rules=0, initialized=False)\n",
      "root CV resting potential: -65. mV\n"
     ]
    }
   ],
   "source": [
    "morpho = build_demo_morphology()\n",
    "print(morpho.topo())\n",
    "\n",
    "cell_passive = Cell(morpho)\n",
    "cell_passive.paint(\n",
    "    AllRegion(),\n",
    "    CableProperty(\n",
    "        resting_potential=-65.0 * u.mV,\n",
    "        membrane_capacitance=1.0 * (u.uF / u.cm**2),\n",
    "        axial_resistivity=100.0 * (u.ohm * u.cm),\n",
    "    ),\n",
    ")\n",
    "\n",
    "print()\n",
    "print(cell_passive)\n",
    "print(\"root CV resting potential:\", cell_passive.cvs[0].v)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5463e470",
   "metadata": {},
   "source": [
    "## 2. Point mechanisms: stimuli versus observers\n",
    "\n",
    "Point mechanisms live at one location in the point tree rather than across a branch interval.\n",
    "\n",
    "For this notebook, the useful split is:\n",
    "\n",
    "- **stimuli**: declarations that inject current at one point\n",
    "- **observers**: declarations that read runtime values back out of the cell\n",
    "\n",
    "Locsets decide **where** those declarations land. If you want the full locset vocabulary, see `2.filter.ipynb`.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb011ee0",
   "metadata": {},
   "source": [
    "### 2.1 Clamp declarations: a quick refresher\n",
    "\n",
    "`CurrentClamp`, `SineClamp`, and `FunctionClamp` all feed the same runtime path: `cell.runtime.evaluate_point_clamps(t=...)`.\n",
    "\n",
    "If several clamps are placed at the same point, their currents add. Since the rest of this notebook is probe-focused, we only keep one short runnable refresher here.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4610d4a0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-26T03:57:51.914911Z",
     "iopub.status.busy": "2026-04-26T03:57:51.914753Z",
     "iopub.status.idle": "2026-04-26T03:57:53.072880Z",
     "shell.execute_reply": "2026-04-26T03:57:53.071916Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "layout kinds: ['CurrentClamp', 'SineClamp', 'FunctionClamp']\n",
      "active point index: 1\n",
      "combined clamp current at 0.5 ms: 0.700 nA\n",
      "combined clamp current at 2.5 ms: 0.600 nA\n"
     ]
    }
   ],
   "source": [
    "cell_clamp = Cell(build_demo_morphology())\n",
    "cell_clamp.place(\n",
    "    RootLocation(x=0.5),\n",
    "    CurrentClamp(\n",
    "        delay=0.0 * u.ms,\n",
    "        durations=(2.0 * u.ms, 2.0 * u.ms),\n",
    "        amplitudes=(0.0 * u.nA, 0.3 * u.nA),\n",
    "    ),\n",
    "    SineClamp(\n",
    "        amplitude=0.2 * u.nA,\n",
    "        frequency=500.0 * u.Hz,\n",
    "        offset=0.1 * u.nA,\n",
    "        duration=4.0 * u.ms,\n",
    "    ),\n",
    "    FunctionClamp(\n",
    "        fn=lambda t: 0.4 * u.nA if t < 1.0 * u.ms else 0.0 * u.nA,\n",
    "    ),\n",
    ")\n",
    "cell_clamp.init_state()\n",
    "\n",
    "point_index = int(cell_clamp.layouts[0].point_index[0])\n",
    "current_early = cell_clamp.runtime.evaluate_point_clamps(t=0.5 * u.ms)\n",
    "current_late = cell_clamp.runtime.evaluate_point_clamps(t=2.5 * u.ms)\n",
    "\n",
    "print(\"layout kinds:\", [layout.kind for layout in cell_clamp.layouts])\n",
    "print(\"active point index:\", point_index)\n",
    "print(f\"combined clamp current at 0.5 ms: {float(current_early[point_index].to_decimal(u.nA)):.3f} nA\")\n",
    "print(f\"combined clamp current at 2.5 ms: {float(current_late[point_index].to_decimal(u.nA)):.3f} nA\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c270d0fd",
   "metadata": {},
   "source": [
    "### 2.2 Probes: the main observer surface\n",
    "\n",
    "Probes are sparse point declarations. They do **not** allocate their own evolving state; they sample state or current that already exists elsewhere in the initialized runtime.\n",
    "\n",
    "The three public probe types are:\n",
    "\n",
    "- `StateProbe`: reads cell-owned state. In the current multi-compartment implementation, that means membrane voltage `v`.\n",
    "- `MechanismProbe`: reads a runtime state field from a named mechanism or ion.\n",
    "- `CurrentProbe`: reads the current of a named mechanism, or the total current of a named ion owner.\n",
    "\n",
    "Once `cell.init_state()` has run, you can read probes in two ways:\n",
    "\n",
    "- `cell.sample_probe(name)` reads one probe snapshot by name.\n",
    "- `cell.sample_probes()` reads every probe snapshot as a `{name: value}` dictionary.\n",
    "\n",
    "During time integration, `cell.run(...)` samples the same placed probes every timestep and returns them in `RunResult.traces`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "264b71f7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-26T03:57:53.076284Z",
     "iopub.status.busy": "2026-04-26T03:57:53.076060Z",
     "iopub.status.idle": "2026-04-26T03:57:53.387078Z",
     "shell.execute_reply": "2026-04-26T03:57:53.385937Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "probe keys: ['soma(0.5)_IL_current', 'soma(0.5)_Na_HH1952_current', 'soma(0.5)_Na_HH1952_p', 'soma(0.5)_ca_dyn_Ci', 'soma(0.5)_na_current', 'soma(0.5)_v']\n",
      "single lookup via sample_probe: 0.0\n",
      "soma(0.5)_v (mV): -65.0\n",
      "soma(0.5)_Na_HH1952_p: 0.0\n",
      "soma(0.5)_ca_dyn_Ci (mM): 0.00024\n",
      "soma(0.5)_Na_HH1952_current (mA / cm^2): 0.0\n",
      "soma(0.5)_na_current (mA / cm^2): 0.0\n",
      "soma(0.5)_IL_current (mA / cm^2): 0.00031838996801525354\n"
     ]
    }
   ],
   "source": [
    "cell_probe = Cell(build_demo_morphology())\n",
    "region = BranchSlice(branch_index=[0, 1], prox=0.0, dist=1.0)\n",
    "\n",
    "cell_probe.paint(\n",
    "    region,\n",
    "    Channel(\"IL\", g_max=0.03 * (u.mS / u.cm**2), E=-54.387 * u.mV),\n",
    "    Channel(\"Na_HH1952\", g_max=120.0 * (u.mS / u.cm**2)),\n",
    "    Ion(\n",
    "        \"CalciumDetailed\",\n",
    "        name=\"ca_dyn\",\n",
    "        d=0.5 * u.um,\n",
    "        tau=10.0 * u.ms,\n",
    "        C_rest=5.0e-5 * u.mM,\n",
    "        Ci_initializer=2.4e-4 * u.mM,\n",
    "    ),\n",
    ")\n",
    "cell_probe.paint(\n",
    "    BranchSlice(branch_index=0, prox=0.0, dist=1.0),\n",
    "    Channel(\"CaT_HM1992\", ion_name=\"ca_dyn\", g_max=2.0 * (u.mS / u.cm**2)),\n",
    ")\n",
    "\n",
    "cell_probe.place(\n",
    "    at(\"soma\", 0.5),\n",
    "    StateProbe(),\n",
    "    MechanismProbe(mechanism=\"Na_HH1952\", field=\"p\"),\n",
    "    MechanismProbe(mechanism=\"ca_dyn\", field=\"Ci\"),\n",
    "    CurrentProbe(ion=\"na\", mechanism=\"Na_HH1952\"),\n",
    "    CurrentProbe(ion=\"na\"),\n",
    "    CurrentProbe(mechanism=\"IL\"),\n",
    ")\n",
    "cell_probe.init_state()\n",
    "\n",
    "samples = cell_probe.sample_probes()\n",
    "\n",
    "print(\"probe keys:\", sorted(samples))\n",
    "print(\"single lookup via sample_probe:\", float(cell_probe.sample_probe(\"soma(0.5)_Na_HH1952_p\")))\n",
    "print(\"soma(0.5)_v (mV):\", float(samples[\"soma(0.5)_v\"].to_decimal(u.mV)))\n",
    "print(\"soma(0.5)_Na_HH1952_p:\", float(samples[\"soma(0.5)_Na_HH1952_p\"]))\n",
    "print(\"soma(0.5)_ca_dyn_Ci (mM):\", float(samples[\"soma(0.5)_ca_dyn_Ci\"].to_decimal(u.mM)))\n",
    "print(\n",
    "    \"soma(0.5)_Na_HH1952_current (mA / cm^2):\",\n",
    "    float(samples[\"soma(0.5)_Na_HH1952_current\"].to_decimal(u.mA / u.cm**2)),\n",
    ")\n",
    "print(\n",
    "    \"soma(0.5)_na_current (mA / cm^2):\",\n",
    "    float(samples[\"soma(0.5)_na_current\"].to_decimal(u.mA / u.cm**2)),\n",
    ")\n",
    "print(\n",
    "    \"soma(0.5)_IL_current (mA / cm^2):\",\n",
    "    float(samples[\"soma(0.5)_IL_current\"].to_decimal(u.mA / u.cm**2)),\n",
    ")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07790e9e",
   "metadata": {},
   "source": [
    "### 2.3 What can a probe measure, exactly?\n",
    "\n",
    "The practical rules are:\n",
    "\n",
    "- `StateProbe(field=\"v\")` reads cell-owned membrane voltage. In the current implementation, `v` is the only supported state field.\n",
    "- `MechanismProbe(mechanism=\"Na_HH1952\", field=\"p\")` works well for channel gate variables and other runtime state stored as `brainstate.State`.\n",
    "- `MechanismProbe` also works on **ion names**, not only on channel names. That is why `MechanismProbe(mechanism=\"ca_dyn\", field=\"Ci\")` can read the dynamic calcium concentration created by `Ion(\"CalciumDetailed\", name=\"ca_dyn\", ...)`.\n",
    "- Static parameters are not valid probe fields. For example, `g_max` is a parameter, not runtime state.\n",
    "- Derived properties are not valid probe fields either. For Nernst-style ions, `E` is computed from the current ion state; it is not stored as a standalone runtime `State`.\n",
    "- `CurrentProbe(ion=\"na\", mechanism=\"Na_HH1952\")` reads one mechanism current.\n",
    "- `CurrentProbe(mechanism=\"IL\")` reads a mechanism current when the mechanism can evaluate `current(...)` without an explicit ion selector.\n",
    "- `CurrentProbe(ion=\"na\")` reads the **total** current of the named ion owner.\n",
    "\n",
    "In the snapshot above, `soma(0.5)_Na_HH1952_current` and `soma(0.5)_na_current` happen to match because only one sodium channel is present. Once several sodium channels share the same ion owner, the ion-total probe becomes their sum.\n",
    "\n",
    "Probe names matter because every runtime lookup is name-keyed:\n",
    "\n",
    "- If you do not provide `name=...`, the lowerer auto-generates names such as `soma(0.5)_v` or `soma(0.5)_Na_HH1952_p`.\n",
    "- If you do provide `name=...`, it must still be globally unique. Duplicate names will make `sample_probes()` and `run(...)` ambiguous.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "19b61d28",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-26T03:57:53.390824Z",
     "iopub.status.busy": "2026-04-26T03:57:53.390481Z",
     "iopub.status.idle": "2026-04-26T03:57:53.430973Z",
     "shell.execute_reply": "2026-04-26T03:57:53.430148Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "locset display names: ('soma(0.5)', 'dend(1)', 'axon(1)')\n",
      "resolved probe keys: ['axon(1)_v', 'dend(1)_v', 'soma(0.5)_v']\n",
      "\n",
      "state_probe:v:soma(0.5)_v [1] soma(0.5)_v\n",
      "state_probe:v:dend(1)_v [3] dend(1)_v\n",
      "state_probe:v:axon(1)_v [5] axon(1)_v\n"
     ]
    }
   ],
   "source": [
    "morpho_multi = build_demo_morphology()\n",
    "locset = RootLocation(x=0.5) | Terminals()\n",
    "\n",
    "cell_multi = Cell(morpho_multi)\n",
    "cell_multi.place(locset, StateProbe())\n",
    "cell_multi.init_state()\n",
    "\n",
    "print(\"locset display names:\", morpho_multi.select(locset).display_names)\n",
    "print(\"resolved probe keys:\", sorted(cell_multi.sample_probes()))\n",
    "print()\n",
    "for layout in cell_multi.layouts:\n",
    "    declaration = cell_multi.runtime.get_layout_mechanism(layout.id)\n",
    "    print(layout.kind, layout.point_index.tolist(), declaration.name)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b87a2ee",
   "metadata": {},
   "source": [
    "A locset that resolves to several points therefore produces several probes, one per selected point, each with its own resolved name. That is usually what you want for `sample_probes()` and for `RunResult.traces`, because each trace stays keyed by one concrete point location.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f884978c",
   "metadata": {},
   "source": [
    "### 2.4 `CurrentProbe` on mixed-ion channels: owner versus modulators\n",
    "\n",
    "Mixed-ion channels need one more piece of vocabulary.\n",
    "\n",
    "`Kca3p1_MA2020_GoC` uses potassium as the **current owner**, while calcium acts as a **modulator** of the gating dynamics. In that case:\n",
    "\n",
    "- `CurrentProbe(mechanism=\"Kca3p1_MA2020_GoC\")` asks the mechanism itself for its current, using all ions that were bound to it at runtime.\n",
    "- `CurrentProbe(ion=\"k_main\")` asks the potassium owner for its **total** current, which may include several potassium channels.\n",
    "\n",
    "To make that distinction visible, the example below adds a second potassium channel and briefly depolarizes the soma before comparing the two recorded currents.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "45154c5c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-26T03:57:53.433935Z",
     "iopub.status.busy": "2026-04-26T03:57:53.433779Z",
     "iopub.status.idle": "2026-04-26T03:57:54.873246Z",
     "shell.execute_reply": "2026-04-26T03:57:54.872123Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['soma(0.5)_Kca3p1_MA2020_GoC_current', 'soma(0.5)_k_main_current']\n",
      "bound ion keys: ('k_main', 'ca_hva')\n",
      "current owner: k_main\n",
      "last Kca mechanism current (mA / cm^2): -0.022346971556544304\n",
      "last k_main total current (mA / cm^2): -0.02325270138680935\n",
      "difference at last timestep (mA / cm^2): -0.0009057298302650452\n"
     ]
    }
   ],
   "source": [
    "cell_mixed = Cell(build_demo_morphology())\n",
    "region = BranchSlice(branch_index=[0, 1], prox=0.0, dist=1.0)\n",
    "\n",
    "cell_mixed.paint(\n",
    "    region,\n",
    "    Ion(\"PotassiumFixed\", name=\"k_main\", E=-88.0 * u.mV),\n",
    "    Ion(\"CalciumFixed\", name=\"ca_hva\", Ci=2e-4 * u.mM),\n",
    "    Ion(\"CalciumFixed\", name=\"ca_lva\", Ci=5e-4 * u.mM),\n",
    ")\n",
    "cell_mixed.paint(\n",
    "    region,\n",
    "    Channel(\"Kca3p1_MA2020_GoC\", ion_names={\"ca\": \"ca_hva\"}),\n",
    "    Channel(\"K_Kv_test\", ion_name=\"k_main\", g_max=1.0 * (u.mS / u.cm**2)),\n",
    ")\n",
    "cell_mixed.place(\n",
    "    RootLocation(x=0.5),\n",
    "    CurrentClamp(delay=0.5 * u.ms, durations=10.0 * u.ms, amplitudes=0.5 * u.nA),\n",
    ")\n",
    "cell_mixed.place(\n",
    "    at(\"soma\", 0.5),\n",
    "    CurrentProbe(mechanism=\"Kca3p1_MA2020_GoC\"),\n",
    "    CurrentProbe(ion=\"k_main\"),\n",
    ")\n",
    "\n",
    "result = cell_mixed.run(dt=0.05 * u.ms, duration=11.0 * u.ms)\n",
    "layout = next(layout for layout in cell_mixed.layouts if layout.kind == \"channel:Kca3p1_MA2020_GoC\")\n",
    "mech_trace = result.traces[\"soma(0.5)_Kca3p1_MA2020_GoC_current\"].to_decimal(u.mA / u.cm**2)\n",
    "total_trace = result.traces[\"soma(0.5)_k_main_current\"].to_decimal(u.mA / u.cm**2)\n",
    "\n",
    "print(sorted(result.traces))\n",
    "print(\"bound ion keys:\", cell_mixed.runtime.bound_ion_keys[layout.id])\n",
    "print(\"current owner:\", cell_mixed.runtime.current_owner_keys[layout.id])\n",
    "print(\"last Kca mechanism current (mA / cm^2):\", float(mech_trace[-1]))\n",
    "print(\"last k_main total current (mA / cm^2):\", float(total_trace[-1]))\n",
    "print(\"difference at last timestep (mA / cm^2):\", float(total_trace[-1] - mech_trace[-1]))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65b2b536",
   "metadata": {},
   "source": [
    "### 2.5 Probe traces during `cell.run(...)`\n",
    "\n",
    "Snapshots are useful when you want the value **now**. For a time series, you do not place a different declaration: you place the same probes and then call `cell.run(...)`.\n",
    "\n",
    "A few operational details matter:\n",
    "\n",
    "- `cell.run(...)` auto-calls `init_state()` if the cell is still in DECLARING.\n",
    "- `cell.run(...)` requires at least one placed probe, because its trace output is probe-driven.\n",
    "- The return value is `RunResult(time=..., traces=...)`, where `traces` is a dictionary keyed by probe name.\n",
    "\n",
    "Below we drive the soma with a step current and record three traces from the same point: membrane voltage, one sodium gate variable, and the sodium mechanism current.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7f2f6f94",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-26T03:57:54.877372Z",
     "iopub.status.busy": "2026-04-26T03:57:54.876810Z",
     "iopub.status.idle": "2026-04-26T03:57:56.143053Z",
     "shell.execute_reply": "2026-04-26T03:57:56.142147Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "trace keys: ['soma(0.5)_Na_HH1952_current', 'soma(0.5)_Na_HH1952_p', 'soma(0.5)_v']\n",
      "n timesteps: 240\n",
      "current time after run (ms): 12.0\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAocAAALkCAYAAAB9dJ8WAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAxrtJREFUeJzs3XlcFPX/B/DX7sIu98p9iSLeN4pJmKkViWaWnXZ5ZXao3w76VdKh2WV2+K2+2WVZVpaW3eV9lSZqat4nCoLcqOxyLrA7vz+GXVgBBZxhduH1fDx4MDs785n3vtmFN5+Zz2dUgiAIICIiIiICoFY6ACIiIiJyHCwOiYiIiMiGxSERERER2bA4JCIiIiIbFodEREREZMPikIiIiIhsWBwSERERkQ2LQyIiIiKyYXFIRERERDYsDokcmEqlwsyZM5UOg1oZlUqFF1988aLbbN68GSqVCitWrGiZoCQ2YsQIjBgxwvY4LS0NKpUKX3zxhWIxXcwbb7yBHj16wGKxSNLe6tWr4eXlhfz8fEnao7aFxSFRE33xxRdQqVS2Lzc3N3Tr1g0zZ85Ebm6u0uE1y2uvvYaff/5Z6TAc2uHDh/Hiiy8iLS1N6VBapb179+K+++5DREQEdDod/Pz8EB8fj88//xxms1np8GRlNBoxf/58PPPMM1CrpfmzPGrUKHTp0gXz5s2TpD1qW1gcEjXTSy+9hK+++grvv/8+hgwZgg8//BBxcXEoLS1VOrQmY3F4aYcPH8bcuXNZHMrg008/xaBBg7Bp0ybce++9+OCDDzB79my4u7tj6tSpmD9/vtIhymrx4sWoqqrC3XffLWm7Dz30ED7++GMUFRVJ2i61fi5KB0DkrEaPHo1BgwYBAB544AH4+/tjwYIF+OWXXxr8JV9SUgJPT8+WDFNyreE1AEBVVRUsFgu0Wq2icbSWfDbX9u3b8fDDDyMuLg4rV66Et7e37bnHH38cu3btwsGDBxWMUP6f0eeff46bbroJbm5ukrZ722234T//+Q++//573H///ZK2Ta0bew6JJHLttdcCAFJTUwEAkydPhpeXF06ePIkbbrgB3t7euPfeewGIf2yefPJJ2ym07t2746233oIgCPW2vXTpUnTv3h1ubm6IiYnBX3/9VWebzMxM3H///QgODoZOp0Pv3r2xePHiS8atUqlQUlKCJUuW2E6VT548GQDw4osvQqVS4fDhw7jnnnvg6+uLoUOHAgD279+PyZMnIyoqCm5ubggJCcH999+Ps2fP1hvb1KlTERYWBp1Oh06dOuGRRx5BRUWFbZvCwkI8/vjjtpx06dIF8+fPr3MN1rJlyxATEwNvb2/4+Pigb9++ePfddy/6Gq3Xm7311lt455130LlzZ+h0Ohw+fBgAcPToUdx+++3w8/ODm5sbBg0ahF9//dW2/xdffIE77rgDAHDNNdfY8rR582ZbDuu7hi8yMtKWS2s7KpUKf/75J6ZPn46goCC0b98egHiNXJ8+fXD48GFcc8018PDwQHh4ON5444067ZpMJsyZMwddunSBTqdDREQEnn76aZhMpjrbPfHEEwgMDIS3tzduuukmnDlz5qK5upDZbMazzz6LkJAQeHp64qabbkJGRobt+Tlz5sDV1bXea9sefPBBtGvXDuXl5Q22P3fuXKhUKixdutSuMLQaNGiQXQ4tFgveeecd9O7dG25ubggODsZDDz2E8+fPN+l1NeRiP6PJkycjMjKyzj7Wz0lt1uuFf/75Z/Tp08f2mVy9erXddqmpqdi/fz/i4+Mlib+2oKAg9OvXD7/88ovkbVPrxp5DIomcPHkSAODv729bV1VVhYSEBAwdOhRvvfUWPDw8IAgCbrrpJmzatAlTp05FdHQ01qxZg6eeegqZmZn473//a9fun3/+ieXLl+PRRx+FTqfDBx98gFGjRmHnzp3o06cPACA3NxdXXnml7Q9SYGAgVq1ahalTp8JoNOLxxx9vMO6vvvoKDzzwAAYPHowHH3wQANC5c2e7be644w507doVr732mq2AXbduHU6dOoUpU6YgJCQEhw4dwieffIJDhw5h+/bttj+WWVlZGDx4MAoLC/Hggw+iR48eyMzMxIoVK1BaWgqtVovS0lIMHz4cmZmZeOihh9ChQwds27YNSUlJyM7OxjvvvGM75t13343rrrvOdqrxyJEj+Pvvv/HYY49d8mf0+eefo7y8HA8++KDturZDhw7hqquuQnh4OGbNmgVPT0989913GDduHH744QfccsstGDZsGB599FG89957ePbZZ9GzZ08AsH1vqunTpyMwMBCzZ89GSUmJbf358+cxatQo3HrrrbjzzjuxYsUKPPPMM+jbty9Gjx4NQCyObrrpJmzduhUPPvggevbsiQMHDuC///0vjh8/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",
      "text/plain": [
       "<Figure size 650x750 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim_cell = Cell(build_demo_morphology())\n",
    "sim_region = BranchSlice(branch_index=[0, 1], prox=0.0, dist=1.0)\n",
    "\n",
    "sim_cell.paint(\n",
    "    sim_region,\n",
    "    Channel(\"IL\", g_max=0.03 * (u.mS / u.cm**2), E=-54.387 * u.mV),\n",
    "    Channel(\"Na_HH1952\", g_max=120.0 * (u.mS / u.cm**2)),\n",
    "    Channel(\"K_HH1952\", g_max=36.0 * (u.mS / u.cm**2)),\n",
    ")\n",
    "\n",
    "sim_cell.place(\n",
    "    RootLocation(x=0.5),\n",
    "    CurrentClamp(delay=2.0 * u.ms, durations=8.0 * u.ms, amplitudes=0.2 * u.nA),\n",
    ")\n",
    "sim_cell.place(\n",
    "    at(\"soma\", 0.5),\n",
    "    StateProbe(),\n",
    "    MechanismProbe(mechanism=\"Na_HH1952\", field=\"p\"),\n",
    "    CurrentProbe(ion=\"na\", mechanism=\"Na_HH1952\"),\n",
    ")\n",
    "\n",
    "result = sim_cell.run(dt=0.05 * u.ms, duration=12.0 * u.ms)\n",
    "\n",
    "print(\"trace keys:\", sorted(result.traces))\n",
    "print(\"n timesteps:\", int(result.time.shape[0]))\n",
    "print(\"current time after run (ms):\", float(sim_cell.current_time.to_decimal(u.ms)))\n",
    "\n",
    "fig, axes = plt.subplots(3, 1, figsize=(6.5, 7.5), sharex=True)\n",
    "\n",
    "times_ms = result.time.to_decimal(u.ms)\n",
    "axes[0].plot(times_ms, result.traces[\"soma(0.5)_v\"].to_decimal(u.mV), color=\"#1f77b4\", linewidth=2.0)\n",
    "axes[0].set_ylabel(\"V (mV)\")\n",
    "axes[0].set_title(\"Probe traces returned by Cell.run(...)\")\n",
    "axes[0].grid(True, alpha=0.2)\n",
    "\n",
    "axes[1].plot(times_ms, result.traces[\"soma(0.5)_Na_HH1952_p\"], color=\"#ff7f0e\", linewidth=2.0)\n",
    "axes[1].set_ylabel(\"p\")\n",
    "axes[1].grid(True, alpha=0.2)\n",
    "\n",
    "axes[2].plot(\n",
    "    times_ms,\n",
    "    result.traces[\"soma(0.5)_Na_HH1952_current\"].to_decimal(u.mA / u.cm**2),\n",
    "    color=\"#2ca02c\",\n",
    "    linewidth=2.0,\n",
    ")\n",
    "axes[2].set_xlabel(\"Time (ms)\")\n",
    "axes[2].set_ylabel(\"I (mA / cm$^2$)\")\n",
    "axes[2].grid(True, alpha=0.2)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0907f4b5",
   "metadata": {},
   "source": [
    "### 2.6 Other point declarations\n",
    "\n",
    "Three public point declarations are worth knowing even though this notebook does not build their full workflows.\n",
    "\n",
    "- `ProbeMechanism(variable=\"v\", target=\"soma\")` is the older variable-by-name recorder. For new multi-compartment code, prefer `StateProbe`, `MechanismProbe`, and `CurrentProbe` when you want explicit selectors.\n",
    "- `Synapse(synapse_type=\"AMPA\", ...)` is the registry-keyed synapse declaration surface.\n",
    "- `Junction(...)` is the current placeholder for gap-junction-style point declarations.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cdcd49a4",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "The mechanism surface in the current multi-compartment stack is still small, but the probe story is already quite usable:\n",
    "\n",
    "- `CableProperty`, `Ion`, and `Channel` create the runtime objects that probes later observe.\n",
    "- `StateProbe` is the voltage probe: today it supports only `v`.\n",
    "- `MechanismProbe` reads named runtime state on a channel or ion, as long as the field is a real runtime `State`.\n",
    "- `CurrentProbe` can read one mechanism current or one ion owner's total current.\n",
    "- `cell.sample_probe(...)` and `cell.sample_probes()` give immediate snapshots after `init_state()`.\n",
    "- `cell.run(...)` records the same placed probes over time and returns them by probe name in `RunResult.traces`.\n",
    "\n",
    "For more declaration detail, continue with `6.channel.ipynb` and `7.ion.ipynb`. For more locset detail, continue with `2.filter.ipynb`.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "braincell",
   "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.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
