{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "***Note: this is the Complexes.ipynb notebook. The\n", "PDF version \"Bond Graph Representation of Complexes: Bringing Graph Theory\n", "to Bond Graphs\"\n", "is available [here](Complexes.pdf).***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction\n", "\n", "Chemical Reaction Network theory uses the formal concept of *complexes*. \n", "Complexes are the combination of chemical\n", "species forming the substrate and products of the network reactions. In particular, the stoichiometric matrix $N$ can be decomposed as:\n", "\\begin{equation}\n", " \\label{eq:ZD}\n", " N = ZD\n", "\\end{equation}\n", "where $Z$ relates complexes to species and $D$ is the *incidence matrix* of the directed graph formed by taking the\n", "complexes to be vertices and the reactions to be edges.\n", "This digraph can then be analysed using standard graph theory. \n", "\n", "This notion can be given a bond graph interpretation\n", "(Gawthrop and Crampin, 2018). \n", "This notebook illustrates complexes using examples from this paper; please see the paper for further explanation.\n", "\n", "As noted by (Gawthrop and Crampin, 2018) the digraphs for systems with and without chemostats are very different and so both are shown in the following examples.\n", "The digraphs associated with chemostats are related to bond graph pathway analysis (Gawthrop and Crampin, 2017); for each of the three examples the corresponding pathways are given." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Import some python code\n", "The bond graph analysis uses a number of Python modules:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "## Some useful imports\n", "import BondGraphTools as bgt\n", "import numpy as np\n", "import sympy as sp\n", "import matplotlib.pyplot as plt\n", "import IPython.display as disp\n", "\n", "## Stoichiometric analysis\n", "import stoich as st\n", "\n", "## SVG bg representation conversion\n", "import svgBondGraph as sbg\n", "\n", "## Set quiet=False for verbose output\n", "quiet = True\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example 1: enzyme-catalysed reaction \n", "The bond graph representation of the (reversible) enzyme-catalysed reaction is\n", "(Gawthrop and Crampin, 2018):" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "Re:r1\n", "\n", "\n", "Re:r2\n", "\n", "Ce:A\n", "\n", "1\n", "\n", "0\n", "\n", "Ce:E\n", "\n", "0\n", "\n", "0\n", "\n", "Ce:C\n", "\n", "Ce:B\n", "\n", "0\n", "\n", "1\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.SVG('RE_abg.svg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This graphical representation may be converted to [bond-graph tools](https://pypi.org/project/BondGraphTools/) format using " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "sbg.model('RE_abg.svg')\n", "import RE_abg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reactions\n", "The reactions corresponding to this system are:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "\\ch{A + E &<>[ r1 ] C }\\\\\n", "\\ch{C &<>[ r2 ] B + E }\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = st.stoich(RE_abg.model(),quiet=quiet)\n", "disp.Latex(st.sprintrl(s,chemformula=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stoichiometric matrix and its decomposition" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "X&= \\begin{pmatrix}\n", " X_{A}\\\\\n", " X_{B}\\\\\n", " X_{C}\\\\\n", " X_{E}\\\\\n", "\\end{pmatrix}\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'species'))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "V&= \\begin{pmatrix}\n", " V_{r1}\\\\\n", " V_{r2}\\\\\n", "\\end{pmatrix}\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'reaction'))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "N &=\n", "\\left(\\begin{matrix}-1 & 0\\\\0 & 1\\\\1 & -1\\\\-1 & 1\\end{matrix}\\right)\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'N'))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "Z &=\n", "\\left(\\begin{matrix}1 & 0 & 0\\\\0 & 0 & 1\\\\0 & 1 & 0\\\\1 & 0 & 1\\end{matrix}\\right)\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'Z'))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "D &=\n", "\\left(\\begin{matrix}-1 & 0\\\\1 & -1\\\\0 & 1\\end{matrix}\\right)\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'D'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## System digraph" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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ANAp3377rebOnatNmzbpv/7rv/Tzn/+8w8c2NzdrzZo1am5ujqjPHG4N4AkTJighISFs16UTBgB0iMfj0cKFC3XqqacqPz9fxcXFnQpgSUpISNDEiROVlJQUMQ9rGYahpKQkTZw4MawBLNEJAwA6YM2aNZo5c6b69eunxx9/XEOHDu3W+bxer0pKSix/WKv1Iaz8/HxLPnSCEAYAtKumpkbz58/XBx98oIcffliXXHJJUO/p1tTUaOPGjfJ4PGENY8MwFBcXp9GjR4flKeh267DsygCAiOX3+/Xcc88pPz9fvXr10rZt23TppZcG/aGqjIwMnXPOOcrOzpbdbg/qudtjt9uVnZ2tc845x9IAluiEAQBH2LJli2bOnCmfz6cnn3xSo0ePDst1GxoaVFpaqurqakkKamfcev85MzNTeXl5IR1F2RmEMABAkrR//37dc889euWVV/SnP/1J119/vSUPT7ndblVUVKi8vFxer1emaXYpkA3DkM1mk8PhUG5urnJyckL2aUhdxcQsAOjhTNPUG2+8oXnz5um8887T1q1b1bdvX8vqcTqdGjJkiHJzc1VXV6e6ujrV1taqoaFBbrc7sGx9eA/Zukzu8/nkdDqVkpKi9PR0paWlKS0tLXL3JtMJA0DPVVpaqjlz5qiiokJPPvmkJk6caHVJP8rj8cjlcsntdsvv98vv98swDBmGIafTqeTkZMXFxVldZocRwgDQAzU3N+vBBx/UY489pvnz52vu3LlRFV6xguVoAOhhli9frtmzZys/P18bNmzQT37yE6tL6rEIYQDoIaqqqnTrrbfqiy++0OLFi3XhhRdaXVKPxz5hAIhxXq9XixYt0siRIzVkyBCVlJQQwBGCThgAYtjnn3+umTNnKi0tTatXr9awYcOsLgmHIYQBIAbt27dPd9xxh9555x399a9/1RVXXBGx23R6MpajASCGmKapF198UcOHD1dcXJy2bdum//iP/yCAIxSdMADEiJKSEs2cOVMHDhzQu+++qzPOOMPqknAcdMIAEOWampo0f/58nX322br88sv1xRdfEMBRghAGgChlmqbeeustDR8+XJWVlSouLtasWbPC9mlE6D6WowEgCu3atUtz5sxRWVmZ/va3v+mcc86xuiR0AZ0wAEQRt9utv/zlLzrzzDM1fvx4bd68mQCOYnTCABAlPvnkE82ePVtDhgzRunXrNHjwYKtLQjcRwgAQ4b7//nvdfvvtWr16tRYtWqSLLrqILUcxguVoAIhQPp9Pjz/+uEaMGKHs7GyVlJToV7/6FQEcQ+iEASACffnll5oxY4ZOPPFErVixQgUFBVaXhBCgEwaACFJfX6/Zs2frwgsv1Jw5c7Rq1SoCOIYRwgAQAUzT1CuvvKJhw4bJ6/Vq27Ztuuaaa1h6jnEsRwOAxbZv365Zs2aprq5O//M//6Nx48ZZXRLChE4YACxy4MAB3XnnnTrrrLN00UUXad26dQRwD0MnDAAWePfddzVnzhyNHTtWW7ZsUVZWltUlwQKEMACE0Z49e3TLLbdo69atWrJkiSZPnmx1SbAQy9EAEAYej0cPPvigTjvtNI0ePVrFxcUEMOiEASDUPv30U82cOVM5OTn6/PPPlZeXZ3VJiBCEMACEyA8//KDf/e53+uijj/Too49q6tSpbDlCGyxHA0CQ+f1+LVmyRPn5+UpPT9dXX32liy++mADGUeiEASCINm7cqJkzZ8owDC1fvlyjRo2yuiREMDphAAgCl8ulW265Reeff76uv/56/etf/yKAcVyEMAB0g2maev311zVs2DA1NjZq27Ztuv7662UY/OcVx8dyNAB00ddff63Zs2fru+++0+uvv66zzjrL6pIQZfhVDQA66eDBg7rnnntUWFio888/Xxs2bCCA0SV0wgDQCcuWLdPNN9+sUaNGaePGjcrJybG6JEQxQhgAOqCyslJz587Vhg0btHjxYl1wwQVWl4QYwHI0APwIr9erhx9+WKNGjdKwYcO0detWAhhBQycMAO347LPPNHPmTPXp00dr1qzRySefbHVJiDGEMAAcoba2VvPnz9d7772nhQsX6vLLL2faFUKC5WgA+P/8fr+ef/55DR8+XCeeeKK++uor/eY3vyGAETJ0wgAgacuWLZo1a5bcbrfee+89nX766VaXhB6AThhAj7Z//37ddtttOvfcc3XllVeqqKiIAEbYEMIAeiTTNPXGG29o+PDh+uGHH7R161bNmDFDdrvd6tLQg7AcDaDHKS8v180336zdu3frlVde0aRJk6wuCT0UnTCAHqOlpUX33XefxowZo0mTJmnTpk0EMCxFJwygR/joo480a9YsDRs2TOvXr9fAgQOtLgkghAHEtu+++0633nqrioqK9Nhjj2nKlClWlwQEsBwNICb5fD4tXrxYI0eO1KBBg1RSUkIAI+LQCQOIOWvXrtWMGTOUnJysVatWafjw4VaXBBwTnTCAmFFXV6cZM2booosu0rx587RixQoCGBGNEAZgmc2bN2vSpElqbm7u1nlM09RLL72kYcOGyWazadu2bbrqqqsYN4mIZzNN07S6CAA9j8/n08iRI7Vz5079/ve/15///OcunaekpESzZs1SY2OjnnzySY0ZMybIlQKhQycMwBJPPPGEdu/eLa/Xq0ceeURff/11p45vamrSH/7wB5199tm65JJLtHbtWgIYUYcQBhB2VVVVuuOOO3TgwAFJh4ZoXHvtterowtw///lPDR8+XHv27NGWLVt08803M24SUYmnowGE3Y033qiWlpbA136/X5s2bdLSpUt16aWXtnvc7t279dvf/lY7duzQc889p/POOy8c5QIhQycMIKz+93//VytWrJDX623z/aamJs2YMUMul+uoY9xutx544AGdccYZGjNmjLZs2UIAIybwYBYQ4zwej1wul9xut3w+n0zTlM1mk91ul9PpVHJysuLi4sJSS1NTk3Jzc7V3795jvp6QkKBrr71WTzzxROB7K1eu1KxZszR48GAtXrxYubm5YakVCAdCGIghpmlq3759qq+vV21trRoaGuR2uwP3Sw//5966fcfn88npdColJUXp6elKTU1V7969Q7K9Z+7cuXr66ad18ODBdn/mhBNO0Geffab+/fvr9ttv16pVq/Too4/q3//939lyhJhDCAMxwO12q6KiQuXl5fJ6vTJNU36/v9PnMQxDNptNDodDubm5ysnJkdPpDEqNW7Zs0bhx4340gFtlZWUFHta65557lJSUFJQagEhDCANRrL6+XmVlZaqurpakLgVvewzj0CMjmZmZysvLU0pKSpfP5ff7NWrUKG3durXD1/7jH/+oe++9t8vXBKIBIQxEIa/Xq5KSElVWVgY1eNtjt9uVlZWl/Px8ORyd31Tx+OOPa/78+WpqaurwMUlJSSovL1efPn06fT0gWhDCQJSpqanRhg0b5PV6wxLArQzDUFxcnEaPHq2MjIwOH/fdd99p6NChnQpgSXI6nfr1r3+tv//9750tFYgahDAQJcLd/bbHMAxlZ2d3uCueMmWKli1bJo/H0+lrnXDCCfrwww911llndaVUIOIRwkAUcLvdKioqUlNTk6UB3MowDCUmJqqwsPBHH9xatmyZpk6dGpiM1RWDBw/Wjh07wraNCggnhnUAEa65uVmrV69WY2NjRASwdOhBq8bGRq1evbrdT0A6cOCApk2b1q0AlqTq6motXLiwW+cAIhUhDEQwt9utNWvWqLm5ucNzlcPFNE01NzdrzZo1crvdR72+YMGCY06/6qwDBw7ovvvuU0VFRbfPBUQalqOBCOX1erVmzRo1NjZGXAAfzmazKSkpSRMmTAjcIy4uLtbYsWM7tCe4IxwOh84991wtW7YsKOcDIgWdMBChSkpK1NTUFNEBLB3qiJuamlRSUiLp0FL1lVde2e4ydWc4nU4lJSXphBNO0AcffKDi4uJunxOIJHyKEhCBampqLH8KujP8fr8qKyuVnZ2tF154QSUlJcf85cEwDCUkJMjhcMhms8nr9aqlpUU2m03JyclKT09X3759lZWVpZycHGVlZalv377q27evMjMzVVBQYMG7A0KH5Wggwni9Xn3yySfHvM8a6eLj4zV16lTt379fvXr1Uu/evdWnTx/1799fAwYM0IABA5SZmRkI1r59+6pPnz5KTExkLjR6JEIYiDCbN2+Oqi74cIZhqF+/fjr11FMDYy8BtI9/JUAEqa+vV1VVVVQGsHRoWbq6ulr79++3uhQgKhDCQAQpKyuTz+ezuoxu8fl8Ki0ttboMICoQwkCEcLvdgU9DinbV1dVReU8bCDdCGIgQe/bssbqEoGK4BnB8hDAQAUzT1K5du6L2XvCR/H6/ysvLI36PM2A1QhiIAPv27ZPX67W6jKDyer2qq6uzugwgohHCQASor6+Pua7RNE1CGDgOQhiIALW1tTGzFN3K7/ertrbW6jKAiMbYSiACNDQ0hPwa27Zt0z/+8Q9t375dzc3NSk9P1xlnnKHrrrsuZJ/VG473BUQzOmHAYh6PJ+TbeT799FPdcccdWrdunTIyMnTOOeeoX79+ev/999XS0hKy67rdbnk8npCdH4h2dMKAxVwul+x2e8gezGpubtZTTz0lv9+vs88+W/PmzQuMlPzuu+8UHx8fkutKkt1ul8vlUnp6esiuAUQzQhiwWKi74K+++iowRvKyyy5rM9O5f//+Ib22FPr3B0QzlqMBi/l8vpA+GX34fdm+ffuG7DrHYppmzD1wBgQTIQxYLNRbk1JSUgL/e+/evSG91rEQwkD7CGHAYqH+HN1hw4YpKSlJkvT666+3CcW9e/eGfEgIH2kItI97woDF7HZ7SIM4ISFBN910kx555BGtXLlS33zzjU466STV1tZq06ZNevnllwMhHWw2m40QBn4EIQxYzOl0hvwaZ599tjIyMvTGG29o+/btqqioUEZGhs4///yQPh0thef9AdGKEAYslpycHJbPEC4oKFBBQUHIr3M4n8+n5OTksF4TiCasEwEWi4uLi9lu0el0hmwaFxALCGEgAhz+BHMsidX3BQQLIQxEgPT09Jh7gMkwDCZlAccRW//qgSiVmpoa8q1K4Waz2ZSWlmZ1GUBEI4SBCNC7d285HLH1nKTD4SCEgeMghIEIYLPZlJubGzNL0oZhKDc3N+a6eyDYYuNfPBADcnJyrC4hqGLt/QChQAgDEcLpdCozM9PqMoIiMzMzZrddAcFECAMRZMiQIbLb7VaX0S12u115eXlWlwFEBUIYiCCpqanq169f1H7ykGEYysrKYn8w0EGEMBBBtmzZotmzZ+vgwYNWl9IlcXFxys/Pt7oMIGoQwkAEaGlp0YIFC3Tuuefquuuu07nnnht1T0obhqHRo0fH3FYrIJT41wJY7LPPPtP111+vk08+WZs3b1ZWVpYkKTs7W5WVlVGxNG0YhrKzs5WRkWF1KUBUIYQBizQ2NurOO+/UP/7xDz322GOaOnVqm321+fn5qq+vV2Njo0zTtLDSH2ez2ZSYmMgyNNAF0bXeBcSIDz74QAUFBXK5XCouLtbFF1981GALh8OhwsJCJSQkROzQC5vNpoSEBBUWFrIMDXSBzYzkX7GBGFNbW6tbb71Vq1at0pIlS3T++ecf95jm5matWbNGzc3NEdURtwbwhAkTlJCQYHU5QFSiEwbCwDRNLV26VAUFBUpNTdXWrVs7FMCSlJCQoIkTJyopKSliHtYyDENJSUmaOHEiAQx0A50wEGJVVVWaNWuWdu7cqeeee06FhYVdOo/X61VJSYnlD2u1PoSVn5/PEjTQTZHxazUQg0zT1LPPPqtRo0Zp5MiR2rhxY5cDWDp0j3jUqFEaM2aM4uPjw94VG4ah+Ph4jRkzRqNGjSKAgSCgEwZCoLS0VDfeeKP279+v5557TiNHjgzq+Vu74qqqKvl8vqCe+1jsdruysrLofoEgI4SBIPJ6vVq0aJHuv/9+3XHHHbrllltCGloNDQ0qLS1VdXW1JAV1mbq1087MzFReXh6jKIEQIISBINmyZYumT5+uXr166ZlnntGQIUPCdm23262KigqVl5fL6/XKNM0uBbJhGLLZbHI4HMrNzVVOTg6fhgSEECEMdFNLS4v+9Kc/6amnntL999+v6dOnW7av1zRN1dXVqa6uTrW1tWpoaJDb7Q58MtPh/9xba/T5fHI6nUpJSVF6errS0tKUlpYWsXuTgVhCCAPd0Dpy8qSTTtITTzwRGDkZSTwej1wul9xut/x+v/x+vwzDkGEYcjqdSk5OVlxcnNVlAj0SIQx0QevIyaVLl+qxxx475sQrADgetigBnXToEfJCAAANdElEQVT4yMmtW7fqkksuIYABdAl7DYAO6srISQD4MXTCwHF0Z+QkAPwYOmHgRxw+cvLNN9/s1sQrADgSnTBwDMEeOQkAx0InDBzh8JGTH3/8cdBHTgJAKzph4P/zer1auHChxo0bp1/84hcqKioigAGEFJ0woLYjJ7/44ouwjpwE0HPRCaNHa2lp0YIFC3Tuuefqpptu0scff0wAAwgbOmH0WIePnNy8eXNEjpwEENsIYfQ4jJwEEClYjkaPwshJAJGEThg9AiMnAUQiOmHENEZOAohkdMKIWa0jJ3fs2KE33nhD48ePt7okAGiDThgx58iRk5s2bSKAAUQkOmHEFEZOAogmdMKICV6vVw899BAjJwFEFTphRD1GTgKIVnTCiFotLS26++67GTkJIGrRCSMqMXISQCwghBFVGDkJIJawHI2owchJALGGThgRj5GTAGIVnTAiFiMnAcQ6OmFEpNaRkzt37tSbb76pwsJCq0sCgKCjE0ZEOXLk5MaNGwlgADGLThgRg5GTAHoaOmFYzuv1auHChYycBNDj0AnDUoycBNCT0QnDEi0tLVqwYAEjJwH0aHTCCDtGTgLAIYQwwoaRkwDQFsvRCAtGTgLA0eiEEVL79u3TrbfeqpUrVzJyEgCOQCeMkGgdOZmfn6+UlBRGTgLAMdAJI+gYOQkAHUMnjKBh5CQAdA6dMIKirKxMN9xwAyMnAaAT6ITRLa0jJ8eOHcvISQDoJDphdBkjJwGge+iE0WktLS26++67GTkJAN1EJ4xOaR05efLJJzNyEgC6iRBGhzQ2NuqPf/xjYOTk1KlTmXgFAN3EcjSO68MPP9SIESPU0NCg4uJiZj4DQJDQCaNdrSMnV61apaeeeoqJVwAQZHTCOMqRIyeLi4sJYAAIATphtFFVVaXZs2drx44djJwEgBCjE4ak/xs5eeqpp2rEiBGMnASAMKATjmJer1cOR/f/LywrK9ONN94ol8uljz76iIlXABAmdMJRasmSJTrppJPU3Nzc5XMcPnLyggsuYOQkAISZzTRN0+oi0Dm1tbUaNGiQ3G635syZo4ceeqjT5yguLtb06dOVlJSkZ555holXAGABOuEo9Lvf/U4ej0dut1tPPPGENm7c2OFjGTkJAJGDTjjKbNq0SePHj9fBgwcD3xs6dKi2bdt23PvDRUVFmj59uk4++WQ9/vjjjJwEAIvRCUcR0zR17bXXtglgSaqsrNQDDzzQ7nGNjY265ZZbNHXqVN1777168803CWAAiACEcBT57//+b3399ddHff/AgQP6y1/+op07dx712uEjJ7du3crISQCIICxHR4n9+/dr4MCBqqurO+brNptNp556qr788ksZhsHISQCIAuwTPg6PxyOXyyW32y2fzyfTNGWz2WS32+V0OpWcnKy4uLiQ17FgwYKjlqEPZ5qmdu7cqSeffFJ9+/bVLbfcoksuuUTFxcVKSkoKeX0AgM6jEz6MaZrat2+f6uvrVVtbq4aGBrndbtnt9sDrrVqXdH0+n5xOp1JSUpSenq7U1FT17t07qEu+O3bs0OjRo380hFvZ7XYNHjxYL730EhOvACDC0QlLcrvdqqioUHl5ubxer0zTlN/vD7zu9Xp/9PiWlhbt3btXNTU1stlscjgcys3NVU5OjpxOZ7dqM01TN9xwg1paWjr881lZWRo3bly3rgsACL0e3QnX19errKxM1dXVktQmeLvLMA4985aZmam8vDylpKR06Txvv/22fvOb3+jAgQMdPiYxMVFPPfWUrrzyyi5dEwAQHj0yhL1er0pKSlRZWRnU4G2P3W5XVlaW8vPzOzXrubm5WYMGDQr8ktAZycnJKi0tVZ8+fTp9LAAgPHrcFqWamhp98sknYQtg6dB948rKSq1YsUI1NTUdPu6BBx7Q/v37u3TN5uZm3XjjjV06FgAQHj2mEw5399sewzCUnZ193K64oqJCp5xySqeWoY904okn6vXXX9eFF17Y5XMAAEKnR4Sw2+1WUVGRmpqaLA3gVoZhKDExUYWFhe0+uHXhhRdq2bJl8vl83bpWenq6ysvLlZyc3K3zAACCL+aXo5ubm7V69Wo1NjZGRABLhx4Aa2xs1OrVq4/5UYQrVqzQihUruh3AktTU1KS5c+d2+zwAgOCL6U7Y7XYHgi4S36bNZlNCQoImTpwY6Ii9Xq+GDh2q3bt3B+06DodDH3/8sX76058G7ZwAgO6L2U7Y6/WqqKgoYgNYOrSnt7m5WUVFRYG9yIsXL9bevXu7dD6n06levXopJSVFJ5xwgux2u9LS0jR06NAuPWENAAitmO2EN2/ebPlDWB3V+rBWv379NHDgwGMO5nA6nYqPj5dhGPJ4PGppaVFycrL69eunn/zkJxo6dGhgQMiAAQOUk5OjzMzMTm2JAgCEV0z+F7qmpiZqAlg6dI+4srJSjzzyiFpaWmQYhlJSUghYAIhxMdcJe71effLJJ3K73VaX0mkOh0NDhw7VwIEDCVgA6AFi7p5wSUnJcWc9R6rWp6YJYADoGWIqhOvr61VVVRU1y9BH8vv9qqqqUkNDg9WlAADCIKZCuKysLCh7a63k8/lUWlpqdRkAgDCImRB2u90xsw2nuro6Ku9pAwA6J2ZCeM+ePVaXEFQVFRVWlwAACLGYCGHTNLVr166ovRd8JL/fr/Ly8ogdMgIACI6YCOF9+/ZF7RPR7fF6vaqrq7O6DABACMVECNfX18dc12iaJiEMADEuJkK4trY2ZpaiW/n9ftXW1lpdBgAghGJiKkRH99VOnz498OEIhmEoOTlZp5xyiqZPn65+/foFtaZXX31Vf//734/6/pQpU3TDDTd06BzsFwaA2Bb1IezxeDq9nefMM89UZmamNm7cqM8//1wHDhzQn//85+Me99FHH2nRokV65513Onytfv36acyYMYGvCwoKOnys2+2Wx+NRXFxch48BAESPqA9hl8slu93eqQezfvazn6mwsFBr167Vfffdp2+//TZk9Q0cOLDDne+R7Ha7XC6X0tPTg1wVACASRH0Id2WoxfLly7VlyxZt2rRJkjR+/PhglxXwzTff6Jlnngl8PWnSJJ100kkdPp6hHQAQu6I+hH0+X6efjF63bl3gf8fFxWnIkCHt/uz69eu1YcMGSf83EOTwUD1el/v999/r7bffDnw9ePDgDoewaZox98AZAOD/RH0Id2Vr0p133qlx48Zp586d+sMf/qDFixeroKDgmA9n7dixo02ISmrz9fFCeOzYsbrrrrs6XWMrQhgAYlfUh7DNZuvycXl5eYqPj1dTU5O+//77Y4bwFVdcoSuuuEJS1x7M6i7DiIldZACAY4j6ELbb7Z0O4uXLl6u4uFhlZWVqampSfHy8Bg0aFJL6jrwnPHDgQE2ePLlDx9psNkIYAGJY1Iew0+ns9DGt94QTExM1fPhwXXHFFUpNTQ12aZKOvic8duzYDoew1LX3BwCIDjYzyuc9ejweffjhhzE3tlI61AlPnjyZfcIAEKOifq0zLi4uZrtFp9NJAANADIv6EJaklJQUq0sIiVh9XwCAQ2IihNPT02PuASbDMJiUBQAxLiaSKzU1tctblSKVzWZTWlqa1WUAAEIoJkK4d+/ecjii/kHvNhwOByEMADEuJkLYZrMpNzc3ZpakDcNQbm5uzHX3AIC2YiO1JOXk5FhdQlDF2vsBABwtZkLY6XQqMzPT6jKCIjMzM2a3XQEA/k/MhLAkDRkyRHa73eoyusVutysvL8/qMgAAYRBTIZyamqqsrKyovTdsGIaysrLYHwwAPUR0ptWPyM/Pj9onpePi4pSfn291GQCAMIm5EHY4HDrttNOirhs2DEOjR4+O2l8gAACdF11J1UEZGRnKzs6OmiA2DEPZ2dnKyMiwuhQAQBhFR0p1QX5+vhITEyN+r63NZlNiYiLL0ADQA8VsCDscDhUWFiohISFig9hmsykhIUGFhYUsQwNADxSzISwd2js8YcKEiAzi1gCeMGECe4IBoIeymaZpWl1EqLndbhUVFampqUl+v9/qcmQYhhITE1VYWEgAA0AP1iNCWJK8Xq9KSkpUWVlpaRC3PoQVzVupAADB0WNCuFVNTY02btwoj8cT1jA2DENxcXEaPXo0T0EDACT1wBCW/q8rrqqqks/nC/n17Ha7srKy6H4BAG30yBBu1dDQoNLSUlVXV0tSUDvj1j3KmZmZysvLYxQlAOAoPTqEW7ndblVUVKi8vFxer1emaXYpkA3DkM1mk8PhUG5urnJycnjwCgDQLkL4MKZpqq6uTnV1daqtrVVDQ4Pcbnfgk5kO/6tq3fLk8/nkdDqVkpKi9PR0paWlKS0tLeK2RAEAIg8hfBwej0cul0tut1t+v19+v1+GYcgwDDmdTiUnJysuLs7qMgEAUYgQBgDAIjE9MQsAgEhGCAMAYBFCGAAAixDCAABYhBAGAMAihDAAABYhhAEAsAghDACARQhhAAAsQggDAGARQhgAAIsQwgAAWIQQBgDAIoQwAAAWIYQBALAIIQwAgEUIYQAALEIIAwBgEUIYAACLEMIAAFiEEAYAwCKEMAAAFiGEAQCwCCEMAIBFCGEAACxCCAMAYJH/BxyjCzg0q3L2AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "st.draw(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## System digraph (with chemostats)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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/RPt2PsSzDPPPJPm5Bg0MDAQ69at8zI5MKlYkw9MtGPvSzBZw9fb2+tlcmBSsSYfWM1Hu7OzM7Zt25buGd2ggYGB2LZtW3R1dY33VACOmDX54Go+2ps2bYr+/v7xnsYR6e/vj40bN473NACOmDX54Go62qVSaegvw2S3ffv2il8n2N3dHatWrYp77rmnouMCOf3973+PlStXxn//+9+qjG9NPrSajvarr7463lOoqC1btlRknO7u7rjuuuuira0trr322njooYcqMi6Q29NPPx2//OUvo729Pb71rW9VPN7W5EOr2WiXy+V4+eWX075v8l4DAwOxefPmI7qecd9Y33DDDbFr1670L1MBlVVfXx/vvvtu3HHHHRWNtzV5ZGo22m+++Wba3YkH0tfXF2+99dZh329/sX733XerMENgsiiVShWNtzV5ZGo22p2dnRP+U3YOV7lcPqwTRKyBI1WpeFuTR6Zmo93R0TFpXoYZNDAwEB0dHYf8ObEGKu1I413La/LhGNu/3j2BjMV1zc8//3z86U9/ihdeeCF6enqipaUlPv7xj8fy5cujoaGhKsc82OPq7u6OX/ziF3HTTTdFf3+/UAMVN7hj+o477og777wzli9fHj/84Q/jmGOOOej9qr0mX3755bFjx473fX9wY121VPpx1WS0e3t7q/5n1J544om4+eabY2BgID70oQ/Fhz/84dixY0c8+OCDcfHFF1ct2qVSKXp7e4eNL9bAWDuceI/FmjzozDPPjGOPPXbo65kzZ1b1ePtbk49ETUa7u7s76urqqrbpoaenJ2699dYYGBiIJUuWxFVXXRXF4t53Il5//fU46qijqnLciIi6urro7u6OlpYWsQbG3UjiXe01eV/nnntuLF68uOrHGbTvmlwJNRntaj+j+/e//x1vv/12RER89atfHQp2RAx7hlctXV1dsXr1arEGJoyDxXusfsuOiHj44YfjX//619DXV1xxRdWPWcnHV5PR7u/vr+ouxX3fwzj66KOrdpz92bVrVyxfvjwef/zxio25Zs2auO+++yo2HpDTO++8Ez09PUc0xmDAVq9eHatXr4729vb44he/GOecc040NjZWYpoH9dRTTw37utrRLpfLFd1gV5PRrvZlBfu+R7Jjx4447rjjqnq8fTU2NkZ7e3s8+eSTMTAwUJGT5SMf+UhccMEFFZgdkNnT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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "chemostats = ['A','B']\n", "sc = st.statify(s,chemostats=chemostats)\n", "st.draw(sc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pathway analysis" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 pathways\n", "0: + r1 + r2\n", "\n" ] }, { "data": { "text/latex": [ "\\begin{align}\n", "\\ch{A &<>[ pr1 ] B }\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sp = st.path(s,sc)\n", "print(st.sprintp(sc))\n", "disp.Latex(st.sprintrl(sp,chemformula=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example 2: Transporter\n", "This example looks at bond graph representation of a membrane\n", "transporter which is discussed in detail by \n", "(Gawthrop and Crampin, 2017) and analysed by\n", "(Gawthrop and Crampin, 2018). " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Re:e\n", "\n", "0\n", "\n", "1\n", "\n", "Re:em\n", "\n", "0\n", "\n", "1\n", "\n", "Re:lem\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "Re:esm\n", "\n", "1\n", "\n", "Re:es\n", "\n", "1\n", "\n", "\n", "Re:lesm\n", "\n", "C:Mo\n", "\n", "C:Lo\n", "\n", "C:Mi\n", "\n", "C:Li\n", "\n", "C:E\n", "\n", "C:LEM\n", "\n", "C:EM\n", "\n", "C:LEsM\n", "\n", "C:EsM\n", "\n", "C:Es\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.SVG('Hill_abg.svg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This graphical representation may be converted to [bond-graph tools](https://pypi.org/project/BondGraphTools/) format using " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "sbg.model('Hill_abg.svg')\n", "import Hill_abg\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reactions\n", "The reactions corresponding to this system are:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "\\ch{Es &<>[ e ] E }\\\\\n", "\\ch{E + Mi &<>[ em ] EM }\\\\\n", "\\ch{EsM &<>[ es ] Es + Mo }\\\\\n", "\\ch{LEsM &<>[ esm ] EsM + Lo }\\\\\n", "\\ch{EM + Li &<>[ lem ] LEM }\\\\\n", "\\ch{LEM &<>[ lesm ] LEsM }\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = st.stoich(Hill_abg.model(),quiet=quiet)\n", "disp.Latex(st.sprintrl(s,chemformula=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stoichiometric matrix and its decomposition" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "X&= \\begin{pmatrix}\n", " X_{E}\\\\\n", " X_{EM}\\\\\n", " X_{Es}\\\\\n", " X_{EsM}\\\\\n", " X_{LEM}\\\\\n", " X_{LEsM}\\\\\n", " X_{Li}\\\\\n", " X_{Lo}\\\\\n", " X_{Mi}\\\\\n", " X_{Mo}\\\\\n", "\\end{pmatrix}\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'species'))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "V&= \\begin{pmatrix}\n", " V_{e}\\\\\n", " V_{em}\\\\\n", " V_{es}\\\\\n", " V_{esm}\\\\\n", " V_{lem}\\\\\n", " V_{lesm}\\\\\n", "\\end{pmatrix}\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'reaction'))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "N &=\n", "\\left(\\begin{matrix}1 & -1 & 0 & 0 & 0 & 0\\\\0 & 1 & 0 & 0 & -1 & 0\\\\-1 & 0 & 1 & 0 & 0 & 0\\\\0 & 0 & -1 & 1 & 0 & 0\\\\0 & 0 & 0 & 0 & 1 & -1\\\\0 & 0 & 0 & -1 & 0 & 1\\\\0 & 0 & 0 & 0 & -1 & 0\\\\0 & 0 & 0 & 1 & 0 & 0\\\\0 & -1 & 0 & 0 & 0 & 0\\\\0 & 0 & 1 & 0 & 0 & 0\\end{matrix}\\right)\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'N'))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "Z &=\n", "\\left(\\begin{matrix}0 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0\\\\1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\\\0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1\\\\0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1\\\\0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\end{matrix}\\right)\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'Z'))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "D &=\n", "\\left(\\begin{matrix}-1 & 0 & 0 & 0 & 0 & 0\\\\0 & -1 & 0 & 0 & 0 & 0\\\\0 & 0 & -1 & 0 & 0 & 0\\\\0 & 0 & 0 & -1 & 0 & 1\\\\0 & 0 & 0 & 0 & -1 & 0\\\\0 & 0 & 0 & 0 & 1 & -1\\\\1 & 0 & 0 & 0 & 0 & 0\\\\0 & 1 & 0 & 0 & 0 & 0\\\\0 & 0 & 1 & 0 & 0 & 0\\\\0 & 0 & 0 & 1 & 0 & 0\\end{matrix}\\right)\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp.Latex(st.sprintl(s,'D'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## System digraph" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "st.draw(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## System digraph (with chemostats)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "chemostats = ['Mi','Mo','Li','Lo']\n", "sc = st.statify(s,chemostats=chemostats)\n", "st.draw(sc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pathway analysis" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 pathways\n", "0: + e + em + es + esm + lem + lesm\n", "\n" ] }, { "data": { "text/latex": [ "\\begin{align}\n", "\\ch{Li + Mi &<>[ pr1 ] Lo + Mo }\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sp = st.path(s,sc)\n", "print(st.sprintp(sc))\n", "disp.Latex(st.sprintrl(sp,chemformula=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example 3: Transporter with slippage" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Re:e\n", "\n", "0\n", "\n", "1\n", "\n", "Re:em\n", "\n", "0\n", "\n", "1\n", "\n", "Re:lem\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "Re:esm\n", "\n", "1\n", "\n", "Re:es\n", "\n", "1\n", "\n", "\n", "Re:lesm\n", "\n", "C:Mo\n", "\n", "C:Lo\n", "\n", "C:Mi\n", "\n", "C:Li\n", "\n", "C:E\n", "\n", "C:LEM\n", "\n", "C:EM\n", "\n", "C:LEsM\n", "\n", "C:EsM\n", "\n", "C:Es\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "\n", "Re:slip\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sbg.model('Hills_abg.svg')\n", "import Hills_abg\n", "disp.SVG('Hills_abg.svg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reactions\n", "The reactions corresponding to this system are:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{align}\n", "\\ch{Es &<>[ e ] E }\\\\\n", "\\ch{E + Mi &<>[ em ] EM }\\\\\n", "\\ch{EsM &<>[ es ] Es + Mo }\\\\\n", "\\ch{LEsM &<>[ esm ] EsM + Lo }\\\\\n", "\\ch{EM + Li &<>[ lem ] LEM }\\\\\n", "\\ch{LEM &<>[ lesm ] LEsM }\\\\\n", "\\ch{EM &<>[ slip ] EsM }\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = st.stoich(Hills_abg.model(),quiet=quiet)\n", "disp.Latex(st.sprintrl(s,chemformula=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## System digraph (with chemostats)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "chemostats = ['Mi','Mo','Li','Lo']\n", "sc = st.statify(s,chemostats=chemostats)\n", "st.draw(sc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pathway analysis" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 pathways\n", "0: + e + em + es + esm + lem + lesm\n", "1: + e + em + es + slip\n", "\n" ] }, { "data": { "text/latex": [ "\\begin{align}\n", "\\ch{Li + Mi &<>[ pr1 ] Lo + Mo }\\\\\n", "\\ch{Mi &<>[ pr2 ] Mo }\n", "\\end{align}\n" ], "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sp = st.path(s,sc)\n", "print(st.sprintp(sc))\n", "disp.Latex(st.sprintrl(sp,chemformula=True))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }