{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example: Degradable buffer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calcium is heavily buffered in cells, as it is a major second messenger molecule. \n", "\n", "## Calbindin D28K dynamics\n", "\n", "The calcium buffering protein Calbindin D28K has 6 EF-hands, four of which are active calcium ion binding sites. These sites are not equally active. A calcium ion is not free to bind to any of the sites equally. Instead, calcium ions are bound in sequence: 1, 4, 5, 3 with the last binding having the lowest affinity.\n", "(Venters et al., 2003.)\n", "\n", "(To be clear, these dynamics are not representative of all calcium buffers; Parvalbumin and Calbindin D9K show little conformational change when carrying calcium.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\mathrm{Ca} + \\mathrm{Calbindin_0} \\rightleftharpoons \\mathrm{Calbindin_1}$$\n", "$$\\mathrm{Ca} + \\mathrm{Calbindin_1} \\rightleftharpoons \\mathrm{Calbindin_{14}}$$\n", "$$\\mathrm{Ca} + \\mathrm{Calbindin_{14}} \\rightleftharpoons \\mathrm{Calbindin_{145}}$$\n", "$$\\mathrm{Ca} + \\mathrm{Calbindin_{145}} \\rightleftharpoons \\mathrm{Calbindin_{1453}}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A model\n", "\n", "For our model, let us suppose that instead of calbindin D28K specifically, which has its own very specific binding affinities, we have some arbitrary buffer buf that also has 4 binding sites that load sequentially." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-08-18T03:36:37.553468Z", "iopub.status.busy": "2025-08-18T03:36:37.553294Z", "iopub.status.idle": "2025-08-18T03:36:37.951648Z", "shell.execute_reply": "2025-08-18T03:36:37.951235Z" } }, "outputs": [], "source": [ "from neuron import n, rxd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-08-18T03:36:37.953965Z", "iopub.status.busy": "2025-08-18T03:36:37.953777Z", "iopub.status.idle": "2025-08-18T03:36:37.961312Z", "shell.execute_reply": "2025-08-18T03:36:37.960979Z" } }, "outputs": [], "source": [ "# where\n", "soma = n.Section(name=\"soma\")\n", "cyt = rxd.Region([soma], nrn_region=\"i\")\n", "# who\n", "ca = rxd.Species(cyt, name=\"ca\", charge=2, initial=1e-4)\n", "buf = rxd.Species(cyt, name=\"buf\", initial=1e-4)\n", "cabuf = rxd.Species(cyt, name=\"cab2uf\", initial=0)\n", "# what\n", "buffering = rxd.Reaction(2 * ca + buf, cabuf, 1e6, 1e-2)\n", "degradation = rxd.Rate(buf, -1e-3 * buf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For versions of NEURON before 7.7, we need to initialize the simulation here to enable using pointers for\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's set up some recording:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-08-18T03:36:37.965495Z", "iopub.status.busy": "2025-08-18T03:36:37.962945Z", "iopub.status.idle": "2025-08-18T03:36:37.973631Z", "shell.execute_reply": "2025-08-18T03:36:37.973291Z" } }, "outputs": [ { "data": { "text/plain": [ "Vector[2]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = n.Vector()\n", "ca_vec = n.Vector()\n", "buf_vec = n.Vector()\n", "t.record(n._ref_t)\n", "ca_vec.record(soma(0.5)._ref_cai)\n", "buf_vec.record(soma(0.5)._ref_bufi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A more realistic model would include " ] } ], "metadata": { "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.10" } }, "nbformat": 4, "nbformat_minor": 2 }