Documentation

Invoking EFM computation

  • Call the function CalculateFluxModes
  • Note: different input formats are supported, including SBML. Typing

    help CalculateFluxModes

    shows how to call the function for various input formats. For the most common formats, a sample call is given in the Examples section below.

API / Javadoc

  • Javadoc of the API is available external pageonline
  • Sample classes showing how to call the efmtool from Java are available in the ch.javasoft.metabolic.efm.sample package. They can be found in the source files and are also documented in the external pagejavadoc API (click on class names to see sources).

Libraries

FAQ

  1. How can i increase the heap memory of the MATLAB Java Virtual Machine (JVM), e.g. because a OutOfMemoryError occurs?
    → if matlab is started from within the efmtool directory, the efmtool/java.opts file is used, specifying the virtual machine memory options. To increase the memory, change the file accordingly.
    → see external pagehttp://www.mathworks.com/support/solutions/data/1-18I2C.html
  2. Can the tool be used without MATLAB?
    → Yes, the MATLAB integration is just a thin wrapper around the Java tool.
    → Sample code showing how to use the tool is available Downloadhere (JAR, 23 KB)
    → Javadoc of the API is available external pagehere
  3. Are source files available for the efmtool?
    → Yes, either click on the class/interface name in the external pagejavadoc of the API
    → or download Downloadmetabolic-efm-all-src.jar (JAR, 2 MB) containing the Java source files corresponding to the classes in metabolic-efm-all.jar file (see efmtool/lib directory).

Examples

By Stoichiometry

(example from "System Modeling in Cellular Biology: From Concepts to Nuts and Bolts", section "Stoichiometric and Constraint Based Modeling", MIT Press, ISBN-10:0-262-19548-8 / ISBN-13:978-0-262-19548-5)

stru.stoich=[

1 , 0 , 0 , 0 ,-1 ,-1 ,-1 , 0 , 0 , 0

0 , 1 , 0 , 0 , 1 , 0 , 0 ,-1 ,-1 , 0

0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 ,-1

0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 ,-1

0 , 0 , 0 ,-1 , 0 , 0 , 0 , 0 , 0 , 1

0 , 0 ,-1 , 0 , 0 , 0 , 0 , 0 , 1 , 1

];

stru.reversibilities=[0 1 0 0 0 0 0 1 0 0];

mnet = CalculateFluxModes(stru)

This example results the following 8 elementary modes:

efms=[

0 1 2 1 1 2 1 1

1 1 0 -1 -1 0 0 0

1 1 1 0 0 1 1 1

0 1 1 0 0 1 0 0

0 0 0 0 1 1 0 1

0 0 1 1 0 0 1 0

0 1 1 0 0 1 0 0

0 1 0 -1 0 1 -1 0

1 0 0 0 0 0 1 1

0 1 1 0 0 1 0 0

];

Add the reaction and metabolite names to the struct above, e.g.

stru.metaboliteNames = {'A', 'B', 'C', 'D', 'E', 'P'};

stru.reactionNames = {'R1', 'R2', 'R3', 'R4', 'R5', 'R6', 'R7', 'R8', 'R9', 'R10'};

The names will be reflected in the output structure (e.g. in the reaction formulas).

By reaction formulas

The tool also directly parses reaction formulas:

rformulas = {

'--> A'

'<--> B'

'P -->'

'E -->'

'A --> B'

'A --> C'

'A --> D'

'B <--> C'

'B --> P'

'C + D --> E + P'

};

mnet = CalculateFluxModes(rformulas)

Note that also (Palsson-like) formulas with compartments are supported, e.g.

[c]ala-L <==> ala-D

(3) h[e] + (2) na1[c] --> (3) h[c] + (2) na1[e]

Currently, only the following compartments are supported:

  • [c] : cytosol
  • [e] : extracellular
  • [g] : Golgi appratus
  • [m] : mitochondrion
  • [n] : nucleus
  • [r] : endoplasmic reticulum
  • [v] : vacoule
  • [x] : peroxisome

SBML Files

SBML files are directly parsed, a sample call looks like this:

mnet = CalculateFluxModes('c:\sbmlfiles\Yeast_sbml.xml', false, 'external')

Options

Various options are available. For instance

  • exact arithmetic is used
  • output vectors are normalized to length 1 and
  • verbose output level FINE is used

by specifying the following options:

opts = CreateFluxModeOpts('arithmetic', 'fractional', 'normalize', 'norm2', 'level', 'FINE');

mnet = CalculateFluxModes(stru, opts)

Note that the options argument opts is always the last input argument. All options are described on the help page, i.e. type

help CreateFluxModeOpts

Known Issues

  • Duplicate-gene compression is buggy. This compression option is switched off by default, thus standard computations are not affected. Still, for networks with such reactions, the option would be helpful.
    Workaround: don't use this option, remove duplicate gene reactions manually
  • If reactions are enforced, using the ''enforce'' option, an exception similar to this one might occur:
    RuntimeException: no replacement row found with non-zero pivot to reastablish row-echelon form of kernel matrix for row 1.

    Implementation note:
    the error occurs since the initial kernel matrix has not full column rank due to the enforced reactions
    Workaround: enforce fewer reactions, and filter the elementary modes manually after the computation
  • SignToDouble function fails with an error message like the following: "non-unique double expansion for efm 7, found 0 expansions: zeros(7,0)"
    Workaround: use how option 'r' or 's' instead of the default value 'q'
  • If the input matrix is a zero matrix (no rows), an ArrayIndexOutOfBoundsException occurs. This is quite an artificial case, but it might occur if an external preprocessing step takes care of the network compression.
    Workaround: none
JavaScript has been disabled in your browser