{
"cells": [
{
"cell_type": "markdown",
"id": "4f3151f1-fee2-40d3-9913-d02f15a8fa30",
"metadata": {},
"source": [
"## 2 COUPLED reactions: `A + B <-> C` and `C + D <-> E` , \n",
"### with 1st-order kinetics for each species, taken to equilibrium\n",
"\n",
"Both reactions are stronger in their respective forward rates. For the most part, \"C\" is produced by the 1st reaction, and consumed by the 2nd one\n",
"\n",
"Diffusion not applicable (just 1 bin)\n",
"\n",
"LAST REVISED: June 4, 2023"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1ae6fc7e-a758-4f90-9fd5-835a4daee70b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Added 'D:\\Docs\\- MY CODE\\BioSimulations\\life123-Win7' to sys.path\n"
]
}
],
"source": [
"import set_path # Importing this module will add the project's home directory to sys.path"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ecd38f71-69ed-4040-9fca-45e01a2fc639",
"metadata": {},
"outputs": [],
"source": [
"from experiments.get_notebook_info import get_notebook_basename\n",
"\n",
"from src.modules.reactions.reaction_data import ChemData as chem\n",
"from src.modules.reactions.reaction_dynamics import ReactionDynamics\n",
"from src.life_1D.bio_sim_1d import BioSim1D\n",
"\n",
"import plotly.express as px\n",
"from src.modules.html_log.html_log import HtmlLog as log\n",
"from src.modules.visualization.graphic_log import GraphicLog"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "05cc8402-3b3c-468a-bb98-ea4159816a0f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-> Output will be LOGGED into the file 'reaction_8.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_1\"],\n",
" extra_js=\"https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.21.2/cytoscape.umd.js\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c5443325-1f60-4129-aa6d-47d328ab7c05",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SYSTEM STATE at Time t = 0:\n",
"1 bins and 5 species:\n",
" Species 0 (A). Diff rate: None. Conc: [3.]\n",
" Species 1 (B). Diff rate: None. Conc: [5.]\n",
" Species 2 (C). Diff rate: None. Conc: [1.]\n",
" Species 3 (D). Diff rate: None. Conc: [0.4]\n",
" Species 4 (E). Diff rate: None. Conc: [0.1]\n"
]
}
],
"source": [
"# Initialize the system\n",
"chem_data = chem(names=[\"A\", \"B\", \"C\", \"D\", \"E\"]) # NOTE: Diffusion not applicable (just 1 bin)\n",
"\n",
"# Specify the reactions\n",
"\n",
"\n",
"# Reactions A + B <-> C and C + D <-> E , with 1st-order kinetics for each species\n",
"chem_data.add_reaction(reactants=[\"A\", \"B\"], products=[\"C\"], forward_rate=5., reverse_rate=2.)\n",
"chem_data.add_reaction(reactants=[\"C\", \"D\"], products=[\"E\"], forward_rate=8., reverse_rate=4.)\n",
"\n",
"bio = BioSim1D(n_bins=1, chem_data=chem_data)\n",
"\n",
"bio.set_all_uniform_concentrations( [3., 5., 1., 0.4, 0.1] )\n",
"\n",
"bio.describe_state()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "98f90fcf-5e0c-488c-a96b-2b545e13b453",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0 | \n",
" 3.0 | \n",
" 5.0 | \n",
" 1.0 | \n",
" 0.4 | \n",
" 0.1 | \n",
" Initial state | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B C D E caption\n",
"0 0 3.0 5.0 1.0 0.4 0.1 Initial state"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Save the state of the concentrations of all species at bin 0\n",
"bio.add_snapshot(bio.bin_snapshot(bin_address = 0), caption=\"Initial state\")\n",
"bio.get_history()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d79393b1-8751-4cdc-81fe-381b1161ec93",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of reactions: 2 (at temp. 25 C)\n",
"0: A + B <-> C (kF = 5 / kR = 2 / Delta_G = -2,271.45 / K = 2.5) | 1st order in all reactants & products\n",
"1: C + D <-> E (kF = 8 / kR = 4 / Delta_G = -1,718.28 / K = 2) | 1st order in all reactants & products\n"
]
}
],
"source": [
"chem_data.describe_reactions()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c05a44f2-085e-418d-be55-8ea403b1b44e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2 COUPLED reactions: A + B C and C + D E\n",
"[GRAPHIC ELEMENT SENT TO LOG FILE `reaction_8.log.htm`]\n"
]
}
],
"source": [
"# Send a header and a plot to the HTML log file\n",
"log.write(\"2 COUPLED reactions: A + B <-> C and C + D <-> E\",\n",
" style=log.h2)\n",
"# Send the plot to the HTML log file\n",
"graph_data = chem_data.prepare_graph_network()\n",
"GraphicLog.export_plot(graph_data, \"vue_cytoscape_1\")"
]
},