SBML.org — the global portal for all things SBML

Combining glyclolysis

This example arose from a discussion on the sbml-comp mailing list.

The initial question, summarized from Robert Phair:

"Suppose you have three investigators who have specialized in 3 different parts of metabolism. Each has a model that covers glycolysis, beta oxidation of fatty acids, and the TCA cycle. The first modeler has focused on glycolysis and has included a huge number of mechanistic details for glycolysis while including only skeleton models for beta oxidation and TCA. The second modeler has focused on beta-oxidation, and the third modeler has focused on the TCA cycle. They decide to work together on an integrated model.

The integrated model should consist of the detailed models of glycolysis, beta-ox, and TCA. So each model will contribute one detailed submodel to the final integrated model. [...] [We want] a combined model that includes the three detailed submodels (one each from the parent, child and grandchild) and excludes the 6 skeleton models."

First of all, the approach to this problem that most closely mimics what the hierarchical composition package is designed to do is to develop a hierarchy of the modeling process, and not a hierarchy of the three models in question. So what you want is a series of rules that tell you how to combine these three models in a sensible way.

The rules we will follow are essentially the quote from the end of the question: we need "a combined model that includes the three detailed submodels, and excludes the 6 skeleton models'.

So that's exactly the way we will set this up: the combined model is the parent model, and the three original models are three sibling submodels.

So, this is what you start with:

<sbml>
 <listOfModelDefinitions>
   <modelDefinition id="glycolysis_plus">
     [The entire original glycolysis model, including the skeleton bits]
   </modelDefinition>
   <modelDefinition id="betaox_plus">
     [The entire original beta oxidation of fatty acids model]
   </modelDefinition>
   <modelDefinition id="TCA_plus">
     [The entire original TCA model]
   </modelDefinition>
 </listOfModelDefinitions>
 <model id="combined">
   <listOfSubmodels>
     <submodel modelRef="glycolysis_plus" />
     <submodel modelRef="betaox_plus" />
     <submodel modelRef="TCA_plus" />
   </listOfSubmodels>
 </model>   
</sbml>

Here, 'combined' is an aggregate model that contains three full submodels that do not (yet) interact with each other, and since they all rehash what the others do (albeit in more or less detail), you now have three copies of everything.

The next step is to 'exclude the 6 skeleton models'. Now, I could possibly come up with a way to use ReplacedElement for this, but instead, this situation seems custom-made for the 'Deletion' construct. This is a child of Submodel that says, "When you instantiate this model, don't instantiate these bits." So for each of our three submodels, we want Deletions that tell us we don't want the skeleton constructs.

I'm also going to give the submodels an ID of their own, which we'll use in the next step. Zooming in on the listOfSubmodels, then:

   <listOfSubmodels>
     <submodel id="glycolysis" modelRef="glycolysis_plus">
       <listOfDeletions>
         <deletion idRef="citrate">
         <deletion idRef="citrate_synthase">
         <deletion idRef="fatty_acyl_coa">
         <deletion idRef="fatty_acyl_transport">
         [etc. etc.]
       </listOfDeletions>
     </submodel>
     <submodel id="betaox" modelRef="betaox_plus">
       <listOfDeletions>
         [elements of glycolysis and TCA]
       </listOfDeletions>
     </submodel>
     <submodel id="TCA" modelRef="TCA_plus">
       <listOfDeletions>
         [elements of glycolysis and betaox]
       </listOfDeletions>
     </submodel>
   </listOfSubmodels>

Note that we are not only deleting species here, but reactions as well.

At this point you would still have three non-interacting models, but your overlap would be minimal.

Now what you need to finalize things is a way to say "The element 'acetyl_coa' from the 'glycolysis' model, and the element 'ACOA' from the 'betaox' model, and the element 'AcetylCoA' from the 'TCA' model are all actually the same thing." To do this, you must create a new element in the parent 'combined' model and say that it replaces those elements from the submodels.

 <model id="combined">
   <listOfSubmodels>
     [above]
   </listOfSubmodels>
   <listOfSpecies>
     <species id="Acetyl_CoA"  [details here...] >
        <listOfReplacedElements>
          <replacedElement submodelRef="glycolysis" idRef="acetyl_coa">
          <replacedElement submodelRef="betaox" idRef="ACOA">
          <replacedElement submodelRef="TCA" idRef="AcetylCoA">
        </listOfReplacedElements>
   </listOfSpecies>
 </model>   

You then do the same thing for all elements in the remains of the models that are the same--the compartments, for example, will almost certainly need to be synchronized.

 <model id="combined">
   <listOfSubmodels>
     [above]
   </listOfSubmodels>
   <listOfSpecies>
     <species id="Acetyl_CoA" compartment="mitochondria" initalConcentration="4" >
        <listOfReplacedElements>
          <replacedElement submodelRef="glycolysis" idRef="acetyl_coa">
          <replacedElement submodelRef="betaox" idRef="ACOA">
          <replacedElement submodelRef="TCA" idRef="AcetylCoA">
        </listOfReplacedElements>
     </species>
   </listOfSpecies>
   <listOfCompartments>
     <compartment id="mitochondria">
        <listOfReplacedElements>
          <replacedElement submodelRef="betaox" idRef="mitochondria">
          <replacedElement submodelRef="TCA" idRef="compartment">
        </listOfReplacedElements>
     </compartment>
     <compartment id="cytosol">
        <listOfReplacedElements>
          <replacedElement submodelRef="betaox" idRef="cytosol">
          <replacedElement submodelRef="glycolysis" idRef="compartment">
        </listOfReplacedElements>
     </compartment>
   </listOfCompartments>
 </model>   

Et cetera. The process of hierarchical modeling is therefore throwing everything into the same pot, then pulling out the bits you don't need, and attaching the bits that represent the same underlying aspect or element of the model.



Please use our issue tracking system for any questions or suggestions about this website. This page was last modified 21:24, 9 June 2011.