{
"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",
" Species | \n",
" Diff rate | \n",
" Bin 0 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" A | \n",
" None | \n",
" 3.0 | \n",
"
\n",
" \n",
" | 1 | \n",
" B | \n",
" None | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\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",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.0 | \n",
" 3.0 | \n",
" 5.0 | \n",
" Initial state | \n",
"
\n",
" \n",
"
\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",
" Species | \n",
" Diff rate | \n",
" Bin 0 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" A | \n",
" None | \n",
" 2.8 | \n",
"
\n",
" \n",
" | 1 | \n",
" B | \n",
" None | \n",
" 5.1 | \n",
"
\n",
" \n",
"
\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",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.0 | \n",
" 5.0 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.02 | \n",
" 2.8 | \n",
" 5.1 | \n",
" | \n",
"
\n",
" \n",
"
\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",
" Species | \n",
" Diff rate | \n",
" Bin 0 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" A | \n",
" None | \n",
" 2.169284 | \n",
"
\n",
" \n",
" | 1 | \n",
" B | \n",
" None | \n",
" 5.415358 | \n",
"
\n",
" \n",
"
\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",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.02 | \n",
" 2.800000 | \n",
" 5.100000 | \n",
" | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.04 | \n",
" 2.648000 | \n",
" 5.176000 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.06 | \n",
" 2.532480 | \n",
" 5.233760 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.08 | \n",
" 2.444685 | \n",
" 5.277658 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.10 | \n",
" 2.377960 | \n",
" 5.311020 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.12 | \n",
" 2.327250 | \n",
" 5.336375 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.14 | \n",
" 2.288710 | \n",
" 5.355645 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.16 | \n",
" 2.259420 | \n",
" 5.370290 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.18 | \n",
" 2.237159 | \n",
" 5.381421 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.20 | \n",
" 2.220241 | \n",
" 5.389880 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.22 | \n",
" 2.207383 | \n",
" 5.396309 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.24 | \n",
" 2.197611 | \n",
" 5.401194 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.26 | \n",
" 2.190184 | \n",
" 5.404908 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.28 | \n",
" 2.184540 | \n",
" 5.407730 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.30 | \n",
" 2.180251 | \n",
" 5.409875 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.32 | \n",
" 2.176990 | \n",
" 5.411505 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.34 | \n",
" 2.174513 | \n",
" 5.412744 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 0.36 | \n",
" 2.172630 | \n",
" 5.413685 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 0.38 | \n",
" 2.171199 | \n",
" 5.414401 | \n",
" | \n",
"
\n",
" \n",
" | 20 | \n",
" 0.40 | \n",
" 2.170111 | \n",
" 5.414945 | \n",
" | \n",
"
\n",
" \n",
" | 21 | \n",
" 0.42 | \n",
" 2.169284 | \n",
" 5.415358 | \n",
" | \n",
"
\n",
" \n",
"
\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",
" Species | \n",
" Diff rate | \n",
" Bin 0 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" A | \n",
" None | \n",
" 3.0 | \n",
"
\n",
" \n",
" | 1 | \n",
" B | \n",
" None | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\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",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.02 | \n",
" 2.800000 | \n",
" 5.100000 | \n",
" | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.04 | \n",
" 2.648000 | \n",
" 5.176000 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.06 | \n",
" 2.532480 | \n",
" 5.233760 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.08 | \n",
" 2.444685 | \n",
" 5.277658 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.10 | \n",
" 2.377960 | \n",
" 5.311020 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.12 | \n",
" 2.327250 | \n",
" 5.336375 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.14 | \n",
" 2.288710 | \n",
" 5.355645 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.16 | \n",
" 2.259420 | \n",
" 5.370290 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.18 | \n",
" 2.237159 | \n",
" 5.381421 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.20 | \n",
" 2.220241 | \n",
" 5.389880 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.22 | \n",
" 2.207383 | \n",
" 5.396309 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.24 | \n",
" 2.197611 | \n",
" 5.401194 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.26 | \n",
" 2.190184 | \n",
" 5.404908 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.28 | \n",
" 2.184540 | \n",
" 5.407730 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.30 | \n",
" 2.180251 | \n",
" 5.409875 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.32 | \n",
" 2.176990 | \n",
" 5.411505 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.34 | \n",
" 2.174513 | \n",
" 5.412744 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 0.36 | \n",
" 2.172630 | \n",
" 5.413685 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 0.38 | \n",
" 2.171199 | \n",
" 5.414401 | \n",
" | \n",
"
\n",
" \n",
" | 20 | \n",
" 0.40 | \n",
" 2.170111 | \n",
" 5.414945 | \n",
" | \n",
"
\n",
" \n",
" | 21 | \n",
" 0.42 | \n",
" 2.169284 | \n",
" 5.415358 | \n",
" | \n",
"
\n",
" \n",
" | 22 | \n",
" 0.42 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" RESET all concentrations to initial values | \n",
"
\n",
" \n",
"
\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",
" Species | \n",
" Diff rate | \n",
" Bin 0 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" A | \n",
" None | \n",
" 1.6 | \n",
"
\n",
" \n",
" | 1 | \n",
" B | \n",
" None | \n",
" 5.7 | \n",
"
\n",
" \n",
"
\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",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.02 | \n",
" 2.800000 | \n",
" 5.100000 | \n",
" | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.04 | \n",
" 2.648000 | \n",
" 5.176000 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.06 | \n",
" 2.532480 | \n",
" 5.233760 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.08 | \n",
" 2.444685 | \n",
" 5.277658 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.10 | \n",
" 2.377960 | \n",
" 5.311020 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.12 | \n",
" 2.327250 | \n",
" 5.336375 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.14 | \n",
" 2.288710 | \n",
" 5.355645 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.16 | \n",
" 2.259420 | \n",
" 5.370290 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.18 | \n",
" 2.237159 | \n",
" 5.381421 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.20 | \n",
" 2.220241 | \n",
" 5.389880 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.22 | \n",
" 2.207383 | \n",
" 5.396309 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.24 | \n",
" 2.197611 | \n",
" 5.401194 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.26 | \n",
" 2.190184 | \n",
" 5.404908 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.28 | \n",
" 2.184540 | \n",
" 5.407730 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.30 | \n",
" 2.180251 | \n",
" 5.409875 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.32 | \n",
" 2.176990 | \n",
" 5.411505 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.34 | \n",
" 2.174513 | \n",
" 5.412744 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 0.36 | \n",
" 2.172630 | \n",
" 5.413685 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 0.38 | \n",
" 2.171199 | \n",
" 5.414401 | \n",
" | \n",
"
\n",
" \n",
" | 20 | \n",
" 0.40 | \n",
" 2.170111 | \n",
" 5.414945 | \n",
" | \n",
"
\n",
" \n",
" | 21 | \n",
" 0.42 | \n",
" 2.169284 | \n",
" 5.415358 | \n",
" | \n",
"
\n",
" \n",
" | 22 | \n",
" 0.42 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" RESET all concentrations to initial values | \n",
"
\n",
" \n",
" | 23 | \n",
" 0.44 | \n",
" 1.600000 | \n",
" 5.700000 | \n",
" | \n",
"
\n",
" \n",
"
\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",
" Species | \n",
" Diff rate | \n",
" Bin 0 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" A | \n",
" None | \n",
" 1.515549 | \n",
"
\n",
" \n",
" | 1 | \n",
" B | \n",
" None | \n",
" 5.742225 | \n",
"
\n",
" \n",
"
\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",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.02 | \n",
" 2.800000 | \n",
" 5.100000 | \n",
" | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.04 | \n",
" 2.648000 | \n",
" 5.176000 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.06 | \n",
" 2.532480 | \n",
" 5.233760 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.08 | \n",
" 2.444685 | \n",
" 5.277658 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.10 | \n",
" 2.377960 | \n",
" 5.311020 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.12 | \n",
" 2.327250 | \n",
" 5.336375 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.14 | \n",
" 2.288710 | \n",
" 5.355645 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.16 | \n",
" 2.259420 | \n",
" 5.370290 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.18 | \n",
" 2.237159 | \n",
" 5.381421 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.20 | \n",
" 2.220241 | \n",
" 5.389880 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.22 | \n",
" 2.207383 | \n",
" 5.396309 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 0.24 | \n",
" 2.197611 | \n",
" 5.401194 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 0.26 | \n",
" 2.190184 | \n",
" 5.404908 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 0.28 | \n",
" 2.184540 | \n",
" 5.407730 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 0.30 | \n",
" 2.180251 | \n",
" 5.409875 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 0.32 | \n",
" 2.176990 | \n",
" 5.411505 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 0.34 | \n",
" 2.174513 | \n",
" 5.412744 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 0.36 | \n",
" 2.172630 | \n",
" 5.413685 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 0.38 | \n",
" 2.171199 | \n",
" 5.414401 | \n",
" | \n",
"
\n",
" \n",
" | 20 | \n",
" 0.40 | \n",
" 2.170111 | \n",
" 5.414945 | \n",
" | \n",
"
\n",
" \n",
" | 21 | \n",
" 0.42 | \n",
" 2.169284 | \n",
" 5.415358 | \n",
" | \n",
"
\n",
" \n",
" | 22 | \n",
" 0.42 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" RESET all concentrations to initial values | \n",
"
\n",
" \n",
" | 23 | \n",
" 0.44 | \n",
" 1.600000 | \n",
" 5.700000 | \n",
" | \n",
"
\n",
" \n",
" | 24 | \n",
" 0.46 | \n",
" 1.544000 | \n",
" 5.728000 | \n",
" | \n",
"
\n",
" \n",
" | 25 | \n",
" 0.48 | \n",
" 1.525453 | \n",
" 5.737274 | \n",
" | \n",
"
\n",
" \n",
" | 26 | \n",
" 0.50 | \n",
" 1.519033 | \n",
" 5.740483 | \n",
" | \n",
"
\n",
" \n",
" | 27 | \n",
" 0.52 | \n",
" 1.516780 | \n",
" 5.741610 | \n",
" | \n",
"
\n",
" \n",
" | 28 | \n",
" 0.54 | \n",
" 1.515984 | \n",
" 5.742008 | \n",
" | \n",
"
\n",
" \n",
" | 29 | \n",
" 0.56 | \n",
" 1.515703 | \n",
" 5.742148 | \n",
" | \n",
"
\n",
" \n",
" | 30 | \n",
" 0.58 | \n",
" 1.515604 | \n",
" 5.742198 | \n",
" | \n",
"
\n",
" \n",
" | 31 | \n",
" 0.60 | \n",
" 1.515569 | \n",
" 5.742216 | \n",
" | \n",
"
\n",
" \n",
" | 32 | \n",
" 0.62 | \n",
" 1.515556 | \n",
" 5.742222 | \n",
" | \n",
"
\n",
" \n",
" | 33 | \n",
" 0.64 | \n",
" 1.515552 | \n",
" 5.742224 | \n",
" | \n",
"
\n",
" \n",
" | 34 | \n",
" 0.66 | \n",
" 1.515550 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 35 | \n",
" 0.68 | \n",
" 1.515550 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 36 | \n",
" 0.70 | \n",
" 1.515550 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 37 | \n",
" 0.72 | \n",
" 1.515549 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 38 | \n",
" 0.74 | \n",
" 1.515549 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 39 | \n",
" 0.76 | \n",
" 1.515549 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 40 | \n",
" 0.78 | \n",
" 1.515549 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 41 | \n",
" 0.80 | \n",
" 1.515549 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 42 | \n",
" 0.82 | \n",
" 1.515549 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
" | 43 | \n",
" 0.84 | \n",
" 1.515549 | \n",
" 5.742225 | \n",
" | \n",
"
\n",
" \n",
"
\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
}