Skip to content

Unit validation not working on AssignmentRule #378

@matthiaskoenig

Description

@matthiaskoenig

Hi all,
I have a model were the units in the math of the AssignmentRule do not match the variable. But the unit validation does not raise a UnitError. The model is attached here: dapagliflozin_kidney.zip

      <unitDefinition id="g_per_mole" name="g/mole">
        <listOfUnits>
          <unit kind="gram" exponent="1" scale="0" multiplier="1"/>
          <unit kind="mole" exponent="-1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
     <unitDefinition id="mmole" name="mmole">
        <listOfUnits>
          <unit kind="mole" exponent="1" scale="0" multiplier="0.001"/>
        </listOfUnits>
      </unitDefinition>
 <species metaid="meta_glc_urine" sboTerm="SBO:0000247" id="glc_urine" name="glucose (urine)" compartment="Vurine" initialConcentration="0" substanceUnits="mmole" hasOnlySubstanceUnits="true" boundaryCondition="false" constant="false"/>

The variable is UGE (urinary glucose excretion) with the unit "gram".

<parameter id="UGE" name="urinary glucose excretion (UGE)" value="NaN" units="gram" constant="false"/>
<parameter metaid="meta_Mr_glc" sboTerm="SBO:0000647" id="Mr_glc" name="Molecular weight glc [g/mole]" value="180" units="g_per_mole" constant="true"/>

And the corresponding assignment rule:

 <assignmentRule name="urinary glucose excretion (UGE)" variable="UGE">
        <notes>
          <body xmlns="http://www.w3.org/1999/xhtml">
            <p>Urinary glucose excretion is calculated from cumulative amount of glucose in urine.</p>
          </body>
        </notes>
        <math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:sbml="http://www.sbml.org/sbml/level3/version2/core">
          <apply>
            <divide/>
            <apply>
              <times/>
              <ci> glc_urine </ci>
              <ci> Mr_glc </ci>
            </apply>
            <cn sbml:units="dimensionless" type="integer"> 1000 </cn>
          </apply>
        </math>
      </assignmentRule>

glc_urine [mmole] * Mr_glc [g/mole] = mg != g, i.e., the variable is in g, but the math of the assignment has the units mg. This should give a UnitError.

The same issue happens when not using the factor 1000 in the equation (just but this in so the values are correct)
Normally such errors are correctly handled, not sure why this is not the case here.
Best Matthias

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions