{
"cells": [
{
"cell_type": "markdown",
"id": "3bbe8002-bdf3-490c-bde0-80dd3713a3d0",
"metadata": {},
"source": [
"## A complex (composite/multistep) reaction `A <-> C` derived from 2 coupled elementary reactions: \n",
"## `A <-> B` and `B <-> C` \n",
"We are given the time evolution of the complex reaction, \n",
"and want to determine whether it can be modeled as an elementary reaction. \n",
"\n",
"In PART 1, a time evolution of [A], [B] and [C] is obtained by simulation \n",
"In PART 2, the time functions generated in Part 1 are taken as a _starting point,_ to explore how to model the composite reaction `A <-> C` \n",
"\n",
"**Background**: please see experiments `cascade_1` and `mystery_reaction_1`"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "313e55f6-1051-45a4-ac4a-64891c199673",
"metadata": {},
"outputs": [],
"source": [
"LAST_REVISED = \"July 26, 2024\"\n",
"LIFE123_VERSION = \"1.0.0.beta.38\" # Version this experiment is based on"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fb596420-0b1d-4667-8d37-187290ab622d",
"metadata": {},
"outputs": [],
"source": [
"#import set_path # Using MyBinder? Uncomment this before running the next cell!\n",
" # Importing this module will add the project's home directory to sys.path"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3924c013",
"metadata": {
"tags": []
},
"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 life123 import check_version, UniformCompartment, PlotlyHelper"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "323423d1-ad47-4fc4-ac23-36ab55488ba6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OK\n"
]
}
],
"source": [
"check_version(LIFE123_VERSION)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fe5d6bfa-7e62-491a-a57f-be5105081a9d",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "75411c8b-f0c5-411d-9e12-1eaa423449f9",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "9329208b-070f-4902-8f37-0f11ddf75ed6",
"metadata": {},
"source": [
"# PART 1 - We'll generate the time evolution of [A] and [C] by simulating coupled elementary reactions of KNOWN rate constants...\n",
"## but pretend you don't see this section! (because we later assume that those time evolutions are just GIVEN to us)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "72b4245c-de4e-480d-a501-3495b7ed8bc4",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of reactions: 2 (at temp. 25 C)\n",
"0: A <-> B (kF = 8 / kR = 2 / delta_G = -3,436.6 / K = 4) | 1st order in all reactants & products\n",
"1: B <-> C (kF = 12 / kR = 1 / delta_G = -6,160 / K = 12) | 1st order in all reactants & products\n",
"Set of chemicals involved in the above reactions: {'A', 'B', 'C'}\n"
]
}
],
"source": [
"# Instantiate the simulator and specify the chemicals\n",
"# Here we use the \"mid\" preset for the variable steps, a compromise between speed and accuracy\n",
"dynamics = UniformCompartment(preset=\"mid\")\n",
"\n",
"# Reaction A <-> B (slower, and with a smaller K)\n",
"dynamics.add_reaction(reactants=\"A\", products=\"B\",\n",
" forward_rate=8., reverse_rate=2.) \n",
"\n",
"# Reaction B <-> C (faster, and with a larger K)\n",
"dynamics.add_reaction(reactants=\"B\", products=\"C\",\n",
" forward_rate=12., reverse_rate=1.) \n",
" \n",
"dynamics.describe_reactions()"
]
},
{
"cell_type": "markdown",
"id": "98a9fbe5-2090-4d38-9c5f-94fbf7c3eae2",
"metadata": {},
"source": [
"### Run the simulation"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ae304704-c8d9-4cef-9e0b-2587bb3909ef",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SYSTEM STATE at Time t = 0:\n",
"3 species:\n",
" Species 0 (A). Conc: 50.0\n",
" Species 1 (B). Conc: 0.0\n",
" Species 2 (C). Conc: 0.0\n",
"Set of chemicals involved in reactions: {'A', 'B', 'C'}\n"
]
}
],
"source": [
"dynamics.set_conc({\"A\": 50.}, snapshot=True) # Set the initial concentrations of all the chemicals\n",
"dynamics.describe_state()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "2502cd11-0df9-4303-8895-98401a1df7b8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Some steps were backtracked and re-done, to prevent negative concentrations or excessively large concentration changes\n",
"85 total step(s) taken\n",
"Number of step re-do's because of elective soft aborts: 1\n",
"Norm usage: {'norm_A': 24, 'norm_B': 25, 'norm_C': 23, 'norm_D': 23}\n"
]
}
],
"source": [
"dynamics.single_compartment_react(initial_step=0.01, duration=0.8,\n",
" snapshots={\"initial_caption\": \"1st reaction step\",\n",
" \"final_caption\": \"last reaction step\"},\n",
" variable_steps=True)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "a2c0e793-5457-46a5-9150-388c9f562cf0",
"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}
SYSTEM TIME=%{x}
Concentration=%{y}
SYSTEM TIME=%{x}
Concentration=%{y}
\n", " | SYSTEM TIME | \n", "A | \n", "C | \n", "caption | \n", "
---|---|---|---|---|
0 | \n", "0.000000 | \n", "50.000000 | \n", "0.000000 | \n", "Initialized state | \n", "
1 | \n", "0.004000 | \n", "48.400000 | \n", "0.000000 | \n", "1st reaction step | \n", "
2 | \n", "0.008000 | \n", "46.864000 | \n", "0.076800 | \n", "\n", " |
3 | \n", "0.010000 | \n", "46.126413 | \n", "0.150067 | \n", "\n", " |
4 | \n", "0.011000 | \n", "45.764849 | \n", "0.194599 | \n", "\n", " |
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
81 | \n", "0.638365 | \n", "1.497612 | \n", "44.279102 | \n", "\n", " |
82 | \n", "0.670313 | \n", "1.384698 | \n", "44.483579 | \n", "\n", " |
83 | \n", "0.708651 | \n", "1.276811 | \n", "44.678990 | \n", "\n", " |
84 | \n", "0.754656 | \n", "1.179000 | \n", "44.856174 | \n", "\n", " |
85 | \n", "0.809862 | \n", "1.096061 | \n", "45.006431 | \n", "last reaction step | \n", "
86 rows × 4 columns
\n", "\n", " | search_value | \n", "SYSTEM TIME | \n", "A | \n", "B | \n", "C | \n", "caption | \n", "
---|---|---|---|---|---|---|
47 | \n", "0.1 | \n", "0.098644 | \n", "24.020441 | \n", "14.383519 | \n", "11.59604 | \n", "\n", " |