Model
Pex-5 Structure 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 $154.24 \ \frac{\text{mg}}{\text{L}}$ and a Nootkatol Yield of $31.06 \ \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 assumption of a five-fold reduction in the backwards reaction of alcohol dehydrogenase is valid, as our $\frac{\text{Nootkatone}}{\text{Nootkatol}}$ ratio was 4.96, which is quite close to the 4.72 by Wriessnegger. We then took a look at how differently expressing the enzymes would have an influence on Nootkatone production.
Expression analysis
Therefore we chose to double the expression of Valencene Synthase to ensure that our pathway is saturated.
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.
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.
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.
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.
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
Conclusion
Model | Nootkatone | Nootkatol |
---|---|---|
Bioreactor | 154.24 | 31.06 |
Bioreactor ValS Up | 302.87 | 61.36 |
Penalty | 206.10 | 41.40 |
Penalty FPP Up | 309.62 | 62.73 |
Penalty FPP + Enzymes Up | 456.93 | 91.43 |
Peroxisome Enzymes Up | 317.83 | 64.65 |
Peroxisome FPP Up | 309.63 | 62.73 |
Peroxisome FPP + Enzymes Up | 3082.86 | 624.14 |
As can be seen from our simulations, the two main culprits of Nootkatone production are the toxicity of the products at high concentrations and the FPP influx. The toxicity can be avoided by transfering the pathway into the peroxisome, which is one of the projects of our team. To address the problem of FPP influx our team did an opt-knock FBA analyis to show how S. cerevisiae cells can by engineered to stabily produce more FPP.
Further thoughts
A false assumption in the peroxisomal models above is that the size of the peroxisome is equal to that of the yeast cell. This is obviously not correct. We wanted to get a feeling how large the peroxisome actually has to be in order for production to be superior to cytosolic production. We therefore took the the results of the cytosolic model with increased FPP intakte and enzyme concentration and then calculated the yield of the corresponding peroxisomal model with varying peroxisome size.
We calculated the volume for equal production
$$V_{\text{Perox. Equal}} = \frac{\text{Yield}_{\text{Cyt.}} \cdot V_{\text{Yeast}}}{\text{Yield}_{\text{Perox.}}}$$
to be $1.24E-14 \ \text{L}$, so approximately a fifth of the cell volume. To further increase the possible yield our team is working on a Pex11-knockout that aims to increase peroxisome size