Logical structure of COBREXA

COBREXA uses ConstraintTrees.jl for internal representation of all metabolic modeling problems. In short, constraint trees are "tidy" representations of the constraint-based modeling problems, which store information about the variables' participation in named constraints. They provide several main benefits:

  • User is freed from having to allocate variables – all variables are present only implicitly, are described by their "semantics" by participation in constraints, and are allocated automatically whenever the user connects the constraint trees.
  • There is no need for complicated index manipulation (as with linear-algebraic "matrixy" model representations) nor for various identifier mangling schemes – constraint trees provide named interface for everything, and identifiers can be organized into directories to prevent name clashes in various multi-compartment and community models.
  • Contrary to the fixed model representations (such as SBML or JSON models), ConstraintTrees do not possess a semantic of a "single flux-based model" and are thus infinitely extensible, allowing easy creation, manipulation and storage of even very complicated constraint systems.

With ConstraintTrees, the typical workflow in COBREXA is as follows:

  1. "Raw" data and base model data are loaded from semantically organized models (such as SBML, or lab measurements in CSV or other tabular format)
  2. COBREXA functions are used to convert these to a constraint tree that properly describes the problem at hand
    • possibly, multiple types and groups of raw data can be soaked into the constraint tree
  3. Analysis functionality of COBREXA is used to solve the system described by the constraint tree, and extract useful information from the solutions.

COBREXA mainly provides functionality to make this workflow easy to use for many various purposes:

Exploring and customizing the front-end analysis functions

To know which builder function is used to create or modify some kind of constraint tree in COBREXA, use the "link to source code" feature in the front-end function's individual documentation. The source code of front-end functions is written to be as easily re-usable as possible – one can simply copy-paste it into the program, and immediately start building specialized and customized front-end functions.

Technical description of the constraint tree functionality, together with examples of basic functionality and many useful utility functions is available in dedicated documentation of ConstraintTrees.jl.