<?xml version="1.0"?>

<!--
FILE : basic_reaction_model.xml

CREATED : 27 November 2000

LAST MODIFIED : 22nd July 2002

AUTHOR : Warren Hedley (w.hedley@auckland.ac.nz)
         Department of Engineering Science
         The University of Auckland
         
MODEL STATUS :  This model conforms to the CellML 1.0 Specification released on
                10th August 2001, and the 16/01/2002 CellML Metadata 1.0
                Specification.

ORIGINAL CONCEPT BY :
         Melanie Nelson (mnelson@phsyiome.com)
         Physiome Sciences, Inc.

DESCRIPTION : This file contains a CellML description of an extremely simple
  reaction/pathway cellular model. The model and associated markup have been
  created solely for demonstration purposes.
-->


<!--
  The root element for our CellML model description is <model>. This contains
  a "name" attribute which would be used if the model were to be combined with
  another model at a later date, or if the model is to be referenced in some
  way by another model.

  Two namespaces are declared on the root element. The first sets the default
  namespace for the <model> element and all elements contained within the
  <model> element to the CellML namespace. The second namespace is again the
  CellML namespace, but this time declared with an explicit "cellml" prefix.
  This declaration has document-wide scope, so the "cellml" prefix may be used
  anywhere to move an element or attribute into the CellML namespace.
-->


<model name="basic_reaction_model" xmlns="http://www.cellml.org/cellml/1.0#" xmlns:cellml="http://www.cellml.org/cellml/1.0#" xmlns:cmeta="http://www.cellml.org/metadata/1.0#">

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqs="http://www.cellml.org/bqs/1.0#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#">
    
<!--
      The following RDF block contains metadata that applies to this document
      as a whole, as indicated by the empty about attribute on the 
      <rdf:Description> element.
    -->

    
<rdf:Description rdf:about="">
      
<!--
        The Model Builder Metadata.  The Dublin Core "creator" element is used  
        to indicate the person who translated the model into CellML.
      -->

      
<dc:creator rdf:parseType="Resource">
        
<vCard:N rdf:parseType="Resource">
          
<vCard:Family>Hedley</vCard:Family>
          
<vCard:Given>Warren</vCard:Given>
        
</vCard:N>
        
<vCard:ORG rdf:parseType="Resource">
          
<vCard:Orgname>The University of Auckland</vCard:Orgname>
          
<vCard:Orgunit>The Engineering Science Department</vCard:Orgunit>
        
</vCard:ORG>
      
</dc:creator>
      
      
<!--
        The Creation Date metadata. This is the date on which the model
        was translated into CellML.
      -->

      
<dcterms:created rdf:parseType="Resource">
        
<dcterms:W3CDTF>2000-11-20</dcterms:W3CDTF>
      
</dcterms:created>
      
      
<!--
        The Last Modified Date metadata. This is the date on which
        the model was last changed.
      -->

      
<cmeta:modification rdf:parseType="Resource">
        
<rdf:value>
          Added metadata.
        
</rdf:value>
        
<cmeta:modifier rdf:parseType="Resource">
          
<vCard:N rdf:parseType="Resource">
            
<vCard:Family>Lloyd</vCard:Family>
            
<vCard:Given>Catherine</vCard:Given>
            
<vCard:Other>May</vCard:Other>
          
</vCard:N>
        
</cmeta:modifier>
        
<dcterms:modified rdf:parseType="Resource"> 
          
<dcterms:W3CDTF>2002-07-22</dcterms:W3CDTF>
        
</dcterms:modified>
      
</cmeta:modification>
    
      
      
<!-- The Publisher metadata. -->
      
<dc:publisher>
        The University of Auckland, Bioengineering Institute
      
</dc:publisher>
    
</rdf:Description>
    
    
<!--
      The following metadata refers to the model itself, as indicated by the
      reference to the ID "basic_reaction_model", which is declared on the             <model> element.
    -->

    
<rdf:Description rdf:about="#basic_reaction_model">
      
<!-- A human readable name for the model. -->
      
<dc:title>A Simple Reaction Model</dc:title>
      
      
<!-- A comment regarding the model. -->
      
<cmeta:comment rdf:parseType="Resource">
        
<rdf:value>
          Below is a CellML description of a simple reaction model.  
          
          The purpose of this description is to illustrate how CellML can be 
          used to model metabolic and signal transduction pathways                         within a cell.
        
</rdf:value>
        
<!-- The creator of the comment. -->
        
<dc:creator>
          
<vCard:FN>Catherine Lloyd</vCard:FN>
        
</dc:creator>
      
</cmeta:comment>
    
</rdf:Description>
  
</rdf:RDF>
  
  
  
<!--
    The following <units> elements are used to declare a set of unit names
    that can be referenced by units attributes on <variable> and <cn> elements
    elsewhere in the model. See the example documentation of the simple
    electro-physiological model for more details. Note that the empty prefix
    attributes could have been omitted. They are included here for clarity.
  -->

  
<units name="concentration_units">
    
<unit prefix="milli" units="mole" />
    
<unit units="litre" exponent="-1" />
  
</units>

  
<units name="flux_units">
    
<unit units="concentration_units" exponent="1" />
    
<unit units="second" exponent="-1" />
  
</units>

  
<units name="second_order_rate_constant">
    
<unit units="concentration_units" exponent="-1" />
    
<unit units="second" exponent="-1" />
  
</units>

  
<units name="third_order_rate_constant">
    
<unit units="concentration_units" exponent="-2" />
    
<unit units="second" exponent="-1" />
  
</units>

  
<!--
    The environment component is used to declare variables that are used
    by all or most of the other components. Variables must be declared inside
    of a component element. Note that the name "global_variables" should not
    be interpreted in any way other than as an name, i.e., it has no special
    significance.
  -->

  
<component name="environment">
    
<variable name="time" public_interface="out" units="second" />
  
</component>


  
<!--
    The first four components correspond to the reactants and products in
    the simple reaction model. They are primarily used to store the
    concentrations of each of the species. These variables are given the
    same name as their parent component, and exposed to the rest of the model
    by having a public_interface value of "out". The reaction calculates the
    rate of change of concentration of each of the species as a result
    of that reaction, and the results (the "delta" variables) are passed back
    to the  components representing the chemical species. These variables
    therefore have a public_interface value of in. Because the concentration
    variables are continuous functions of time, the time variable must also
    be declared.

    Although it would be possible to define all of the chemical species and
    the reaction in the same component, it is recommended best practice to
    put each chemical species and each reaction in its own component. This
    makes it easier to combine this model with other pathway models, or merge
    it with electro-physiological or other classes of model.
  -->

  
<component name="A">
    
<variable name="A" public_interface="out" units="concentration_units" />
    
<variable name="delta_A" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> A </ci>
        
</apply>
        
<ci> delta_A </ci>
      
</apply>
    
</math>
  
</component>


  
<component name="B">
    
<variable name="B" public_interface="out" units="concentration_units" />
    
<variable name="delta_B" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> B </ci>
        
</apply>
        
<ci> delta_B </ci>
      
</apply>
    
</math>
  
</component>


  
<component name="C">
    
<variable name="C" public_interface="out" units="concentration_units" />
    
<variable name="delta_C" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> C </ci>
        
</apply>
        
<ci> delta_C </ci>
      
</apply>
    
</math>
  
</component>


  
<component name="D">
    
<variable name="D" public_interface="out" units="concentration_units" />
    
<variable name="delta_D" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> D </ci>
        
</apply>
        
<ci> delta_D </ci>
      
</apply>
    
</math>
  
</component>


  
<!--
    The basic reaction component contains the definition of the only actual
    reaction in our simple model, importing the concentrations of the reactants
    (A and B) and products (C and D) and calculating the change in these
    concentrations (the delta variables) for export back to the components
    where these concentrations are declared (defined above).
  -->

  
<component name="basic_reaction">
    
<!-- These variables are modifiable elsewhere and imported. -->
    
<variable name="A" public_interface="in" units="concentration_units" />
    
<variable name="B" public_interface="in" units="concentration_units" />
    
<variable name="C" public_interface="in" units="concentration_units" />
    
