{ "cells": [ { "cell_type": "markdown", "id": "80abc7ee-f50e-48b7-9ea7-15ce6226b0bf", "metadata": {}, "source": [ "## One-bin reaction `2A <-> B` \n", "### COMPARING 1st-order and 2nd-order kinetics in *forward* direction; reverse direction always 1-st order\n", "\n", "Diffusion not applicable (just 1 bin)\n", "\n", "See also the experiment _\"reactions_single_compartment/react_4\"_ " ] }, { "cell_type": "markdown", "id": "9777eb21-a15c-4e70-bdff-98e09e117424", "metadata": {}, "source": [ "### TAGS : \"reactions 1D\", \"under-the-hood\"" ] }, { "cell_type": "code", "execution_count": 1, "id": "c8cb8493-19af-4468-a244-9ac1be5c5377", "metadata": {}, "outputs": [], "source": [ "LAST_REVISED = \"June 5, 2025\"\n", "LIFE123_VERSION = \"1.0.0rc6\" # Library version this experiment is based on" ] }, { "cell_type": "code", "execution_count": 2, "id": "9bbb329b-3c10-45dd-8d43-bba25487f64f", "metadata": {}, "outputs": [], "source": [ "#import set_path # Using MyBinder? Uncomment this before running the next cell!" ] }, { "cell_type": "code", "execution_count": 3, "id": "1da4dcfe-2ba4-4a5b-92a8-97126ead26f9", "metadata": {}, "outputs": [], "source": [ "#import sys\n", "#sys.path.append(\"C:/some_path/my_env_or_install\") # CHANGE to the folder containing your venv or libraries installation!\n", "# NOTE: If any of the imports below can't find a module, uncomment the lines above, or try: import set_path \n", "\n", "from experiments.get_notebook_info import get_notebook_basename\n", "from life123 import BioSim1D, ChemData, check_version\n", "\n", "from life123 import HtmlLog as log\n", "from life123 import GraphicLog" ] }, { "cell_type": "code", "execution_count": 4, "id": "f9588621-5bc5-48fb-aed0-4f8fa244af70", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "OK\n" ] } ], "source": [ "check_version(LIFE123_VERSION)" ] }, { "cell_type": "code", "execution_count": null, "id": "edae0aef-0ab8-423d-a212-fb16f4f34222", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 5, "id": "ecba68b6-d062-47fe-9a17-ec339907323e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-> Output will be LOGGED into the file 'reaction_7.log.htm'\n" ] } ], "source": [ "# Initialize the HTML logging\n", "log_file = get_notebook_basename() + \".log.htm\" # Use the notebook base filename for the log file\n", "\n", "# Set up the use of some specified graphic (Vue) components\n", "GraphicLog.config(filename=log_file,\n", " components=[\"vue_cytoscape_2\"],\n", " extra_js=\"https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.21.2/cytoscape.umd.js\")" ] }, { "cell_type": "code", "execution_count": null, "id": "da6b6f27-a937-45c0-859c-5c546f25f149", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "43fb42a4-1582-45b5-9c8b-be146cb72236", "metadata": {}, "source": [ "# INITIALLY, with 1st-order kinetics in both directions" ] }, { "cell_type": "code", "execution_count": 6, "id": "72d71ac8-3f7d-47b5-94ba-142fca566ff4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SYSTEM STATE at Time t = 0:\n", "1 bins and 2 chemical species\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SpeciesDiff rateBin 0
0ANone3.0
1BNone5.0
\n", "
" ], "text/plain": [ " Species Diff rate Bin 0\n", "0 A None 3.0\n", "1 B None 5.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Initialize the system; NOTE: Diffusion not applicable (just 1 bin)\n", "chem_data = ChemData(names=[\"A\", \"B\"], plot_colors=['turquoise', 'green'])\n", "\n", "bio = BioSim1D(n_bins=1, chem_data=chem_data)\n", "\n", "bio.set_all_uniform_concentrations( [3., 5.] )\n", "\n", "bio.describe_state()" ] }, { "cell_type": "code", "execution_count": 7, "id": "5bf86daa-2d7a-4406-90ba-d6d588272d7c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of reactions: 1 (at temp. 25 C)\n", "0: 2 A <-> B (kF = 5 / kR = 2 / delta_G = -2,271.4 / K = 2.5) | 1st order in all reactants & products\n", "Set of chemicals involved in the above reactions: {\"A\" (turquoise), \"B\" (green)}\n" ] } ], "source": [ "# Specify the reaction\n", "reactions = bio.get_reactions()\n", "\n", "# Reaction 2A <-> B , FOR NOW with 1st-order kinetics in both directions\n", "reactions.add_reaction(reactants=[(2, \"A\", 1)], products=\"B\", forward_rate=5., reverse_rate=2.)\n", "\n", "reactions.describe_reactions()" ] }, { "cell_type": "code", "execution_count": 8, "id": "3be8b568-fc3c-41a3-98dd-6ad6983f2bc9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Reaction 2A B is 1st order in all species:\n", "[GRAPHIC ELEMENT SENT TO LOG FILE `reaction_7.log.htm`]\n" ] } ], "source": [ "# Send a header and a plot to the HTML log file\n", "log.write(\"Reaction 2A <-> B is 1st order in all species:\",\n", " style=log.h2)\n", "\n", "reactions.plot_reaction_network(\"vue_cytoscape_2\")" ] }, { "cell_type": "code", "execution_count": null, "id": "5a35ef3a-3f0f-4c5c-a276-7eac2a692be3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 9, "id": "6e22dc8d-104e-4f1a-a1bf-a5fda4b92393", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "History enabled for bins None and chemicals None (None means 'all')\n" ] } ], "source": [ "# Let's enable history - by default for all chemicals and all bins\n", "bio.enable_history(take_snapshot=True, caption=\"Initial state\")" ] }, { "cell_type": "code", "execution_count": 10, "id": "667c592e-4162-41aa-874a-c06abd6ac014", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABcaption
00.03.05.0Initial state
\n", "
" ], "text/plain": [ " SYSTEM TIME A B caption\n", "0 0.0 3.0 5.0 Initial state" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bio.get_bin_history(bin_address=0)" ] }, { "cell_type": "code", "execution_count": null, "id": "0276c8f5-393a-4db4-bcc0-90e7338fdf60", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1b5aa947-e6ec-4424-bc4e-fd45110f95f6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "95a00fcd-e2bc-4665-8e1d-4afb376d2a82", "metadata": {}, "source": [ "### First step" ] }, { "cell_type": "code", "execution_count": 11, "id": "7cec7a60-1ab6-4249-ae91-1feced4bbb90", "metadata": { "tags": [] }, "outputs": [], "source": [ "bio.get_reaction_handler().enable_diagnostics() # To save diagnostic information for the simulation run, below" ] }, { "cell_type": "code", "execution_count": 12, "id": "4ee91e87-4800-41d6-bc21-223ac1e493b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "System Time is now: 0.02\n", "SYSTEM STATE at Time t = 0.02:\n", "1 bins and 2 chemical species\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SpeciesDiff rateBin 0
0ANone2.8
1BNone5.1
\n", "
" ], "text/plain": [ " Species Diff rate Bin 0\n", "0 A None 2.8\n", "1 B None 5.1" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# First step\n", "bio.react(time_step=0.02, n_steps=1)\n", "bio.describe_state()" ] }, { "cell_type": "markdown", "id": "fb58f958-29fc-4a43-ad33-751ef02c3cc2", "metadata": {}, "source": [ "Small conc. changes so far: [A] = 2.8 , [B] = 5.1" ] }, { "cell_type": "code", "execution_count": 13, "id": "86a7497e-cd17-4f4d-b9b1-9bfd786c865f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABcaption
00.003.05.0Initial state
10.022.85.1
\n", "
" ], "text/plain": [ " SYSTEM TIME A B caption\n", "0 0.00 3.0 5.0 Initial state\n", "1 0.02 2.8 5.1 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bio.get_bin_history(bin_address=0)" ] }, { "cell_type": "code", "execution_count": 14, "id": "1e458105-4a8d-4f81-9776-7bde2c92b630", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "System Time is now: 0.42\n", "SYSTEM STATE at Time t = 0.42:\n", "1 bins and 2 chemical species\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SpeciesDiff rateBin 0
0ANone2.169284
1BNone5.415358
\n", "
" ], "text/plain": [ " Species Diff rate Bin 0\n", "0 A None 2.169284\n", "1 B None 5.415358" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Numerous more steps, to equilibrium\n", "bio.react(time_step=0.02, n_steps=20)\n", "\n", "bio.describe_state()" ] }, { "cell_type": "markdown", "id": "bb5ee324-b0e9-4823-82ae-815aab494b57", "metadata": {}, "source": [ "Consistent with the 5/2 ratio of forward/reverse rates (and the *1st order* reactions),\n", "the systems settles in the following equilibrium: \n", "[A] = 2.16928427 , [B] = 5.41535786" ] }, { "cell_type": "code", "execution_count": 15, "id": "c3a088c4-c904-4d23-9940-307d9ca9a80f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 A <-> B\n", "Current concentrations: [A] = 2.169 ; [B] = 5.415\n", "1. Ratio of reactant/product concentrations, adjusted for reaction orders: 2.49638\n", " Formula used: [B] / [A]\n", "2. Ratio of forward/reverse reaction rates: 2.5\n", "Discrepancy between the two values: 0.1448 %\n", "Reaction IS in equilibrium (within 1% tolerance)\n", "\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Verify that the reaction has reached equilibrium\n", "bio.get_reaction_handler().is_in_equilibrium(rxn_index=0, conc=bio.bin_snapshot(bin_address = 0))" ] }, { "cell_type": "code", "execution_count": 16, "id": "7508667b-5e7f-4eed-ba41-a478f4d068b6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABcaption
00.003.0000005.000000Initial state
10.022.8000005.100000
20.042.6480005.176000
30.062.5324805.233760
40.082.4446855.277658
50.102.3779605.311020
60.122.3272505.336375
70.142.2887105.355645
80.162.2594205.370290
90.182.2371595.381421
100.202.2202415.389880
110.222.2073835.396309
120.242.1976115.401194
130.262.1901845.404908
140.282.1845405.407730
150.302.1802515.409875
160.322.1769905.411505
170.342.1745135.412744
180.362.1726305.413685
190.382.1711995.414401
200.402.1701115.414945
210.422.1692845.415358
\n", "
" ], "text/plain": [ " SYSTEM TIME A B caption\n", "0 0.00 3.000000 5.000000 Initial state\n", "1 0.02 2.800000 5.100000 \n", "2 0.04 2.648000 5.176000 \n", "3 0.06 2.532480 5.233760 \n", "4 0.08 2.444685 5.277658 \n", "5 0.10 2.377960 5.311020 \n", "6 0.12 2.327250 5.336375 \n", "7 0.14 2.288710 5.355645 \n", "8 0.16 2.259420 5.370290 \n", "9 0.18 2.237159 5.381421 \n", "10 0.20 2.220241 5.389880 \n", "11 0.22 2.207383 5.396309 \n", "12 0.24 2.197611 5.401194 \n", "13 0.26 2.190184 5.404908 \n", "14 0.28 2.184540 5.407730 \n", "15 0.30 2.180251 5.409875 \n", "16 0.32 2.176990 5.411505 \n", "17 0.34 2.174513 5.412744 \n", "18 0.36 2.172630 5.413685 \n", "19 0.38 2.171199 5.414401 \n", "20 0.40 2.170111 5.414945 \n", "21 0.42 2.169284 5.415358 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = bio.get_bin_history(bin_address=0)\n", "df" ] }, { "cell_type": "code", "execution_count": 17, "id": "1f9b8584-c933-4465-9879-a1c5d1eccc77", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "Chemical=A
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "A", "line": { "color": "turquoise", "dash": "solid", "shape": "linear" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "A", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.12000000000000001, 0.14, 0.16, 0.18, 0.19999999999999998, 0.21999999999999997, 0.23999999999999996, 0.25999999999999995, 0.27999999999999997, 0.3, 0.32, 0.34, 0.36000000000000004, 0.38000000000000006, 0.4000000000000001, 0.4200000000000001 ], "xaxis": "x", "y": [ 3, 2.8, 2.6479999999999997, 2.5324799999999996, 2.4446847999999997, 2.3779604479999996, 2.32724994048, 2.2887099547647995, 2.2594195656212475, 2.237158869872148, 2.2202407411028324, 2.2073829632381528, 2.197611052060996, 2.1901843995663572, 2.1845401436704317, 2.180250509189528, 2.1769903869840412, 2.174512694107871, 2.172629647521982, 2.171198532116706, 2.1701108844086967, 2.1692842721506094 ], "yaxis": "y" }, { "hovertemplate": "Chemical=B
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "B", "line": { "color": "green", "dash": "solid", "shape": "linear" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "B", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.12000000000000001, 0.14, 0.16, 0.18, 0.19999999999999998, 0.21999999999999997, 0.23999999999999996, 0.25999999999999995, 0.27999999999999997, 0.3, 0.32, 0.34, 0.36000000000000004, 0.38000000000000006, 0.4000000000000001, 0.4200000000000001 ], "xaxis": "x", "y": [ 5, 5.1, 5.175999999999999, 5.233759999999999, 5.2776575999999995, 5.311019775999999, 5.336375029759999, 5.355645022617599, 5.370290217189376, 5.381420565063926, 5.389879629448584, 5.396308518380923, 5.401194473969502, 5.404907800216821, 5.407729928164784, 5.409874745405236, 5.411504806507979, 5.412743652946064, 5.413685176239008, 5.414400733941646, 5.414944557795651, 5.415357863924695 ], "yaxis": "y" } ], "layout": { "autosize": true, "legend": { "title": { "text": "Chemical" }, "tracegroupgap": 0 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Reaction `2A <-> B`
Concentration as a function of time of all chemicals at bin 0" }, "xaxis": { "anchor": "y", "autorange": true, "domain": [ 0, 1 ], "range": [ 0, 0.4200000000000001 ], "title": { "text": "SYSTEM TIME" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "domain": [ 0, 1 ], "range": [ 1.9889468503853824, 5.595695285689922 ], "title": { "text": "Concentration" }, "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "bio.plot_history_single_bin(bin_address=0, \n", " title_prefix=\"Reaction `2A <-> B`\")" ] }, { "cell_type": "markdown", "id": "c3d00af0-3222-4cba-8367-3345cea820f4", "metadata": {}, "source": [ "A gets depleted, while B gets produced." ] }, { "cell_type": "markdown", "id": "ab27ab50-7be4-4257-a6cc-2ef163539e1f", "metadata": {}, "source": [ "#### Let's verify that the stoichiometry is being respected" ] }, { "cell_type": "code", "execution_count": 18, "id": "e88539b9-28e1-4b07-9b68-169d1e650e4f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([3., 5.], dtype=float32), array([2.8, 5.1], dtype=float32))" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We'll check the first two arrays of concentrations, from the run's history\n", "arr0 = bio.get_reaction_handler().get_historical_concentrations(row=0, df=df)\n", "arr1 = bio.get_reaction_handler().get_historical_concentrations(row=1, df=df)\n", "arr0, arr1" ] }, { "cell_type": "code", "execution_count": 19, "id": "f1d42c06-f5bc-447d-93c0-bf7c4b1c824d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bio.get_reaction_handler().get_diagnostics().stoichiometry_checker(rxn_index=0, \n", " conc_arr_before = arr0, \n", " conc_arr_after = arr1)" ] }, { "cell_type": "code", "execution_count": null, "id": "f41ca3e8-13b1-4202-b70e-89351c574be3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8148efa9-e37d-4565-b663-1c21ad526237", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6c277db7-6b2b-4e74-b50e-4746cff17e90", "metadata": {}, "source": [ "# STARTING OVER, this time with 2nd-order kinetics in the forward reaction" ] }, { "cell_type": "code", "execution_count": 20, "id": "6de1f2b0-b77b-4ec5-9312-ffecb32db452", "metadata": {}, "outputs": [], "source": [ "reactions = bio.get_reactions()" ] }, { "cell_type": "code", "execution_count": 21, "id": "48c72d24-9a9b-4dcd-a772-047cc0727462", "metadata": {}, "outputs": [], "source": [ "reactions.clear_reactions_data()" ] }, { "cell_type": "code", "execution_count": 22, "id": "9c09f158-2d64-49d6-8d0c-6d3a8b7eff4b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Reaction 2A <-> B , NOW WITH 2nd-order kinetics in the forward direction\n", "reactions.add_reaction(reactants=[(2, \"A\", 2)], products=\"B\", forward_rate=5., reverse_rate=2.)" ] }, { "cell_type": "code", "execution_count": 23, "id": "ac12fdce-f28d-4a49-a333-bdf8f2262a64", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of reactions: 1 (at temp. 25 C)\n", "0: 2 A <-> B (kF = 5 / kR = 2 / delta_G = -2,271.4 / K = 2.5) | 2-th order in reactant A\n", "Set of chemicals involved in the above reactions: {\"A\" (turquoise), \"B\" (green)}\n" ] } ], "source": [ "reactions.describe_reactions()" ] }, { "cell_type": "code", "execution_count": 24, "id": "f2dea24e-6f87-4f76-a513-176916934edb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SYSTEM STATE at Time t = 0.42:\n", "1 bins and 2 chemical species\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SpeciesDiff rateBin 0
0ANone3.0
1BNone5.0
\n", "
" ], "text/plain": [ " Species Diff rate Bin 0\n", "0 A None 3.0\n", "1 B None 5.0" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# RESET the concentrations to their original values\n", "bio.set_all_uniform_concentrations( [3., 5.] )\n", "\n", "bio.describe_state()" ] }, { "cell_type": "code", "execution_count": 25, "id": "8c2155d6-cb42-49e3-8247-c858b0c65860", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABcaption
00.003.0000005.000000Initial state
10.022.8000005.100000
20.042.6480005.176000
30.062.5324805.233760
40.082.4446855.277658
50.102.3779605.311020
60.122.3272505.336375
70.142.2887105.355645
80.162.2594205.370290
90.182.2371595.381421
100.202.2202415.389880
110.222.2073835.396309
120.242.1976115.401194
130.262.1901845.404908
140.282.1845405.407730
150.302.1802515.409875
160.322.1769905.411505
170.342.1745135.412744
180.362.1726305.413685
190.382.1711995.414401
200.402.1701115.414945
210.422.1692845.415358
220.423.0000005.000000RESET all concentrations to initial values
\n", "
" ], "text/plain": [ " SYSTEM TIME A B \\\n", "0 0.00 3.000000 5.000000 \n", "1 0.02 2.800000 5.100000 \n", "2 0.04 2.648000 5.176000 \n", "3 0.06 2.532480 5.233760 \n", "4 0.08 2.444685 5.277658 \n", "5 0.10 2.377960 5.311020 \n", "6 0.12 2.327250 5.336375 \n", "7 0.14 2.288710 5.355645 \n", "8 0.16 2.259420 5.370290 \n", "9 0.18 2.237159 5.381421 \n", "10 0.20 2.220241 5.389880 \n", "11 0.22 2.207383 5.396309 \n", "12 0.24 2.197611 5.401194 \n", "13 0.26 2.190184 5.404908 \n", "14 0.28 2.184540 5.407730 \n", "15 0.30 2.180251 5.409875 \n", "16 0.32 2.176990 5.411505 \n", "17 0.34 2.174513 5.412744 \n", "18 0.36 2.172630 5.413685 \n", "19 0.38 2.171199 5.414401 \n", "20 0.40 2.170111 5.414945 \n", "21 0.42 2.169284 5.415358 \n", "22 0.42 3.000000 5.000000 \n", "\n", " caption \n", "0 Initial state \n", "1 \n", "2 \n", "3 \n", "4 \n", "5 \n", "6 \n", "7 \n", "8 \n", "9 \n", "10 \n", "11 \n", "12 \n", "13 \n", "14 \n", "15 \n", "16 \n", "17 \n", "18 \n", "19 \n", "20 \n", "21 \n", "22 RESET all concentrations to initial values " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Save this manual concentration change into the ongoing history\n", "bio.capture_snapshot(caption=\"RESET all concentrations to initial values\")\n", "bio.get_bin_history(bin_address=0)" ] }, { "cell_type": "code", "execution_count": 26, "id": "9c9e81e0-b5b3-45eb-a4eb-0ab157dcf9db", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Reaction 2A B is 2nd order in A, and 1st order in B:\n", "[GRAPHIC ELEMENT SENT TO LOG FILE `reaction_7.log.htm`]\n" ] } ], "source": [ "# Send a header and a plot to the HTML log file\n", "log.write(\"Reaction 2A <-> B is 2nd order in A, and 1st order in B:\",\n", " style=log.h2)\n", "reactions.plot_reaction_network(\"vue_cytoscape_2\")" ] }, { "cell_type": "code", "execution_count": null, "id": "b0a97df5-239a-40f7-9f34-d5bf460a549d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 27, "id": "ab938afe-a818-4e9c-bc2d-d347aa0d0a23", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "System Time is now: 0.44\n", "SYSTEM STATE at Time t = 0.44:\n", "1 bins and 2 chemical species\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SpeciesDiff rateBin 0
0ANone1.6
1BNone5.7
\n", "
" ], "text/plain": [ " Species Diff rate Bin 0\n", "0 A None 1.6\n", "1 B None 5.7" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# First step\n", "bio.react(time_step=0.02, n_steps=1)\n", "bio.describe_state()" ] }, { "cell_type": "markdown", "id": "0c8b4979-26aa-4b43-baa9-b65547d3ba24", "metadata": {}, "source": [ "[A] = 1.6 , [B] = 5.7\n", "_(Contrast with the counterpart in the 1st order kinetics: [A] = 2.8 , [B] = 5.1)_" ] }, { "cell_type": "code", "execution_count": 28, "id": "a964cc75-e378-493a-aa5c-27da363c7baf", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABcaption
00.003.0000005.000000Initial state
10.022.8000005.100000
20.042.6480005.176000
30.062.5324805.233760
40.082.4446855.277658
50.102.3779605.311020
60.122.3272505.336375
70.142.2887105.355645
80.162.2594205.370290
90.182.2371595.381421
100.202.2202415.389880
110.222.2073835.396309
120.242.1976115.401194
130.262.1901845.404908
140.282.1845405.407730
150.302.1802515.409875
160.322.1769905.411505
170.342.1745135.412744
180.362.1726305.413685
190.382.1711995.414401
200.402.1701115.414945
210.422.1692845.415358
220.423.0000005.000000RESET all concentrations to initial values
230.441.6000005.700000
\n", "
" ], "text/plain": [ " SYSTEM TIME A B \\\n", "0 0.00 3.000000 5.000000 \n", "1 0.02 2.800000 5.100000 \n", "2 0.04 2.648000 5.176000 \n", "3 0.06 2.532480 5.233760 \n", "4 0.08 2.444685 5.277658 \n", "5 0.10 2.377960 5.311020 \n", "6 0.12 2.327250 5.336375 \n", "7 0.14 2.288710 5.355645 \n", "8 0.16 2.259420 5.370290 \n", "9 0.18 2.237159 5.381421 \n", "10 0.20 2.220241 5.389880 \n", "11 0.22 2.207383 5.396309 \n", "12 0.24 2.197611 5.401194 \n", "13 0.26 2.190184 5.404908 \n", "14 0.28 2.184540 5.407730 \n", "15 0.30 2.180251 5.409875 \n", "16 0.32 2.176990 5.411505 \n", "17 0.34 2.174513 5.412744 \n", "18 0.36 2.172630 5.413685 \n", "19 0.38 2.171199 5.414401 \n", "20 0.40 2.170111 5.414945 \n", "21 0.42 2.169284 5.415358 \n", "22 0.42 3.000000 5.000000 \n", "23 0.44 1.600000 5.700000 \n", "\n", " caption \n", "0 Initial state \n", "1 \n", "2 \n", "3 \n", "4 \n", "5 \n", "6 \n", "7 \n", "8 \n", "9 \n", "10 \n", "11 \n", "12 \n", "13 \n", "14 \n", "15 \n", "16 \n", "17 \n", "18 \n", "19 \n", "20 \n", "21 \n", "22 RESET all concentrations to initial values \n", "23 " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bio.get_bin_history(bin_address=0)" ] }, { "cell_type": "code", "execution_count": null, "id": "ac060161-0e78-461e-8700-edfeff46e05d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 29, "id": "95e9aab1-a16d-46b7-9b97-82ab60011e6b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "System Time is now: 0.84\n", "SYSTEM STATE at Time t = 0.84:\n", "1 bins and 2 chemical species\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SpeciesDiff rateBin 0
0ANone1.515549
1BNone5.742225
\n", "
" ], "text/plain": [ " Species Diff rate Bin 0\n", "0 A None 1.515549\n", "1 B None 5.742225" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Numerous more steps\n", "bio.react(time_step=0.02, n_steps=20)\n", "\n", "bio.describe_state()" ] }, { "cell_type": "markdown", "id": "bec6b756-4269-4ab5-b4e8-7ba989b4454e", "metadata": {}, "source": [ "The systems settles in the following equilibrium: [A] = 1.51554944 , [B] = 5.74222528" ] }, { "cell_type": "code", "execution_count": 30, "id": "8c2e158b-091f-485d-b5fd-a1dd21bcf6f0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 A <-> B\n", "Current concentrations: [A] = 1.516 ; [B] = 5.742\n", "1. Ratio of reactant/product concentrations, adjusted for reaction orders: 2.5\n", " Formula used: [B] / [A]^2 \n", "2. Ratio of forward/reverse reaction rates: 2.5\n", "Discrepancy between the two values: 1.041e-08 %\n", "Reaction IS in equilibrium (within 1% tolerance)\n", "\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Verify that the reaction has reached equilibrium\n", "bio.get_reaction_handler().is_in_equilibrium(rxn_index=0, conc=bio.bin_snapshot(bin_address = 0))" ] }, { "cell_type": "code", "execution_count": 31, "id": "f1ca9650-4b18-4576-8dc2-eba2fbb0f30c", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "Chemical=A
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "A", "line": { "color": "turquoise", "dash": "solid", "shape": "linear" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "A", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.12000000000000001, 0.14, 0.16, 0.18, 0.19999999999999998, 0.21999999999999997, 0.23999999999999996, 0.25999999999999995, 0.27999999999999997, 0.3, 0.32, 0.34, 0.36000000000000004, 0.38000000000000006, 0.4000000000000001, 0.4200000000000001, 0.4200000000000001, 0.4400000000000001, 0.46000000000000013, 0.48000000000000015, 0.5000000000000001, 0.5200000000000001, 0.5400000000000001, 0.5600000000000002, 0.5800000000000002, 0.6000000000000002, 0.6200000000000002, 0.6400000000000002, 0.6600000000000003, 0.6800000000000003, 0.7000000000000003, 0.7200000000000003, 0.7400000000000003, 0.7600000000000003, 0.7800000000000004, 0.8000000000000004, 0.8200000000000004, 0.8400000000000004 ], "xaxis": "x", "y": [ 3, 2.8, 2.6479999999999997, 2.5324799999999996, 2.4446847999999997, 2.3779604479999996, 2.32724994048, 2.2887099547647995, 2.2594195656212475, 2.237158869872148, 2.2202407411028324, 2.2073829632381528, 2.197611052060996, 2.1901843995663572, 2.1845401436704317, 2.180250509189528, 2.1769903869840412, 2.174512694107871, 2.172629647521982, 2.171198532116706, 2.1701108844086967, 2.1692842721506094, 3, 1.5999999999999999, 1.544, 1.5254528, 1.519033438994432, 1.5167795836780045, 1.5159843392384003, 1.5157032623056466, 1.5156038559406249, 1.515568692074582, 1.5155562523122668, 1.5155518514352155, 1.515550294500065, 1.5155497436882157, 1.5155495488220039, 1.515549479882208, 1.5155494554926734, 1.5155494468641386, 1.5155494438115338, 1.5155494427315825, 1.515549442349517, 1.5155494422143498 ], "yaxis": "y" }, { "hovertemplate": "Chemical=B
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "B", "line": { "color": "green", "dash": "solid", "shape": "linear" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "B", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.12000000000000001, 0.14, 0.16, 0.18, 0.19999999999999998, 0.21999999999999997, 0.23999999999999996, 0.25999999999999995, 0.27999999999999997, 0.3, 0.32, 0.34, 0.36000000000000004, 0.38000000000000006, 0.4000000000000001, 0.4200000000000001, 0.4200000000000001, 0.4400000000000001, 0.46000000000000013, 0.48000000000000015, 0.5000000000000001, 0.5200000000000001, 0.5400000000000001, 0.5600000000000002, 0.5800000000000002, 0.6000000000000002, 0.6200000000000002, 0.6400000000000002, 0.6600000000000003, 0.6800000000000003, 0.7000000000000003, 0.7200000000000003, 0.7400000000000003, 0.7600000000000003, 0.7800000000000004, 0.8000000000000004, 0.8200000000000004, 0.8400000000000004 ], "xaxis": "x", "y": [ 5, 5.1, 5.175999999999999, 5.233759999999999, 5.2776575999999995, 5.311019775999999, 5.336375029759999, 5.355645022617599, 5.370290217189376, 5.381420565063926, 5.389879629448584, 5.396308518380923, 5.401194473969502, 5.404907800216821, 5.407729928164784, 5.409874745405236, 5.411504806507979, 5.412743652946064, 5.413685176239008, 5.414400733941646, 5.414944557795651, 5.415357863924695, 5, 5.7, 5.728, 5.7372736, 5.740483280502784, 5.741610208160997, 5.7420078303808, 5.742148368847177, 5.742198072029688, 5.74221565396271, 5.742221873843867, 5.742224074282393, 5.742224852749968, 5.7422251281558925, 5.7422252255889985, 5.7422252600588966, 5.7422252722536635, 5.742225276567931, 5.742225278094233, 5.7422252786342085, 5.7422252788252415, 5.742225278892825 ], "yaxis": "y" } ], "layout": { "autosize": true, "legend": { "title": { "text": "Chemical" }, "tracegroupgap": 0 }, "shapes": [ { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.42, "x1": 0.42, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" } ], "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Reaction `2A <-> B` (the jump at 0.42 is the concentration reset)
Concentration as a function of time of all chemicals at bin 0" }, "xaxis": { "anchor": "y", "autorange": true, "domain": [ 0, 1 ], "range": [ 0, 0.8400000000000004 ], "title": { "text": "SYSTEM TIME" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "domain": [ 0, 1 ], "range": [ 1.2807341179544345, 5.97704060315274 ], "title": { "text": "Concentration" }, "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "bio.plot_history_single_bin(bin_address=0, \n", " title_prefix=\"Reaction `2A <-> B` (the jump at 0.42 is the concentration reset)\",\n", " vertical_lines_to_add=[0.42])" ] }, { "cell_type": "code", "execution_count": 32, "id": "3eeeb74b-0427-48ce-a2e3-9a876c0c66a0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABcaption
00.003.0000005.000000Initial state
10.022.8000005.100000
20.042.6480005.176000
30.062.5324805.233760
40.082.4446855.277658
50.102.3779605.311020
60.122.3272505.336375
70.142.2887105.355645
80.162.2594205.370290
90.182.2371595.381421
100.202.2202415.389880
110.222.2073835.396309
120.242.1976115.401194
130.262.1901845.404908
140.282.1845405.407730
150.302.1802515.409875
160.322.1769905.411505
170.342.1745135.412744
180.362.1726305.413685
190.382.1711995.414401
200.402.1701115.414945
210.422.1692845.415358
220.423.0000005.000000RESET all concentrations to initial values
230.441.6000005.700000
240.461.5440005.728000
250.481.5254535.737274
260.501.5190335.740483
270.521.5167805.741610
280.541.5159845.742008
290.561.5157035.742148
300.581.5156045.742198
310.601.5155695.742216
320.621.5155565.742222
330.641.5155525.742224
340.661.5155505.742225
350.681.5155505.742225
360.701.5155505.742225
370.721.5155495.742225
380.741.5155495.742225
390.761.5155495.742225
400.781.5155495.742225
410.801.5155495.742225
420.821.5155495.742225
430.841.5155495.742225
\n", "
" ], "text/plain": [ " SYSTEM TIME A B \\\n", "0 0.00 3.000000 5.000000 \n", "1 0.02 2.800000 5.100000 \n", "2 0.04 2.648000 5.176000 \n", "3 0.06 2.532480 5.233760 \n", "4 0.08 2.444685 5.277658 \n", "5 0.10 2.377960 5.311020 \n", "6 0.12 2.327250 5.336375 \n", "7 0.14 2.288710 5.355645 \n", "8 0.16 2.259420 5.370290 \n", "9 0.18 2.237159 5.381421 \n", "10 0.20 2.220241 5.389880 \n", "11 0.22 2.207383 5.396309 \n", "12 0.24 2.197611 5.401194 \n", "13 0.26 2.190184 5.404908 \n", "14 0.28 2.184540 5.407730 \n", "15 0.30 2.180251 5.409875 \n", "16 0.32 2.176990 5.411505 \n", "17 0.34 2.174513 5.412744 \n", "18 0.36 2.172630 5.413685 \n", "19 0.38 2.171199 5.414401 \n", "20 0.40 2.170111 5.414945 \n", "21 0.42 2.169284 5.415358 \n", "22 0.42 3.000000 5.000000 \n", "23 0.44 1.600000 5.700000 \n", "24 0.46 1.544000 5.728000 \n", "25 0.48 1.525453 5.737274 \n", "26 0.50 1.519033 5.740483 \n", "27 0.52 1.516780 5.741610 \n", "28 0.54 1.515984 5.742008 \n", "29 0.56 1.515703 5.742148 \n", "30 0.58 1.515604 5.742198 \n", "31 0.60 1.515569 5.742216 \n", "32 0.62 1.515556 5.742222 \n", "33 0.64 1.515552 5.742224 \n", "34 0.66 1.515550 5.742225 \n", "35 0.68 1.515550 5.742225 \n", "36 0.70 1.515550 5.742225 \n", "37 0.72 1.515549 5.742225 \n", "38 0.74 1.515549 5.742225 \n", "39 0.76 1.515549 5.742225 \n", "40 0.78 1.515549 5.742225 \n", "41 0.80 1.515549 5.742225 \n", "42 0.82 1.515549 5.742225 \n", "43 0.84 1.515549 5.742225 \n", "\n", " caption \n", "0 Initial state \n", "1 \n", "2 \n", "3 \n", "4 \n", "5 \n", "6 \n", "7 \n", "8 \n", "9 \n", "10 \n", "11 \n", "12 \n", "13 \n", "14 \n", "15 \n", "16 \n", "17 \n", "18 \n", "19 \n", "20 \n", "21 \n", "22 RESET all concentrations to initial values \n", "23 \n", "24 \n", "25 \n", "26 \n", "27 \n", "28 \n", "29 \n", "30 \n", "31 \n", "32 \n", "33 \n", "34 \n", "35 \n", "36 \n", "37 \n", "38 \n", "39 \n", "40 \n", "41 \n", "42 \n", "43 " ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df2 = bio.get_bin_history(bin_address=0)\n", "df2" ] }, { "cell_type": "markdown", "id": "3fd3bce2-7095-43a4-9ef0-764714be1301", "metadata": {}, "source": [ "**Compared to first-order kinetics in A**, the (2nd order in A) reaction now takes place much more quickly, and proceeds to almost complete depletion of A" ] }, { "cell_type": "markdown", "id": "ea064b52-efc9-4fb6-94c7-9a22264bc751", "metadata": {}, "source": [ "#### Let's verify that the stoichiometry is still being respected" ] }, { "cell_type": "code", "execution_count": 33, "id": "8798e44e-7a1b-41ba-af64-5a4b1e7cf687", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([3., 5.], dtype=float32), array([1.6, 5.7], dtype=float32))" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We'll check the first two arrays of concentrations, from the run's history\n", "arr0 = bio.get_reaction_handler().get_historical_concentrations(row=22, df=df2) # Row 22 is the conc. reset\n", "arr1 = bio.get_reaction_handler().get_historical_concentrations(row=23, df=df2)\n", "arr0, arr1" ] }, { "cell_type": "code", "execution_count": 34, "id": "bdbcef17-1fc3-4547-8afe-7c932a586dc3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bio.get_reaction_handler().get_diagnostics().stoichiometry_checker(rxn_index=0, \n", " conc_arr_before = arr0, \n", " conc_arr_after = arr1)" ] }, { "cell_type": "code", "execution_count": null, "id": "0ebe7c58", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.13" } }, "nbformat": 4, "nbformat_minor": 5 }