Hi all,
currently the distrib distributions are not supporting unit validation. It is possible to encode the unit for the distributions in SBML, e.g. for a normal distribution in the example below. But this information is not used for unit validation.
For the attached example I get the following unit error
WARNING:root:E0: SBML unit consistency (core, L1, code)
[Warning] Missing unit declarations on parameters or literal numbers in expression
In situations where a mathematical expression contains literal numbers or parameters whose units have not been declared, it is not possible to verify accurately the consistency of the units in the expression.
The units of the <initialAssignment> <math> expression 'normal(0, 1)' cannot be fully checked. Unit consistency reported as either no errors or further unit errors related to this object may not be accurate.
despite the normal being in the correct units, i.e. "mM".
It would be great if unit validation on distributions would be supported.
Best Matthias
SBML example model:
<?xml version="1.0" encoding="UTF-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" xmlns:comp="http://www.sbml.org/sbml/level3/version1/comp/version1" xmlns:distrib="http://www.sbml.org/sbml/level3/version1/distrib/version1" level="3" version="1" comp:required="true" distrib:required="true">
<model metaid="meta_distrib_assignment" id="distrib_assignment" name="distrib_assignment" substanceUnits="mole" timeUnits="hr" volumeUnits="litre" areaUnits="m2" lengthUnits="m" extentUnits="mole">
<listOfUnitDefinitions>
<unitDefinition id="hr">
<listOfUnits>
<unit kind="second" exponent="1" scale="0" multiplier="3600"/>
</listOfUnits>
</unitDefinition>
<unitDefinition id="m">
<listOfUnits>
<unit kind="metre" exponent="1" scale="0" multiplier="1"/>
</listOfUnits>
</unitDefinition>
<unitDefinition id="m2">
<listOfUnits>
<unit kind="metre" exponent="2" scale="0" multiplier="1"/>
</listOfUnits>
</unitDefinition>
<unitDefinition id="mM">
<listOfUnits>
<unit kind="mole" exponent="1" scale="-3" multiplier="1"/>
<unit kind="litre" exponent="-1" scale="0" multiplier="1"/>
</listOfUnits>
</unitDefinition>
</listOfUnitDefinitions>
<listOfParameters>
<parameter id="p1" value="0" units="mM" constant="true"/>
</listOfParameters>
<listOfInitialAssignments>
<initialAssignment symbol="p1">
<math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:sbml="http://www.sbml.org/sbml/level3/version1/core">
<apply>
<csymbol encoding="text" definitionURL="http://www.sbml.org/sbml/symbols/distrib/normal"> normal </csymbol>
<cn sbml:units="mM" type="integer"> 0 </cn>
<cn sbml:units="mM" type="integer"> 1 </cn>
</apply>
</math>
</initialAssignment>
</listOfInitialAssignments>
<comp:listOfPorts>
<comp:port metaid="hr_port" sboTerm="SBO:0000599" comp:unitRef="hr" comp:id="hr_port" comp:name="hr_port"/>
<comp:port metaid="m_port" sboTerm="SBO:0000599" comp:unitRef="m" comp:id="m_port" comp:name="m_port"/>
<comp:port metaid="m2_port" sboTerm="SBO:0000599" comp:unitRef="m2" comp:id="m2_port" comp:name="m2_port"/>
<comp:port metaid="mM_port" sboTerm="SBO:0000599" comp:unitRef="mM" comp:id="mM_port" comp:name="mM_port"/>
</comp:listOfPorts>
</model>
</sbml>