
{
"cell_type": "markdown",
"id": "db7979c8-c39d-418c-bd70-e6e234d71cf7",
"metadata": {
"tags": []
},
"source": [
"### First step"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "73e5e562-60d7-46d9-b9d5-03748e0103eb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SYSTEM STATE at Time t = 0.01:\n",
"1 bins and 5 species:\n",
" Species 0 (A). Diff rate: None. Conc: [2.27]\n",
" Species 1 (B). Diff rate: None. Conc: [4.27]\n",
" Species 2 (C). Diff rate: None. Conc: [1.702]\n",
" Species 3 (D). Diff rate: None. Conc: [0.372]\n",
" Species 4 (E). Diff rate: None. Conc: [0.128]\n"
]
}
],
"source": [
"# First step\n",
"bio.react(time_step=0.01, n_steps=1, snapshots={\"sample_bin\": 0})\n",
"bio.describe_state()"
]
},
{
"cell_type": "markdown",
"id": "1b8f010c-0bfc-43e2-aad3-26b3422ba1ca",
"metadata": {},
"source": [
"1 bins and 5 species:\n",
" [[2.27 ]\n",
" [4.27 ]\n",
" [1.702]\n",
" [0.372]\n",
" [0.128]]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "29d41ef5-46ae-49fb-ab07-605a4d194573",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.00 | \n",
" 5.00 | \n",
" 1.000 | \n",
" 0.400 | \n",
" 0.100 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.01 | \n",
" 2.27 | \n",
" 4.27 | \n",
" 1.702 | \n",
" 0.372 | \n",
" 0.128 | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B C D E caption\n",
"0 0.00 3.00 5.00 1.000 0.400 0.100 Initial state\n",
"1 0.01 2.27 4.27 1.702 0.372 0.128 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bio.get_history()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ae1ad0a8-b118-400d-ab94-8f404597642d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SYSTEM STATE at Time t = 0.02:\n",
"1 bins and 5 species:\n",
" Species 0 (A). Diff rate: None. Conc: [1.819395]\n",
" Species 1 (B). Diff rate: None. Conc: [3.819395]\n",
" Species 2 (C). Diff rate: None. Conc: [2.10707348]\n",
" Species 3 (D). Diff rate: None. Conc: [0.32646848]\n",
" Species 4 (E). Diff rate: None. Conc: [0.17353152]\n"
]
}
],
"source": [
"# Identical 2nd step\n",
"bio.react(time_step=0.01, n_steps=1, snapshots={\"sample_bin\": 0})\n",
"bio.describe_state()"
]
},
{
"cell_type": "markdown",
"id": "39744f2c-3823-405c-b5ab-e844b4537765",
"metadata": {},
"source": [
"1 bins and 5 species:\n",
" [[1.819395 ]\n",
" [3.819395 ]\n",
" [2.10707348]\n",
" [0.32646848]\n",
" [0.17353152]]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "cd441e5a-cc00-489e-a702-879a91844656",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" 1.000000 | \n",
" 0.400000 | \n",
" 0.100000 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.01 | \n",
" 2.270000 | \n",
" 4.270000 | \n",
" 1.702000 | \n",
" 0.372000 | \n",
" 0.128000 | \n",
" | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.02 | \n",
" 1.819395 | \n",
" 3.819395 | \n",
" 2.107073 | \n",
" 0.326468 | \n",
" 0.173532 | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B C D E \\\n",
"0 0.00 3.000000 5.000000 1.000000 0.400000 0.100000 \n",
"1 0.01 2.270000 4.270000 1.702000 0.372000 0.128000 \n",
"2 0.02 1.819395 3.819395 2.107073 0.326468 0.173532 \n",
"\n",
" caption \n",
"0 Initial state \n",
"1 \n",
"2 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bio.get_history()"
]
},
{
"cell_type": "markdown",
"id": "100a4ed1-cf8d-40ba-a49c-680ee02a1d49",
"metadata": {},
"source": [
"### Numerous more steps"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "9bf6ad6f-5e63-44c2-a5eb-e27a5d442c45",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SYSTEM STATE at Time t = 2.02:\n",
"1 bins and 5 species:\n",
" Species 0 (A). Diff rate: None. Conc: [0.50508029]\n",
" Species 1 (B). Diff rate: None. Conc: [2.50508029]\n",
" Species 2 (C). Diff rate: None. Conc: [3.16316668]\n",
" Species 3 (D). Diff rate: None. Conc: [0.06824696]\n",
" Species 4 (E). Diff rate: None. Conc: [0.43175304]\n"
]
}
],
"source": [
"# Numerous more identical steps, to equilibrium\n",
"bio.react(time_step=0.01, n_steps=200, snapshots={\"sample_bin\": 0, \"frequency\": 10})\n",
"bio.describe_state()"
]
},
{
"cell_type": "markdown",
"id": "37d92ec2-0efc-4ad1-a7d4-46eb351ac2fa",
"metadata": {},
"source": [
"1 bins and 5 species:\n",
" [[0.50508029]\n",
" [2.50508029]\n",
" [3.16316668]\n",
" [0.06824696]\n",
" [0.43175304]]"
]
},
{
"cell_type": "markdown",
"id": "7c4e149f-3f80-48b1-a910-b828701c2806",
"metadata": {
"tags": []
},
"source": [
"### Equilibrium"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "99dd2a45-b7fa-459b-a25f-3475043bdbb7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A + B <-> C\n",
"Final concentrations: [C] = 3.163 ; [A] = 0.5051 ; [B] = 2.505\n",
"1. Ratio of reactant/product concentrations, adjusted for reaction orders: 2.5\n",
" Formula used: [C] / ([A][B])\n",
"2. Ratio of forward/reverse reaction rates: 2.5\n",
"Discrepancy between the two values: 8.882e-14 %\n",
"Reaction IS in equilibrium (within 1% tolerance)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Verify that each reaction has reached equilibrium\n",
"bio.reaction_dynamics.is_in_equilibrium(rxn_index=0, conc=bio.bin_snapshot(bin_address = 0))"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "ab2dbc91-ba95-45a9-9d41-638b78019752",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"C + D <-> E\n",
"Final concentrations: [E] = 0.4318 ; [C] = 3.163 ; [D] = 0.06825\n",
"1. Ratio of reactant/product concentrations, adjusted for reaction orders: 2\n",
" Formula used: [E] / ([C][D])\n",
"2. Ratio of forward/reverse reaction rates: 2.0\n",
"Discrepancy between the two values: 4.441e-14 %\n",
"Reaction IS in equilibrium (within 1% tolerance)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bio.reaction_dynamics.is_in_equilibrium(rxn_index=1, conc=bio.bin_snapshot(bin_address = 0))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "df7086e8-1ea6-45f0-9fa3-66c84a9475e7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"At equilibrium: -4.440892098500626e-15 (this should be close to 0 at equilibrium)\n"
]
}
],
"source": [
"# Do a consistent check with the equilibrium concentrations:\n",
"\n",
"A_eq = bio.bin_concentration(0, 0)\n",
"B_eq = bio.bin_concentration(0, 1)\n",
"C_eq = bio.bin_concentration(0, 2)\n",
"D_eq = bio.bin_concentration(0, 3)\n",
"E_eq = bio.bin_concentration(0, 4)\n",
"\n",
"Rf0 = chem_data.get_forward_rate(0)\n",
"Rb0 = chem_data.get_reverse_rate(0)\n",
"\n",
"Rf1 = chem_data.get_forward_rate(1)\n",
"Rb1 = chem_data.get_reverse_rate(1)\n",
"\n",
"equil = -(Rf0 * A_eq * B_eq - Rf1 * C_eq * D_eq) + (Rb0 * C_eq - Rb1 * E_eq)\n",
"\n",
"print(\"\\nAt equilibrium: \", equil, \" (this should be close to 0 at equilibrium)\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "29054060-59d2-4516-944d-da09094cf975",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" SYSTEM TIME | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" caption | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.00 | \n",
" 3.000000 | \n",
" 5.000000 | \n",
" 1.000000 | \n",
" 0.400000 | \n",
" 0.100000 | \n",
" Initial state | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.01 | \n",
" 2.270000 | \n",
" 4.270000 | \n",
" 1.702000 | \n",
" 0.372000 | \n",
" 0.128000 | \n",
" | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.02 | \n",
" 1.819395 | \n",
" 3.819395 | \n",
" 2.107073 | \n",
" 0.326468 | \n",
" 0.173532 | \n",
" | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.12 | \n",
" 0.654654 | \n",
" 2.654654 | \n",
" 3.032120 | \n",
" 0.086774 | \n",
" 0.413226 | \n",
" | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.22 | \n",
" 0.527627 | \n",
" 2.527627 | \n",
" 3.141994 | \n",
" 0.069620 | \n",
" 0.430380 | \n",
" | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.32 | \n",
" 0.508578 | \n",
" 2.508578 | \n",
" 3.159830 | \n",
" 0.068408 | \n",
" 0.431592 | \n",
" | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.42 | \n",
" 0.505625 | \n",
" 2.505625 | \n",
" 3.162646 | \n",
" 0.068270 | \n",
" 0.431730 | \n",
" | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.52 | \n",
" 0.505165 | \n",
" 2.505165 | \n",
" 3.163085 | \n",
" 0.068251 | \n",
" 0.431749 | \n",
" | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.62 | \n",
" 0.505094 | \n",
" 2.505094 | \n",
" 3.163154 | \n",
" 0.068248 | \n",
" 0.431752 | \n",
" | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.72 | \n",
" 0.505082 | \n",
" 2.505082 | \n",
" 3.163165 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 10 | \n",
" 0.82 | \n",
" 0.505081 | \n",
" 2.505081 | \n",
" 3.163166 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 11 | \n",
" 0.92 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 12 | \n",
" 1.02 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 13 | \n",
" 1.12 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 14 | \n",
" 1.22 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 15 | \n",
" 1.32 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 16 | \n",
" 1.42 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 17 | \n",
" 1.52 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 18 | \n",
" 1.62 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 19 | \n",
" 1.72 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 20 | \n",
" 1.82 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 21 | \n",
" 1.92 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
" | 22 | \n",
" 2.02 | \n",
" 0.505080 | \n",
" 2.505080 | \n",
" 3.163167 | \n",
" 0.068247 | \n",
" 0.431753 | \n",
" | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" SYSTEM TIME A B C D E \\\n",
"0 0.00 3.000000 5.000000 1.000000 0.400000 0.100000 \n",
"1 0.01 2.270000 4.270000 1.702000 0.372000 0.128000 \n",
"2 0.02 1.819395 3.819395 2.107073 0.326468 0.173532 \n",
"3 0.12 0.654654 2.654654 3.032120 0.086774 0.413226 \n",
"4 0.22 0.527627 2.527627 3.141994 0.069620 0.430380 \n",
"5 0.32 0.508578 2.508578 3.159830 0.068408 0.431592 \n",
"6 0.42 0.505625 2.505625 3.162646 0.068270 0.431730 \n",
"7 0.52 0.505165 2.505165 3.163085 0.068251 0.431749 \n",
"8 0.62 0.505094 2.505094 3.163154 0.068248 0.431752 \n",
"9 0.72 0.505082 2.505082 3.163165 0.068247 0.431753 \n",
"10 0.82 0.505081 2.505081 3.163166 0.068247 0.431753 \n",
"11 0.92 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"12 1.02 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"13 1.12 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"14 1.22 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"15 1.32 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"16 1.42 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"17 1.52 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"18 1.62 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"19 1.72 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"20 1.82 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"21 1.92 0.505080 2.505080 3.163167 0.068247 0.431753 \n",
"22 2.02 0.505080 2.505080 3.163167 0.068247 0.431753 \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 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bio.get_history()"
]
},