{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reaction-diffusion thresholds\n", "

Suppose we have an rxd.Reaction or rxd.Rate that should only occur when the concentration is above (or below) a certain threshold. These functions, however, only support continuous rate functions. What can we do?

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A version of this notebook may be run online via Google Colab at https://tinyurl.com/rxd-thresholds (make a copy or open in playground mode)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One approach is to use a sigmoid function such as $\\tanh(x)$:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-08-18T03:37:10.577406Z", "iopub.status.busy": "2025-08-18T03:37:10.576701Z", "iopub.status.idle": "2025-08-18T03:37:11.676668Z", "shell.execute_reply": "2025-08-18T03:37:11.676221Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "import numpy\n", "\n", "x = numpy.linspace(-5, 5)\n", "y = numpy.tanh(x)\n", "plt.grid()\n", "plt.plot(x, y)\n", "plt.xlabel(\"x\")\n", "plt.ylabel(\"tanh(x)\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the following transformation of $\\tanh(x)$:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$f(x) = \\frac{1 + \\tanh(2m(x-a))}{2}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can show that\n", "$\\displaystyle \\lim_{x \\to \\infty} f(x) = 1$,\n", "$\\displaystyle \\lim_{x \\to -\\infty} f(x) = 0$,\n", "$\\displaystyle f(a) = 0.5,$ and \n", "$\\displaystyle f'(a) = m$. Furthermore $f$ is a sigmoid function that shifts between $0$ and $1$ arbitrarily quickly (parameterized by $m$) around $x=a$.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, for example, is the graph of $\\displaystyle g(x) = \\frac{1 + \\tanh(2\\cdot 10(x-2))}{2}$:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-08-18T03:37:11.751939Z", "iopub.status.busy": "2025-08-18T03:37:11.751642Z", "iopub.status.idle": "2025-08-18T03:37:11.916540Z", "shell.execute_reply": "2025-08-18T03:37:11.916093Z" } }, "outputs": [ { "data": { "image/png": "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oXJzc/XTn/5U69ati3X7AKDd6LkBIHWy52bUqFGqqalRaWmpfvCDH8iyLD3++OP66U9/qttuu01PP/10rNsJAGd16sWZ9NwAbtap/96MGjVKFRUV+sEPfiBJ8ng8evDBB1VWVqZ33nknpg0EgPbiCcUApE723LzwwgtRl48YMULl5eXfqUEA0FkB3i0FQB3ouYn2XJtovF5vh9YHgFjhreAApA6Em0suuUSPPvqoDhw40Oo6lmWpuLhYN954o/7zP/8zJg0EgPbireAApA4MS5WWluqhhx7S/PnzNXz4cI0aNUr9+/eXz+fTt99+q08++URlZWVKSUlRYWGhfvnLX8az3QDQQnhCcRo9N4CrtTvcDB48WK+++qr27t2rl19+WZs2bdLmzZtVW1urPn36aMSIEXruued04403KjmZ/zUB6FqWZZ3Wc0O4AdyswxOKL7jgAt13332677774tEeAOiUYIOlUON7e7kVHHC5Tt0tVVBQEHW5x+ORz+fTJZdcoptvvlm9e/f+To0DgPYKP8BPoucGcLtOhZtt27Zp69atamho0ODBgyVJn3/+uZKTkzVkyBA9/fTTuvfee7Vp0yYNHTo0pg0GgGjCQ1IeWUoj3ACu1qkrwM0336yxY8dq//79Ki8vV3l5ub766iuNGzdOU6ZM0ddff60f/ehHuueee2LdXgCIKvxeqZSkxl5kAO7VqXDzxBNPaOHChcrIyIgs69mzp+bPn6/HH39c6enpmjdvHg/0A9Blwj033CgFoFOXgWPHjungwYMtlh86dEh+v1+S1KtXL9XV1X231gFAO4VfvUC4AdDpYanbbrtNq1ev1ldffaWvvvpKq1ev1u23365JkyZJkrZs2aLLLrsslm0FgFaFJxQTbgB0akLxs88+q3vuuUc///nPVV9f37ijlBRNnz5dTz31lCRpyJAhev7552PXUgBoA8NSAMI6FW66d++u5557Tk899ZR27dolSbr44ovVvXv3yDo5OTkxaSAAtEd4WCqNcAO4XqfCTVj37t01bNiwWLUFADqNnhsAYVwGABjhVLixbG4JALsRbgAY4WQ9d0sBaMRlAIARAgxLAWjCZQCAEZhzAyCMywAAI/AQPwBhXAYAGIGeGwBhXAYAGIEnFAMI4zIAwAinhqW4FRxwO8INACMwLAUgjMsAACPw+gUAYVwGABghwJwbAE24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GBJu2unw4cNqaGhQZmZms+WZmZmtzlGorKzs0Pp26kx9gwcP1vLly/Xaa6/pv//7vxUKhXT11Vfrq6++6oomx11rx8/v96u2ttamVsVOv379tGzZMr366qt69dVXlZ2dreuuu05bt261u2lnFQqFNGfOHF1zzTW64oorWl3PSefgmdpbo9POw+3bt6t79+7yer268847tXr1ag0dOjTquk48fh2pz2nHTpJWrlyprVu3atGiRe1a365j6Lq3giN2cnNzm/2P5Oqrr9bll1+uZ599VgsXLrSxZWiPwYMHa/DgwZGvr776an3xxRd66qmn9NJLL9nYsrObNWuWPvroI23atMnupsRNe2t02nk4ePBgVVRU6NixY3rllVc0ffp0bdy4sdUA4DQdqc9px27fvn2aPXu2iouLE37iM+Gmnfr06aPk5GRVVVU1W15VVaWsrKyo22RlZXVofTt1pr4zpaamasSIEdq5c2c8mtjlWjt+GRkZ6tatm02tiq/Ro0cnfGDIz8/Xn//8Z73zzjsaOHBgm+s66Rw8XUdqPFOin4dpaWm65JJLJEkjR47U+++/r9/+9rd69tlnW6zrxOPXkfrOlOjHrry8XAcPHtRVV10VWdbQ0KB33nlHv/vd7xQIBJScnNxsG7uOIcNS7ZSWlqaRI0eqpKQksiwUCqmkpKTV8dTc3Nxm60tScXFxm+OvdulMfWdqaGjQ9u3b1a9fv3g1s0s56fjFSkVFRcIeP8uylJ+fr9WrV+utt97SRRdddNZtnHYMO1PjmZx2HoZCIQUCgajfc9rxi6at+s6U6Mfuhhtu0Pbt21VRURH5NWrUKN1yyy2qqKhoEWwkG49hXKcrG2blypWW1+u1XnzxReuTTz6xfvGLX1i9evWyKisrLcuyrFtvvdWaO3duZP2//OUvVkpKivWb3/zG+vTTT62ioiIrNTXV2r59u10ltKmj9S1YsMB64403rC+++MIqLy+3fv7zn1s+n8/6+OOP7SqhTcePH7e2bdtmbdu2zZJkLV682Nq2bZu1Z88ey7Isa+7cudatt94aWX/Xrl1Wenq6df/991uffvqptXTpUis5Odlav369XSW0qaP1PfXUU9aaNWusv//979b27dut2bNnW0lJSdabb75pVwltuuuuu6yePXtapaWl1oEDByK/ampqIus4/RzsTI1OOg/nzp1rbdy40fryyy+tv/3tb9bcuXMtj8djbdiwwbIs5x+/jtbnpGPXmjPvlkqUY0i46aD/+q//si644AIrLS3NGj16tPXee+9Fvnfttdda06dPb7b+yy+/bF122WVWWlqa9f3vf99au3ZtF7e4YzpS35w5cyLrZmZmWjfddJO1detWG1rdPuFbn8/8Fa5p+vTp1rXXXttim5ycHCstLc26+OKLrT/84Q9d3u726mh9jz32mPW9733P8vl8Vu/eva3rrrvOeuutt+xpfDtEq01Ss2Pi9HOwMzU66Ty87bbbrAsvvNBKS0uzzj//fOuGG26I/MNvWc4/fh2tz0nHrjVnhptEOYYey7Ks+PYNAQAAdB3m3AAAAKMQbgAAgFEINwAAwCiEGwAAYBTCDQAAMArhBgAAGIVwAwAAjEK4AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAI536NAhZWVl6ZFHHoks27x5s9LS0lRSUmJjywDYgRdnAjDCunXrNGnSJG3evFmDBw9WTk6Obr75Zi1evNjupgHoYoQbAMaYNWuW3nzzTY0aNUrbt2/X+++/L6/Xa3ezAHQxwg0AY9TW1uqKK67Qvn37VF5eriuvvNLuJgGwAXNuABjjiy++0P79+xUKhbR79267mwPAJvTcADBCXV2dRo8erZycHA0ePFhLlizR9u3b1bdvX7ubBqCLEW4AGOH+++/XK6+8og8//FDdu3fXtddeq549e+rPf/6z3U0D0MUYlgLgeKWlpVqyZIleeuklZWRkKCkpSS+99JLeffddPfPMM3Y3D0AXo+cGAAAYhZ4bAABgFMINAAAwCuEGAAAYhXADAACMQrgBAABGIdwAAACjEG4AAIBRCDcAAMAohBsAAGAUwg0AADAK4QYAABjl/wPwPLwH0MUJwgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = numpy.linspace(0, 4, 1000)\n", "y = (1 + numpy.tanh(2 * 10 * (x - 2))) / 2\n", "plt.grid()\n", "plt.plot(x, y)\n", "plt.xlabel(\"x\")\n", "plt.ylabel(\"g(x)\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using this logic, we can scale reaction rates by a function of the form $f(x)$ for suitably chosen $a$ and $m$ to approximately threshold them by a concentration." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, suppose we wish to model a substance (we'll arbitrarily call it IP3) that degrades exponentially (i.e. $y'=-k y$) but only when the concentration is above $0.25$:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-08-18T03:37:11.919158Z", "iopub.status.busy": "2025-08-18T03:37:11.918490Z", "iopub.status.idle": "2025-08-18T03:37:13.304515Z", "shell.execute_reply": "2025-08-18T03:37:13.304091Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from neuron import n, rxd\n", "from neuron.units import mV, ms, mM\n", "from matplotlib import pyplot as plt\n", "\n", "n.load_file(\"stdrun.hoc\")\n", "\n", "soma = n.Section(name=\"soma\")\n", "cyt = rxd.Region([soma], name=\"cyt\", nrn_region=\"i\")\n", "ip3 = rxd.Species(cyt, name=\"ip3\", charge=0, initial=1 * mM)\n", "k = 2 # degradation rate\n", "threshold = 0.25 # mM... called 'a' in f(x)\n", "m = 100 # steepness of switch\n", "degradation_switch = (1 + rxd.rxdmath.tanh((ip3 - threshold) * 2 * m)) / 2\n", "degradation = rxd.Rate(ip3, -k * ip3 * degradation_switch)\n", "\n", "t = n.Vector().record(n._ref_t)\n", "ip3_conc = n.Vector().record(soma(0.5)._ref_ip3i)\n", "\n", "n.finitialize(-65 * mV)\n", "n.continuerun(2 * ms)\n", "\n", "plt.plot(t, ip3_conc)\n", "plt.xlabel(\"t (ms)\")\n", "plt.ylabel(\"[IP3] (mM)\")\n", "plt.show()" ] } ], "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": 1 }