Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
LCSB-BioCore
SBML.jl
Commits
9556ecd6
Commit
9556ecd6
authored
Jun 26, 2021
by
Miroslav Kratochvil
🚴
Browse files
implement extensive math, clean up epsilons in the tests
parent
538c20de
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/utils.jl
View file @
9556ecd6
...
...
@@ -100,3 +100,33 @@ initial_concentrations(m::SBML.Model; convert_amounts = false) = (
nothing
end
for
(
k
,
s
)
in
m
.
species
)
"""
extensive_kinetic_math(m::SBML.Model, formula::SBML.Math)
Convert a SBML math `formula` to "
extensive
" kinetic laws, where the references
to species that are marked as not having only substance units are converted
from amounts to concentrations.
Handling of units in the conversion process is ignored in this version.
"""
function
extensive_kinetic_math
(
m
::
SBML
.
Model
,
formula
::
SBML
.
Math
)
conv
(
x
::
SBML
.
MathIdent
)
=
begin
haskey
(
m
.
species
,
x
.
id
)
||
return
x
sp
=
m
.
species
[
x
.
id
]
sp
.
only_substance_units
&&
return
x
sz
=
m
.
compartments
[
sp
.
compartment
]
.
size
isnothing
(
sz
)
&&
throw
(
DomainError
(
formula
,
"Non-substance-only-unit reference to species `
$
(x.id)' in an unsized compartment `
$
(sp.compartment)'."
,
),
)
SBML
.
MathApply
(
"/"
,
[
x
,
SBML
.
MathVal
(
sz
)])
end
conv
(
x
::
SBML
.
MathApply
)
=
SBML
.
MathApply
(
x
.
fn
,
conv
.
(
x
.
args
))
conv
(
x
::
SBML
.
Math
)
=
x
conv
(
formula
)
end
test/loadmodels.jl
View file @
9556ecd6
...
...
@@ -32,7 +32,7 @@ sbmlfiles = [
4
,
3
,
),
# a
cool
model with
`
initial
C
oncentration
` from SBML testsuite
# a
nother
model
from SBML suite,
with initial
c
oncentration
s
(
joinpath
(
@__DIR__
,
"data"
,
"sbml00374.xml"
),
"https://raw.githubusercontent.com/sbmlteam/sbml-test-suite/master/cases/semantic/00374/00374-sbml-l3v2.xml"
,
...
...
@@ -82,15 +82,29 @@ end
@test
all
(
isnothing
(
ic
)
for
(
k
,
ic
)
in
SBML
.
initial_concentrations
(
m
))
@test
length
(
SBML
.
initial_amounts
(
m
))
==
4
@test
sum
(
ia
for
(
sp
,
ia
)
in
SBML
.
initial_amounts
(
m
))
==
0.001
@test
sum
(
ic
for
(
sp
,
ic
)
in
SBML
.
initial_concentrations
(
m
,
convert_amounts
=
true
))
==
0.001
@test
isapprox
(
sum
(
ia
for
(
sp
,
ia
)
in
SBML
.
initial_amounts
(
m
)),
0.001
)
@test
isapprox
(
sum
(
ic
for
(
sp
,
ic
)
in
SBML
.
initial_concentrations
(
m
,
convert_amounts
=
true
)),
0.001
,
)
m
=
readSBML
(
joinpath
(
@__DIR__
,
"data"
,
"sbml00374.xml"
))
@test
all
(
isnothing
(
ic
)
for
(
k
,
ic
)
in
SBML
.
initial_amounts
(
m
))
@test
length
(
SBML
.
initial_concentrations
(
m
))
==
4
@test
sum
(
ic
for
(
sp
,
ic
)
in
SBML
.
initial_concentrations
(
m
))
==
0.0020800000000000003
@test
sum
(
ia
for
(
sp
,
ia
)
in
SBML
.
initial_amounts
(
m
,
convert_concentrations
=
true
))
==
0.25
*
0.0020800000000000003
@test
isapprox
(
sum
(
ic
for
(
sp
,
ic
)
in
SBML
.
initial_concentrations
(
m
)),
0.00208
)
@test
isapprox
(
sum
(
ia
for
(
sp
,
ia
)
in
SBML
.
initial_amounts
(
m
,
convert_concentrations
=
true
)),
0.25
*
0.00208
,
)
end
@testset
"Extensive kinetic math"
begin
m
=
readSBML
(
joinpath
(
@__DIR__
,
"data"
,
"sbml00852.xml"
))
subterm
=
SBML
.
extensive_kinetic_math
(
m
,
m
.
reactions
[
"reaction1"
]
.
kinetic_math
)
.
args
[
1
]
.
args
[
2
]
@test
subterm
.
fn
==
"/"
@test
subterm
.
args
[
1
]
==
SBML
.
MathIdent
(
"S1"
)
@test
isapprox
(
subterm
.
args
[
2
]
.
val
,
1.0
)
end
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment