<?xml version="1.0" encoding="iso-8859-1"?>


<!-- FILE : hodgkin_huxley_squid_axon_1952.xml

CREATED : 26th March 2002

LAST MODIFIED : 19th July 2002

AUTHOR : Catherine Lloyd
         Bioengineering Institute
         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.

DESCRIPTION : This file contains a CellML description of the classic Hodgkin-Huxley 1952 model of the squid axon. 

CHANGES: 
  19/07/2002 - CML - Added more metadata.
-->

<model name="hodgkin_huxley_squid_axon_1952" cmeta:id="hodgkin_huxley_squid_axon_1952" 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>Lloyd</vCard:Family>
          <vCard:Given>Catherine</vCard:Given>
          <vCard:Other>May</vCard:Other>
        </vCard:N>
        <vCard:EMAIL rdf:parseType="Resource">
          <rdf:value>c.lloyd@auckland.ac.nz</rdf:value>
          <rdf:type rdf:resource="http://imc.org/vCard/3.0#internet" />
        </vCard:EMAIL>
        <vCard:ORG rdf:parseType="Resource">
          <vCard:Orgname>The University of Auckland</vCard:Orgname>
          <vCard:Orgunit>The Bioengineering Institute</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>2002-03-26</dcterms:W3CDTF>
      </dcterms:created>
      
      <!--
        The Modification History metadata. This lists the changes that have been
        made to the document, who made the changes, and when they were made.
      -->
      <cmeta:modification rdf:parseType="Resource">
        <rdf:value>
          Correcting the equation for dv/dt.
        </rdf:value>
        <cmeta:modifier rdf:parseType="Resource">
          <vCard:N rdf:parseType="Resource">
            <vCard:Family>Nickerson</vCard:Family>
            <vCard:Given>David</vCard:Given>
          </vCard:N>
        </cmeta:modifier>
        <dcterms:modified rdf:parseType="Resource"> 
          <dcterms:W3CDTF>2002-11-20</dcterms:W3CDTF>
        </dcterms:modified>
      </cmeta:modification>
      <cmeta:modification rdf:parseType="Resource">
        <rdf:value>
          Added more 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-19</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 "hodgkin_huxley_squid_axon_1952", which is    
      declared on the <model> element.
    -->
    <rdf:Description rdf:about="#hodgkin_huxley_squid_axon_1952">
      <!-- A human readable name for the model. -->
      <dc:title>
        The Classic Hodgkin-Huxley 1952 Model of A Squid Axon.
      </dc:title>
      
      <!-- A comment regarding the model. -->
      <cmeta:comment rdf:parseType="Resource">
        <rdf:value>
          This is the CellML description of Hodgkin and Huxley's inspirational
          work on a mathematical description of currents through the membrane
          of a nerve fibre (axon) in a giant squid, and their application
          to the modelling of excitation in the nerve. It is generally regarded
          as the first example of a mathematical model of biology.
        </rdf:value>
        <!-- The creator of the comment -->
        <dc:creator rdf:parseType="Resource">
          <vCard:FN>Warren Hedley</vCard:FN>
        </dc:creator>
      </cmeta:comment>
      
      <cmeta:species>Squid</cmeta:species>
      
      <cmeta:bio_entity>Neuron</cmeta:bio_entity>
      
      <!--  Keyword(s) -->
      <bqs:reference rdf:parseType="Resource">
        <dc:subject rdf:parseType="Resource">
          <bqs:subject_type>keyword</bqs:subject_type>
          <rdf:value>
            <rdf:Bag>
              <rdf:li>Neuron</rdf:li>
              <rdf:li>giant axon</rdf:li>
              <rdf:li>electrophysiology</rdf:li>
            </rdf:Bag>
          </rdf:value>
        </dc:subject>
      </bqs:reference>
      
      <!-- 
        The CellML Metadata Specification recommends that bibliographic metadata
        is used to provide information about the original model reference.  The 
        "identifier" attribute on the "BibliographicReference" class provides an
        elegant way to identify a cited reference using a database identifier
        such as Pubmed.  All associated data such as author, journal title,     
        date, etc can be looked up on the database.
      -->
      <bqs:reference rdf:parseType="Resource">
        <bqs:Pubmed_id>2185861</bqs:Pubmed_id>
        <bqs:JournalArticle rdf:parseType="Resource">
          <dc:creator>
            <rdf:Seq>
              <rdf:li rdf:parseType="Resource">
                <bqs:Person rdf:parseType="Resource">
                  <vCard:N rdf:parseType="Resource">
                    <vCard:Family>Hodgkin</vCard:Family>
                    <vCard:Given>A</vCard:Given>
                    <vCard:Other>L</vCard:Other>
                  </vCard:N>
                </bqs:Person>
              </rdf:li>
              <rdf:li rdf:parseType="Resource">
                <bqs:Person rdf:parseType="Resource">
                  <vCard:N rdf:parseType="Resource">
                    <vCard:Family>Huxley</vCard:Family>
                    <vCard:Given>A</vCard:Given>
                    <vCard:Other>F</vCard:Other>
                  </vCard:N>
                </bqs:Person>
              </rdf:li>
            </rdf:Seq>
          </dc:creator>
          <dc:title>
            A quantitative description of membrane current and its application
            to conductance and excitation in nerve
          </dc:title>
          <dcterms:issued rdf:parseType="Resource">
            <dcterms:W3CDTF>1952</dcterms:W3CDTF>
          </dcterms:issued>
          <bqs:Journal rdf:parseType="Resource">
            <dc:title>Journal of Physiology</dc:title>
          </bqs:Journal>
          <bqs:volume>117</bqs:volume>
          <bqs:first_page>500</bqs:first_page>
          <bqs:last_page>544</bqs:last_page>
        </bqs:JournalArticle>
      </bqs:reference>
    </rdf:Description>
  </rdf:RDF>
  
  <!--
    Below, we define some additional units for association with variables and
    constants within the model. The identifiers are fairly self-explanatory.
  -->
  <units name="millisecond">
    <unit prefix="milli" units="second" />
  </units>

  <units name="per_millisecond">
    <unit prefix="milli" units="second" exponent="-1" />
  </units>

  <units name="millivolt">
    <unit prefix="milli" units="volt" />
  </units>

  <units name="milliS_per_cm2">
    <unit prefix="milli" units="siemens" />
    <unit prefix="centi" units="metre" exponent="-2" />
  </units>

  <units name="microF_per_cm2">
    <unit prefix="micro" units="farad" />
    <unit prefix="centi" units="metre" exponent="-2" />
  </units>

  <units name="microA_per_cm2">
    <unit prefix="micro" units="ampere" />
    <unit prefix="centi" units="metre" exponent="-2" />
  </units>

  <!--
    The "environment" component is used to declare variables that are used by
    all or most of the other components, in this case just "time".
  -->
  <component name="environment">
    <variable name="time" public_interface="out" units="millisecond" />
  </component>
  
  <component name="membrane">
    <!-- these variables are defined here and used in other components -->
    <variable name="V" public_interface="out" initial_value="-75.0" units="millivolt" />
    <variable name="E_R" public_interface="out" initial_value="-60.0" units="millivolt" />
   
    <!-- these variables are defined here and only used internally -->
    <variable name="Cm" initial_value="1.0" units="microF_per_cm2" />
    <variable name="I" initial_value="0.0" units="microA_per_cm2" />

    <!-- these variables are imported from other components -->
    <variable name="time" public_interface="in" units="millisecond" />
    <variable name="i_Na" public_interface="in" units="microA_per_cm2" />
    <variable name="i_K" public_interface="in" units="microA_per_cm2" />
    <variable name="i_L" public_interface="in" units="microA_per_cm2" />

    <!--
      The membrane voltage (V) is calculated as an ordinary
      differential equation in terms of the currents.
    -->
    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <apply id="V_diff_calculation"><eq />
        <apply><diff />
          <bvar><ci> time </ci></bvar>
          <ci> V </ci>
        </apply>
        <apply><divide />
          <apply><minus />
            <ci> I </ci>
            <apply><plus />
              <ci> i_Na </ci>
              <ci> i_K </ci>
              <ci> i_L </ci>
            </apply>
          </apply>
          <ci> Cm </ci>
        </apply>
      </apply>
    </math>
  </component>
  
  <component name="sodium_channel">
    <!-- this variable is defined here and used in other components -->
    <variable name="i_Na" public_interface="out" units="microA_per_cm2" />

    <!-- these variables are defined here and only used internally -->
    <variable name="g_Na" initial_value="120.0" units="milliS_per_cm2" />
    <variable name="E_Na" units="millivolt" />

    <!-- these variables are imported from parent and sibling components -->
    <variable name="time" public_interface="in" private_interface="out" units="millisecond" />
    <variable name="V" public_interface="in" private_interface="out" units="millivolt" />
    <variable name="E_R" public_interface="in" units="millivolt" />

    <!-- these variables are imported from encapsulated components -->
    <variable name="m" private_interface="in" units="dimensionless" />
    <variable name="h" private_interface="in" units="dimensionless" />

    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <!--
        The following equation determines the reversal potential of the
        sodium channel in terms of the membrane resting potential.
      -->
      <apply id="E_Na_calculation"><eq />
        <ci> E_Na </ci>
        <apply><plus />
          <ci> E_R </ci>
          <cn cellml:units="millivolt"> 115.0 </cn>
        </apply>
      </apply>

      <!--
        The following equation calculates the sodium current in terms
        of the conductance, the membrane voltage, and the gate variables.
      -->
      <apply id="i_Na_calculation"><eq />
        <ci> i_Na </ci>
        <apply><times />
          <ci> g_Na </ci>
          <apply><power />
            <ci> m </ci>
            <cn cellml:units="dimensionless"> 3.0 </cn>
          </apply>
          <ci> h </ci>
          <apply><minus />
            <ci> V </ci>
            <ci> E_Na </ci>
          </apply>
        </apply>
      </apply>
    </math>
  </component>
  
  <component name="sodium_channel_m_gate">
    <!-- this variable is defined here and used in other components -->
    <variable name="m" public_interface="out" initial_value="0.05" units="dimensionless" />

    <!-- these variables are defined here and only used internally -->
    <variable name="alpha_m" units="per_millisecond" />
    <variable name="beta_m" units="per_millisecond" />

    <!-- these variables are imported from parent and sibling components -->
    <variable name="V" public_interface="in" units="millivolt" />
    <variable name="time" public_interface="in" units="millisecond" />

    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <!--
        The rate constants on the m and h gates are functions
        of membrane voltage
      -->
      <apply id="alpha_m_calculation"><eq />
        <ci> alpha_m </ci>
        <apply><divide />
          <apply><times />
            <cn cellml:units="per_millisecond"> 0.1 </cn>
            <apply><plus />
              <ci> V </ci>
              <cn cellml:units="millivolt"> 25.0 </cn>
            </apply>
          </apply>
          <apply><minus />
            <apply><exp />
              <apply><times />
                <cn cellml:units="dimensionless"> 0.1 </cn>
                <apply><plus />
                  <ci> V </ci>
                  <cn cellml:units="millivolt"> 25.0 </cn>
                </apply>
              </apply>
            </apply>
            <cn cellml:units="dimensionless"> 1.0 </cn>
          </apply>
        </apply>
      </apply>

      <apply id="beta_m_calculation"><eq />
        <ci> beta_m </ci>
        <apply><times />
          <cn cellml:units="per_millisecond"> 4.0 </cn>
          <apply><exp />
            <apply><divide />
              <ci> V </ci>
              <cn cellml:units="millivolt"> 18.0 </cn>
            </apply>
          </apply>
        </apply>
      </apply>

      <apply id="dm_dt"><eq />
        <apply><diff />
          <bvar><ci> time </ci></bvar>
          <ci> m </ci>
        </apply>
        <apply><minus />
          <apply><times />
            <ci> alpha_m </ci>
            <apply><minus />
              <cn cellml:units="dimensionless"> 1.0 </cn>
              <ci> m </ci>
            </apply>
          </apply>
          <apply><times />
            <ci> beta_m </ci>
            <ci> m </ci>
          </apply>
        </apply>
      </apply>
    </math>
  </component>
  
  <component name="sodium_channel_h_gate">
    <variable name="h" public_interface="out" initial_value="0.6" units="dimensionless" />

    <variable name="alpha_h" units="per_millisecond" />
    <variable name="beta_h" units="per_millisecond" />

    <variable name="V" public_interface="in" units="millivolt" />
    <variable name="time" public_interface="in" units="millisecond" />

    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <apply id="alpha_h_calculation"><eq />
        <ci> alpha_h </ci>
        <apply><times />
          <cn cellml:units="per_millisecond"> 0.07 </cn>
          <apply><exp />
            <apply><divide />
              <ci> V </ci>
              <cn cellml:units="millivolt"> 20.0 </cn>
            </apply>
          </apply>
        </apply>
      </apply>

      <apply id="beta_h_calculation"><eq />
        <ci> beta_h </ci>
        <apply><divide />
          <cn cellml:units="per_millisecond"> 1.0 </cn>
          <apply><plus />
            <apply><exp />
              <apply><times />
                <cn cellml:units="dimensionless"> 0.1 </cn>
                <apply><plus />
                  <ci> V </ci>
                  <cn cellml:units="millivolt"> 30.0 </cn>
                </apply>
              </apply>
            </apply>
            <cn cellml:units="dimensionless"> 1.0 </cn>
          </apply>
        </apply>
      </apply>

      <apply id="dh_dt"><eq />
        <apply><diff />
          <bvar><ci> time </ci></bvar>
          <ci> h </ci>
        </apply>
        <apply><minus />
          <apply><times />
            <ci> alpha_h </ci>
            <apply><minus />
              <cn cellml:units="dimensionless"> 1.0 </cn>
              <ci> h </ci>
            </apply>
          </apply>
          <apply><times />
            <ci> beta_h </ci>
            <ci> h </ci>
          </apply>
        </apply>
      </apply>
    </math>
  </component>
  
  <component name="potassium_channel">
    <variable name="i_K" public_interface="out" units="microA_per_cm2" />

    <variable name="g_K" initial_value="36.0" units="milliS_per_cm2" />
    <variable name="E_K" units="millivolt" />

    <variable name="time" public_interface="in" private_interface="out" units="millisecond" />
    <variable name="V" public_interface="in" private_interface="out" units="millivolt" />
    <variable name="E_R" public_interface="in" units="millivolt" />

    <variable name="n" private_interface="in" units="dimensionless" />

    <math xmlns="http://www.w3.org/1998/Math/MathML">
     <apply id="E_K_calculation"><eq />
        <ci> E_K </ci>
        <apply><minus />
          <ci> E_R </ci>
          <cn cellml:units="millivolt"> 12.0 </cn>
        </apply>
      </apply>

      <apply id="i_K_calculation"><eq />
        <ci> i_K </ci>
        <apply><times />
          <ci> g_K </ci>
          <apply><power />
            <ci> n </ci>
            <cn cellml:units="dimensionless"> 4.0 </cn>
          </apply>
          <apply><minus />
            <ci> V </ci>
            <ci> E_K </ci>
          </apply>
        </apply>
      </apply>
    </math>
  </component>
  
  <component name="potassium_channel_n_gate">
    <variable name="n" public_interface="out" initial_value="0.325" units="dimensionless" />

    <variable name="alpha_n" units="per_millisecond" />
    <variable name="beta_n" units="per_millisecond" />

    <variable name="V" public_interface="in" units="millivolt" />
    <variable name="time" public_interface="in" units="millisecond" />

    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <apply id="alpha_n_calculation"><eq />
        <ci> alpha_n </ci>
        <apply><divide />
          <apply><times />
            <cn cellml:units="per_millisecond"> 0.01 </cn>
            <apply><plus />
              <ci> V </ci>
              <cn cellml:units="millivolt"> 10.0 </cn>
            </apply>
          </apply>
          <apply><minus />
            <apply><exp />
              <apply><times />
                <cn cellml:units="dimensionless"> 0.1 </cn>
                <apply><plus />
                  <ci> V </ci>
                  <cn cellml:units="millivolt"> 10.0 </cn>
                </apply>
              </apply>
            </apply>
            <cn cellml:units="dimensionless"> 1.0 </cn>
          </apply>
        </apply>
      </apply>

      <apply id="beta_n_calculation"><eq />
        <ci> beta_n </ci>
        <apply><times />
          <cn cellml:units="per_millisecond"> 0.125 </cn>
          <apply><exp />
            <apply><divide />
              <ci> V </ci>
              <cn cellml:units="millivolt"> 80.0 </cn>
            </apply>
          </apply>
        </apply>
      </apply>

      <apply id="dn_dt"><eq />
        <apply><diff />
          <bvar><ci> time </ci></bvar>
          <ci> n </ci>
        </apply>
        <apply><minus />
          <apply><times />
            <ci> alpha_n </ci>
            <apply><minus />
              <cn cellml:units="dimensionless"> 1.0 </cn>
              <ci> n </ci>
            </apply>
          </apply>
          <apply><times />
            <ci> beta_n </ci>
            <ci> n </ci>
          </apply>
        </apply>
      </apply>
    </math>
  </component>
  
  <component name="leakage_current">
    <variable name="i_L" public_interface="out" units="microA_per_cm2" />

    <variable name="g_L" initial_value="0.3" units="milliS_per_cm2" />
    <variable name="E_L" units="millivolt" />

   <variable name="time" public_interface="in" units="millisecond" />
    <variable name="V" public_interface="in" units="millivolt" />
    <variable name="E_R" public_interface="in" units="millivolt" />

    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <apply id="E_L_calculation"><eq />
        <ci> E_L </ci>
        <apply><plus />
          <ci> E_R </ci>
          <cn cellml:units="millivolt"> 10.613 </cn>
        </apply>
      </apply>

      <apply id="i_L_calculation"><eq />
        <ci> i_L </ci>
        <apply><times />
          <ci> g_L </ci>
          <apply><minus />
            <ci> V </ci>
            <ci> E_L </ci>
          </apply>
        </apply>
      </apply>
    </math>
  </component>
  
  <group>
    <relationship_ref relationship="containment" />
    <component_ref component="membrane">
      <component_ref component="sodium_channel">
        <component_ref component="sodium_channel_m_gate" />
        <component_ref component="sodium_channel_h_gate" />
      </component_ref>
      <component_ref component="potassium_channel">
        <component_ref component="potassium_channel_n_gate" />
      </component_ref>
      <component_ref component="leakage_current" />
    </component_ref>
  </group>
  
  <group>
    <relationship_ref relationship="encapsulation" />
    <component_ref component="sodium_channel">
      <component_ref component="sodium_channel_m_gate" />
      <component_ref component="sodium_channel_h_gate" />
    </component_ref>
    <component_ref component="potassium_channel">
      <component_ref component="potassium_channel_n_gate" />
    </component_ref>
  </group>
  
  <connection>
    <map_components component_1="membrane" component_2="environment" />
    <map_variables variable_1="time" variable_2="time" />
  </connection>


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


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


  <connection>
    <map_components component_1="leakage_current" component_2="environment" />
    <map_variables variable_1="time" variable_2="time" />
  </connection>
  
  <connection>
    <map_components component_1="membrane" component_2="sodium_channel" />
    <map_variables variable_1="V" variable_2="V" />
    <map_variables variable_1="E_R" variable_2="E_R" />
    <map_variables variable_1="i_Na" variable_2="i_Na" />
  </connection>


  <connection>
    <map_components component_1="membrane" component_2="potassium_channel" />
    <map_variables variable_1="V" variable_2="V" />
    <map_variables variable_1="E_R" variable_2="E_R" />
    <map_variables variable_1="i_K" variable_2="i_K" />
  </connection>


  <connection>
    <map_components component_1="membrane" component_2="leakage_current" />
    <map_variables variable_1="V" variable_2="V" />
    <map_variables variable_1="E_R" variable_2="E_R" />
    <map_variables variable_1="i_L" variable_2="i_L" />
  </connection>
  
  
  <connection>
    <map_components component_1="sodium_channel" component_2="sodium_channel_m_gate" />
    <map_variables variable_1="m" variable_2="m" />
    <map_variables variable_1="time" variable_2="time" />
    <map_variables variable_1="V" variable_2="V" />
  </connection>


  <connection>
    <map_components component_1="sodium_channel" component_2="sodium_channel_h_gate" />
    <map_variables variable_1="h" variable_2="h" />
    <map_variables variable_1="time" variable_2="time" />
    <map_variables variable_1="V" variable_2="V" />
  </connection>


  <connection>
    <map_components component_1="potassium_channel" component_2="potassium_channel_n_gate" />
    <map_variables variable_1="n" variable_2="n" />
    <map_variables variable_1="time" variable_2="time" />
    <map_variables variable_1="V" variable_2="V" />
  </connection>


</model>
