{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Predict expression modulation targets\n", "\n", "Cameo provides algorithms to search for genes or reactions that can be over or down regulated in order to achieve a given biological objective." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from cobra.io import read_sbml_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load the E. coli core model." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "model = read_sbml_model('data/e_coli_core.xml.gz')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Succinate production" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The production envelope looks like this." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(global) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", "\n", " if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", " window._bokeh_onload_callbacks = [];\n", " window._bokeh_is_loading = undefined;\n", " }\n", "\n", "\n", " \n", " if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n", " window._bokeh_timeout = Date.now() + 5000;\n", " window._bokeh_failed_load = false;\n", " }\n", "\n", " var NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"

\\n\"+\n", " \"\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded() {\n", " if (window.Bokeh !== undefined) {\n", " document.getElementById(\"\").textContent = \"BokehJS successfully loaded.\";\n", " } else if (Date.now() < window._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", " function run_callbacks() {\n", " window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " delete window._bokeh_onload_callbacks\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " window._bokeh_onload_callbacks.push(callback);\n", " if (window._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " window._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " window._bokeh_is_loading--;\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };\n", "\n", " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.4.min.js\"];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.4.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.4.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.4.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.4.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if ((window.Bokeh !== undefined) || (force === true)) {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i](window.Bokeh);\n", " }} else if (Date.now() < window._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!window._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " window._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " var cell = $(document.getElementById(\"\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", "\n", " }\n", "\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(this));" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(global) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", "\n", " if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", " window._bokeh_onload_callbacks = [];\n", " window._bokeh_is_loading = undefined;\n", " }\n", "\n", "\n", " \n", " if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n", " window._bokeh_timeout = Date.now() + 5000;\n", " window._bokeh_failed_load = false;\n", " }\n", "\n", " var NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"

