Practical 5: Identifying pathways for TAG synthesis in Phaeodactylum tricornutum
Part 1
Here, we will investigate the genome-scale metabolic model of P. tricornutum to identify pathways for TAG synthesis. See Villanova et al (2021). Front. Plant Sci. 12:642199. doi: 10.3389/fpls.2021.642199
Download the archive containing the model from here and extract the files.This will generate a new directory,"srcs", containing two sub-directories: "Model" and "Analysis". Start ScrumPy.
- Load the Model:
m = ScrumPy.Model("../Model/Phaeo.spy")
- We can now generate a linear programming object:
- lp = m.GetLP()
- And specify minimising total flux as the objective:
lp.SetObjective(m.sm.cnames)
- With the constraint that we must generate 1 mole of TAG:
lp.SetFixedFlux({"TAG_Exp_tx":-1})
- We can now solve the lp:
- lp.Solve()
- And obtain the solution:
sol = lp.GetPrimSol()
Sol is a dictionary, mapping reactions to fluxes, satisfying our constraints and objectives. Examine its properties. e.g. what transport processes are involved?
- for r in sol:
- if "_tx" in r:
- print(r, sol[r])
Reaction and metabolite names are derived from MetaCyc so you can use thses to find out more about individual reactions in the solution. NB: the _Cyto suffix is added to differentiate compartmentalisation in the model and is not part of MetaCyc identifier, and should be removed before searching on MetaCyc.
Part 2 - Constraint Scanning
Part 1 describes how to examine a single lp solution. Now we can move on to exploring multiple solutions and examine how Phaeo can rearange its metabolism in response to increasing TAG demand. The "Analysis" directory contains a simple Python module, LipidScan.py, to facilitate this.
Having started ScrumPy and loaded the model as in Part 1, we import the LipidScan module:
>>> import LipidScan
(The model must be loaded first)
We can now generate some results:
>>> res = !LipidScan.LipidScan(m)
"res" is a DataSet, (matrix-like) object that contains 100 lp solutions, for the model, subject to a varying demand for TAG and satisfyng demand for biomass precursors. We are only interested in the reactions that change:
>>> chs = LipidScan.Changers(res)
Commonly, we start by examining the transport processes, which can be conveniently plotted:
>>> res.!SetPlotX("TAG_Exp_tx") >>> for ch in chs:
- if "_tx" in ch:
res.AddToPlot(ch)
- if "_tx" in ch:
This more than is immediately convenient, so we can remove the plasted transporters, to leave only the cytosolic transporters:
>>> res.RemoveMatchesFromPlot("_Plas")
At which point an interpretable pattern starts to emerge.
Over to you!