Differences between revisions 1 and 36 (spanning 35 versions)
Revision 1 as of 2024-12-04 16:15:42
Size: 57
Editor: mark
Comment:
Revision 36 as of 2024-12-11 13:40:08
Size: 4955
Editor: mark
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
https://mudsharkstatic.brookes.ac.uk/Nottingham2022/P6/ = 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''

 1. Download the archive containing the model from [[http://mudsharkstatic.brookes.ac.uk/Nottingham2024/P5.zip|here]] and extract the files.This will generate a new directory,"srcs", containing two sub-directories: "Model" and "Analysis". Start !ScrumPy.
 1. Load the Model:
  1. m = !ScrumPy.Model("../Model/Phaeo.spy")
 1. We can now generate a linear programming object:
  1. lp = m.GetLP()
 1. And specify minimising total flux as the objective:
  1. lp.SetObjective(m.sm.cnames)
 1. With the constraint that we must generate 1 mole of TAG:
  1. lp.SetFixedFlux({"TAG_Exp_tx":-1})
 1. We can now solve te lp:
  1. lp.Sovle()
 1. And obtain the solution:
  1. 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])

== Part 2 - Constraint Scanning ==

=== See Demo ===
The module "!LipidScan.py" contains tNow exaine wo functions. Following is their code:

'''a. BuildLP ''''''function'''

{{{#!python
def BuildLP(m):
        lp = m.GetLP()
        lp.SetObjective(m.sm.cnames)
        lp.SetFluxBounds({"RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas":(0,400.0)})
        if "GLYCEROL_Cyto_tx" in m.sm.cnames:
                lp.SetFluxBounds({"GLYCEROL_Cyto_tx":(0,20)})
        return lp
}}}
'''b. !LipidScan ''''''function'''

{{{#!python
def LipidScan(m,lp=None,lo=1.0,hi=20.0):
        ds = DataSets.DataSet()
        ranges = numpy.arange(lo,hi)
        if lp == None:
                lp = BuildLP(m)
        for t in ranges:
                lp.SetFixedFlux({"TAG_synthesis_Cyto":t})
                lp.Solve()
                if lp.GetStatusMsg() == "optimal":
                        sol = lp.GetPrimSol()
                        ds.UpdateFromDic(sol)
        ds.SetPlotX("TAG_synthesis_Cyto")
        ds.AddToPlot("RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas")
        return ds
}}}
To use these methods you need to import the "!LipidScan" module. On ScrumPy window execute the following statements.

{{{#!python
import sys
sys.path.append('../Analysis')
import LipidScan
}}}
Now the methods in the "!LipidScan" module can be used.

 a. Generate LP problem where the objective is to minimise total flux. Constrain the maximum Rubisco flux and glycerol transporter flux to 400 and 20 respectively (make use of !SetFluxBounds() function).

{{{#!python
lp = LipidScan.BuildLP(m)
}}}
 . b. Solve this LP repeatedly (using for loop) while increasing flux in TAG synthesis reaction in range between 1 to 20. Save each of the solution in a dataset.

{{{#!python
ds = LipidScan.LipidScan(m, lp=lp)
}}}
 . c. Examine the flux pattern in Rubisco reaction with respect to increasing flux in TAG synthesis. What is the maximum flux in Rubisco reaction?

{{{#!python
ds.SetPlotX("TAG_synthesis_Cyto") #setting x-axis
ds.AddToPlot("RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas")
}}}
 . d. Add inorganic carbon transporters (Hint: “CO2_Cyto_tx” and “HCO3_Cyto_tx”) and organic carbon transporter (“GLYCEROL_Cyto_tx”) to the plot ''' '''
 . e. What is the maximum flux in TAG synthesis? ''' '''

4. As you would have noticed TAG synthesis in above example is through mixotrophic mode (i.e model uses light energy and organic carbon, glycerol, for lipid production).

As you remember from the lecture, ''P. tricornutum'' can grow under phototrophic condition too (i.e in the absence of glycerol). You will simulate the model in autotrophic condition. For this, constrain the flux in glycerol transporter to zero. ''' '''

{{{#!python
lp = LipidScan.BuildLP(m)
lp.SetFixedFlux({"GLYCEROL_Cyto_tx":0})
res = LipidScan.LipidScan(m, lp=lp)
}}}
 * Plot reactions as above. Examine the difference in flux patterns.'
 * What is the maximum feasible flux in TAG synthesis under phototrophic condition?
 * Is is higher or lower than that in mixotrophic condition (in question 3)?

5. Find the reactions that are active in mixotrophic condition but not in phototrophic condition?

