**Authors**: Thierry D.G.A Mondeel, Stefania Astrologo, Ewelina Weglarz-Tomczak & Hans V. Westerhoff
University of Amsterdam
2017
In this notebook we will aim to reproduce the inborn error of metabolism phenylketonuria (PKU) on the human metabolic reconstruction. In patients with PKU the enzyme converting phenylalanine into tyrosine (PAH) is not functional.
We will aim to show that the human metabolic reconstruction model is able to correctly predict that knockout of the PKU gene leads to problems in growth and neurotransmitter productions.
We start by setting up the python environment and loading RECON2. This part may take 10 seconds or so.
In [ ]:
import cobra
from cobra.flux_analysis import pfba
import pandas as pd # for nice tables
pd.set_option('display.max_colwidth', -1)
from utils import show_map
import escher
map_loc = './maps/escher_map_RECON2_AA_metabolism.json' # the escher map used below
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
M = cobra.io.load_json_model('models/recon_2_2_simple_medium.json')
model = M.copy() # this way we can edit model but leave M unaltered
In [ ]:
for r in model.reactions:
r.id,r.name
**Assignment (10 min):** Read the text below and study the images.
The following is taking from Lehninger's principles of biochemistry.
Given that many amino acids are either neuro-transmitters or precursors or antagonists of neutrotransmitters, genetic defects of amino acid metabolism can cause defective neural development and mental retardation. In most such diseases specific intermediates accumulate. For example, a genetic defect in phenylalanine hydroxylase, the first enzyme in the catabolic pathway for phenylalanine, is responsible for the disease phenylketonuria (PKU), the most common cause of elevated levels of phenylalanine (hyperphenylalaninemia). Phenylalanine hydroxylase (also called phenylalanine-4-monooxygenase) is one of a general class of enzymes called mixed-function oxidases, all of which catalyze simultaneous hydroxylation of a substrate by an oxygen atom of $O_2$ and reduction of the other oxygen atom to $H_2O$. Phenylalanine hydroxylase requires the cofactor tetrahydrobiopterin, which carries electrons from NADH to $O_2$ and becomes oxidized to dihydrobiopterin in the process. It is subsequently reduced by the enzyme dihydrobiopterin reductase in a reaction that requires NADH.
In individuals with PKU, a secondary, normally little-used pathway of phenylalanine metabolism comes into play. In this pathway phenylalanine undergoes transamination with pyruvate to yield phenylpyruvate. Phenylalanine and phenylpyruvate accumulate in the blood and tissues and are excreted in the urine—hence the name “phenylketonuria.” Much of the phenylpyruvate, rather than being excreted as such, is either decarboxylated to phenylacetate or reduced to phenyllactate. Phenylacetate imparts a characteristic odor to the urine, which nurses have traditionally used to detect PKU in infants. The accumulation of phenylalanine or its metabolites in early life impairs normal development of the brain, causing severe mental retardation. This may be caused by excess phenylalanine competing with other amino acids for transport across the blood-brain barrier, resulting in a deficit of required metabolites.
Phenylketonuria was among the first inheritable metabolic defects discovered in humans. When this condition is recognized early in infancy, mental retardation can largely be prevented by rigid dietary control. The diet must supply only enough phenylalanine and tyrosine to meet the needs for protein synthesis. Consumption of protein-rich foods must be curtailed. Natural proteins, such as casein of milk, must first be hydrolyzed and much of the phenylalanine removed to provide an appropriate diet, at least through childhood. Because the artificial sweetener aspartame is a dipeptide of aspartate and the methyl ester of phenylalanine, foods sweetened with aspartame bear warnings addressed to individuals on phenylalanine-controlled diets.
Also see Figure 1 below for a pathway visualization of some more common IEMs.
**Assignment (3 min):** Isn't it strange that in Figure 1 the PAH reaction uses NADH? Explain this.
Phenylketonuria can also be caused by a defect in the enzyme that catalyzes the regeneration of tetrahydrobiopterin. The treatment in this case is more complex than restricting the intake of phenylalanine and tyrosine.
Tetrahydrobiopterin is also required for the formation of L-3,4 dihydroxyphenylalanine (L-dopa) and 5-hydroxytryptophan precursors of the neurotransmitters norepinephrine and serotonin, respectively and in phenylketonuria of this type, these pre- cursors must be supplied in the diet. Supplementing the diet with tetrahydrobiopterin itself is ineffective because it is unstable and does not cross the blood-brain barrier.
Also see Figure 2 for the salvage reaction of biopterin.
**Assignment (3 min):** Try to print in the cell below all the reactions (not just their names but their reaction equations) that phenylalanine engages in. If you don't remember how to code this, refer back to the previous notebook.
Hint: write a for loop over the reactions attribute of the phenylalanine metabolite...
In [ ]:
# write a for loop here.
# tip: make use of model.reactions and of the .reaction attribute of each reaction
**Assignment (5 min):** Compare reaction r0399 and the PHETHPTOX2 reaction. What is their relationship? Are they encoded by the same gene or different genes? Check this.
In [ ]:
**Assignment (5 min):** Investigate the reactions of tetrahydrobiopterin and dihydrobiopterin. How does the recycling occur?
In [ ]:
To investigate PKU we will ask the model for growth before and after the mutation in the PHETHPTOX2 gene.
We require that there is always a base level of growth (0.5, arbitrary) so that the model is forced to predict a flux distribution in which growth is occuring.
In [ ]:
model = M.copy()
fvarxns = [model.reactions.r0399, model.reactions.PHETHPTOX2]
cobra.flux_analysis.flux_variability_analysis(model,reaction_list=fvarxns,fraction_of_optimum=0.5)[['minimum','maximum']]
In [ ]:
model = M.copy()
model.reactions.r0399.upper_bound = 0; model.reactions.r0399.lower_bound = 0;
cobra.flux_analysis.flux_variability_analysis(model,reaction_list=fvarxns,fraction_of_optimum=0.01)[['minimum','maximum']]
**Assignment (2 min):** What changed and why?
**Assignment (2 min):** Knockout the gene encoding both the PHETHPTOX2 and r0399 reactions and see what happens if you optimize for growth. What do you expect? Is that what you see?
We already wrote the code that knocks out the gene for you. You should add the FBA simulation and print the flux through the biomass reaction. Try using the summary function like we did in the last notebook.
In [ ]:
model = M.copy() # start fresh
model.reactions.PHETHPTOX2.genes # list the genes
print('PHETHPTOX2 bounds before knockout:',model.reactions.PHETHPTOX2.bounds) # list the gene
print('r0399 bounds before knockout:',model.reactions.r0399.bounds) # list the gene
print()
cobra.manipulation.delete_model_genes(model,['HGNC:8582']) # knock it out
# check that it worked
print('PHETHPTOX2 bounds before knockout:',model.reactions.PHETHPTOX2.bounds)
print('r0399 bounds before knockout:',model.reactions.r0399.bounds) # list the gene
print()
## Add the biomass optimization step here!
We generated a so-called escher map on which to visualize our results. This makes it a bit more intuitive to see what is going on. Take look at the escher map we draw centered around the phenylalanine to tyrosine reaction.
Note: This is only a subset of the reactions in RECON2. There are many more side branches we could draw here. We tried to emulate here the classical textbook we of representing the pathway.
Can you see from the map how PKU might lead to brain development issues?
In [ ]:
b = show_map([],map_loc)
b.display_in_notebook()
In the following we will make various alterations to the model and visualize te flux distribution it predicts. We will project the results from flux balance analysis onto the escher map and print in text the flux variability analysis results for a couple key reactions.
Remember that flux balance analysis gives us one flux distribution that achieves the optimal values for the objective reaction. In contrast, flux variability analysis gives us the minimal and maximal flux possible through the reaction while maintaining steady-state balance.
In [ ]:
model.reactions.biomass_reaction.lower_bound = 0.0001 # arbitrary but non-zero
model.reactions.EX_tyr_L_e.lower_bound = -0.1
rxnsOfInterest = [model.reactions.get_by_id(x) for x in
['biomass_reaction','EX_phe_L_e','EX_tyr_L_e','PHETHPTOX2','r0399']]
fvasol = cobra.flux_analysis.flux_variability_analysis(model,reaction_list=rxnsOfInterest,fraction_of_optimum=0)
fvasol
In [ ]:
fbasol = pfba(model)
b = show_map(fbasol,map_loc)
b.display_in_notebook()
**Assignment (2 min):**Do you get why the enzyme catalyzing conversion of phenylalanine to tyrosine is not active here?
In [ ]:
model.reactions.EX_tyr_L_e.lower_bound = -0.0001
fbasol = pfba(model)
fvasol = cobra.flux_analysis.flux_variability_analysis(model,reaction_list=rxnsOfInterest,fraction_of_optimum=0)
fvasol
b = show_map(fbasol,map_loc)
b.display_in_notebook()
**Assignment (2 min):**
Note: The recycling pathway of biopterin.
In [ ]:
model.reactions.r0399.upper_bound = 0;
fbasol = pfba(model)
fvasol = cobra.flux_analysis.flux_variability_analysis(model,reaction_list=rxnsOfInterest,fraction_of_optimum=0,remove_cycles=True)
fvasol
b = show_map(fbasol,map_loc)
b.display_in_notebook()
**Assignment (2 min):**Is PHETHPTOX2 now essential? ie. is it required to carry flux to get growth?
In [ ]:
model.reactions.PHETHPTOX2.genes
**Assignment (2 min):** In the cell below add the code to knockout the gene and see what happens. Does the result make sense?
In [ ]:
### KNOCKOUT THE GENE HERE
fbasol = pfba(model)
fvasol = cobra.flux_analysis.flux_variability_analysis(model,reaction_list=rxnsOfInterest,fraction_of_optimum=0,remove_cycles=True)
fvasol
b = show_map(fbasol,map_loc)
b.display_in_notebook()
In [ ]:
model = M.copy()
model.reactions.EX_34hpp_.lower_bound = -1;
rxnsOfInterest = [ model.reactions.biomass_reaction, model.reactions.EX_phe_L_e, model.reactions.EX_tyr_L_e,
model.reactions.PHETHPTOX2, model.reactions.r0399, model.reactions.EX_34hpp_]
model.genes.get_by_id('HGNC:8582').knock_out()
fbasol = pfba(model)
fvasol = cobra.flux_analysis.flux_variability_analysis(model,reaction_list=rxnsOfInterest,fraction_of_optimum=0)
fvasol
b = show_map(fbasol,map_loc)
b.display_in_notebook()
**Assignment (5 min):** Even though this may be a simple example what does it teach us about the potential utility of the human metabolic map?
Can you envision a future in which each individual has his or her genetic mutations mapped onto such a model? Could we use similar tricks like discussed above to find ways (with food and drugs) around the blockages such mutations generatate?
In [ ]: