Differences between revisions 1 and 6 (spanning 5 versions)
Revision 1 as of 2017-01-22 15:09:58
Size: 7537
Editor: mark
Comment:
Revision 6 as of 2017-01-24 08:34:59
Size: 7609
Editor: mark
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Introduction to ScrumPy =
This is a very brief introduction to {{{ScrumPy}}}, with emphasis on structural analysis. A more complete documentation can be found [[ScrumPy/Doc|here]].

== Start ScrumPy ==
Assuming you have !ScrumPy already installed on your computer (for example, by following the instructions on [[ScrumPyVM|this page]]:

 1. Open a terminal window. If you are running the virtual machine, click on ''Terminal'' under the ''Applications/Accessories'' menu item.
 1. Virtual machine users can navigate to the supplied models directory by typing ''cd Modelling/models''. Users of other systems can make an empty models folder and enter it.
 1. Type ''!ScrumPy'', and it will start.
= Practical 3:Models and their Sctructural Analysis =
Line 17: Line 8:
If this file has not yet been created, the instruction will open a new empty editor window; copy and paste the model description below. Having done that, select "compile" from the !ScrumPy menu in the editor, and the model is loaded. {{{toy_model.spy}}} is the small structural model described by: If this file has not yet been created, the instruction will open a new empty editor window (an error message complaining about no internal metabolites being defined can be safely ignored at this stage). Copy and paste the model description below. Having done that, select "compile" from the !ScrumPy menu in the editor, and the model is loaded. {{{toy_model.spy}}} is the small structural model described by:
Line 56: Line 47:
=== Syntax errors in models ===
'''R'''emove the tilde sign (~) from any of the reactions in the model file. Implement the modification either by selecting ''!ScrumPy'' > ''Compile'' in the model file, or do:

{{{#!python
>>> m.Reload()
}}}
Note the resulting error message, and correct thre

'''(c)''' Modify the reaction stoichiometry in any of the reactions in ''toy_model.spy'' so that all reactants are identical, e.g.:

{{{#!python
A_tx:
    A -> A
    ~
}}}
Reload or compile the model as above. What happens?
Line 60: Line 68:
The fields {{{Model.sm}}} and {{{Model.smexterns}}} are the two stoichiometry matrices associated with a model - the former is the internal matrix, the latter the external. The external matrix contains infomation about external metabolites, whereas the internal does not. All instances of {{{ScrumPy}}} matrices (subclasses of {{{DynMatrix}}}) have the fields {{{cnames}}} - column names and {{{rnames}}} - row names. The fields {{{Model.sm}}} and {{{Model.smx}}} are the two stoichiometry matrices associated with a model - the former is the internal matrix, the latter the external. The external matrix contains infomation about external metabolites, whereas the internal does not. All instances of {{{ScrumPy}}} matrices (subclasses of {{{DynMatrix}}}) have the fields {{{cnames}}} - column names and {{{rnames}}} - row names.
Line 65: Line 73:
>>> m.sm.rnames #but m.smexterns.rnames will be longer >>> m.sm.rnames #but m.smx.rnames will be longer
Line 68: Line 76:
Useful methods of {{{sm}}} (and {{{smexterns}}}) include {{{ReacToStr(reac)}}}, Useful methods of {{{sm}}} (and {{{smx}}}) include {{{ReacToStr(reac)}}},
Line 84: Line 92:
=== Reaction reversibility ===
{{{ScrumPy}}} accepts three reversibility symbols: {{{"->"}}} - left to right irreversible, {{{"<-"}}} - right to left irreversible, and {{{<>}}} - reversible. Reaction reversibility is handled by the stoichiometry matrix.

{{{#!python
>>> m.sm.GetIrrevs()
['R_1', 'R_2', 'R_3', 'R_4', 'R_5', 'R_6', 'E_tx', 'A_tx']
>>> m.sm.MakeRevers('R_2')
>>> m.sm.GetIrrevs()
['R_1', 'R_3', 'R_4', 'R_5', 'R_6', 'E_tx', 'A_tx']
>>> m.Reload()

>>> m.sm.GetIrrevs()
['R_1', 'R_2', 'R_3', 'R_4', 'R_5', 'R_6', 'E_tx', 'A_tx']
}}}
Line 99: Line 93:
The kernel of the stoichiometry matrix can be calculated using the {{{sm.NullSpace()}}} method ({{{smexterns}}} also has the method, but the kernel of the external matrix is only related to the futile cycles of the model, not possible steady-state solutions that involve consumption of externals). The kernel of the stoichiometry matrix can be calculated using the {{{sm.NullSpace()}}} method.
Line 115: Line 109:
Even if the signs of some of the coeffients indicate thermodynamically infeasible solutions (e.g. all active reactions in the first column have negative coefficients, even though they are irreversible) a lot of useful information can be obtained form {{{k}}}. For instance, we see that the row associated with {{{R_6}}} is a null-vector, indicating that there is no steady-state solution involving {{{R_6}}}. In fact this is how {{{ScrumPy}}} detects dead reactions with the method {{{DeadReactions()}}}. Even if the signs of some of the coefficients indicate thermodynamically infeasible solutions (e.g. all active reactions in the first column have negative coefficients, even though they are irreversible) a lot of useful information can be obtained form {{{k}}}. For instance, we see that the row associated with {{{R_6}}} is a null-vector, indicating that there is no steady-state solution involving {{{R_6}}}. In fact this is how {{{ScrumPy}}} detects dead reactions with the method {{{DeadReactions()}}}.
Line 121: Line 115:
=== Enzymes subsets ===
Line 128: Line 123:
The elementary modes of a model can be analysed using the method {{{Model.ElModes()}}}. The field {{{mo}}} is a matrix similar to {{{k}}}. === Elementary modes ===
The elementary modes of a model can be analysed using the method {{{Model.ElModes()}}}. This method returns an object that collects methods and fields related to the elementary modes of a given model.

The member, {{{.mo}}},
is a matrix similar to {{{k}}}.
Line 175: Line 173:
=== Further Properties of the Stoichiometry Matrix and Null-space ===
'''(a)''' Generate a kernel of the stoichiometry matrix (using the {{{.NullSpace()}}} method).

'''(b)''' Multiply the stoichiometry matrix by the kernel matrix, using the {{{.Mul()}}} method of the stoichiometry matrix.

'''(c)''' Repeat the multiplication above using the external stoichiometry matrix instead.

'''(d)''' Create a kernel of the external stoichiometry matrix - what is different?

'''(e)''' Multiply the internal and external stoichiometry matrices by your new kernel.

'''(f)''' Try adding or removing reactions from the model, and repeat the exercises above, explain the new results.

Practical 3:Models and their Sctructural Analysis

Loading and defining models

A pre-existing model is loaded by creating an instance of a model object ScrumPy.Model(model) with model being the name of the file (string-type ending with the ScrumPy file extension, .spy, all enclosed in quotes) containing the description of the model, provided that the file is stored in the directory from where ScrumPy was launched. If no name is provided, a GUI for selecting a model to open, is launched.

   1 >>> m = ScrumPy.Model('toy_model.spy')

If this file has not yet been created, the instruction will open a new empty editor window (an error message complaining about no internal metabolites being defined can be safely ignored at this stage). Copy and paste the model description below. Having done that, select "compile" from the ScrumPy menu in the editor, and the model is loaded. toy_model.spy is the small structural model described by:

Structural()

A_tx:
    x_A -> A
    ~

R_1:
    A -> B
    ~

R_2:
    B -> C
    ~

R_3:
    C -> E
    ~

R_4:
    B -> D
    ~

R_5:
    D -> E
    ~

R_6:
    D -> F
    ~

E_tx:
    E -> x_E
    ~

The reactions with the suffix "_tx" are transporters, i.e. they convert external metabolites (with prefix "x_"), which can be consumed or produced, to internal metabolites, which have no net consumption or production at steady state.

Syntax errors in models

Remove the tilde sign (~) from any of the reactions in the model file. Implement the modification either by selecting ScrumPy > Compile in the model file, or do:

   1 >>> m.Reload()

Note the resulting error message, and correct thre

(c) Modify the reaction stoichiometry in any of the reactions in toy_model.spy so that all reactants are identical, e.g.:

   1 A_tx:
   2     A -> A
   3     ~

Reload or compile the model as above. What happens?

Properties of structural models

The class Model has a range of methods, of which some are only useful for kinetic models (which are also structural models, but the opposite is not true). The methods are actions on the model object (m in this case), and are invoked by instructions such as  x = m.Method(), where the outcome is a new data object x that contains the result. Among the structurally relevant methods we find ConsMoieties() - which returns a list of conserved moieties; DeadReactions() - which returns a list of reactions that cannot carry steady state flux; FindIsoforms() - which identifies reactions from the model that are redundant, i.e. a set of reactions that have identical stoichiometry; ElModes() - which returns an elementary modes object; Externals() - which returns a list of external metabolites.

The stoichiometry matrix

The fields Model.sm and Model.smx are the two stoichiometry matrices associated with a model - the former is the internal matrix, the latter the external. The external matrix contains infomation about external metabolites, whereas the internal does not. All instances of ScrumPy matrices (subclasses of DynMatrix) have the fields cnames - column names and rnames - row names.

   1 >>> m.sm.cnames
   2 ['R_1', 'R_2', 'R_3', 'R_4', 'R_5', 'R_6', 'E_tx', 'A_tx']
   3 >>> m.sm.rnames                #but m.smx.rnames will be longer
   4 ['A', 'B', 'C', 'E', 'D', 'F']

Useful methods of sm (and smx) include ReacToStr(reac),

   1 >>> print m.sm.ReacToStr('R_2')
   2 R_2:
   3         1/1 B -> 1/1 C
   4         ~

and InvolvedWith(name),

   1 >>> m.sm.InvolvedWith('R_2')
   2 {'C': mpq(1,1), 'B': mpq(-1,1)}
   3 >>> m.sm.InvolvedWith('C')
   4 {'R_2': mpq(1,1), 'R_3': mpq(-1,1)}

Nullspace analysis

The kernel of the stoichiometry matrix can be calculated using the sm.NullSpace() method.

   1 >>> k = m.sm.NullSpace()
   2 >>> k
   3     c_0 c_1
   4 
   5  R_1 -1/1  0/1
   6  R_2 -1/1  1/1
   7  R_3 -1/1  1/1
   8  R_4 0/1  -1/1
   9  R_5 0/1  -1/1
  10  R_6 0/1  0/1
  11  E_tx -1/1  0/1
  12  A_tx -1/1  0/1

Even if the signs of some of the coefficients indicate thermodynamically infeasible solutions (e.g. all active reactions in the first column have negative coefficients, even though they are irreversible) a lot of useful information can be obtained form k. For instance, we see that the row associated with R_6 is a null-vector, indicating that there is no steady-state solution involving R_6. In fact this is how ScrumPy detects dead reactions with the method DeadReactions().

   1 >>> m.DeadReactions()
   2 ['R_6']

Enzymes subsets

Also, note that some of the row-vectors are proportional to each other - R_2, R_3; R_4, R_5; and E_tx, A_tx, R_1. This implies that these sets must carry flux in a coordinated fashion, e.g. any flux solution involving R_4 must also involve R_5. These sets of coordinated reactions are referred to as enzyme subsets and can be determined using the Model method EnzSubsets(). This method returns a dictionary object where keys are subset names (or reaction name if a reaction is in a singleton set) and values are nested dictionaries where keys are reaction names and values are the flux ratios of the reactions. The key DeadReacs maps to a list of dead reactions.

   1 >>> ess=m.EnzSubsets()
   2 >>> ess
   3 {'Ess_3': {'R_4': mpq(-1,1), 'R_5': mpq(-1,1)}, 'Ess_2': {'R_2': mpq(1,1), 'R_3': mpq(1,1)}, 'Ess_1': {'E_tx': mpq(1,1), 'R_1': mpq(1,1), 'A_tx': mpq(1,1)}, 'DeadReacs': {'R_6': mpq(1,1)}}

Elementary modes

The elementary modes of a model can be analysed using the method Model.ElModes(). This method returns an object that collects methods and fields related to the elementary modes of a given model.

The member, .mo, is a matrix similar to k.

   1 >>> elmo = m.ElModes()
   2 >>> elmo.mo
   3     ElMo_0 ElMo_1
   4 
   5  R_1 1/1  1/1
   6  R_2 1/1  0/1
   7  R_3 1/1  0/1
   8  R_4 0/1  1/1
   9  R_5 0/1  1/1
  10  R_6 0/1  0/1
  11  E_tx 1/1  1/1
  12  A_tx 1/1  1/1

The relationship between modes and metabolites is stored in the sto matrix.

   1 >>> elmo.sto
   2     ElMo_0 ElMo_1
   3 
   4  x_A -1/1  -1/1
   5  A 0/1  0/1
   6  B 0/1  0/1
   7  C 0/1  0/1
   8  E 0/1  0/1
   9  D 0/1  0/1
  10  F 0/1  0/1
  11  x_E 1/1  1/1

The methods Modes() and Stos() returns a string with with same information as the matrices above.

   1 >>> print elmo.Modes()
   2 ElMo_0, 1/1 E_tx, 1/1 R_1, 1/1 R_2, 1/1 R_3, 1/1 A_tx
   3 
   4 ElMo_1, 1/1 E_tx, 1/1 R_1, 1/1 A_tx, 1/1 R_4, 1/1 R_5
   5 
   6 >>> print elmo.Stos()
   7 ElMo_0:
   8         1/1 x_A -> 1/1 x_E
   9         ~
  10 ElMo_1:
  11         1/1 x_A -> 1/1 x_E
  12         ~

Further Properties of the Stoichiometry Matrix and Null-space

(a) Generate a kernel of the stoichiometry matrix (using the .NullSpace() method).

(b) Multiply the stoichiometry matrix by the kernel matrix, using the .Mul() method of the stoichiometry matrix.

(c) Repeat the multiplication above using the external stoichiometry matrix instead.

(d) Create a kernel of the external stoichiometry matrix - what is different?

(e) Multiply the internal and external stoichiometry matrices by your new kernel.

(f) Try adding or removing reactions from the model, and repeat the exercises above, explain the new results.

None: Meetings/C1netWork3/Prac3 (last edited 2017-01-24 13:53:59 by mark)