Release notes for sbmlsim 0.9.3
A patch release of fixes: the result of a simulation no longer depends on the simulation which ran before it on the same model, a change fires the events of a model written by sbmlutils with the right values, and a dataset reads the units with a numeric factor which PK-DB writes and converts the range of a row with its values.
Fixes
- A simulation does not depend on the one before it (#292, #295). The absolute tolerance of a concentration species is the tolerance of a concentration times the volume of its compartment. 0.9.0 to 0.9.2 read the volumes from roadrunner before every run, and roadrunner answers the initial volume of a compartment with an initial assignment or an assignment rule from the current parameters, i.e. from the pre-initialization of the simulation which ran last, e.g. its body weight. A simulation after one of another body weight therefore integrated with other tolerances (relative differences of up to
7e-6in a model of pkdb_models), and a serial run differed from a run in a pool, whose workers load the model. The tolerances are now computed from the initial volumes of the model as loaded, so the result of a simulation is the same whatever ran before it, serially and in a pool, bitwise; it is the result of the first run on a model in 0.9.2, and the one of 0.8.5 within a simulator (0.8.5 computed the tolerances again at everyset_model, i.e. at the start of every experiment, from the volumes the experiment before left on a cached model). A model with a compartment of the sizeNaNno longer computes its tolerances again before every run. - A change fires the events of a model written by sbmlutils (#293, #295). The simulator fires an event whose trigger a change makes true. The math of the event was read with the units of its numbers (
necrosis > 0.5 dimensionless,0 mmole), which is no formula of the simulator, and sbmlutils writes a unit on every number: the event did not fire, without a message for its trigger (also in 0.8.5). The numbers are now read without their units, which do not change their values. A trigger which is still no formula the simulator evaluates, e.g. one with a function definition, is reported with a warning which names the event, once per event and model instance, i.e. once per worker of a pool; assignments and priorities which are no formulas were reported already. The constantspi,exponentialeandavogadroin the math of an event are their values (avogadrothe one of roadrunner,6.02214179e23), they stopped the simulation with an error of roadrunner before. - A dataset reads a unit with a numeric factor (#294, #295).
DataSet.from_dfrefused every unit with a factor (Unit expression cannot have a scaling factor), also the units of publications which PK-DB writes by design, e.g.ml/min/(1.73*m^2),micromol/(0.5*hr),(10*ml)/hror10^9/l. Such a unit is now read as a number of the values: the numbers of its rows, values, sd, se, min and max, are multiplied by the factor, and a column whose first unit has a factor gets the unit without it, so8.6inmicromol/(0.5*hr)is17.2inmicromole/hourand converts into the units of a model. A unit without a factor is read as before; a factor which is no positive number, or with an offset unit such asdegC, is an error. - A logarithm to a base in the math of an event (#296, #295). SBML writes the base of a logarithm first,
log(2, x), the formulas of the simulator have it last, so an event which a change fired evaluatedlog(2, 8)as0.333instead of3, without a message (also in 0.8.5). The base is now the second argument of the formula. - The range of a row is converted with its values (#294, #295).
DataSet.from_dfconverted the values, sd and se of the rows with another unit of a column (since 0.9.0) but not their range,minandmax(or*_minand*_max), which then did not bracket their values. The rows of aunitcolumn are now converted in one pass, all numbers of a row once (cvis relative and stays), somean,valueandmedianget one unit, the unit of the first row with one of them; a table whose first mean and first value had different units gave the two columns different units before.