I have a model where some species are measured in moles, and some are dimensionless. I would like the former's reactions to be measured in mole/time, and the latter's in 1/time (there is no overlap between species) but SBML demands that all kinetic laws have the same unit.
What is the cleanest way to overcome this? I anticipate it involves a combination of substanceUnits and conversionFactor.
Here is some simple, but incorrect, SBML where species s_1 in reaction r_1 has units mole, and species s_2 in reaction r_2 is dimensionless:
<?xml version="1.0" encoding="UTF-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core" level="3" version="2">
<model id="model" substanceUnits="mole" timeUnits="dimensionless" volumeUnits="dimensionless" areaUnits="dimensionless" lengthUnits="dimensionless" extentUnits="mole">
<listOfCompartments>
<compartment id="comp" spatialDimensions="3" size="1" units="dimensionless" constant="true"/>
</listOfCompartments>
<listOfSpecies>
<species id="s_1" compartment="comp" initialAmount="1" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
<species id="s_2" compartment="comp" initialAmount="1" substanceUnits="dimensionless" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
</listOfSpecies>
<listOfReactions>
<reaction id="r_1" reversible="false">
<listOfReactants>
<speciesReference species="s_1" constant="true"/>
</listOfReactants>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> s_1 </ci>
</math>
</kineticLaw>
</reaction>
<reaction id="r_2" reversible="false">
<listOfReactants>
<speciesReference species="s_2" constant="true"/>
</listOfReactants>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> s_2 </ci>
</math>
</kineticLaw>
</reaction>
</listOfReactions>
</model>
</sbml>