
{
"cell_type": "markdown",
"id": "bbd28c26-ea7e-4f5c-853a-96cb031b6b3c",
"metadata": {
"tags": []
},
"source": [
"# Plots of changes of concentration with time"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "65010094-f1d7-4edf-8716-3c0be6faa043",
"metadata": {
"tags": []
},
"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": "navy",
"dash": "solid"
},
"marker": {
"symbol": "circle"
},
"mode": "lines",
"name": "A",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0,
0.01,
0.02,
0.11999999999999998,
0.22000000000000006,
0.3200000000000001,
0.4200000000000002,
0.5200000000000002,
0.6200000000000003,
0.7200000000000004,
0.8200000000000005,
0.9200000000000006,
1.0200000000000007,
1.1200000000000008,
1.2200000000000009,
1.320000000000001,
1.420000000000001,
1.5200000000000011,
1.6200000000000012,
1.7200000000000013,
1.8200000000000014,
1.9200000000000015,
2.020000000000001
],
"xaxis": "x",
"y": [
3,
2.27,
1.819395,
0.6546542071373758,
0.5276265779980039,
0.5085777537856565,
0.5056248705954197,
0.5051651251130621,
0.5050935043527953,
0.5050823462155833,
0.5050806078226181,
0.5050803369877955,
0.5050802947927899,
0.5050802882189734,
0.5050802871947986,
0.5050802870352361,
0.5050802870103769,
0.5050802870065036,
0.5050802870059004,
0.5050802870058062,
0.5050802870057917,
0.5050802870057893,
0.505080287005789
],
"yaxis": "y"
},
{
"hovertemplate": "Chemical=B
SYSTEM TIME=%{x}
concentration=%{y}",
"legendgroup": "B",
"line": {
"color": "cyan",
"dash": "solid"
},
"marker": {
"symbol": "circle"
},
"mode": "lines",
"name": "B",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0,
0.01,
0.02,
0.11999999999999998,
0.22000000000000006,
0.3200000000000001,
0.4200000000000002,
0.5200000000000002,
0.6200000000000003,
0.7200000000000004,
0.8200000000000005,
0.9200000000000006,
1.0200000000000007,
1.1200000000000008,
1.2200000000000009,
1.320000000000001,
1.420000000000001,
1.5200000000000011,
1.6200000000000012,
1.7200000000000013,
1.8200000000000014,
1.9200000000000015,
2.020000000000001
],
"xaxis": "x",
"y": [
5,
4.27,
3.8193949999999997,
2.6546542071373755,
2.5276265779980043,
2.5085777537856573,
2.505624870595421,
2.5051651251130638,
2.5050935043527964,
2.505082346215585,
2.5050806078226193,
2.505080336987797,
2.5050802947927915,
2.505080288218975,
2.5050802871947995,
2.5050802870352373,
2.5050802870103785,
2.505080287006506,
2.5050802870059026,
2.5050802870058084,
2.5050802870057933,
2.5050802870057916,
2.5050802870057916
],
"yaxis": "y"
},
{
"hovertemplate": "Chemical=C
SYSTEM TIME=%{x}
concentration=%{y}",
"legendgroup": "C",
"line": {
"color": "red",
"dash": "solid"
},
"marker": {
"symbol": "circle"
},
"mode": "lines",
"name": "C",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0,
0.01,
0.02,
0.11999999999999998,
0.22000000000000006,
0.3200000000000001,
0.4200000000000002,
0.5200000000000002,
0.6200000000000003,
0.7200000000000004,
0.8200000000000005,
0.9200000000000006,
1.0200000000000007,
1.1200000000000008,
1.2200000000000009,
1.320000000000001,
1.420000000000001,
1.5200000000000011,
1.6200000000000012,
1.7200000000000013,
1.8200000000000014,
1.9200000000000015,
2.020000000000001
],
"xaxis": "x",
"y": [
1,
1.702,
2.10707348,
3.032119835748452,
3.1419937433830265,
3.159830490642069,
3.1626455660056068,
3.163085444467259,
3.1631540188897316,
3.163164703887413,
3.163166368610749,
3.1631666279694204,
3.1631666683765247,
3.1631666746717944,
3.163166675652573,
3.1631666758053743,
3.1631666758291797,
3.1631666758328887,
3.163166675833466,
3.1631666758335557,
3.163166675833569,
3.163166675833571,
3.163166675833571
],
"yaxis": "y"
},
{
"hovertemplate": "Chemical=D
SYSTEM TIME=%{x}
concentration=%{y}",
"legendgroup": "D",
"line": {
"color": "orange",
"dash": "solid"
},
"marker": {
"symbol": "circle"
},
"mode": "lines",
"name": "D",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0,
0.01,
0.02,
0.11999999999999998,
0.22000000000000006,
0.3200000000000001,
0.4200000000000002,
0.5200000000000002,
0.6200000000000003,
0.7200000000000004,
0.8200000000000005,
0.9200000000000006,
1.0200000000000007,
1.1200000000000008,
1.2200000000000009,
1.320000000000001,
1.420000000000001,
1.5200000000000011,
1.6200000000000012,
1.7200000000000013,
1.8200000000000014,
1.9200000000000015,
2.020000000000001
],
"xaxis": "x",
"y": [
0.4,
0.372,
0.32646848,
0.08677404288582762,
0.06962032138103086,
0.06840824442772607,
0.06827043660102639,
0.0682505695803209,
0.06824752324252664,
0.06824705010299546,
0.06824697643336625,
0.06824696495721497,
0.06824696316931336,
0.06824696289076639,
0.06824696284736989,
0.0682469628406089,
0.06824696283955556,
0.06824696283939145,
0.0682469628393659,
0.06824696283936191,
0.06824696283936131,
0.06824696283936123,
0.06824696283936123
],
"yaxis": "y"
},
{
"hovertemplate": "Chemical=E
SYSTEM TIME=%{x}
concentration=%{y}",
"legendgroup": "E",
"line": {
"color": "green",
"dash": "solid"
},
"marker": {
"symbol": "circle"
},
"mode": "lines",
"name": "E",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0,
0.01,
0.02,
0.11999999999999998,
0.22000000000000006,
0.3200000000000001,
0.4200000000000002,
0.5200000000000002,
0.6200000000000003,
0.7200000000000004,
0.8200000000000005,
0.9200000000000006,
1.0200000000000007,
1.1200000000000008,
1.2200000000000009,
1.320000000000001,
1.420000000000001,
1.5200000000000011,
1.6200000000000012,
1.7200000000000013,
1.8200000000000014,
1.9200000000000015,
2.020000000000001
],
"xaxis": "x",
"y": [
0.1,
0.128,
0.17353152,
0.41322595711417237,
0.4303796786189691,
0.43159175557227397,
0.43172956339897367,
0.4317494304196792,
0.43175247675747347,
0.43175294989700463,
0.43175302356663386,
0.43175303504278506,
0.4317530368306867,
0.43175303710923374,
0.4317530371526302,
0.4317530371593912,
0.43175303716044455,
0.43175303716060864,
0.43175303716063423,
0.43175303716063823,
0.4317530371606388,
0.4317530371606388,
0.4317530371606388
],
"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": "2 COUPLED reactions: A + B <-> C and C + D <-> E . Changes in concentrations"
},
"xaxis": {
"anchor": "y",
"autorange": true,
"domain": [
0,
1
],
"range": [
0,
2.020000000000001
],
"title": {
"text": "SYSTEM TIME"
},
"type": "linear"
},
"yaxis": {
"anchor": "x",
"autorange": true,
"domain": [
0,
1
],
"range": [
-0.2057393170028965,
5.273986279842258
],
"title": {
"text": "concentration"
},
"type": "linear"
}
}
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAABTkAAAFoCAYAAACc6v8hAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3QmcFOWd//Ff9/SczDAMGEAMcqnrERU1Kjl0jeb/T5ZozJqNq6vxDEHwRP4geATRKChBiasQQjziasLiLtkNkSTGZIlJjMeaaEzUaEDQBEGEYZiBObv7/3qqu4aanj6ququrnqr+tC9fQE/Vc7x/1T3T33mqKpJMJpPCAwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQCKhAhJAzoJVj2AgggAACCCCAAAIIIIAAAggggAACCCBgCBByciAggAACCCCAAAIIIIAAAggggAACCCCAQKAFCDkDXT4GjwACCCCAAAIIIIAAAggggAACCCCAAAKEnBwDCCCAAAIIIIAAAggggAACCCCAAAIIIBBoAULOQJePwSOAAAIIIIAAAggggAACCCCAAAIIIIAAISfHAAIIIIAAAggggAACCCCAAAIIIIAAAggEWoCQM9DlY/AIIIAAAggggAACCCCAAAIIIIAAAgggQMjJMYAAAggggAACCCCAAAIIIIAAAggggAACgRYg5Ax0+Rg8AggggAACCCCAAAIIIIAAAggggAACCBBycgwggAACCCCAAAIIIIAAAggggAACCCCAQKAFCDkDXT4GjwACCCCAAAIIIIAAAggggAACCCCAAAKEnBwDCCCAAAIIIIAAAggggAACCCCAAAIIIBBoAULOQJePwSOAAAIIIIAAAggggAACCCCAAAIIIIAAISfHAAIIIIAAAggggAACCCCAAAIIIIAAAggEWoCQM9DlY/AIIIAAAggggAACCCCAAAIIIIAAAgggQMjJMYAAAggggAACCCCAAAIIIIAAAggggAACgRYg5Ax0+Rg8AggggAACCCCAAAIIIIAAAggggAACCBBycgwggAACCCCAAAIIIIAAAggggAACCCCAQKAFCDkDXT4GjwACCCCAAAIIIIAAAggggAACCCCAAAKEnBwDCCCAAAIIIIAAAggggAACCCCAAAIIIBBoAULOQJePwSOAAAIIIIAAAggggAACCCCAAAIIIIAAISfHAAIIIIAAAggggAACCCCAAAIIIIAAAggEWoCQM9DlY/AIIIAAAggggAACCCCAAAIIIIAAAgggQMjJMYAAAggggAACCCCAAAIIIIAAAggggAAC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rqVmfrizblvow3+2m2Vka9/uB59CBmYI+Je3/ybqh/1cj8y7q+e667XTm+UUWv2Ua/yZJpnWqq7qYV3Jac4tc9vMIDSzzmZfuUI36+or1Ue206DthpzWD1nWWmQ7Tt0IOe2sUrZzCYZsx02poVK214/ZT6HXUTFvnjrsk+t4L3W+mce0OubvnD9Nbly0asCqZSfHqfLK9rrb/O42KWUlp7UO2Y6BYi8zUOrxmO292Ryrk+8jOhxndsZQ6HuHasPO+73TkNMcWy5va592wx3VZuZ81HG07Lar5NE1P5XRI4eLuQrRSZvZ3q/V94vxY0dn/d6T62cI6/GTbd52jq9yhZxqjtnGnTkmO98Hndra6deOaSnva+b7jXlTqFxnD9j9GSTzODTf27du/0Ayf8GZyz7zdefENbNOqo9yXQ/YzvsM2yCAAAIIIIAAAoUECDkLCfF1BBBAAAEEEECgTAKlXpe2TMOiWQQQQAABBBBAAAEEAidAyBm4kjFgBBBAAAEEEAiagFoV9/jap2XOjPOkvq7GGH7mqdxBmxPjRQABBBBAAAEEEEBAJwFCTp2qwVgQQAABBBBAIJQC2U79LfZyCqEEYlIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAIIIIAAAgiUKEDIWSIguyOAAAIIIIAAAggggAACCCCAAAIIIICAvwKEnP760zsCCCCAAAIIIIAAAggggAACCCCAAAIIlChAyFkiILsjgAACCCCAAAIIIIAAAggggAACCCCAgL8ChJz++tM7AggggAACCCCAAAIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAIIIIAAAgiUKEDIWSIguyOAAAIIIIAAAggggAACCCCAAAIIIICAvwKEnP760zsCCCCAAAIIIIAAAggggAACCCCAAAIIlChAyFkiILsjgAACCCCAAAIIIIAAAggggAACCCCAgL8ChJz++tM7AggggAACCCCAAAIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAIIIIAAAgiUKEDIWSIguyOAAAIIIIAAAggggAACCCCAAAIIIICAvwKEnP760zsCCCCAAAIIIIAAAggggAACCCCAAAIIlChAyFkiILsjgAACCCCAAAIIIIAAAggggAACCCCAgL8ChJz++tM7AggggAACCCCAAAIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAIIIIAAAgiUKEDIWSIguyOAAAIIIIAAAggggAACCCCAAAIIIICAvwKEnP760zsCCCCAAAIIIIAAAggggAACCCCAAAIIlChAyFkiILsjgAACCCCAAAIIIIAAAggggAACCCCAgL8ChJz++tM7AggggAACCCCAAAIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAIIIIAAAgiUKEDIWSIguyOAAAIIIIAAAggggAACCCCAAAIIIICAvwKEnP760zsCCCCAAAIIIIAAAggggAACCCCAAAIIlChAyFkiILsjgAACCCCAAAIIIIAAAggggAACCCCAgL8ChJz++tM7AggggAACCCCAAAIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAIIIIAAAgiUKEDIWSIguyOAAAIIIIAAAggggAACCCCAAAIIIICAvwKEnP760zsCCCCAAAIIIIAAAggggAACCCCAAAIIlChAyFkiILsjgAACCCCAAAIIIIAAAggggAACCCCAgL8ChJz++tM7AggggAACCCCAAAIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAIIIIAAAgiUKEDIWSIguyOAAAIIIIAAAggggAACCCCAAAIIIICAvwKEnP760zsCCCCAAAIIIIAAAggggAACCCCAAAIIlChAyFkiILsjgAACCCCAAAIIIIAAAggggAACCCCAgL8ChJz++tM7AggggAACCCCAAAIIIIAAAggggAACCJQoQMhZIiC7I4AAAggggAACCCCAAAIIIIAAAggggIC/AoSc/vrTOwIIIIAAAggggAACCCCAAAII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ECBAgAABAgQIEMgoIOTMiK0VAQIECBAgQIAAAQIECBAgQIAAAQLpBYSc6U1VJECAAAECBAgQIECAAAECBAgQIEAgo4CQMyO2VgQIECBAgAABAgQIECBAgAABAgQIpBcQcqY3VZEAAQIECBAgQIAAAQIECBAgQIAAgYwCQs6M2FoRIECAAAECBAgQIECAAAECBAgQIJBeQMiZ3lRFAgQIECBAgAABAgQIECBAgAABAgQyCgg5M2JrRYAAAQIECBAgQIAAAQIECBAgQIBAegEhZ3pTFQkQIECAAAECBAgQIECAAAECBAgQyCgg5MyIrRUBAgQIECBAgAABAgQIECBAgAABAukFhJzpTVUkQIAAAQIECBAgQIAAAQIECBAgQCCjgJAzI7ZWBAgQIECAAAECBAgQIECAAAECBAikFxBypjdVkQABAgQIECBAgAABAgQIECBAgACBjAJCzozYWhEgQIAAAQIECBAgQIAAAQIECBAgkF5AyJneVEUCBAgQIECAAAECBAgQIECAAAECBDIKCDkzYmtFgAABAgQIECBAgAABAgQIECBAgEB6gf8DyvQ61J3yY48AAAAASUVORK5CYII=",
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = px.line(data_frame=bio.get_history(), x=\"SYSTEM TIME\", y=[\"A\", \"B\", \"C\", \"D\", \"E\"], \n",
" title=\"2 COUPLED reactions: A + B <-> C and C + D <-> E . Changes in concentrations\",\n",
" color_discrete_sequence = ['navy', 'cyan', 'red', 'orange', 'green'],\n",
" labels={\"value\":\"concentration\", \"variable\":\"Chemical\"})\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"id": "cde2dbcb-a43c-41f1-a8b3-b801290a8d57",
"metadata": {},
"source": [
"A and B get consumed. \n",
"C gets produced by the 1st reaction more quickly than consumed by the 2nd one.\n",
"D gets consumed, while E gets produced."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c27da7de-2903-4744-9317-e5ef1a9cc492",
"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.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}