|
|
Line 6: |
Line 6: |
| <h1>Model</h1> | | <h1>Model</h1> |
| <div id="ToC"></div> | | <div id="ToC"></div> |
− | <h2>Metabolic Modeling</h2>
| + | <h2>Nootkatone Metabolic Model</h2> |
− | <h3>Overview</h3>
| + | <h3>Overview</h3> |
− | <p>In the following we present our model of the Nootkatone biosynthesis pathway, to give you an insight into its behaviour and dynamics. We start with an oversimplified luminar model to get a sense for the behaviour of the enzymes in the pathway. Then we will continue with a model introducing a function penalizing high concentrations of some of the products, as they have been shown to be toxic at certain levels. As the toxicity is the main culprit of Nootkatone production, we further modeled the production inside a peroxisome, as we assume that intermediates inside the peroxisome cannot pass the membrane and thus have no toxic effect on the cells.</p>
| + | <p>In the following we present our model of the Nootkatone biosynthesis pathway, to give you an insight into its behavior and dynamics. We start with an oversimplified luminar model to get a sense for the behavior of the enzymes in the pathway. Then we continue with a model introducing a function penalizing high concentrations of toxic products. As the toxicity is one of two main culprits of Nootkatone production, we further show the production inside a peroxisome, as we assume that intermediates inside the peroxisome cannot pass the membrane and thus have no toxic effect on the cells. Then we show an opt-knock flux-balance analysis to show how the second culprit, the cellular FPP pool can be overcome.</p> |
− | <h3>Basic System</h3>
| + | |
− | <p>The basic reactions of the Nootkatone pathway that are introduced by our team are the following.</p>
| + | |
− | <p>$$\ce{FPP ->[ValS] Valencene ->[\text{HPO & CPR}][NADH + H+ + O2 -> NAD+ + H2O] Nootkatol <->[ADH][NAD+ + H+ -> NADH] Nootkatone}$$</p>
| + | |
− | <p>However during research we found that using the p450-BM3 enzyme will simplify and enhance Nootkatone production, giving the following reaction pathway.</p>
| + | |
− | <p>$$\ce{FPP ->[ValS] Valencene ->[\text{p450-BM3}][NADH + H+ + O2 -> NAD+ + H2O] Nootkatol <->[ADH][NAD+ + H+ -> NADH] Nootkatone}$$</p>
| + | |
− | <p>We assumed Michaelis-Menten kinetics for each reaction, with the last step being reversible.</p>
| + | |
− | <p>Michaelis-Menten kinetics</p>
| + | |
− | <p>$$\frac{dP}{dt} = \frac{V_{Max} \cdot c_{S}}{K_{M} + c_{S}}$$</p>
| + | |
− | <p>Reversible Michaelist-Menten kinetics</p>
| + | |
− | <p>$$\frac{dP}{dt} = \frac{\frac{V_{M+} \cdot c_{S}}{K_{M+}} - \frac{V_{M-} \cdot c_{P}}{K_{M-}}}{1 + \frac{c_{S}}{K_{M+}} + \frac{c_{P}}{K_{M-}}}$$</p>
| + | |
− | <p>We further assumend a permanent FPP production proportional to the need, but with an upper boundary and a factor controlling the production speed. This behaviour is similar to an unlimited pool and diffusion. </p>
| + | |
− | <p>$$\frac{dFPP_{in}}{dt} = \mu_{FPP} \cdot (Max_{FPP} - c_{FPP})$$</p>
| + | |
− | <p>This gives us the following system of differential equations.</p>
| + | |
− | <p>$$\frac{dFPP}{dt} = \mu_{FPP} \cdot (Max_{FPP} - c_{FPP}) - \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} $$</p>
| + | |
− | <p>$$\frac{dValencene}{dt} = \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} -\frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}}$$</p>
| + | |
− | <p>$$\frac{dNootkatol}{dt} = \frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}} - \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p>
| + | |
− | <p>$$\frac{dNootkatone}{dt} = \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p>
| + | |
− | <h3>Parameters</h3>
| + | |
− | <p>Our crude first assumption was a constant enzyme concentration of $1 \ \text{µM}$, a maximal FPP concentration of $2.5 \ \frac{\text{nmol}}{\text{OD}}$, based on a typical wildtype FPP concentration according to <abbr title="2017, Sebastián Rubat - Increasing the intracellular isoprenoid pool in Saccharomyces cerevisiae by structural fine-tuning of a bifunctional farnesyl diphosphate synthase">Rubat 2017</abbr>, which we transformed to $1.39E-3 \frac{\text{mol}}{\text{L}}$ by using the estimation that one OD roughly equals $3E+7 \text{ cells}$ (<a href="http://bionumbers.hms.harvard.edu/bionumber.aspx?id=100986&ver=3">Bionumbers</a>) and that the typical yeast volume is about $6E-14 \ \text{L}$ (<abbr title="2012, Rob Phillips - Physical Biology of the Cell">Philips 2012</abbr>).</p>
| + | |
− | <p>$$c_{\text{Max FPP}} \ [\frac{\text{mol}}{\text{L}}] = \frac{c_{\text{FPP, Wildtype}} \ [\frac{\text{mol}}{\text{OD}}]}{N [\frac{\text{1}}{\text{OD}}] \cdot V_{\text{Yeast}} [\text{L}]}$$</p>
| + | |
− | <p>Another assumption we made is a five-fold reduction in the speed of the reversible reaction of the ADH-21, based on the work by <abbr title="2015, Sebastian Schulz - Cascade Reactions combining a Cytochrome P450 Monooxygenase and an Alcohol Dehydrogenase for the Synthesis of (+)-Nootkatone">Sebastian Schulz (2015)</abbr>, that the forward reaction is favored. The permeability for FPP was set to $1E-6 \frac{1}{\text{s}}$, which severed as a lower bound for which the production was still maximal.</p>
| + | |
− | <table>
| + | |
− | <thead>
| + | |
− | <tr>
| + | |
− | <th>Parameter</th>
| + | |
− | <th>Value</th>
| + | |
− | <th>Source</th>
| + | |
− | </tr>
| + | |
− | </thead>
| + | |
− | <tbody>
| + | |
− | <tr>
| + | |
− | <td>$c_{\text{FPP, Wildtype}}$</td>
| + | |
− | <td>$2.5 \ \frac{\text{nmol}}{\text{OD}}$</td>
| + | |
− | <td><abbr title="2017, Sebastián Rubat - Increasing the intracellular isoprenoid pool in Saccharomyces cerevisiae by structural fine-tuning of a bifunctional farnesyl diphosphate synthase">Rubat 2017</abbr></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$N_{\text{cells per OD}}$</td>
| + | |
− | <td>$3E+7 \ \frac{\text{cells}}{\text{OD}}$</td>
| + | |
− | <td><a href="http://bionumbers.hms.harvard.edu/bionumber.aspx?id=100986&ver=3">Bionumbers</a></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$V_{\text{Yeast}}$</td>
| + | |
− | <td>$6E-14 \ \text{L}$</td>
| + | |
− | <td><abbr title="2012, Rob Phillips - Physical Biology of the Cell">Philips 2012</abbr></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$c_{\text{Max FPP}}$</td>
| + | |
− | <td>$1.39E-3 \frac{\text{mol}}{\text{L}}$</td>
| + | |
− | <td>$\frac{c_{\text{FPP, Wildtype}}}{N_{\text{cells per OD}} \cdot V_{\text{Yeast}}}$</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$\mu_{FPP}$</td>
| + | |
− | <td>$1E-6 \frac{1}{\text{s}}$</td>
| + | |
− | <td>Assumption</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$\text{kM}_{\text{Valencene Synthase}}$</td>
| + | |
− | <td>$1.04 \text{µM}$</td>
| + | |
− | <td><a href="http://www.brenda-enzymes.org/enzyme.php?ecno=4.2.3.73">Brenda</a></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$\text{kM}_{\text{p450 BM3}}$</td>
| + | |
− | <td>$126 \text{µM}$</td>
| + | |
− | <td><a href="http://www.brenda-enzymes.de/enzyme.php?ecno=1.14.14.1">Brenda</a></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$\text{kM}_{\text{ADH-21}}$</td>
| + | |
− | <td>$161 \text{µM}$</td>
| + | |
− | <td><abbr title="2017, Sebastián Rubat - Increasing the intracellular isoprenoid pool in Saccharomyces cerevisiae by structural fine-tuning of a bifunctional farnesyl diphosphate synthase">Rubat 2017</abbr></td>
| + | |
− | <tr>
| + | |
− | <tr>
| + | |
− | <td>$\text{kcat}_{\text{Valencene Synthase}}$</td>
| + | |
− | <td>$0.0032 \frac{1}{\text{s}}$</td>
| + | |
− | <td><a href="http://www.brenda-enzymes.org/enzyme.php?ecno=4.2.3.73">Brenda</a></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$\text{kcat}_{\text{p450 BM3}}$</td>
| + | |
− | <td>$2.619 \frac{1}{\text{s}}$</td>
| + | |
− | <td><a href="http://www.brenda-enzymes.de/enzyme.php?ecno=1.14.14.1">Brenda</a></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$\text{kcat}_{\text{ADH-21 forward}}$</td>
| + | |
− | <td>$6 \frac{1}{\text{s}}$</td>
| + | |
− | <td><a href="http://onlinelibrary.wiley.com/doi/10.1002/cctc.201402952/full">Schulz 2015</a></td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$\text{kcat}_{\text{ADH-21 backward}}$</td>
| + | |
− | <td>$1.2 \frac{1}{\text{s}}$</td>
| + | |
− | <td>$\frac{\text{kcat}_{\text{ADH-21 forward}}}{5}$</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>$c_{\text{Enzyme}}$</td>
| + | |
− | <td>$1 \text{µM}$</td>
| + | |
− | <td>Assumption</td>
| + | |
− | </tr>
| + | |
− | </tbody>
| + | |
− | </table>
| + | |
| | | |
| + | <h3>Basic System</h3> |
| + | <p>The basic reactions of the Nootkatone pathway that are introduced by our team are the following.</p> |
| + | <img class="max-width" src=""> |
| + | |
| + | <p>However during research we found that using the p450-BM3 enzyme will simplify and enhance Nootkatone production, giving the following reaction pathway.</p> |
| + | <img class="max-width" src=""> |
| + | |
| + | |
| + | <p>We assumed Michaelis-Menten kinetics for each reaction, with the last step being reversible.</p> |
| + | <p>Michaelis-Menten kinetics</p> |
| + | <p>$$\frac{dP}{dt} = \frac{V_{Max} \cdot c_{S}}{K_{M} + c_{S}}$$</p> |
| + | <p>Reversible Michaelist-Menten kinetics</p> |
| + | <p>$$\frac{dP}{dt} = \frac{\frac{V_{M+} \cdot c_{S}}{K_{M+}} - \frac{V_{M-} \cdot c_{P}}{K_{M-}}}{1 + \frac{c_{S}}{K_{M+}} + \frac{c_{P}}{K_{M-}}}$$</p> |
| + | <p>We further assumed a permanent FPP production, which we fitted in the <a href="#PenaltyModel">Penalty model</a>.</p> |
| + | <p>This gives us the following system of differential equations.</p> |
| + | <p>$$\frac{dFPP}{dt} = v_{\text{FPP in}} - \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} $$</p> |
| + | <p>$$\frac{dValencene}{dt} = \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} -\frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}}$$</p> |
| + | <p>$$\frac{dNootkatol}{dt} = \frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}} - \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p> |
| + | <p>$$\frac{dNootkatone}{dt} = \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p> |
| + | <h3>Parameters</h3> |
| + | <p>Our crude first assumption was a constant enzyme concentration of $1 \ \text{µM}$. We mostly used kinetic parameters from the <a href="http://www.brenda-enzymes.de/">Brenda</a> database. If S. cerevisiae was not available as the host we used the nearest relative, if the reaction was not available we used the kinetics for the respective co-substrate as an upper boundary. Another assumption we made is a five-fold reduction in the speed of the reversible reaction of the ADH-21, based on the work by <a href="http://onlinelibrary.wiley.com/doi/10.1002/cctc.201402952/full"><abbr title="2015, Sebastian Schulz - Cascade Reactions combining a Cytochrome P450 Monooxygenase and an Alcohol Dehydrogenase for the Synthesis of (+)-Nootkatone">Sebastian Schulz (2015)</abbr></a>, that the forward reaction is favored.</p> |
| + | |
| + | <table> |
| + | <thead> |
| + | <tr> |
| + | <th>Parameter</th> |
| + | <th>Value</th> |
| + | <th>Source</th> |
| + | </tr> |
| + | </thead> |
| + | <tbody> |
| + | <tr> |
| + | <td>$v_{\text{FPP in}}$</td> |
| + | <td>$4.18E-9 \frac{1}{\text{s}}$</td> |
| + | <td>Penalty model</td> |
| + | </tr> |
| + | <tr> |
| + | <td>$\text{kM}_{\text{Valencene Synthase}}$</td> |
| + | <td>$1.04 \text{µM}$</td> |
| + | <td><a href="http://www.brenda-enzymes.org/enzyme.php?ecno=4.2.3.73">Brenda</a></td> |
| + | </tr> |
| + | <tr> |
| + | <td>$\text{kM}_{\text{p450 BM3}}$</td> |
| + | <td>$126 \text{µM}$</td> |
| + | <td><a href="http://www.brenda-enzymes.de/enzyme.php?ecno=1.14.14.1">Brenda</a></td> |
| + | </tr> |
| + | <tr> |
| + | <td>$\text{kM}_{\text{ADH-21}}$</td> |
| + | <td>$161 \text{µM}$</td> |
| + | <td><a href="http://onlinelibrary.wiley.com/doi/10.1002/cctc.201402952/full">Schulz 2015</a></td> |
| + | <tr> |
| + | <tr> |
| + | <td>$\text{kcat}_{\text{Valencene Synthase}}$</td> |
| + | <td>$0.0032 \frac{1}{\text{s}}$</td> |
| + | <td><a href="http://www.brenda-enzymes.org/enzyme.php?ecno=4.2.3.73">Brenda</a></td> |
| + | </tr> |
| + | <tr> |
| + | <td>$\text{kcat}_{\text{p450 BM3}}$</td> |
| + | <td>$2.619 \frac{1}{\text{s}}$</td> |
| + | <td><a href="http://www.brenda-enzymes.de/enzyme.php?ecno=1.14.14.1">Brenda</a></td> |
| + | </tr> |
| + | <tr> |
| + | <td>$\text{kcat}_{\text{ADH-21 forward}}$</td> |
| + | <td>$6 \frac{1}{\text{s}}$</td> |
| + | <td><a href="http://onlinelibrary.wiley.com/doi/10.1002/cctc.201402952/full"><abbr title="2015, Sebastian Schulz - Cascade Reactions combining a Cytochrome P450 Monooxygenase and an Alcohol Dehydrogenase for the Synthesis of (+)-Nootkatone">Sebastian Schulz (2015)</abbr></a> |
| + | </tr> |
| + | <tr> |
| + | <td>$\text{kcat}_{\text{ADH-21 backward}}$</td> |
| + | <td>$1.2 \frac{1}{\text{s}}$</td> |
| + | <td>$\frac{\text{kcat}_{\text{ADH-21 forward}}}{5}$</td> |
| + | </tr> |
| + | <tr> |
| + | <td>$c_{\text{Enzyme}}$</td> |
| + | <td>$1 \text{µM}$</td> |
| + | <td>Assumption</td> |
| + | </tr> |
| + | </tbody> |
| + | </table> |
| + | |
| + | <h3>Simple model</h3> |
| + | <p>In order to simulate the system of differential equations we set up a few python files, one containing a model class which consists of the parameters, the models and the integration function, one containing all the kinetics used and one which we used to actually run the simulations. We wanted to show some example code on how to set up such a project, while the code size was still managable, in order to help new iGEM teams that might need help with their modeling.</p> |
| | | |
− | <h3>Simple model</h3>
| |
− | <p>In order to simulate the system of differential equations we set up a few python files, one containing a model class which consists of the parameters, the models and the integration function, one containing all the kinetics used and one which we used to actually run the simulations. We wanted to show some example code on how to set up such a project, while the code size was still managable, in order to help new iGEM teams that might need help with their modeling.</p>
| |
| <h4>Kinetics File</h4> | | <h4>Kinetics File</h4> |
| <pre> | | <pre> |
− | <code>
| + | <code> |
− | def Influx(substrate,maximum,permeability): | + | def ConstantInflux(substrate,speed): |
− | return (permeability * (maximum - substrate))
| + | return(speed) |
| | | |
− | def MichaelisMenten(substrate,enzymeConcentration, | + | def MichaelisMenten( |
− | kcat,km):
| + | substrate,enzymeConcentration,kcat,km): |
− | return((enzymeConcentration*kcat*substrate)
| + | return( |
− | /(km+substrate))
| + | (enzymeConcentration*kcat*substrate) |
| + | /(km+substrate)) |
| | | |
− | def MichaelisMentenReversible(substrate,product, | + | def MichaelisMentenReversible( |
− | enzymeConcentration,kcats,
| + | substrate,product,enzymeConcentration, |
− | kcatp,kms,kmp):
| + | kcats,kcatp,kms,kmp): |
− | return ((((enzymeConcentration*kcats*substrate)/kms)
| + | return ( |
− | -((enzymeConcentration*kcatp*product)/kmp))
| + | ( |
− | /(1+(substrate/kms)+(product/kmp)))
| + | ((enzymeConcentration*kcats*substrate)/kms) |
− | </code>
| + | -((enzymeConcentration*kcatp*product)/kmp) |
| + | ) |
| + | /(1+(substrate/kms)+(product/kmp) |
| + | )) |
| + | </code> |
| </pre> | | </pre> |
| <h4>Model File</h4> | | <h4>Model File</h4> |
| <pre> | | <pre> |
− | <code>
| + | <code> |
− | class model(object):
| + | import kinetics as k |
− | def __init__(self):
| + | import numpy as np |
− | self.c_FPP_Max = 1.388E-3 #mol/L
| + | import scipy.integrate |
− | self.km_ValS = 1.04E-6 #[M]
| + | |
− | self.km_p450 = 126E-6 #[M]
| + | |
− | self.km_ADH = 161E-6 #[M]
| + | |
− | self.kcat_ValS = 0.0032 #[1/s]
| + | |
− | self.kcat_p450 = 6 #[1/s]
| + | |
− | self.kcat_ADH = 2.619 #[1/s]
| + | |
− | self.kcat_ValSrev = self.kcat_ValS/5 #[1/s]
| + | |
− | self.kcat_p450rev = self.kcat_p450/5 #[1/s]
| + | |
− | self.kcat_ADHrev = self.kcat_ADH/5 #[1/s]
| + | |
− | self.Permeabily_FPP = 1E-6 #[1/s]
| + | |
− | self.c_ValS = 1E-6 #[M]
| + | |
− | self.c_ADH = 1E-6 #[M]
| + | |
− | self.c_p450 = 1E-6 #[M]
| + | |
| | | |
− | def p450_Model(self,time,initvalues):
| + | class model(object): |
− | FPP,Val,Nkl,Nkt = initvalues
| + | def __init__(self): |
− | dFPPdt = (
| + | self.c_ValS = 1E-6 #[M] |
− | k.Influx(FPP,self.c_FPP_Max,self.Permeabily_FPP)
| + | self.c_ADH = 1E-6 #[M] |
− | -k.MichaelisMenten(FPP,self.c_ValS,self.kcat_ValS,self.km_ValS)
| + | self.c_p450 = 1E-6 #[M] |
− | )
| + | |
− | dValdt = (
| + | |
− | k.MichaelisMenten(FPP,self.c_ValS,self.kcat_ValS,self.km_ValS)
| + | |
− | -k.MichaelisMenten(Val,self.c_p450,self.kcat_p450,self.km_p450)
| + | |
− | )
| + | |
− | dNkldt = (
| + | |
− | k.MichaelisMenten(Val,self.c_p450,self.kcat_p450,self.km_p450)
| + | |
− | -k.MichaelisMentenReversible(Nkl,Nkt,self.c_ADH,self.kcat_ADH,
| + | |
− | self.kcat_ADHrev,self.km_ADH,self.km_ADH)
| + | |
− | )
| + | |
− | dNtkdt = (
| + | |
− | k.MichaelisMentenReversible(Nkl,Nkt,self.c_ADH,self.kcat_ADH,
| + | |
− | self.kcat_ADHrev,self.km_ADH,self.km_ADH)
| + | |
− | )
| + | |
− | return [dFPPdt,dValdt,dNkldt,dNtkdt]
| + | |
| | | |
− | def Integration(self,time,initvalues,model):
| + | self.km_ValS = 1.04E-6 #[M] |
− | #model = getattr(self, modelName)
| + | self.km_p450 = 126E-6 #[M] |
− | Y = np.zeros([len(time),len(initvalues)])
| + | self.km_ADH = 161E-6 #[M] |
− | r = scipy.integrate.ode(model)
| + | |
− | r.set_integrator('lsoda')
| + | self.kcat_ValS = 0.0032*3600 #[1/s] |
− | r.set_initial_value(initvalues)
| + | self.kcat_p450 = 6*3600 #[1/s] |
− | cnt=0
| + | self.kcat_ADH = 2.619*3600 #[1/s] |
− | while r.successful() and r.t<time[-1]:
| + | self.k_influxSpeed = 1.03562761862e-05 #[1/s] |
− | cnt+=1
| + | |
− | Y[cnt,:] = r.integrate(time[cnt])
| + | |
− | return Y
| + | def FPPInflux(self,FPP): |
− | </code>
| + | return( |
| + | k.ConstantInflux( |
| + | FPP, |
| + | self.k_influxSpeed) |
| + | ) |
| + | |
| + | def ValenceneSynthase(self,FPP): |
| + | return( |
| + | k.MichaelisMenten( |
| + | FPP, |
| + | self.c_ValS, |
| + | self.kcat_ValS, |
| + | self.km_ValS) |
| + | ) |
| + | def p450(self,Valencene): |
| + | return( |
| + | k.MichaelisMenten( |
| + | Valencene, |
| + | self.c_p450, |
| + | self.kcat_p450, |
| + | self.km_p450) |
| + | ) |
| + | def ADH(self,Nootkatol,Nootkatone): |
| + | return ( |
| + | k.MichaelisMentenReversible( |
| + | Nootkatol, |
| + | Nootkatone, |
| + | self.c_ADH, |
| + | self.kcat_ADH, |
| + | self.kcat_ADHrev, |
| + | self.km_ADH, |
| + | self.km_ADH) |
| + | ) |
| + | |
| + | def p450_Model(self,time,initvalues): |
| + | FPP,Val,Nkl,Nkn = initvalues |
| + | dFPPdt = self.FPPInflux(FPP) - self.ValenceneSynthase(FPP) |
| + | dValdt = self.ValenceneSynthase(FPP) - self.p450(Val) |
| + | dNkldt = self.p450(Val) - self.ADH(Nkl,Nkn) |
| + | dNtkdt = self.ADH(Nkl,Nkn) |
| + | return [dFPPdt,dValdt,dNkldt,dNtkdt] |
| + | |
| + | |
| + | def Integration(self,time,initvalues,model): |
| + | Y = np.zeros([len(time),len(initvalues)]) |
| + | Y[0] = np.transpose(initvalues) |
| + | r = scipy.integrate.ode(model) |
| + | r.set_integrator('lsoda') |
| + | r.set_initial_value(initvalues) |
| + | cnt=1 |
| + | while r.successful() and cnt < len(time): |
| + | Y[cnt,:] = r.integrate(time[cnt]) |
| + | cnt+=1 |
| + | return Y |
| + | </code> |
| </pre> | | </pre> |
| | | |
| <h4>Simulation file</h4> | | <h4>Simulation file</h4> |
| <pre> | | <pre> |
− | <code>
| + | <code> |
− | from model import model | + | from model import model |
− | import numpy as np | + | import numpy as np |
− | import matplotlib.pyplot as plt | + | import matplotlib.pyplot as plt |
| | | |
− | m = model() | + | m = model() |
− | wikiPrefix = "img/T--Cologne-Duesseldorf--"
| + | time = np.linspace(0,1,1000) |
− | | + | data = m.Integration(time,[0,0,0,0],m.p450_Model) |
− | time = np.linspace(0,60,6000) | + | plt.plot(time,data[:,0],label=( |
− | initvalues = [0,0,0,0]
| + | r"FPP, $k_{FPP}$ = " |
− | data = m.Integration(time,initvalues,m.p450_Model)
| + | +"{:.2e}".format(m.k_influxSpeed) |
− | plt.plot(time,data[:,0],label=( | + | +r" $\frac{1}{h}$" |
− | r"FPP, $\mu_{FPP}$ = "+"{:.0e}".format(m.Permeabily_FPP)+r" $\frac{1}{s}$"
| + | )) |
− | ))
| + | plt.plot(time,data[:,1],label=( |
− | plt.plot(time,data[:,1],label=( | + | r"Valencene, $c_{ValS}$ = " |
− | r"Valencene, $c_{ValS}$ = "+"{:.0e}".format(m.c_ValS)+r" $\frac{mol}{L}$"
| + | +"{:.0e}".format(m.c_ValS) |
− | ))
| + | +r" $\frac{mol}{L}$" |
− | plt.plot(time,data[:,2],label=( | + | )) |
− | r"Nootkatol, $c_{p450}$ = "+"{:.0e}".format(m.c_p450)+r" $\frac{mol}{L}$"
| + | plt.plot(time,data[:,2],label=( |
− | ))
| + | r"Nootkatol, $c_{p450}$ = " |
− | plt.plot(time,data[:,3],label=( | + | +"{:.0e}".format(m.c_p450) |
− | r"Nootkatone, $c_{ADH-21}$ = "+"{:.0e}".format(m.c_ADH)+r" $\frac{mol}{L}$"
| + | +r" $\frac{mol}{L}$" |
− | ))
| + | )) |
− | plt.yscale("log") | + | plt.plot(time,data[:,3],label=( |
− | plt.legend(loc=9, bbox_to_anchor=(0.5, -0.2), ncol=2) | + | r"Nootkatone, $c_{ADH-21}$ = " |
− | plt.title("First Simulation") | + | +"{:.0e}".format(m.c_ADH) |
− | plt.xlabel(r"Time in $[s]$") | + | +r" $\frac{mol}{L}$" |
− | plt.ylabel(r"Yield in $\frac{mol}{cell}$") | + | )) |
− | plt.savefig(wikiPrefix+"first-model"+".svg",bbox_inches='tight')
| + | plt.yscale("log") |
− | plt.show() | + | plt.legend(loc=9, bbox_to_anchor=(0.5, -0.2), ncol=2) |
− | </code>
| + | plt.title("First Simulation") |
| + | plt.xlabel(r"Time in $[h]$") |
| + | plt.ylabel(r"Yield in $\frac{mol}{cell}$") |
| + | plt.show() |
| + | </code> |
| </pre> | | </pre> |
− | <img src="https://static.igem.org/mediawiki/2017/c/cd/T--Cologne-Duesseldorf--Nootkatone-Simple-Model.svg" class="max-width">
| |
| | | |
− | <h3>Bioreactor simulation</h3>
| + | <p>The results of our first simulation are the following:</p> |
− | <p>In order to check the validity of our model we took the results of <abbr title="2014, Tamara Wriessnegger - Production of the sesquiterpenoid (+)-nootkatone by metabolic engineering of Pichia pastoris">Wriessnegger 2014</abbr> ()$208 \ \frac{\text{mg}}{\text{L}}$ Nootkatone production after 108 h) as a point of reference. For that we changed our modeling approach from a single cell model to a population-based model. We did this by assuming a bioreactor cell density of $200 \frac{\text{g dry weight}}{\text{L}}$ (<a href="https://microbialcellfactories.biomedcentral.com/articles/10.1186/s12934-015-0295-4">Source</a>). This combined with a yeast dry weight of approximately $17.5E-12 \text{ g}$ (<a href="http://kirschner.med.harvard.edu/files/bionumbers/Size%20and%20composition%20of%20yeast%20cells.pdf">Kirschner Lab</a>), cell volume of $6E-14 \text{ L}$ and respective molar mass leads to a conversion factor of</p>
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/3/38/T--Cologne-Duesseldorf--Basic-model.svg"> |
− | <p>$$c_{\text{Yield}} = \frac{\rho_{Bioreactor}}{m_{\text{Yeast dry weight}}} \cdot V_{\text{Yeast}} \cdot M_{\text{Product}}$$</p> | + | |
− | <p>in $\frac{\text{mol}}{\text{L}}$.</p> | + | <h3>Bioreactor simulation</h3> |
| + | <p>In order to check the validity of our model we took the results of <a href="http://www.sciencedirect.com/science/article/pii/S1096717614000421"><abbr title="2014, Tamara Wriessnegger - Production of the sesquiterpenoid (+)-nootkatone by metabolic engineering of Pichia pastoris">Tamara Wriessnegger 2014</abbr></a> as a point for reference. Wriessnegger achieved $208 \ \frac{\text{mg}}{\text{L}}$ Nootkatone production after 108 h in a in-vitro production in <em>Pichia pastoris</em>. We therefore had to scale up our single cell model to a bioreactor simulation.</p> |
| + | <p>We first calculated the number of product molecules per cell</p> |
| + | <p>$$\frac{\text{N}_{\text{Product}}}{\text{cell}} \ [\text{mol}]= c_{Product} [\frac{\text{mol}}{\text{L}}]\cdot V_{\text{Yeast}} \ [\text{L}]$$</p> |
| + | <p>Then we calculated the number of cells per Liter bioreactor</p> |
| + | <p>$$ \text{cells per Liter} \ [\frac{\text{1}}{\text{L}}]= \frac{\rho_{\text{Cells in Bioreactor}} \ [\frac{\text{g d.w.}}{\text{L}}] }{m_{\text{Yeast dry weight} \ [\text{g d.w.}] } $$</p> |
| + | <p>With these two equations we could scale up the production of a single cell for each product.</p> |
| + | <p>$$\text{Yield}_{\text{Bioreactor}} \ [\frac{\text{mg}}{\text{L}}] = \frac{\text{N}_{\text{Product}}}{\text{cell}} \ [\text{mol}] \cdot \text{cells per Liter} \ [\frac{\text{1}}{\text{L}}] \cdot \text{M}_{\text{Product}} \ [\frac{\text{g}}{\text{mol}}] \cdot 1000$$ </p> |
| + | <p>We used the following constants for the calculations above.</p> |
| + | |
| <table> | | <table> |
− | <thead>
| + | <thead> |
− | <tr>
| + | <tr> |
− | <th>Parameter</th>
| + | <th>Parameter</th> |
− | <th>Value</th>
| + | <th>Value</th> |
− | <th>Source</th>
| + | <th>Source</th> |
− | </tr>
| + | </tr> |
− | </thead>
| + | </thead> |
− | <tbody>
| + | <tbody> |
− | <tr>
| + | <tr> |
− | <td>$\rho_{Bioreactor}$</td>
| + | <td>$\rho_{Bioreactor}$</td> |
− | <td>$200 \ \frac{\text{g d.w.}}{\text{L}}$</td>
| + | <td>$200 \ \frac{\text{g d.w.}}{\text{L}}$</td> |
− | <td><a href="https://microbialcellfactories.biomedcentral.com/articles/10.1186/s12934-015-0295-4">Biomedcentral</a></td>
| + | <td><a href="https://microbialcellfactories.biomedcentral.com/articles/10.1186/s12934-015-0295-4">Biomedcentral</a></td> |
− | </tr>
| + | </tr> |
− | <tr>
| + | <tr> |
− | <td>$m_{\text{Yeast dry weight}}$</td>
| + | <td>$m_{\text{Yeast dry weight}}$</td> |
− | <td>$17.5E-12 \text{ g}$</td>
| + | <td>$17.5E-12 \text{ g}$</td> |
− | <td><a href="http://kirschner.med.harvard.edu/files/bionumbers/Size%20and%20composition%20of%20yeast%20cells.pdf">Kirschner Lab</a></td>
| + | <td><a href="http://kirschner.med.harvard.edu/files/bionumbers/Size%20and%20composition%20of%20yeast%20cells.pdf">Kirschner Lab</a></td> |
− | </tr>
| + | </tr> |
− | <tr>
| + | <tr> |
− | <td>$V_{\text{Yeast}}$</td>
| + | <td>$V_{\text{Yeast}}$</td> |
− | <td>$6E-14 \text{ L}$</td>
| + | <td>$6E-14 \text{ L}$</td> |
− | <td><abbr title="2012, Rob Phillips - Physical Biology of the Cell">Philips 2012</abbr></td>
| + | <td><abbr title="2012, Rob Phillips - Physical Biology of the Cell">Philips 2012</abbr></td> |
− | </tr>
| + | </tr> |
− | <tr>
| + | <tr> |
− | <td>$M_{\text{FPP}}$</td>
| + | <td>$M_{\text{FPP}}$</td> |
− | <td>$382.33 \ \frac{\text{g}}{\text{mol}}$</td>
| + | <td>$382.33 \ \frac{\text{g}}{\text{mol}}$</td> |
− | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/445713">Pubchem</a></td>
| + | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/445713">Pubchem</a></td> |
− | </tr>
| + | </tr> |
− | <tr>
| + | <tr> |
− | <td>$M_{\text{Valencene}}$</td>
| + | <td>$M_{\text{Valencene}}$</td> |
− | <td>$204.36 \ \frac{\text{g}}{\text{mol}}$</td>
| + | <td>$204.36 \ \frac{\text{g}}{\text{mol}}$</td> |
− | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/valencene">Pubchem</a></td>
| + | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/valencene">Pubchem</a></td> |
− | </tr>
| + | </tr> |
− | <tr>
| + | <tr> |
− | <td>$M_{\text{Nootkatol}}$</td>
| + | <td>$M_{\text{Nootkatol}}$</td> |
− | <td>$220.35 \ \frac{\text{g}}{\text{mol}}$</td>
| + | <td>$220.35 \ \frac{\text{g}}{\text{mol}}$</td> |
− | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/nootkatol">Pubchem</a></td>
| + | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/nootkatol">Pubchem</a></td> |
− | </tr>
| + | </tr> |
− | <tr>
| + | <tr> |
− | <td>$M_{\text{Nootkatone}}$</td>
| + | <td>$M_{\text{Nootkatone}}$</td> |
− | <td>$218.34 \ \frac{\text{g}}{\text{mol}}$</td>
| + | <td>$218.34 \ \frac{\text{g}}{\text{mol}}$</td> |
− | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/nootkatone">Pubchem</a></td>
| + | <td><a href="https://pubchem.ncbi.nlm.nih.gov/compound/nootkatone">Pubchem</a></td> |
− | </tr>
| + | </tr> |
− | </tbody>
| + | </tbody> |
− | </table>
| + | </table> |
| | | |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/2/26/T--Cologne-Duesseldorf--Bioreactor-Dynamics.svg"> |
| | | |
| + | <p>Our model predicts a Nootkatone Yield of $268.14 \ \frac{\text{mg}}{\text{{L}}$ and a Nootkatol Yield of $54 \ \frac{\text{mg}}{\text{{L}}$. Wriessnegger produced $208 \ \frac{\text{mg}}{\text{{L}}$ Nootkatone and $44 \ \frac{\text{mg}}{\text{{L}}$ Nootkatol. This showed us that our model is already quite accurate and that our assumption of a five-fold reduction in the backwards reaction of alcohol dehydrogenase is valid as well, as our $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio was 4.96, which is close to the 4.72 by Wriessnegger. But our model still lacks an important factor, which is why we did not fit the FPP import to this, but to the next model.</p> |
| + | <h3>Toxicity</h3> |
| + | <p>According to <a href="http://www.sciencedirect.com/science/article/pii/S1096717613000293"><abbr title="2013, Gavira - Challenges and pitfalls of P450-dependent (+)-valencene bioconversion by Saccharomyces cerevisiae">Carole Gavira 2013</abbr></a> both Nootkatone and Nootkatol exhibit toxicity at high levels. At $100 \ \frac{\text{mg}}{\text{{L}}$ Nootkatol the cell viability was decreased to 55%, at $100 \ \frac{\text{mg}}{\text{{L}}$ Nootkatone to 80%. For both substances all cells were dead around $1000 \ \frac{\text{mg}}{\text{{L}}$. We therefore used hill kinetics to fit this behaviour.</p> |
| + | <p>$$\frac{K_{Tox}^n}{K_{Tox}^n + [S]^n$$</p> |
| + | <p>We fitted the data by Gavira using <code>scipy.optimize.minimize</code> and got the following results. Note that due to numerical reasons the factor <code>n</code> had to be calculated as a float but then was rounded to an integer.</p> |
| | | |
− | <!-- Plot p450 Bioreactor -->
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/b/bf/T--Cologne-Duesseldorf--Toxicity.svg"> |
− | <img src="https://static.igem.org/mediawiki/2017/f/f7/T--Cologne-Duesseldorf--Nootkatone-p450-Model-Bioreactor.svg">
| + | |
− | <p>The yield of $154.9 \ \frac{\text{mg}}{\text{L}}$ Nootkatol was lower than the published results of Wriessnegger 2014. Our first guess was that the assumption of all enzymes being equally concentrated was probably false. We therefore varied the enzyme concentrations and found that overexpression of valencene synthase increased the yield dramatically by converting way more FPP than before, while overexpressing the other enzymes had little to no effect at all:</p>
| + | <table> |
− | <!-- Plot Expression analysis -->
| + | <thead> |
− | <img src="https://static.igem.org/mediawiki/2017/8/8a/T--Cologne-Duesseldorf--Nootkatone-Expression-3D.svg">
| + | <tr> |
− | <p>What can be seen in the plot above is that the system is mostly influenced by concentration changes of valencene synthase. Since the Nootkatone production did not seem to increase further after increasing the valencene synthase concentration by 20-fold, we stuck to that number and simulated our model under the changed conditions.</p>
| + | <th>Parameter</th> |
− | <!-- Plot p450 Bioreactor ValS Up-->
| + | <th>Value</th> |
− | <img src="https://static.igem.org/mediawiki/2017/e/ed/T--Cologne-Duesseldorf--Nootkatone-p450-Model-Bioreactor-Val-Up.svg">
| + | </tr> |
− | <p>The maximal yield of this simulation was $2965.0 \ \frac{\text{mg}}{\text{L}}$ Nootkatone and $670.0 \frac{\text{mg}}{\text{L}}$ Nootkatol, greatly exceeding the maximal concentration achieved by Wriessnegger 2014. But our $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio was quite similar and we therefore deduced that the reaction mechanism we assumed seemed to be quite accurate. We found two possible explanations for the overly high yield. On the one hand our assumption for the maximal FPP concentration could have been false. The total yield of the model scales with FPP supply, so that could be the error. On the other hand, a known fact about Nootkatone production is the the toxicity of the Nootkatone precursor Nootkatol. According to <a href="http://www.sciencedirect.com/science/article/pii/S1096717613000293">Gavira 2013</a> the toxic nootkatol concentration for yeast is around $ 100 \frac{\text{mg}}{\text{L}}$.</p>
| + | </thead> |
− | <h3>Nootkatol penalty</h3>
| + | <tbody> |
− | <p>We therefore expanded our model using a Hill function alike penalty function for increasing nootkatol concentration, which we applied to the FPP production representative for the whole yeast cell biomass production:
| + | <tr> |
− | $$\frac{dFPP}{dt} = \mu_{FPP} \cdot (Max_{FPP} - c_{FPP}) \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} $$
| + | <td>$K_{\text{Toxic Nootkatol}}$</td> |
− | The system reacted in the following way:</p>
| + | <td>105.14</td> |
− | <!-- Plot Nootkatol FPP penalty -->
| + | </tr> |
− | <img src="https://static.igem.org/mediawiki/2017/d/de/T--Cologne-Duesseldorf--Nootkatone-Penalty-FPP.svg">
| + | <tr> |
− | <p>The yield of $438.5 \ \frac{\text{mg}}{\text{L}}$ Nootkatone and $88.7 \frac{\text{mg}}{\text{L}}$ Nootkatol with a $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio of $\approx 4.9$ is way closer to the publication of <a href="http://www.sciencedirect.com/science/article/pii/S1096717614000421">Wriessnegger 2014</a> ($208 \ \frac{\text{mg}}{\text{L}}$), which led us to the conclusion that our model is already a quite accurate description of the pathway.</p>
| + | <td>$n_{\text{Toxic Nootkatol}}$</td> |
− | <h3>Extended Nootkatol penalty</h3>
| + | <td>4</td> |
− | <p>The assumption of penalizing only the FPP influx representative for the whole activity of the cell is rather crude and we therefore wanted to check whether penalizing every reaction in the pathway with increased Nootkatol concentration would yield different results.</p>
| + | </tr> |
− | <p>$$\frac{dFPP}{dt} = \mu_{FPP} \cdot (Max_{FPP} - c_{FPP}) \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}}$$</p>
| + | <tr> |
− | <p>$$\frac{dValencene}{dt} = \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} $$</p>
| + | <td>$K_{\text{Toxic Nootkatone}}$</td> |
− | <p>$$\frac{dNootkatol}{dt} = \frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} $$</p>
| + | <td>141.4</td> |
− | <p>$$\frac{dNootkatone}{dt} = \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n}$$</p>
| + | </tr> |
− | <!-- Plot Nootkatol all penalty -->
| + | <tr> |
− | <img src="https://static.igem.org/mediawiki/2017/7/75/T--Cologne-Duesseldorf--Nootkatone-Penalty-All.svg">
| + | <td>$n_{\text{Toxic Nootkatone}}$</td> |
− | <p>This model yielded a maximal yield of $398.4 \ \frac{\text{mg}}{\text{L}}$ Nootkatone, $90.4 \frac{\text{mg}}{\text{L}}$ Nootkatol and a $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio of $ \approx 4.4$.</p>
| + | <td>4</td> |
− | <h3>Reversibility</h3>
| + | </tr> |
− | <p>Since we assumed that Nootkatone is not degraded and that the reaction is reversible both substances accumulate in our model. This challenges the assumption that only the reaction catalysed by the alcohol dehydrogenase is reversible. We therefore set up a model in which every reaction is reversible and varied the speed of the back reaction to get a feeling of how the system might react to the overaccumulation. We kept the penalty on FPP.</p>
| + | |
− | <p>$$\ce{FPP <->[ValS] Valencene <->[HPO] ValenceneO <->[CPR] Nootkatol <->[ADH] Nootkatone}$$</p>
| + | |
− | <p>$$\frac{dFPP}{dt} = \mu_{FPP} \cdot (Max_{FPP} - c_{FPP}) \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{\frac{V_{M,ValS+} \cdot c_{FPP}}{K_{M,ValS+}} - \frac{V_{M,ValS-} \cdot c_{Valencene}}{K_{M,ADH-}}}{1 + \frac{c_{FPP}}{K_{M,ValS+}} + \frac{c_{Valencene}}{K_{M,ValS-}}}$$</p>
| + | |
− | <p>$$\frac{dValencene}{dt} = \frac{\frac{V_{M,ValS+} \cdot c_{FPP}}{K_{M,ValS+}} - \frac{V_{M,ValS-} \cdot c_{Valencene}}{K_{M,ADH-}}}{1 + \frac{c_{FPP}}{K_{M,ValS+}} + \frac{c_{Valencene}}{K_{M,ValS-}}} - \frac{\frac{V_{M,p450+} \cdot c_{Valencene}}{K_{M,p450+}} - \frac{V_{M,p450-} \cdot c_{Nootkatol}}{K_{M,p450-}}}{1 + \frac{c_{Valencene}}{K_{M,p450+}} + \frac{c_{Nootkatol}}{K_{M,p450-}}}$$</p>
| + | |
− | <p>$$\frac{dNootkatol}{dt} = \frac{\frac{V_{M,p450+} \cdot c_{Valencene}}{K_{M,p450+}} - \frac{V_{M,p450-} \cdot c_{Nootkatol}}{K_{M,p450-}}}{1 + \frac{c_{Valencene}}{K_{M,p450+}} + \frac{c_{Nootkatol}}{K_{M,p450-}}} - \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p>
| + | |
− | <p>$$\frac{dNootkatone}{dt} = \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p>
| + | |
− | <!-- Plot Reversible FPP penalty -->
| + | |
− | <img src="https://static.igem.org/mediawiki/2017/2/2b/T--Cologne-Duesseldorf--Nootkatone-All-Reversible.svg">
| + | |
− | <p>This model yielded a maximal yield of $437.9 \ \frac{\text{mg}}{\text{L}}$ Nootkatone, $88.6 \frac{\text{mg}}{\text{L}}$ Nootkatol and a $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio of $ \approx 4.9$.</p>
| + | |
− | <p>As with the non-reversible model we wanted to check how a penalty on all reactions would change the way the model behaved.</p>
| + | |
− | <p>$$\frac{dFPP}{dt} = \mu_{FPP} \cdot (Max_{FPP} - c_{FPP}) \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{\frac{V_{M,ValS+} \cdot c_{FPP}}{K_{M,ValS+}} - \frac{V_{M,ValS-} \cdot c_{Valencene}}{K_{M,ADH-}}}{1 + \frac{c_{FPP}}{K_{M,ValS+}} + \frac{c_{Valencene}}{K_{M,ValS-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} $$</p>
| + | |
− | <p>$$\frac{dValencene}{dt} = \frac{\frac{V_{M,ValS+} \cdot c_{FPP}}{K_{M,ValS+}} - \frac{V_{M,ValS-} \cdot c_{Valencene}}{K_{M,ADH-}}}{1 + \frac{c_{FPP}}{K_{M,ValS+}} + \frac{c_{Valencene}}{K_{M,ValS-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{\frac{V_{M,p450+} \cdot c_{Valencene}}{K_{M,p450+}} - \frac{V_{M,p450-} \cdot c_{Nootkatol}}{K_{M,p450-}}}{1 + \frac{c_{Valencene}}{K_{M,p450+}} + \frac{c_{Nootkatol}}{K_{M,p450-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} $$</p>
| + | |
− | <p>$$\frac{dNootkatol}{dt} = \frac{\frac{V_{M,p450+} \cdot c_{Valencene}}{K_{M,p450+}} - \frac{V_{M,p450-} \cdot c_{Nootkatol}}{K_{M,p450-}}}{1 + \frac{c_{Valencene}}{K_{M,p450+}} + \frac{c_{Nootkatol}}{K_{M,p450-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} - \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n} $$</p>
| + | |
− | <p>$$\frac{dNootkatone}{dt} = \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}} \cdot \frac{c_{Nootkatol,Toxic} \cdot K_M^n}{c_{Nootkatol}+ c_{Nootkatol,Toxic} \cdot K_M^n}$$</p>
| + | |
− | <!-- Plot All Reversible All penalty -->
| + | |
− | <img src="https://static.igem.org/mediawiki/2017/b/bb/T--Cologne-Duesseldorf--Nootkatone-All-Reversible-All-Penalty-Model.svg">
| + | |
− | <p>This model yielded a maximal yield of $394.2 \ \frac{\text{mg}}{\text{L}}$ Nootkatone, $88.1 \frac{\text{mg}}{\text{L}}$ Nootkatol and a $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio of $ \approx 4.4$.</p>
| + | |
− | <p>A thing we wanted to check at this point was if the introduction of reversible reactions and penalty terms changed the behaviour of our expression analysis and we thus conducted it for a second time, now with the changed model:</p>
| + | |
− | <!-- Plot 3D Expression All Reversible All Penalty -->
| + | |
− | <img src="https://static.igem.org/mediawiki/2017/1/1f/T--Cologne-Duesseldorf--Nootkatone-Expression-3D-All-Reversible-All-Penalty.svg">
| + | |
− | <p>Apparently, less overexpression of Valencene synthase is needed, whereas now the overexpression of ADH-21 has little effect of overall Nootkatone production, compared to no effect before.</p>
| + | |
− | <h3>Peroxisome model</h3>
| + | |
− | <p>Having explored the dynamics of the reactions involved we further wanted know whether using peroxisomes to produce Nootkatone would increase the yield as expected. Since we assume that the toxic intermediate Nootkatol cannot diffuse out of the peroxisome, the production has no penalty terms, but we assume all processes to be reversible:</p>
| + | |
− | <p>$$\frac{dFPP}{dt} = \mu_{FPP} \cdot (Max_{FPP} - c_{FPP}) - \frac{\frac{V_{M,ValS+} \cdot c_{FPP}}{K_{M,ValS+}} - \frac{V_{M,ValS-} \cdot c_{Valencene}}{K_{M,ADH-}}}{1 + \frac{c_{FPP}}{K_{M,ValS+}} + \frac{c_{Valencene}}{K_{M,ValS-}}}$$</p>
| + | |
− | <p>$$\frac{dValencene}{dt} = \frac{\frac{V_{M,ValS+} \cdot c_{FPP}}{K_{M,ValS+}} - \frac{V_{M,ValS-} \cdot c_{Valencene}}{K_{M,ADH-}}}{1 + \frac{c_{FPP}}{K_{M,ValS+}} + \frac{c_{Valencene}}{K_{M,ValS-}}} - \frac{\frac{V_{M,p450+} \cdot c_{Valencene}}{K_{M,p450+}} - \frac{V_{M,p450-} \cdot c_{Nootkatol}}{K_{M,p450-}}}{1 + \frac{c_{Valencene}}{K_{M,p450+}} + \frac{c_{Nootkatol}}{K_{M,p450-}}}$$</p>
| + | |
− | <p>$$\frac{dNootkatol}{dt} = \frac{\frac{V_{M,p450+} \cdot c_{Valencene}}{K_{M,p450+}} - \frac{V_{M,p450-} \cdot c_{Nootkatol}}{K_{M,p450-}}}{1 + \frac{c_{Valencene}}{K_{M,p450+}} + \frac{c_{Nootkatol}}{K_{M,p450-}}} - \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p>
| + | |
− | <p>$$\frac{dNootkatone}{dt} = \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$</p>
| + | |
− | <!-- Plot All Reversible, no Penalty -->
| + | |
− | <img src="https://static.igem.org/mediawiki/2017/6/63/T--Cologne-Duesseldorf--Nootkatone-All-Reversible-No-Penalty.svg">
| + | |
− | <p>All of the above results summarized in a table.</p>
| + | |
− | <table>
| + | |
− | <thead>
| + | |
− | <tr>
| + | |
− | <th>Model</th>
| + | |
− | <th>Nootkatone yield $[\frac{\text{mg}}{\text{L}}]$</th>
| + | |
− | <th>Nootkatol yield $[\frac{\text{mg}}{\text{L}}]$</th>
| + | |
− | <th>Nootkatone/Nootkatol</th>
| + | |
− | </tr>
| + | |
− | </thead>
| + | |
− | <tbody>
| + | |
− | <tr>
| + | |
− | <td>No Penalty</td>
| + | |
− | <td>2965.0</td>
| + | |
− | <td>670</td>
| + | |
− | <td>4.4</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>FPP Penalty</td>
| + | |
− | <td>438.5</td>
| + | |
− | <td>88.7</td>
| + | |
− | <td>4.9</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>All Penalty</td>
| + | |
− | <td>398.3</td>
| + | |
− | <td>90.4</td>
| + | |
− | <td>4.4</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>Reversible, FPP Penalty</td>
| + | |
− | <td>437.9</td>
| + | |
− | <td>88.6</td>
| + | |
− | <td>4.9</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>Reversible, All Penalty</td>
| + | |
− | <td>394.2</td>
| + | |
− | <td>88.1</td>
| + | |
− | <td>4.4</td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td>Reversible, No Penalty</td>
| + | |
− | <td>2552.8</td>
| + | |
− | <td>567.9</td>
| + | |
− | <td>4.4</td>
| + | |
− | </tr>
| + | |
| </tbody> | | </tbody> |
− | </table>
| + | </table> |
− | <p>During this investigation we noticed that under those conditions the maximal Nootkatone production is only dependent on the size of the peroxisome and therefore modeled the production depending on the peroxisomal size.</p>
| + | |
− | <!-- Plot Peroxisomal vs luminar production -->
| + | |
− | <img src="https://static.igem.org/mediawiki/2017/9/93/T--Cologne-Duesseldorf--Nootkatone-Peroxisome-Model.svg">
| + | |
− | <img src="https://static.igem.org/mediawiki/2017/4/46/T--Cologne-Duesseldorf--Nootkatone-Peroxisome-Model-Diameter.svg">
| + | <p>Although Nootkatol is more toxic to the cell than Nootkatone the later is concentrated five times higher in our model. We therefore limited us to the Nootkatol penalty to keep the model simple. |
− | <p>With the minimal peroxisomal diameter for equal production being $5.79 \ \text{µm}$, which we obtained by linear regression, we thus decided to create a <a href="">Pex11 knockout</a> mutant in which we can control the size of the peroxisome. </p>
| + | We used the arithmetic mean of the two functions as a penalty function for our FPP import. The idea behind that was that since the whole pathway depends linearly on the FPP influx it can act representative for the cell viability.</p> |
| + | <p>$$\frac{K_{\text{Tox Nkn}}^2}{K_{\text{Tox Nkn}}^2 + [\text{Nkn}]^2}$$</p> |
| + | <p>This changes our system in the following way.</p> |
| + | |
| + | <!-- img pathway tox --> |
| + | <img class="max-width" src=""> |
| + | |
| + | <p>$$\frac{dFPP}{dt} = v_{\text{FPP in}} \cdot \frac{K_{\text{Tox Nkn}}^2}{K_{\text{Tox Nkn}}^2 + [\text{Nkn}]^2} - \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} $$</p> |
| + | |
| + | <h3 id="PenaltyModel">Penalty model dynamics</h3> |
| + | <p>This is the model where we actually fitted our import parameter to the data supplied by Wriessnegger, as we assumed it is closest to the actual biological situation. We did this by using <code>scipy.optimize.brent</code> to minimize the error function $\text{abs}(208 - [S]_{\text{Nootkatol}})$. This gave us an import rate of $4.18E-9 \frac{1}{\text{s}}$, which we then also used in all other models.</p> |
| + | <!-- img penalty --> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/2/27/T--Cologne-Duesseldorf--Bioreactor-Penalty-Dynamics.svg"> |
| + | |
| + | <h3>Penalty model expression</h3> |
| + | <p>We wanted to check whether over- or underexpression of any of the enzymes could improve our Nootkatone yield. We therefore set up one analysis in which we held two of the three enzyme concentrations constant while varying the third one and a second one in which all enzyme concentrations were varied at the same time.</p> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/1/15/T--Cologne-Duesseldorf--Bioreactor-Penalty-Expression-2D.svg"> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/0/00/T--Cologne-Duesseldorf--Bioreactor-Penalty-Expression-3D.svg"> |
| + | |
| + | |
| + | <p>Since we fitted the FPP concentration an enzyme concentration of $1 \ \text{µM}$, a further increase in enzyme concentration did not result in a higher yield, as was to be expected. But interestingly down-regulating valencen synthase led to an increase in Nootkatone yield, which was probably due to a submaximal penalty. We further wanted to explore how the system reacts when the FPP import is increased by a factor of 10.</p> |
| + | |
| + | <h3>Penalty model increased FPP import dynamics</h3> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/7/74/T--Cologne-Duesseldorf--Bioreactor-Penalty-FPP-Up-Dynamics.svg"> |
| + | <p>While the maximal yield is increased the penalty function of the model almost approaches $10E-2$, which means that at the end of the production almost all cells are dead. The increased yield will therefore most probably result as an artifact of a very high valencen production in the beginning. Since only the imoprt function is penalized, all further reactions can still take place.</p> |
| + | |
| + | <h3>Penalty model increased FPP import expression</h3> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/a/ac/T--Cologne-Duesseldorf--Bioreactor-Penalty-FPP-Up-Expression-2D.svg"> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/c/c0/T--Cologne-Duesseldorf--Bioreactor-Penalty-FPP-Up-Expression-3D.svg"> |
| + | <p>The expression analysis further solidifies the interpretation that the overall yield is linearliy dependent on valencene synthase and FPP import and that the increased yield is an artifact of high early valencene production. |
| + | |
| + | <h3>Penalty model increased FPP import and enzyme concentration dynamics</h3> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/6/62/T--Cologne-Duesseldorf--Bioreactor-Penalty-FPP-Up-Enzymes-Up-Dynamics.svg"> |
| + | <h3>Peroxisome model expression</h3> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/3/38/T--Cologne-Duesseldorf--Bioreactor-Peroxisome-Expression-2D.svg"> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/c/c0/T--Cologne-Duesseldorf--Bioreactor-Peroxisome-Expression-3D.svg"> |
| + | |
| + | <h3>Peroxisome increased FPP import dynamics</h3> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/f/f5/T--Cologne-Duesseldorf--Bioreactor-Peroxisome-FPP-Up-Dynamics.svg"> |
| + | <h3>Peroxisome model increased FPP import expression</h3> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/b/b5/T--Cologne-Duesseldorf--Bioreactor-Peroxisome-FPP-Up-Expression-2D.svg"> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/9/92/T--Cologne-Duesseldorf--Bioreactor-Peroxisome-FPP-Up-Expression-3D.svg"> |
| + | <h3>Peroxisome model increased FPP increased enzyme concentration dynamics</h3> |
| + | <img class="max-width" src="https://static.igem.org/mediawiki/2017/5/5f/T--Cologne-Duesseldorf--Bioreactor-Peroxisome-FPP-Up-Enzymes-Up-Dynamics.svg"> |
| </article> | | </article> |
| </body> | | </body> |
Model
Nootkatone Metabolic Model
Overview
In the following we present our model of the Nootkatone biosynthesis pathway, to give you an insight into its behavior and dynamics. We start with an oversimplified luminar model to get a sense for the behavior of the enzymes in the pathway. Then we continue with a model introducing a function penalizing high concentrations of toxic products. As the toxicity is one of two main culprits of Nootkatone production, we further show the production inside a peroxisome, as we assume that intermediates inside the peroxisome cannot pass the membrane and thus have no toxic effect on the cells. Then we show an opt-knock flux-balance analysis to show how the second culprit, the cellular FPP pool can be overcome.
Basic System
The basic reactions of the Nootkatone pathway that are introduced by our team are the following.
However during research we found that using the p450-BM3 enzyme will simplify and enhance Nootkatone production, giving the following reaction pathway.
We assumed Michaelis-Menten kinetics for each reaction, with the last step being reversible.
Michaelis-Menten kinetics
$$\frac{dP}{dt} = \frac{V_{Max} \cdot c_{S}}{K_{M} + c_{S}}$$
Reversible Michaelist-Menten kinetics
$$\frac{dP}{dt} = \frac{\frac{V_{M+} \cdot c_{S}}{K_{M+}} - \frac{V_{M-} \cdot c_{P}}{K_{M-}}}{1 + \frac{c_{S}}{K_{M+}} + \frac{c_{P}}{K_{M-}}}$$
We further assumed a permanent FPP production, which we fitted in the Penalty model.
This gives us the following system of differential equations.
$$\frac{dFPP}{dt} = v_{\text{FPP in}} - \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} $$
$$\frac{dValencene}{dt} = \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} -\frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}}$$
$$\frac{dNootkatol}{dt} = \frac{V_{Max,p450\_BM3} \cdot c_{Valencene}}{K_{M, p450\_BM3} + c_{Valencene}} - \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$
$$\frac{dNootkatone}{dt} = \frac{\frac{V_{M,ADH+} \cdot c_{Nootkatol}}{K_{M,ADH+}} - \frac{V_{M,ADH-} \cdot c_{Nootkatone}}{K_{M,ADH-}}}{1 + \frac{c_{Nootkatol}}{K_{M,ADH+}} + \frac{c_{Nootkatone}}{K_{M,ADH-}}}$$
Parameters
Our crude first assumption was a constant enzyme concentration of $1 \ \text{µM}$. We mostly used kinetic parameters from the Brenda database. If S. cerevisiae was not available as the host we used the nearest relative, if the reaction was not available we used the kinetics for the respective co-substrate as an upper boundary. Another assumption we made is a five-fold reduction in the speed of the reversible reaction of the ADH-21, based on the work by Sebastian Schulz (2015), that the forward reaction is favored.
Parameter |
Value |
Source |
$v_{\text{FPP in}}$ |
$4.18E-9 \frac{1}{\text{s}}$ |
Penalty model |
$\text{kM}_{\text{Valencene Synthase}}$ |
$1.04 \text{µM}$ |
Brenda |
$\text{kM}_{\text{p450 BM3}}$ |
$126 \text{µM}$ |
Brenda |
$\text{kM}_{\text{ADH-21}}$ |
$161 \text{µM}$ |
Schulz 2015 |
$\text{kcat}_{\text{Valencene Synthase}}$ |
$0.0032 \frac{1}{\text{s}}$ |
Brenda |
$\text{kcat}_{\text{p450 BM3}}$ |
$2.619 \frac{1}{\text{s}}$ |
Brenda |
$\text{kcat}_{\text{ADH-21 forward}}$ |
$6 \frac{1}{\text{s}}$ |
Sebastian Schulz (2015)
|
$\text{kcat}_{\text{ADH-21 backward}}$ |
$1.2 \frac{1}{\text{s}}$ |
$\frac{\text{kcat}_{\text{ADH-21 forward}}}{5}$ |
$c_{\text{Enzyme}}$ |
$1 \text{µM}$ |
Assumption |
Simple model
In order to simulate the system of differential equations we set up a few python files, one containing a model class which consists of the parameters, the models and the integration function, one containing all the kinetics used and one which we used to actually run the simulations. We wanted to show some example code on how to set up such a project, while the code size was still managable, in order to help new iGEM teams that might need help with their modeling.
Kinetics File
def ConstantInflux(substrate,speed):
return(speed)
def MichaelisMenten(
substrate,enzymeConcentration,kcat,km):
return(
(enzymeConcentration*kcat*substrate)
/(km+substrate))
def MichaelisMentenReversible(
substrate,product,enzymeConcentration,
kcats,kcatp,kms,kmp):
return (
(
((enzymeConcentration*kcats*substrate)/kms)
-((enzymeConcentration*kcatp*product)/kmp)
)
/(1+(substrate/kms)+(product/kmp)
))
Model File
import kinetics as k
import numpy as np
import scipy.integrate
class model(object):
def __init__(self):
self.c_ValS = 1E-6 #[M]
self.c_ADH = 1E-6 #[M]
self.c_p450 = 1E-6 #[M]
self.km_ValS = 1.04E-6 #[M]
self.km_p450 = 126E-6 #[M]
self.km_ADH = 161E-6 #[M]
self.kcat_ValS = 0.0032*3600 #[1/s]
self.kcat_p450 = 6*3600 #[1/s]
self.kcat_ADH = 2.619*3600 #[1/s]
self.k_influxSpeed = 1.03562761862e-05 #[1/s]
def FPPInflux(self,FPP):
return(
k.ConstantInflux(
FPP,
self.k_influxSpeed)
)
def ValenceneSynthase(self,FPP):
return(
k.MichaelisMenten(
FPP,
self.c_ValS,
self.kcat_ValS,
self.km_ValS)
)
def p450(self,Valencene):
return(
k.MichaelisMenten(
Valencene,
self.c_p450,
self.kcat_p450,
self.km_p450)
)
def ADH(self,Nootkatol,Nootkatone):
return (
k.MichaelisMentenReversible(
Nootkatol,
Nootkatone,
self.c_ADH,
self.kcat_ADH,
self.kcat_ADHrev,
self.km_ADH,
self.km_ADH)
)
def p450_Model(self,time,initvalues):
FPP,Val,Nkl,Nkn = initvalues
dFPPdt = self.FPPInflux(FPP) - self.ValenceneSynthase(FPP)
dValdt = self.ValenceneSynthase(FPP) - self.p450(Val)
dNkldt = self.p450(Val) - self.ADH(Nkl,Nkn)
dNtkdt = self.ADH(Nkl,Nkn)
return [dFPPdt,dValdt,dNkldt,dNtkdt]
def Integration(self,time,initvalues,model):
Y = np.zeros([len(time),len(initvalues)])
Y[0] = np.transpose(initvalues)
r = scipy.integrate.ode(model)
r.set_integrator('lsoda')
r.set_initial_value(initvalues)
cnt=1
while r.successful() and cnt < len(time):
Y[cnt,:] = r.integrate(time[cnt])
cnt+=1
return Y
Simulation file
from model import model
import numpy as np
import matplotlib.pyplot as plt
m = model()
time = np.linspace(0,1,1000)
data = m.Integration(time,[0,0,0,0],m.p450_Model)
plt.plot(time,data[:,0],label=(
r"FPP, $k_{FPP}$ = "
+"{:.2e}".format(m.k_influxSpeed)
+r" $\frac{1}{h}$"
))
plt.plot(time,data[:,1],label=(
r"Valencene, $c_{ValS}$ = "
+"{:.0e}".format(m.c_ValS)
+r" $\frac{mol}{L}$"
))
plt.plot(time,data[:,2],label=(
r"Nootkatol, $c_{p450}$ = "
+"{:.0e}".format(m.c_p450)
+r" $\frac{mol}{L}$"
))
plt.plot(time,data[:,3],label=(
r"Nootkatone, $c_{ADH-21}$ = "
+"{:.0e}".format(m.c_ADH)
+r" $\frac{mol}{L}$"
))
plt.yscale("log")
plt.legend(loc=9, bbox_to_anchor=(0.5, -0.2), ncol=2)
plt.title("First Simulation")
plt.xlabel(r"Time in $[h]$")
plt.ylabel(r"Yield in $\frac{mol}{cell}$")
plt.show()
The results of our first simulation are the following:
Bioreactor simulation
In order to check the validity of our model we took the results of Tamara Wriessnegger 2014 as a point for reference. Wriessnegger achieved $208 \ \frac{\text{mg}}{\text{L}}$ Nootkatone production after 108 h in a in-vitro production in Pichia pastoris. We therefore had to scale up our single cell model to a bioreactor simulation.
We first calculated the number of product molecules per cell
$$\frac{\text{N}_{\text{Product}}}{\text{cell}} \ [\text{mol}]= c_{Product} [\frac{\text{mol}}{\text{L}}]\cdot V_{\text{Yeast}} \ [\text{L}]$$
Then we calculated the number of cells per Liter bioreactor
$$ \text{cells per Liter} \ [\frac{\text{1}}{\text{L}}]= \frac{\rho_{\text{Cells in Bioreactor}} \ [\frac{\text{g d.w.}}{\text{L}}] }{m_{\text{Yeast dry weight} \ [\text{g d.w.}] } $$
With these two equations we could scale up the production of a single cell for each product.
$$\text{Yield}_{\text{Bioreactor}} \ [\frac{\text{mg}}{\text{L}}] = \frac{\text{N}_{\text{Product}}}{\text{cell}} \ [\text{mol}] \cdot \text{cells per Liter} \ [\frac{\text{1}}{\text{L}}] \cdot \text{M}_{\text{Product}} \ [\frac{\text{g}}{\text{mol}}] \cdot 1000$$
We used the following constants for the calculations above.
Parameter |
Value |
Source |
$\rho_{Bioreactor}$ |
$200 \ \frac{\text{g d.w.}}{\text{L}}$ |
Biomedcentral |
$m_{\text{Yeast dry weight}}$ |
$17.5E-12 \text{ g}$ |
Kirschner Lab |
$V_{\text{Yeast}}$ |
$6E-14 \text{ L}$ |
Philips 2012 |
$M_{\text{FPP}}$ |
$382.33 \ \frac{\text{g}}{\text{mol}}$ |
Pubchem |
$M_{\text{Valencene}}$ |
$204.36 \ \frac{\text{g}}{\text{mol}}$ |
Pubchem |
$M_{\text{Nootkatol}}$ |
$220.35 \ \frac{\text{g}}{\text{mol}}$ |
Pubchem |
$M_{\text{Nootkatone}}$ |
$218.34 \ \frac{\text{g}}{\text{mol}}$ |
Pubchem |
Our model predicts a Nootkatone Yield of $268.14 \ \frac{\text{mg}}{\text{{L}}$ and a Nootkatol Yield of $54 \ \frac{\text{mg}}{\text{{L}}$. Wriessnegger produced $208 \ \frac{\text{mg}}{\text{{L}}$ Nootkatone and $44 \ \frac{\text{mg}}{\text{{L}}$ Nootkatol. This showed us that our model is already quite accurate and that our assumption of a five-fold reduction in the backwards reaction of alcohol dehydrogenase is valid as well, as our $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio was 4.96, which is close to the 4.72 by Wriessnegger. But our model still lacks an important factor, which is why we did not fit the FPP import to this, but to the next model.
Toxicity
According to Carole Gavira 2013 both Nootkatone and Nootkatol exhibit toxicity at high levels. At $100 \ \frac{\text{mg}}{\text{{L}}$ Nootkatol the cell viability was decreased to 55%, at $100 \ \frac{\text{mg}}{\text{{L}}$ Nootkatone to 80%. For both substances all cells were dead around $1000 \ \frac{\text{mg}}{\text{{L}}$. We therefore used hill kinetics to fit this behaviour.
$$\frac{K_{Tox}^n}{K_{Tox}^n + [S]^n$$
We fitted the data by Gavira using scipy.optimize.minimize
and got the following results. Note that due to numerical reasons the factor n
had to be calculated as a float but then was rounded to an integer.
Parameter |
Value |
$K_{\text{Toxic Nootkatol}}$ |
105.14 |
$n_{\text{Toxic Nootkatol}}$ |
4 |
$K_{\text{Toxic Nootkatone}}$ |
141.4 |
$n_{\text{Toxic Nootkatone}}$ |
4 |
Although Nootkatol is more toxic to the cell than Nootkatone the later is concentrated five times higher in our model. We therefore limited us to the Nootkatol penalty to keep the model simple.
We used the arithmetic mean of the two functions as a penalty function for our FPP import. The idea behind that was that since the whole pathway depends linearly on the FPP influx it can act representative for the cell viability.
$$\frac{K_{\text{Tox Nkn}}^2}{K_{\text{Tox Nkn}}^2 + [\text{Nkn}]^2}$$
This changes our system in the following way.
$$\frac{dFPP}{dt} = v_{\text{FPP in}} \cdot \frac{K_{\text{Tox Nkn}}^2}{K_{\text{Tox Nkn}}^2 + [\text{Nkn}]^2} - \frac{V_{Max,ValS} \cdot c_{FPP}}{K_{M, ValS} + c_{FPP}} $$
Penalty model dynamics
This is the model where we actually fitted our import parameter to the data supplied by Wriessnegger, as we assumed it is closest to the actual biological situation. We did this by using scipy.optimize.brent
to minimize the error function $\text{abs}(208 - [S]_{\text{Nootkatol}})$. This gave us an import rate of $4.18E-9 \frac{1}{\text{s}}$, which we then also used in all other models.
Penalty model expression
We wanted to check whether over- or underexpression of any of the enzymes could improve our Nootkatone yield. We therefore set up one analysis in which we held two of the three enzyme concentrations constant while varying the third one and a second one in which all enzyme concentrations were varied at the same time.
Since we fitted the FPP concentration an enzyme concentration of $1 \ \text{µM}$, a further increase in enzyme concentration did not result in a higher yield, as was to be expected. But interestingly down-regulating valencen synthase led to an increase in Nootkatone yield, which was probably due to a submaximal penalty. We further wanted to explore how the system reacts when the FPP import is increased by a factor of 10.
Penalty model increased FPP import dynamics
While the maximal yield is increased the penalty function of the model almost approaches $10E-2$, which means that at the end of the production almost all cells are dead. The increased yield will therefore most probably result as an artifact of a very high valencen production in the beginning. Since only the imoprt function is penalized, all further reactions can still take place.
Penalty model increased FPP import expression
The expression analysis further solidifies the interpretation that the overall yield is linearliy dependent on valencene synthase and FPP import and that the increased yield is an artifact of high early valencene production.
Penalty model increased FPP import and enzyme concentration dynamics
Peroxisome model expression
Peroxisome increased FPP import dynamics
Peroxisome model increased FPP import expression
Peroxisome model increased FPP increased enzyme concentration dynamics