{ "cells": [ { "cell_type": "markdown", "id": "3bbe8002-bdf3-490c-bde0-80dd3713a3d0", "metadata": {}, "source": [ "## Association/Dissociation reaction `2A <-> C`\n", "#### with 2nd-order kinetics for `A`, \n", "#### and 1-st order kinetics for `C`\n", "\n", "Taken to equilibrium. (Adaptive variable time substeps are used)\n", "\n", "_See also the experiment \"1D/reactions/reaction_7\"_ \n", "\n", "\n", "LAST REVISED: Feb. 5, 2023" ] }, { "cell_type": "code", "execution_count": 1, "id": "13e55c1d-609f-4bf0-a004-6c45bcfcbc99", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Added 'D:\\Docs\\- MY CODE\\BioSimulations\\life123-Win7' to sys.path\n" ] } ], "source": [ "# Extend the sys.path variable, to contain the project's root directory\n", "import set_path\n", "set_path.add_ancestor_dir_to_syspath(2) # The number of levels to go up \n", " # to reach the project's home, from the folder containing this notebook" ] }, { "cell_type": "code", "execution_count": 2, "id": "bdad128a-9214-46f5-aeb9-a7b77c81aa3e", "metadata": { "tags": [] }, "outputs": [], "source": [ "from experiments.get_notebook_info import get_notebook_basename\n", "\n", "from src.modules.reactions.reaction_data import ReactionData as chem\n", "from src.modules.reactions.reaction_dynamics import ReactionDynamics\n", "\n", "import numpy as np\n", "import plotly.express as px\n", "from src.modules.visualization.graphic_log import GraphicLog" ] }, { "cell_type": "code", "execution_count": 3, "id": "83c3cc5f-de21-4f66-9988-2806fbf0666d", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-> Output will be LOGGED into the file 'react_4.log.htm'\n" ] } ], "source": [ "# Initialize the HTML logging (for the graphics)\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": "markdown", "id": "9329208b-070f-4902-8f37-0f11ddf75ed6", "metadata": {}, "source": [ "# Initialize the System\n", "Specify the chemicals and the reactions" ] }, { "cell_type": "code", "execution_count": 4, "id": "72b4245c-de4e-480d-a501-3495b7ed8bc4", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of reactions: 1\n" ] } ], "source": [ "# Specify the chemicals\n", "chem_data = chem(names=[\"A\", \"C\"])\n", "\n", "# Reaction 2A <-> C , with 2nd-order kinetics for A, and 1st-order kinetics for C\n", "chem_data.add_reaction(reactants=[(2, \"A\", 2)], products=[\"C\"],\n", " forward_rate=3., reverse_rate=2.) \n", "# Note: the first 2 in (2, \"A\", 2) is the stoichiometry coefficient, while the other one is the order\n", "\n", "print(\"Number of reactions: \", chem_data.number_of_reactions())" ] }, { "cell_type": "code", "execution_count": 5, "id": "00ea560d-9a49-4041-b119-6de11bfcc7af", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of reactions: 1 (at temp. 25 C)\n", "0: 2 A <-> C (kF = 3 / kR = 2 / Delta_G = -1,005.13 / K = 1.5) | 2-th order in reactant A\n" ] } ], "source": [ "chem_data.describe_reactions()" ] }, { "cell_type": "code", "execution_count": 6, "id": "cb582868-431c-4022-aa0e-a2f554f80d6c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[GRAPHIC ELEMENT SENT TO LOG FILE `react_4.log.htm`]\n" ] } ], "source": [ "# Send a plot of the network of reactions 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": "98a9fbe5-2090-4d38-9c5f-94fbf7c3eae2", "metadata": {}, "source": [ "# Start the simulation" ] }, { "cell_type": "code", "execution_count": 7, "id": "c2f4a554-807b-49f9-8ca2-8d929fe6eeef", "metadata": {}, "outputs": [], "source": [ "dynamics = ReactionDynamics(reaction_data=chem_data)" ] }, { "cell_type": "code", "execution_count": 8, "id": "ae304704-c8d9-4cef-9e0b-2587bb3909ef", "metadata": {}, "outputs": [], "source": [ "# Initial concentrations of all the chemicals, in index order\n", "dynamics.set_conc([200., 40.], snapshot=True)" ] }, { "cell_type": "code", "execution_count": 9, "id": "a605dacf-2c67-403e-9aa9-5be25fc9f481", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SYSTEM STATE at Time t = 0:\n", "2 species:\n", " Species 0 (A). Conc: 200.0\n", " Species 1 (C). Conc: 40.0\n" ] } ], "source": [ "dynamics.describe_state()" ] }, { "cell_type": "code", "execution_count": 10, "id": "0ff2c242-a15b-456d-ad56-0ba1041c0b4c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEACcaption
00.0200.040.0Initial state
\n", "
" ], "text/plain": [ " SYSTEM TIME A C caption\n", "0 0.0 200.0 40.0 Initial state" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.get_history()" ] }, { "cell_type": "markdown", "id": "fc516ca2-e62d-4784-b826-5372ff7f4c75", "metadata": { "tags": [] }, "source": [ "## Run the reaction" ] }, { "cell_type": "code", "execution_count": 11, "id": "2502cd11-0df9-4303-8895-98401a1df7b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "single_compartment_react(): setting abs_fast_threshold to 300.0\n", "20 total step(s) taken\n" ] } ], "source": [ "dynamics.set_diagnostics() # To save diagnostic information about the call to single_compartment_react()\n", "#dynamics.verbose_list = [1] # Uncomment for detailed run information (meant for debugging the adaptive variable time step)\n", "\n", "# The changes of concentrations vary very rapidly early on; so, we'll be using dynamic_substeps=4 , i.e. increase time resolution\n", "# by x4 initially, as long as the reaction remains \"fast\" (based on a threshold of 5% change)\n", "dynamics.single_compartment_react(time_step=0.002, reaction_duration=0.04,\n", " snapshots={\"initial_caption\": \"1st reaction step\",\n", " \"final_caption\": \"last reaction step\"},\n", " dynamic_substeps=4, rel_fast_threshold=60)" ] }, { "cell_type": "markdown", "id": "99a9a4b2-a588-4ba5-85c9-0a5a5d1dbaad", "metadata": {}, "source": [ "### Note: the argument _dynamic_step=4_ splits the time steps in 4 whenever the reaction is \"fast\" (as determined using the given value of _fast_threshold_ )" ] }, { "cell_type": "code", "execution_count": 12, "id": "80fbaee3-bd6f-4197-9270-23374d46a4a7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEACcaption
00.0000200.00000040.000000Initial state
10.000580.08000099.960000Interm. step, due to the fast rxns: [0]
20.001061.041501109.479250Interm. step, due to the fast rxns: [0]
30.001550.082265114.958868Interm. step, due to the fast rxns: [0]
40.002042.787483118.6062591st reaction step
50.002537.532389121.233805Interm. step, due to the fast rxns: [0]
60.003033.548816123.225592Interm. step, due to the fast rxns: [0]
70.003530.418698124.790651Interm. step, due to the fast rxns: [0]
80.004027.892388126.053806
90.004525.810540127.094730Interm. step, due to the fast rxns: [0]
100.005024.066177127.966911Interm. step, due to the fast rxns: [0]
110.005522.584568128.707716Interm. step, due to the fast rxns: [0]
120.006021.311796129.344102
130.006520.207906129.896047Interm. step, due to the fast rxns: [0]
140.007019.242620130.378690Interm. step, due to the fast rxns: [0]
150.007518.392542130.803729Interm. step, due to the fast rxns: [0]
160.008017.639292131.180354
170.008516.968219131.515890Interm. step, due to the fast rxns: [0]
180.009016.367490131.816255Interm. step, due to the fast rxns: [0]
190.009515.827438132.086281Interm. step, due to the fast rxns: [0]
200.010015.340087132.329956
210.010514.898792132.550604Interm. step, due to the fast rxns: [0]
220.011014.497971132.751014Interm. step, due to the fast rxns: [0]
230.011514.132900132.933550Interm. step, due to the fast rxns: [0]
240.012013.799550133.100225
250.012513.494468133.252766Interm. step, due to the fast rxns: [0]
260.013013.214672133.392664Interm. step, due to the fast rxns: [0]
270.013512.957574133.521213Interm. step, due to the fast rxns: [0]
280.014012.720921133.639540
290.014512.502734133.748633Interm. step, due to the fast rxns: [0]
300.015012.301276133.849362Interm. step, due to the fast rxns: [0]
310.015512.115011133.942495Interm. step, due to the fast rxns: [0]
320.016011.942575134.028712
330.016511.782758134.108621Interm. step, due to the fast rxns: [0]
340.017011.634475134.182763Interm. step, due to the fast rxns: [0]
350.017511.496757134.251621Interm. step, due to the fast rxns: [0]
360.018011.368734134.315633
370.020010.892282134.553859
380.022010.545011134.727494
390.024010.288464134.855768
400.026010.097080134.951460
410.02809.953280135.023360
420.03009.844653135.077673
430.03209.762268135.118866
440.03409.699597135.150202
450.03609.651812135.174094
460.03809.615315135.192342
470.04009.587402135.206299last reaction step
\n", "
" ], "text/plain": [ " SYSTEM TIME A C \\\n", "0 0.0000 200.000000 40.000000 \n", "1 0.0005 80.080000 99.960000 \n", "2 0.0010 61.041501 109.479250 \n", "3 0.0015 50.082265 114.958868 \n", "4 0.0020 42.787483 118.606259 \n", "5 0.0025 37.532389 121.233805 \n", "6 0.0030 33.548816 123.225592 \n", "7 0.0035 30.418698 124.790651 \n", "8 0.0040 27.892388 126.053806 \n", "9 0.0045 25.810540 127.094730 \n", "10 0.0050 24.066177 127.966911 \n", "11 0.0055 22.584568 128.707716 \n", "12 0.0060 21.311796 129.344102 \n", "13 0.0065 20.207906 129.896047 \n", "14 0.0070 19.242620 130.378690 \n", "15 0.0075 18.392542 130.803729 \n", "16 0.0080 17.639292 131.180354 \n", "17 0.0085 16.968219 131.515890 \n", "18 0.0090 16.367490 131.816255 \n", "19 0.0095 15.827438 132.086281 \n", "20 0.0100 15.340087 132.329956 \n", "21 0.0105 14.898792 132.550604 \n", "22 0.0110 14.497971 132.751014 \n", "23 0.0115 14.132900 132.933550 \n", "24 0.0120 13.799550 133.100225 \n", "25 0.0125 13.494468 133.252766 \n", "26 0.0130 13.214672 133.392664 \n", "27 0.0135 12.957574 133.521213 \n", "28 0.0140 12.720921 133.639540 \n", "29 0.0145 12.502734 133.748633 \n", "30 0.0150 12.301276 133.849362 \n", "31 0.0155 12.115011 133.942495 \n", "32 0.0160 11.942575 134.028712 \n", "33 0.0165 11.782758 134.108621 \n", "34 0.0170 11.634475 134.182763 \n", "35 0.0175 11.496757 134.251621 \n", "36 0.0180 11.368734 134.315633 \n", "37 0.0200 10.892282 134.553859 \n", "38 0.0220 10.545011 134.727494 \n", "39 0.0240 10.288464 134.855768 \n", "40 0.0260 10.097080 134.951460 \n", "41 0.0280 9.953280 135.023360 \n", "42 0.0300 9.844653 135.077673 \n", "43 0.0320 9.762268 135.118866 \n", "44 0.0340 9.699597 135.150202 \n", "45 0.0360 9.651812 135.174094 \n", "46 0.0380 9.615315 135.192342 \n", "47 0.0400 9.587402 135.206299 \n", "\n", " caption \n", "0 Initial state \n", "1 Interm. step, due to the fast rxns: [0] \n", "2 Interm. step, due to the fast rxns: [0] \n", "3 Interm. step, due to the fast rxns: [0] \n", "4 1st reaction step \n", "5 Interm. step, due to the fast rxns: [0] \n", "6 Interm. step, due to the fast rxns: [0] \n", "7 Interm. step, due to the fast rxns: [0] \n", "8 \n", "9 Interm. step, due to the fast rxns: [0] \n", "10 Interm. step, due to the fast rxns: [0] \n", "11 Interm. step, due to the fast rxns: [0] \n", "12 \n", "13 Interm. step, due to the fast rxns: [0] \n", "14 Interm. step, due to the fast rxns: [0] \n", "15 Interm. step, due to the fast rxns: [0] \n", "16 \n", "17 Interm. step, due to the fast rxns: [0] \n", "18 Interm. step, due to the fast rxns: [0] \n", "19 Interm. step, due to the fast rxns: [0] \n", "20 \n", "21 Interm. step, due to the fast rxns: [0] \n", "22 Interm. step, due to the fast rxns: [0] \n", "23 Interm. step, due to the fast rxns: [0] \n", "24 \n", "25 Interm. step, due to the fast rxns: [0] \n", "26 Interm. step, due to the fast rxns: [0] \n", "27 Interm. step, due to the fast rxns: [0] \n", "28 \n", "29 Interm. step, due to the fast rxns: [0] \n", "30 Interm. step, due to the fast rxns: [0] \n", "31 Interm. step, due to the fast rxns: [0] \n", "32 \n", "33 Interm. step, due to the fast rxns: [0] \n", "34 Interm. step, due to the fast rxns: [0] \n", "35 Interm. step, due to the fast rxns: [0] \n", "36 \n", "37 \n", "38 \n", "39 \n", "40 \n", "41 \n", "42 \n", "43 \n", "44 \n", "45 \n", "46 \n", "47 last reaction step " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = dynamics.get_history()\n", "df" ] }, { "cell_type": "code", "execution_count": 13, "id": "071a9544-639a-40f7-92bc-3a20050c9c00", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "From time 0 to 0.018, in 36 substeps of 0.0005 (each 1/4 of full step)\n", "From time 0.018 to 0.04, in 11 FULL steps of 0.002\n" ] } ], "source": [ "dynamics.explain_time_advance()" ] }, { "cell_type": "markdown", "id": "9fb5f6b8-dde3-415d-9e90-b8d102bfd748", "metadata": {}, "source": [ "### Notice how the reaction proceeds in smaller steps in the early times, when the concentrations are changing much more rapidly" ] }, { "cell_type": "code", "execution_count": 14, "id": "12118fdd-5e81-42e5-b271-818f8d686b79", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([200.0, 40.0], dtype=object),\n", " array([80.08, 99.96000000000001], dtype=object))" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's look at the first two arrays of concentrations, from the run's history\n", "arr0 = dynamics.get_historical_concentrations(0)\n", "arr1 = dynamics.get_historical_concentrations(1)\n", "arr0, arr1" ] }, { "cell_type": "code", "execution_count": 15, "id": "a2450ae8-e342-4adf-9330-ce86a1dfcbeb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's verify that the stoichiometry is being respected\n", "dynamics.stoichiometry_checker(rxn_index=0, \n", " conc_arr_before = arr0, \n", " conc_arr_after = arr1)" ] }, { "cell_type": "markdown", "id": "bf6dc3ed-5999-4379-8ae1-05f73e2a670d", "metadata": {}, "source": [ "#### Indeed, it can be easy checked that the drop in [A] is -119.920000 , twice the 59.96 increase in [C], as dictated by the stoichiometry" ] }, { "cell_type": "code", "execution_count": 16, "id": "4ccfa79c-0bd4-40f0-be82-2da19523cd40", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TIME 0.0\n", "Delta A -119.92\n", "Delta C 59.96\n", "reaction 0\n", "substep 0\n", "time_subdivision 4\n", "delta_time 0.0005\n", "caption \n", "Name: 0, dtype: object" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dynamics.diagnostic_data[0].get().loc[0] # Conveniently seen in the diagnostic data" ] }, { "cell_type": "markdown", "id": "b1366038-2dea-4d69-a655-ae464ca22922", "metadata": {}, "source": [ "## Note: \"A\" (now largely depleted) is the limiting reagent" ] }, { "cell_type": "markdown", "id": "c02a8f55-a671-4771-86c9-fc4d1b126bf8", "metadata": {}, "source": [ "### Check the final equilibrium" ] }, { "cell_type": "code", "execution_count": 17, "id": "765f6f39-4b2e-4a86-b6a9-ace9d1941663", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 A <-> C\n", "Final concentrations: [C] = 135.2 ; [A] = 9.587\n", "1. Ratio of reactant/product concentrations, adjusted for reaction orders: 1.47094\n", " Formula used: [C] / [A]^2 \n", "2. Ratio of forward/reverse reaction rates: 1.5\n", "Discrepancy between the two values: 1.937 %\n", "Reaction IS in equilibrium (within 2% tolerance)\n", "\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Verify that the reaction has reached equilibrium\n", "dynamics.is_in_equilibrium(tolerance=2)" ] }, { "cell_type": "markdown", "id": "6ac3dd4e-9dd0-4d3a-aa83-76102bd79524", "metadata": { "tags": [] }, "source": [ "## Plots of changes of concentration with time" ] }, { "cell_type": "code", "execution_count": 21, "id": "21e4814e-5603-4d38-acc8-549b1d59ec93", "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": "red", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "A", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0005, 0.001, 0.0015, 0.002, 0.0025, 0.003, 0.0035, 0.004, 0.0045000000000000005, 0.005, 0.0055, 0.006, 0.006500000000000001, 0.007, 0.0075, 0.008, 0.0085, 0.009000000000000001, 0.0095, 0.01, 0.0105, 0.011, 0.0115, 0.012, 0.0125, 0.013000000000000001, 0.0135, 0.014, 0.0145, 0.015, 0.0155, 0.016, 0.0165, 0.017, 0.0175, 0.018000000000000002, 0.020000000000000004, 0.022000000000000006, 0.024000000000000007, 0.02600000000000001, 0.02800000000000001, 0.030000000000000013, 0.032000000000000015, 0.034000000000000016, 0.03600000000000002, 0.03800000000000002, 0.04000000000000002 ], "xaxis": "x", "y": [ 200, 80.08, 61.041500799999994, 50.082264839450794, 42.78748282026467, 37.53238927916107, 33.54881615487446, 30.418698142538886, 27.892387854335652, 25.81053956583124, 24.06617716822739, 22.584568340581637, 21.311795590849847, 20.207905901340496, 19.24261961268686, 18.39254176439849, 17.639292444968664, 16.96821923864631, 16.367489627015363, 15.827437987316982, 15.34008716960257, 14.898792259319952, 14.497971434701515, 14.13289993610255, 13.799550454354787, 13.494468125673581, 13.214671647563447, 12.957574335657132, 12.720920563329233, 12.502734182830306, 12.301276362507936, 12.115010885705038, 11.94257540853708, 11.782757510962758, 11.634474629765348, 11.496757155403623, 11.368734122977246, 10.89228179977797, 10.545011038909566, 10.288463901025233, 10.09708017210874, 9.953279515396407, 9.844653119995504, 9.762268166879077, 9.699596537066833, 9.65181207513602, 9.615315110830577, 9.587402434220454 ], "yaxis": "y" }, { "hovertemplate": "Chemical=C
SYSTEM TIME=%{x}
concentration=%{y}", "legendgroup": "C", "line": { "color": "green", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "C", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0005, 0.001, 0.0015, 0.002, 0.0025, 0.003, 0.0035, 0.004, 0.0045000000000000005, 0.005, 0.0055, 0.006, 0.006500000000000001, 0.007, 0.0075, 0.008, 0.0085, 0.009000000000000001, 0.0095, 0.01, 0.0105, 0.011, 0.0115, 0.012, 0.0125, 0.013000000000000001, 0.0135, 0.014, 0.0145, 0.015, 0.0155, 0.016, 0.0165, 0.017, 0.0175, 0.018000000000000002, 0.020000000000000004, 0.022000000000000006, 0.024000000000000007, 0.02600000000000001, 0.02800000000000001, 0.030000000000000013, 0.032000000000000015, 0.034000000000000016, 0.03600000000000002, 0.03800000000000002, 0.04000000000000002 ], "xaxis": "x", "y": [ 40, 99.96000000000001, 109.4792496, 114.9588675802746, 118.60625858986766, 121.23380536041947, 123.22559192256277, 124.79065092873056, 126.05380607283217, 127.09473021708438, 127.9669114158863, 128.70771582970917, 129.34410220457508, 129.89604704932975, 130.37869019365658, 130.80372911780077, 131.18035377751568, 131.51589038067686, 131.81625518649233, 132.08628100634152, 132.32995641519872, 132.55060387034004, 132.75101428264927, 132.93355003194876, 133.10022477282263, 133.25276593716322, 133.3926641762183, 133.52121283217144, 133.6395397183354, 133.74863290858488, 133.84936181874608, 133.9424945571475, 134.02871229573148, 134.10862124451864, 134.18276268511735, 134.25162142229823, 134.31563293851138, 134.55385910011103, 134.72749448054523, 134.8557680494874, 134.95145991394565, 135.02336024230183, 135.0776734400023, 135.1188659165605, 135.15020173146664, 135.17409396243204, 135.19234244458477, 135.20629878288983 ], "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 <-> C (2nd order in A). Changes in concentrations with time" }, "xaxis": { "anchor": "y", "autorange": true, "domain": [ 0, 1 ], "range": [ 0, 0.04000000000000002 ], "title": { "text": "SYSTEM TIME" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "domain": [ 0, 1 ], "range": [ -0.9910752083228527, 210.5784776425433 ], "title": { "text": "concentration" }, "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dynamics.plot_curves(colors=['red', 'green'],\n", " title=\"Reaction 2A <-> C (2nd order in A). Changes in concentrations with time\")" ] }, { "cell_type": "markdown", "id": "5c3f8b4f-3a75-4a21-8579-13550bcebb3c", "metadata": {}, "source": [ "#### For diagnostic insight, uncomment the following lines:" ] }, { "cell_type": "code", "execution_count": 19, "id": "10af1095-a320-4fa4-a45e-e1f3f87203c9", "metadata": {}, "outputs": [], "source": [ "#dynamics.examine_run(df=df, time_step=0.002, rel_fast_threshold=60)\n", "# the time step MUST match the value used in call to single_compartment_react()\n", "\n", "#dynamics.diagnose_variable_time_steps()\n", "\n", "#dynamics.get_diagnostic_data(rxn_index=0)\n", "\n", "#dynamics.diagnostic_data_baselines.get()" ] }, { "cell_type": "code", "execution_count": null, "id": "3f0ceb35-42b5-4c06-8e5c-bd40088ab60b", "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 }