{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simple Equilibrium\n", "\n", "This is a simple equilibrium model as an example. Here, we explain how to model and run a simulation without using decorators (`species_attributes` and `reaction_rules`) and `run_simulation` method." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "from ecell4.prelude import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose one module from a list of methods supported on E-Cell4." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# f = gillespie.Factory\n", "# f = ode.Factory()\n", "# f = spatiocyte.Factory()\n", "# f = bd.Factory()\n", "# f = meso.Factory()\n", "f = egfrd.Factory()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up parameters:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "L, N, kd, U, D, radius = 1.0, 60, 0.1, 0.5, 1.0, 0.01\n", "volume = L * L * L\n", "ka = kd * volume * (1 - U) / (U * U * N)\n", "\n", "sp1, sp2, sp3 = Species(\"A\", radius, D), Species(\"B\", radius, D), Species(\"A_B\", radius, D)\n", "rr1, rr2 = create_binding_reaction_rule(sp1, sp2, sp3, ka), create_unbinding_reaction_rule(sp3, sp1, sp2, kd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a model:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "m = NetworkModel()\n", "m.add_species_attribute(sp1)\n", "m.add_species_attribute(sp2)\n", "m.add_species_attribute(sp3)\n", "m.add_reaction_rule(rr1)\n", "m.add_reaction_rule(rr2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a world and simulator:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "w = f.world(Real3(L, L, L))\n", "w.bind_to(m)\n", "w.add_molecules(Species(\"A\"), N)\n", "w.add_molecules(Species(\"B\"), N)\n", "\n", "sim = f.simulator(w)\n", "sim.set_dt(1e-3) #XXX: This is too large to get the accurate result with BDSimulator." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run a simulation:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "next_time, dt = 0.0, 0.05\n", "data = [(w.t(), w.num_molecules(sp1), w.num_molecules(sp2), w.num_molecules(sp3))]\n", "for i in range(100):\n", " next_time += dt\n", " while (sim.step(next_time)): pass\n", " data.append((w.t(), w.num_molecules(sp1), w.num_molecules(sp2), w.num_molecules(sp3)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot with Matplotlib:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pylab as plt\n", "from numpy import array\n", "\n", "data = array(data)\n", "plt.plot(data.T[0], data.T[1], \"r-\", label=sp1.serial())\n", "plt.plot(data.T[0], data.T[2], \"g--\", label=sp2.serial())\n", "plt.plot(data.T[0], data.T[3], \"b:\", label=sp3.serial())\n", "plt.xlabel(\"Time\")\n", "plt.ylabel(\"Number Of Molecules\")\n", "plt.xlim(data.T[0][0], data.T[0][-1])\n", "plt.legend(loc=\"best\", shadow=True)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See also [Reversible](../tests/Reversible.html) and [Reversible (Diffusion-limited)](../tests/Reversible_Diffusion_limited.html) in the Tests section for more detailed comparisons between methods." ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 }