{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Vanillin production\n", "------------------\n", "\n", "In 2010, Brochado *et al* used heuristic optimization together with flux simulations to design a vanillin producing yeast strain.\n", "\n", "Brochado, A. R., Andrejev, S., Maranas, C. D., & Patil, K. R. (2012). Impact of stoichiometry representation on simulation of genotype-phenotype relationships in metabolic networks. PLoS Computational Biology, 8(11), e1002758. doi:10.1371/journal.pcbi.1002758" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Genome-scale metabolic model\n", "--------------------------\n", "\n", "In their work, the authors used *iFF708* model, but recent insights in Yeast yielded newer and more complete versions. \n", "Becuase this algorithms should be agnostic to the model, we implement the same strategy with a newer model." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from cameo import models" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "model = models.bigg.iMM904" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Constraints can be set in the model according to data found in the literature. The defined conditions allow the simulation of phenotypes very close to the experimental results.\n", "\n", "\n", "**Model validation by comparing in silico prediction of the specific growth rate with experimental data**. Growth phenotypes were collected from literature and compared to simulated values for chemostat cultivations at four different conditions, nitrogen limited aerobic (green) and anaerobic (red), carbon limited aerobic (blue) and anaerobic (white).\n", "\n", "\n", "Österlund, T., Nookaew, I., Bordel, S., & Nielsen, J. (2013). Mapping condition-dependent regulation of metabolism in yeast through genome-scale modeling. BMC Systems Biology, 7, 36. doi:10.1186/1752-0509-7-36" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "model.reactions.EX_glc__D_e.lower_bound = -13 #glucose exchange\n", "model.reactions.EX_o2_e.lower_bound = -3 #oxygen exchange" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "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", "
reaction_idreaction_namelower_boundupper_bound
0EX_fe2_eFe2+ exchange-999999.0999999.0
1EX_glc__D_eD-Glucose exchange-13.0999999.0
2EX_h2o_eH2O exchange-999999.0999999.0
3EX_h_eH+ exchange-999999.0999999.0
4EX_k_eK+ exchange-999999.0999999.0
5EX_na1_eSodium exchange-999999.0999999.0
6EX_nh4_eAmmonia exchange-999999.0999999.0
7EX_o2_eO2 exchange-3.0999999.0
8EX_pi_ePhosphate exchange-999999.0999999.0
9EX_so4_eSulfate exchange-999999.0999999.0
\n", "
" ], "text/plain": [ " reaction_id reaction_name lower_bound upper_bound\n", "0 EX_fe2_e Fe2+ exchange -999999.0 999999.0\n", "1 EX_glc__D_e D-Glucose exchange -13.0 999999.0\n", "2 EX_h2o_e H2O exchange -999999.0 999999.0\n", "3 EX_h_e H+ exchange -999999.0 999999.0\n", "4 EX_k_e K+ exchange -999999.0 999999.0\n", "5 EX_na1_e Sodium exchange -999999.0 999999.0\n", "6 EX_nh4_e Ammonia exchange -999999.0 999999.0\n", "7 EX_o2_e O2 exchange -3.0 999999.0\n", "8 EX_pi_e Phosphate exchange -999999.0 999999.0\n", "9 EX_so4_e Sulfate exchange -999999.0 999999.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.medium" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.39022235350799284" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.objective = model.reactions.BIOMASS_SC5_notrace #growth\n", "model.optimize().f" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Heterologous pathway\n", "-------------------\n", "\n", "Vanillin is not produced by *S. cervisiae*. In their work an heterolgous pathway is inserted to allow generate a vanillin production strain. The pathway is described as:\n", "\n", "\n", "**Schematic representation of the de novo VG biosynthetic pathway in S. Cerevisisae** (as designed by Hansen et al [5]). Metabolites are shown in black, enzymes are shown in black and in italic, cofactors and additional precursors are shown in red. Reactions catalyzed by heterologously introduced enzymes are shown in red. Reactions converting glucose to aromatic amino acids are represented by dashed black arrows. Metabolite secretion is represented by solid black arrows where relative thickness corresponds to relative extracellular accumulation. 3-DSH stands for 3-dedhydroshikimate, PAC stands for protocathechuic acid, PAL stands for protocatechuic aldehyde, SAM stands for S-adenosylmethionine. 3DSD stands for 3-dedhydroshikimate dehydratase, ACAR stands for aryl carboxylic acid reductase, PPTase stands for phosphopantetheine transferase, hsOMT stands for O-methyltransferase, and UGT stands for UDP-glycosyltransferase. Adapted from Hansen et al. [5].\n", "Brochado et al. Microbial Cell Factories 2010 9:84 doi:10.1186/1475-2859-9-84\n", "\n", "Using **cameo**, is very easy to generate a pathway and add it to a model." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from cameo.core.pathway import Pathway" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "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", "
equationlower_boundupper_bound
3DSD3-dehydroshikimate --> H2O + protocathechuic acid0.01000.0
ACAR_PPTaseATP + protocathechuic acid + NADPH --> ADP + p...0.01000.0
hsOMTS-adenosyl-L-methionine + protocatechuic aldeh...0.01000.0
UGTVanillin + UDP-glucose --> vanillin-B-glucoside0.01000.0
\n", "
" ], "text/plain": [ " equation lower_bound \\\n", "3DSD 3-dehydroshikimate --> H2O + protocathechuic acid 0.0 \n", "ACAR_PPTase ATP + protocathechuic acid + NADPH --> ADP + p... 0.0 \n", "hsOMT S-adenosyl-L-methionine + protocatechuic aldeh... 0.0 \n", "UGT Vanillin + UDP-glucose --> vanillin-B-glucoside 0.0 \n", "\n", " upper_bound \n", "3DSD 1000.0 \n", "ACAR_PPTase 1000.0 \n", "hsOMT 1000.0 \n", "UGT 1000.0 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vanillin_pathway = Pathway.from_file(\"data/vanillin_pathway.tsv\")\n", "vanillin_pathway.data_frame" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we can plug the pathway to the model." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "vanillin_pathway.plug_model(model)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from cameo import phenotypic_phase_plane" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Phenotypic phase plane can be used to analyse the theoretical yields at different growth rates." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "production_envelope = phenotypic_phase_plane(model, variables=[model.reactions.BIOMASS_SC5_notrace], \n", " objective=model.reactions.EX_vnl_b_glu_c)\n", "production_envelope.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find gene knockout targets, we use `cameo.strain_design.heuristic` package which implements the OptGene strategy.\n", "\n", "The authors used the biomass-product coupled yield (bpcy) for optimization which is the equivalent of running OptGene in non-robust mode. All simulations were computed using MOMA but because **cameo** does not implement MOMA we use it's equivalent linear version (it minimizes the absolute distance instead of the quadratic distance). The linear MOMA version is faster than the original MOMA formulation.\n", "\n", "By default, our OptGene implementation will run 20'000 evaluations." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from cameo.strain_design.heuristic.evolutionary_based import OptGene\n", "from cameo.flux_analysis.simulation import lmoma" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "optgene = OptGene(model)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting optimization at Thu, 26 May 2016 13:53:54\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Widget Javascript not detected. It may not be installed properly. Did you enable the widgetsnbextension? If not, then run \"jupyter nbextension enable --py --sys-prefix widgetsnbextension\"\n", "/Users/joao/.virtualenvs/cameo06-py3/lib/python3.4/site-packages/ipywidgets/widgets/widget_string.py:55: UserWarning:\n", "\n", "The Latex widget is deprecated. Use Label instead\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Finished after 01:28:45\n" ] } ], "source": [ "results = optgene.run(target=\"EX_vnl_b_glu_c\", \n", " biomass=\"BIOMASS_SC5_notrace\",\n", " substrate=\"EX_glc__D_e\",\n", " simulation_method=lmoma)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Widget Javascript not detected. It may not be installed properly. Did you enable the widgetsnbextension? If not, then run \"jupyter nbextension enable --py --sys-prefix widgetsnbextension\"\n", "/Users/joao/.virtualenvs/cameo06-py3/lib/python3.4/site-packages/ipywidgets/widgets/widget_string.py:55: UserWarning:\n", "\n", "The Latex widget is deprecated. Use Label instead\n", "\n" ] }, { "data": { "text/html": [ "\n", "

OptGene Result

\n", " \n", "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
reactionsgenessizefva_minfva_maxtarget_fluxbiomass_fluxyieldfitness
0(OHPBAT, G6PI, PSERT, GLCGSD, OMCDCm, PGI, VAL...((YBR196C, YBL011W, YOR184W, YHR208W, YJL121C,...8.00.00.0091580.0236390.1764870.0018960.000335
1(OHPBAT, GLCGSD, G6PI, PSERT, OMCDCm, PGI, VAL...((YAR035W, YBR196C, YOR184W, YHR208W, YJL121C,...8.00.00.0091580.0236390.1764870.0018960.000335
2(OHPBAT, G6PI, PSERT, GLCGSD, PGI, G6PI3, RPE,...((YBR196C, YBL011W, YOR184W, YLR432W, YJL121C,...8.00.00.0091580.0235650.1771590.0018900.000335
3(OHPBAT, PMI12346PH, GLCGSD, G6PI, PSERT, PGI,...((YBR196C, YOR184W, YJL121C, YOR163W, YPR184W,...8.00.00.0091580.0235650.1771590.0018900.000335
4(OHPBAT, G6PI, PSERT, ALATA_L, PGI, G6PI3, RPE...((YDR111C, YBR196C, YOR184W, YOR377W, YJL121C,...8.00.00.0090630.0232050.1804130.0018620.000336
5(OHPBAT, GLCGSD, G6PI, PSERT, PGI, AMETt2, G6P...((YBR196C, YOR184W, YOR071C, YJL121C, YPR184W,...8.00.00.0091580.0235650.1771590.0018900.000335
6(OHPBAT, FAS120ACPm, PSERT, PGI, FAS80ACPm_L, ...((YAR035W, YBR196C, YER061C, YOR184W, YJL121C,...8.00.00.0091580.0235650.1771590.0018900.000335
..............................
30(OHPBAT, ALLTTti, GLCGSD, G6PI, PSERT, PGI, G6...((YAR035W, YBR196C, YOR184W, YJL121C, YPR184W,...9.00.00.0091580.0235650.1771590.0018900.000335
31(OHPBAT, ALLTTti, GLCGSD, G6PI, PSERT, PGI, G6...((YBR196C, YOR184W, YBR166C, YJL121C, YPR184W,...9.00.00.0091580.0234940.1778000.0018910.000336
32(GALKr, OHPBAT, G6PI, PSERT, AGTi, PGI, G6PI3,...((YBR196C, YOR184W, YJL121C, YDL052C, YOL064C,...9.00.00.0088780.0233640.1789750.0018760.000336
33(GALKr, OHPBAT, DKMPPD2, G6PI, PSERT, AGTi, PG...((YLR354C, YBR196C, YOR184W, YMR009W, YER099C,...9.00.00.0088780.0233880.1787550.0018780.000336
34(FAO141p_odd, OHPBAT, FAO141p_even, PSERT, FAO...((YAR035W, YBR196C, YOR184W, YJL121C, YPR184W,...9.00.00.0091580.0235650.1771590.0018900.000335
35(OHPBAT, GLCGSD, G6PI, PSERT, ALLTTti, PGI, G6...((YBR196C, YOR184W, YJL121C, YPR184W, YMR118C,...9.00.00.0091580.0235650.1771590.0018900.000335
36(OHPBAT, PSERT, AGTi, PGI, RPE, POLYAO3, ORNDC...((YLR354C, YBR196C, YOR180C, YOR184W, YJL121C,...9.00.00.0088780.0233880.1787550.0018780.000336
\n", "

37 rows × 9 columns

\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results" ] } ], "metadata": { "kernelspec": { "display_name": "IPython (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.4.2" } }, "nbformat": 4, "nbformat_minor": 0 }