<variable name="D" public_interface="in" units="concentration_units" />

    
<!-- These variables are modifiable in this component and exported. -->
    
<variable name="delta_A" public_interface="out" units="flux_units" />
    
<variable name="delta_B" public_interface="out" units="flux_units" />
    
<variable name="delta_C" public_interface="out" units="flux_units" />
    
<variable name="delta_D" public_interface="out" units="flux_units" />

    
<!--
      k_forward and k_reverse are the forward and reverse rate constants,
      respectively. "r" is the reaction rate, or extent of the reaction.
      They are not used by any other component in the model, and therefore
      have no public or private interface.
    -->

    
<variable name="k_forward" units="second_order_rate_constant" />
    
<variable name="k_reverse" units="third_order_rate_constant" />
    
<variable name="r" units="flux_units" />
    
    
<!--
      The <reaction> element is used to indicate which chemical species are
      participating in this reaction, and what role they play in the reaction.
      When the "delta_variable" and "stoichiometry" attributes are both
      specified on a <role> element, it implies an equation defining the delta
      variable's value in terms of the stoichiometry and the reaction rate.
      The reaction rate is determined by the variable with a role of "rate"
      (in this case "r"), and the equation determining the value of "r" is
      defined using MathML inside that variable reference.

      So <role delta_variable="delta_A" stoichiometry="1"> implies

      <apply><eq />
        <ci> delta_A </ci>
        <apply><times />
          <cn cellml:units="dimensionless"> 1.0 </cn>
          <ci> r </ci>
        </apply>
      </apply>

      Note that the "direction" attributes on the <role> elements defaults to
      "forward" so could have been omitted on the <role> elements below.
    -->

    
<reaction reversible="yes">
      
<variable_ref variable="A">
        
<role role="reactant" direction="forward" delta_variable="delta_A" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="B">
        
<role role="reactant" direction="forward" delta_variable="delta_B" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="C">
        
<role role="product" direction="forward" delta_variable="delta_C" stoichiometry="2" />
      
</variable_ref>
      
<variable_ref variable="D"> 
        
<role role="product" direction="forward" delta_variable="delta_D" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="r">
        
<role role="rate">
          
<math xmlns="http://www.w3.org/1998/Math/MathML">
            
<apply><eq />
              
<ci> r </ci>
              
<apply><plus />
                
<apply><minus />
                  
<apply><times />
                    
<ci> k_forward </ci>
                    
<ci> A </ci>
                    
<ci> B </ci>
                  
</apply>
                
</apply>
                
<apply><times />
                  
<ci> k_reverse </ci>
                  
<apply><power />
                    
<ci> C </ci>
                    
<cn cellml:units="dimensionless"> 2.0 </cn>
                  
</apply>
                  
<ci> D </ci>
                
</apply>
              
</apply>
            
</apply>
          
</math>
        
</role>
      
</variable_ref>
    
</reaction>

  
</component>


  
<!--
    The connections define the mappings between variables declared in
    different components. When more than one variable is mapped between
    two components, all variable mappings must be listed in the same
    connection element (there can only be one connection between two
    components).
  -->

  
<connection>
    
<map_components component_1="A" component_2="basic_reaction" />
    
<map_variables variable_1="A" variable_2="A" />
    
<map_variables variable_1="delta_A" variable_2="delta_A" />
  
</connection>


  
<connection>
    
<map_components component_1="B" component_2="basic_reaction" />
    
<map_variables variable_1="B" variable_2="B" />
    
<map_variables variable_1="delta_B" variable_2="delta_B" />
  
</connection>


  
<connection>
    
<map_components component_1="C" component_2="basic_reaction" />
    
<map_variables variable_1="C" variable_2="C" />
    
<map_variables variable_1="delta_C" variable_2="delta_C" />
  
</connection>


  
<connection>
    
<map_components component_1="D" component_2="basic_reaction" />
    
<map_variables variable_1="D" variable_2="D" />
    
<map_variables variable_1="delta_D" variable_2="delta_D" />
  
</connection>


  
<connection>
    
<map_components component_1="A" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="B" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="C" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="D" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


</model>