{{{#!python
from ScrumPy.Util import Set
Set.Complement(ds.cnames,res.cnames)
}}}
Try and identify which pathways these reactions belong to, see the digrams in the previous slides or search on the [[https://metacyc.org|MetaCyc]] website. 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.

 . ''' '''

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

  1. 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.

  2. Load the Model:
    1. m = ScrumPy.Model("../Model/Phaeo.spy")

  3. We can now generate a linear programming object:
    1. lp = m.GetLP()
  4. And specify minimising total flux as the objective:
    1. lp.SetObjective(m.sm.cnames)

  5. With the constraint that we must generate 1 mole of TAG:
    1. lp.SetFixedFlux({"TAG_Exp_tx":-1})

  6. We can now solve te lp:
    1. lp.Sovle()
  7. And obtain the solution:
    1. 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])

Part 2 - Constraint Scanning

See Demo

The module "LipidScan.py" contains tNow exaine wo functions. Following is their code:

a. BuildLP function

   1 def BuildLP(m):
   2         lp = m.GetLP()
   3         lp.SetObjective(m.sm.cnames)
   4         lp.SetFluxBounds({"RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas":(0,400.0)})
   5         if "GLYCEROL_Cyto_tx" in m.sm.cnames:
   6                 lp.SetFluxBounds({"GLYCEROL_Cyto_tx":(0,20)})
   7         return lp

b. LipidScan function

   1 def LipidScan(m,lp=None,lo=1.0,hi=20.0):
   2         ds = DataSets.DataSet()
   3         ranges = numpy.arange(lo,hi)
   4         if lp == None:
   5                 lp = BuildLP(m)
   6         for t in ranges:
   7                 lp.SetFixedFlux({"TAG_synthesis_Cyto":t})
   8                 lp.Solve()
   9                 if lp.GetStatusMsg() == "optimal":
  10                         sol = lp.GetPrimSol()
  11                         ds.UpdateFromDic(sol)
  12         ds.SetPlotX("TAG_synthesis_Cyto")
  13         ds.AddToPlot("RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas")
  14         return ds

To use these methods you need to import the "LipidScan" module. On ScrumPy window execute the following statements.

   1 import sys
   2 sys.path.append('../Analysis')
   3 import LipidScan

Now the methods in the "LipidScan" module can be used.

  1. Generate LP problem where the objective is to minimise total flux. Constrain the maximum Rubisco flux and glycerol transporter flux to 400 and 20 respectively (make use of SetFluxBounds() function).

   1 lp = LipidScan.BuildLP(m)
  • b. Solve this LP repeatedly (using for loop) while increasing flux in TAG synthesis reaction in range between 1 to 20. Save each of the solution in a dataset.

   1 ds = LipidScan.LipidScan(m, lp=lp)
  • c. Examine the flux pattern in Rubisco reaction with respect to increasing flux in TAG synthesis. What is the maximum flux in Rubisco reaction?

   1 ds.SetPlotX("TAG_synthesis_Cyto")      #setting x-axis
   2 ds.AddToPlot("RIBULOSE-BISPHOSPHATE-CARBOXYLASE-RXN_Plas")
  • d. Add inorganic carbon transporters (Hint: “CO2_Cyto_tx” and “HCO3_Cyto_tx”) and organic carbon transporter (“GLYCEROL_Cyto_tx”) to the plot

  • e. What is the maximum flux in TAG synthesis?

4. As you would have noticed TAG synthesis in above example is through mixotrophic mode (i.e model uses light energy and organic carbon, glycerol, for lipid production).

As you remember from the lecture, P. tricornutum can grow under phototrophic condition too (i.e in the absence of glycerol). You will simulate the model in autotrophic condition. For this, constrain the flux in glycerol transporter to zero.

   1 lp = LipidScan.BuildLP(m)
   2 lp.SetFixedFlux({"GLYCEROL_Cyto_tx":0})
   3 res = LipidScan.LipidScan(m, lp=lp)
  • Plot reactions as above. Examine the difference in flux patterns.'
  • What is the maximum feasible flux in TAG synthesis under phototrophic condition?
  • Is is higher or lower than that in mixotrophic condition (in question 3)?

5. Find the reactions that are active in mixotrophic condition but not in phototrophic condition?

   1 from ScrumPy.Util import Set
   2 Set.Complement(ds.cnames,res.cnames)

Try and identify which pathways these reactions belong to, see the digrams in the previous slides or search on the MetaCyc website. 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.

None: Meetings/Nottingham2024/Prac5 (last edited 2024-12-12 09:03:16 by mark)