\\n\"+\n", " \"\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded() {\n", " if (window.Bokeh !== undefined) {\n", " document.getElementById(\"\").textContent = \"BokehJS successfully loaded.\";\n", " } else if (Date.now() < window._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", " function run_callbacks() {\n", " window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " delete window._bokeh_onload_callbacks\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " window._bokeh_onload_callbacks.push(callback);\n", " if (window._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " window._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " window._bokeh_is_loading--;\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };\n", "\n", " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.4.min.js\"];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.4.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.4.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.4.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.4.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if ((window.Bokeh !== undefined) || (force === true)) {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i](window.Bokeh);\n", " }} else if (Date.now() < window._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!window._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " window._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " var cell = $(document.getElementById(\"\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", "\n", " }\n", "\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(this));" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "
\n", "
\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from cameo.flux_analysis.analysis import phenotypic_phase_plane\n", "production_envelope = phenotypic_phase_plane(model, \n", " variables=[model.reactions.BIOMASS_Ecoli_core_w_GAM],\n", " objective=model.metabolites.succ_e)\n", "production_envelope.plot(height=400)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Flux Scanning based on Enforced Objective Flux" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from cameo.strain_design.deterministic.flux_variability_based import FSEOF" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fseof = FSEOF(model)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "result = fseof.run(target=model.reactions.EX_succ_e)" ] }, { "cell_type": "code", "execution_count": 7, "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", "
12345678910
ADK10.00000.00000.0000-0.0000-0.0000-0.0000-0.0000-0.00000.41031.5273
ENO15.238915.761616.212416.577516.942717.307817.704418.602319.293319.6280
FBA7.75698.03658.24258.36108.47968.59818.74789.39319.83089.9109
FRD70.00000.00000.00001.45323.17534.89746.58677.75519.127810.8523
GAPD16.431116.838717.173617.422017.670417.918718.198418.976719.547819.7620
.................................
PPS0.00000.00000.00000.00000.00000.00000.00000.00000.41031.5273
SUCCt31.47462.94914.42375.89837.37298.847510.322011.796613.271214.7457
THD20.00000.00000.00000.00000.00000.00000.11972.14382.91681.5352
TPI7.75698.03658.24258.36108.47968.59818.74789.39319.83089.9109
EX_succ_e1.47462.94924.42375.89837.37298.847510.322011.796613.271214.7458
\n", "

18 rows × 10 columns

\n", "
" ], "text/plain": [ " 1 2 3 4 5 6 7 \\\n", "ADK1 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 \n", "ENO 15.2389 15.7616 16.2124 16.5775 16.9427 17.3078 17.7044 \n", "FBA 7.7569 8.0365 8.2425 8.3610 8.4796 8.5981 8.7478 \n", "FRD7 0.0000 0.0000 0.0000 1.4532 3.1753 4.8974 6.5867 \n", "GAPD 16.4311 16.8387 17.1736 17.4220 17.6704 17.9187 18.1984 \n", "... ... ... ... ... ... ... ... \n", "PPS 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 \n", "SUCCt3 1.4746 2.9491 4.4237 5.8983 7.3729 8.8475 10.3220 \n", "THD2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.1197 \n", "TPI 7.7569 8.0365 8.2425 8.3610 8.4796 8.5981 8.7478 \n", "EX_succ_e 1.4746 2.9492 4.4237 5.8983 7.3729 8.8475 10.3220 \n", "\n", " 8 9 10 \n", "ADK1 -0.0000 0.4103 1.5273 \n", "ENO 18.6023 19.2933 19.6280 \n", "FBA 9.3931 9.8308 9.9109 \n", "FRD7 7.7551 9.1278 10.8523 \n", "GAPD 18.9767 19.5478 19.7620 \n", "... ... ... ... \n", "PPS 0.0000 0.4103 1.5273 \n", "SUCCt3 11.7966 13.2712 14.7457 \n", "THD2 2.1438 2.9168 1.5352 \n", "TPI 9.3931 9.8308 9.9109 \n", "EX_succ_e 11.7966 13.2712 14.7458 \n", "\n", "[18 rows x 10 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.data_frame" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "result.data_frame.T.plot()\n", "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Differential flux variability analysis\n", "\n", "Compares flux ranges of a reference model to a set of models that have been parameterized to lie on a grid of evenly spaced points in the n-dimensional production envelope (n being the number of reaction bounds to be varied)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from cameo.strain_design.deterministic import DifferentialFVA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up a model that represents a reference state (in this case a model with a constrained growth rate)." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "model.reactions.EX_o2_e.lower_bound = 0\n", "reference_model = model.copy()\n", "biomass_rxn = reference_model.reactions.BIOMASS_Ecoli_core_w_GAM\n", "biomass_rxn.lower_bound = 0.\n", "target = reference_model.metabolites.succ_e" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up the differential flux variability analysis strain design method." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "diff_fva = DifferentialFVA(design_space_model=model,\n", " reference_model=reference_model,\n", " objective=target,\n", " variables=[biomass_rxn],\n", " normalize_ranges_by=biomass_rxn,\n", " points=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run differential flux variability analysis (only on the surface of the production envelope)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": false }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "598f6939eb2e4dac9c49cca82d37ab42" } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1.26 s, sys: 28 ms, total: 1.29 s\n", "Wall time: 1.41 s\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "data": [ { "fill": "toself", "fillcolor": "#B3E2CD", "hoverinfo": "none", "marker": { "line": { "color": "#B3E2CD" }, "opacity": 0.3 }, "mode": "line", "name": "WT", "opacity": 0.3, "type": "scatter", "x": [ 0, 0.02351810552614558, 0.04703621105229116, 0.07055431657843673, 0.09407242210458232, 0.1175905276307279, 0.14110863315687347, 0.16462673868301905, 0.18814484420916464, 0.21166294973531022, 0.21166294973531022, 0.18814484420916464, 0.16462673868301905, 0.14110863315687347, 0.1175905276307279, 0.09407242210458232, 0.07055431657843673, 0.04703621105229116, 0.02351810552614558, 0, 0, 0 ], "y": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.3092638912203256e-14, 2.12333333333335, 4.246666666666686, 6.37000000000002, 8.493333333333355, 9.873903578679938, 10.917649906232258, 11.961396233784468, 13.005142561336694, 13.905777777777793, 0, 13.905777777777793 ] }, { "marker": { "color": [ "red", "red", "red", "red", "red", "red", "red", "red", "red", "red" ] }, "mode": "markers", "name": "Data Points", "type": "scatter", "x": [ 0, 0.02351810552614558, 0.04703621105229116, 0.07055431657843673, 0.09407242210458232, 0.1175905276307279, 0.14110863315687347, 0.16462673868301905, 0.18814484420916464, 0.21166294973531022 ], "y": [ 13.905777777777793, 13.005142561336694, 11.961396233784468, 10.917649906232258, 9.873903578679938, 8.493333333333355, 6.37000000000002, 4.246666666666686, 2.12333333333335, 2.3092638912203256e-14 ] } ], "layout": { "height": 432, "title": "DifferentialFVA Result", "width": 700, "xaxis": { "title": "BIOMASS_Ecoli_core_w_GAM [h^-1]" }, "yaxis": { "title": "DM_succ_e [mmol gDW^-1 h^-1]" } } }, "text/html": [ "
" ], "text/vnd.plotly.v1+html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%time result = diff_fva.run(surface_only=True)\n", "result.plot()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "data": [ { "fillcolor": "#B3E2CD", "hoverinfo": "none", "mode": "markers", "name": "WT", "opacity": 0.3, "type": "scatter", "x": [ 2.3887499999999395, 2.540047360725781, 2.540047360725977, -17.717007032046162 ], "y": [ 1, 2, 3, 4 ] }, { "fillcolor": "#FDCDAC", "hoverinfo": "none", "mode": "markers", "name": "Strain 5", "opacity": 0.3, "type": "scatter", "x": [ 0, 0, 0, -19.68740910039923 ], "y": [ 1.5, 2.5, 3.5, 4.5 ] } ], "layout": { "height": 432, "shapes": [ { "fillcolor": "#B3E2CD", "line": { "color": "#B3E2CD", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": 4.777499999999879, "x1": 0, "y0": 0.75, "y1": 1.25 }, { "fillcolor": "#B3E2CD", "line": { "color": "#B3E2CD", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": 5.080094721451562, "x1": 0, "y0": 1.75, "y1": 2.25 }, { "fillcolor": "#B3E2CD", "line": { "color": "#B3E2CD", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": 5.080094721451954, "x1": 0, "y0": 2.75, "y1": 3.25 }, { "fillcolor": "#B3E2CD", "line": { "color": "#B3E2CD", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": -15.856011778553379, "x1": -19.578002285538947, "y0": 3.75, "y1": 4.25 }, { "fillcolor": "#FDCDAC", "line": { "color": "#FDCDAC", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": 0, "x1": 0, "y0": 1.25, "y1": 1.75 }, { "fillcolor": "#FDCDAC", "line": { "color": "#FDCDAC", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": 0, "x1": 0, "y0": 2.25, "y1": 2.75 }, { "fillcolor": "#FDCDAC", "line": { "color": "#FDCDAC", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": 0, "x1": 0, "y0": 3.25, "y1": 3.75 }, { "fillcolor": "#FDCDAC", "line": { "color": "#FDCDAC", "width": 0 }, "opacity": 0.3, "type": "rect", "x0": -19.68740910039923, "x1": -19.687409100399233, "y0": 4.25, "y1": 4.75 } ], "title": "Compare WT solution 5", "width": 700, "xaxis": { "title": "Reactions" }, "yaxis": { "ticktext": [ "", "FBP", "G6PDH2r", "PGL", "PGK" ], "tickvals": [ 0, 1, 2, 3, 4 ], "title": "Flux limits" } } }, "text/html": [ "
" ], "text/vnd.plotly.v1+html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "result.plot(5, variables=['FBP', 'G6PDH2r', 'PGL', 'PGK'])" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ff4450b160d24cd0abc79932b08f173a" } }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
\n", "\n", " \n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "result.display_on_map(5, map_name=\"iJO1366.Central metabolism\")" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda env:cell-factory-course]", "language": "python", "name": "conda-env-cell-factory-course-py" }, "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.4.5" }, "widgets": { "state": { "1d69d8402bee4ffd95fb3c3bdb3fcd2c": { "views": [ { "cell_index": 20 } ] }, "5892a0da475d446b8e73a90fcdecdabf": { "views": [ { "cell_index": 22 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 2 }