SED-ML LEVEL 2: A PROPOSAL
LUCIAN SMITH
WHAT DO WE WANT? (HARMONY 2021)
MY OWN DESIGN
THIS PROPOSAL
SIMPLE EXAMPLE (SCRIPT)
mod1 = model("urn:sedml:language:sbml", "munz2000.xml",
selectionList=["time", "Susceptible", "Zombie"])
sim1 = uniformTimeCourse(mod1, 0, 0, 5, 50)
plot2d(sim1, name="Figure 3")
SIMPLE EXAMPLE (YML)
sedML:
level: 2
version: 1
listOfModels:
model:
id: mod1
language: urn:sedml:language:sbml
source: munz2000.xml
selectionlist: time, Susceptible, Zombie
listOfScripts:
script:
id: main
uniformTimeCourse:
assignTo: sim1
model: mod1
initialTime: 0
outputStartTime: 0
outputEndTime: 5
numberOfSteps: 50
plot2D:
name: Figure 3
source: sim1
SIMPLE EXAMPLE (XML)
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level2/version1" level="2" version="1">
<listOfModels>
<model id=“mod1" language="urn:sedml:language:sbml" source="munz2000.xml“
selectionlist="time, Susceptible, Zombie"/>
</listOfModels>
<listOfScripts>
<script id="main">
<uniformTimeCourse assignTo="sim1" model=“mod1" initialTime="0"
outputStartTime="0" outputEndTime="5" numberOfSteps="50"/>
<plot2D name="Figure 3" source="sim1"/>
</script>
</listOfScripts>
</sedML>
MODELS
MODELS
CHANGEMODEL
CHANGEMODEL
MODEL VARIABLES
MODEL VARIABLES/ELEMENTS
MODEL CHANGE EXAMPLE (SCRIPT)
mod1 = model(urn:sedml:language:sbml, "munz2000.xml")
mod1.set("Zombie", 0.0)
mod1.set("J0.Zombie.stoichiometry", 2)
MODEL CHANGE EXAMPLE (YML)
sedML:
level: 2
version: 1
listOfModels:
model:
id: mod1
language: urn:sedml:language:sbml
source: munz2000.xml
selectionlist: time, Susceptible, Zombie
changeScript:
modelSet:
target: Zombie
value: 0.0
modelSet:
target: J0.Zombie.stoichiometry
value: 2
EXTERNAL DATA
EXTERNAL DATA
EXTERNAL DATA EXAMPLE
sedML:
level: 2
version: 1
listOfDataDescriptions:
dataDescription:
id: SZ_data
source: munz2000_data.csv
format: CSV
<listOfDataDescriptions>
<dataDescription id="SZ_data" format="CSV" source="munz2000_data.csv"/>
</listOfDataDescriptions>
USER FUNCTIONS
USER FUNCTIONS
EXTERNAL DATA EXAMPLE (YML)
listOfUserFunctions:
userFunction:
id: computeSumOfSquares
ouput: ret
listOfRequiredArguments:
argument:
-
id: sim
type: dictionaryOrArray
-
id: data
type: dictionaryOrArray
script:
executeMath:
assignTo: ret
math: sum((sim-data)^2)
EXTERNAL DATA EXAMPLE (XML)
<listOfUserFunctions>
<userFunction id="computeSumOfSquares" output="ret">
<listOfRequriedArguments>
<argument id="sim" type="dictionaryOrArray"/>
<argument id="data" type="dictionaryOrArray"/>
</listOfRequriedArguments>
<script>
<executeMath assignTo="ret">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<apply>
<sum/>
<apply>
<power/>
<apply>
<minus/>
<ci> sim </ci>
<ci> data </ci>
</apply>
<cn type="integer"> 2 </cn>
</apply>
</apply>
</math>
</executeMath>
</script>
</listOfUserFunctions>
SCRIPTS!
SCRIPTS!
WAIT—REPEAT OR REPRODUCE?
REPEAT OR REPRODUCE
REPEAT/REPRODUCE EXAMPLE (YML)
listOfScripts:
script:
id: main
steadyState:
assignTo: ss1
model: mod1
repeatWith:
executable: roadrunner
executableVersion: 2.2.3
environment: Python
OS: Windows 11
reproduceWith:
capability: steadyStateSim
capability: SBML.distrib
COMMAND
COMMAND
GENERIC COMMANDS
EXECUTEMATH
S_tot = mod1.S1 + mod1.S2 + mod1.S3
err = (sim1[“S1”] – data[“S1”])^2
movement = sim1[“S1”][100] - sim1[“S1”][0]
EXECUTEMATH EXAMPLE (YML, XML)
listOfScripts:
script:
id: main
executeMath:
assignTo: S_tot
math: mod1.S1 + mod1.S2 + mod1.S3
<script id="main">
<executeMath assignTo="S_tot">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<apply>
<plus/>
<ci> mod1.S1 </ci>
<ci> mod1.S1 </ci>
<ci> mod1.S1 </ci>
</apply>
</math>
</executeMath>
</script>
EXECUTEKISAO
EXECUTEKISAO EXAMPLE (YML)
listOfScripts:
script:
id: main
executeKisao:
assignTo: sim1
kisao: 168
listOfKisaoParameters:
kisaoParameter:
-
kisao: 520
value: 3.3
-
kisao: 24
value: mod1
-
kisao: 21
value: True
-
kisao: 900
value: mod1.S1
EXECUTEEXTERNAL (?)
EXECUTE EXTERNAL EXAMPLE (YML)
listOfScripts:
script:
id: main
executeExternal:
language: vega
{
"$schema: "https://vega.github.io/schema/vega-lite/v5.json",
"description: "A simple bar chart with embedded data.",
"data: {
"values: [
{"a: "A", "b: 28}, {"a: "B", "b: 55}, {"a: "C", "b: 43},
{"a: "D", "b: 91}, {"a: "E", "b: 81}, {"a: "F", "b: 53},
{"a: "G", "b: 19}, {"a: "H", "b: 87}, {"a: "I", "b: 52}
]
},
"mark: "bar",
"encoding: {
"x: {"field: "a", "type: "nominal", "axis: {"labelAngle: 0}},
"y: {"field: "b", "type: "quantitative"}
}
}
SCRIPTING COMMANDS
CONDITIONAL / LOOP
CONDITIONAL
LOOP
LOOP EXAMPLE (YML)
listOfScripts:
script:
id: main
loop:
id: n
start: 0
end: 10
modelReset:
model: mod1
modelSet:
model: mod1
target: S1
value: n/100
steadyState:
assignTo: ssvals[n]
model: mod1
for n in range(0,10):
mod1.reset()
mod1.set("S1", n/100)
ssvals[n] = steadyState(mod1)
SED-ML SPECIFIC COMMANDS
SIMULATE
SIMULATE
OUTPUT
PLOT
CURVES AND SURFACES
REPORT
FIGURE
PLOT EXAMPLE (YML)
plot2D:
name: Figure 3
listOfCurves:
curve:
-
name: [Susceptible]
xDataReference: sim1[time]
yDataReference: sim1[Susceptible]
-
name: [Zombie]
xDataReference: sim1[time]
yDataReference: sim1[Zombie]
PLOT EXAMPLE (XML)
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level2/version1" level="2" version="1">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="munz2000.xml“
selectionlist="time, Susceptible, Zombie"/>
</listOfModels>
<listOfScripts>
<script id="main">
<uniformTimeCourse assignTo="sim1" model="model" initialTime="0“
outputStartTime="0" outputEndTime="5" numberOfSteps="50"/>
<plot2D name="Figure 3">
<listOfCurves>
<curve name="[Susceptible]" logX="false" xDataReference="sim1[time]“
logY="false" yDataReference="sim1[Susceptible]"/>
<curve name="[Zombie]" logX="false" xDataReference="sim1[time]“
logY="false" yDataReference="sim1[Zombie]"/>
</listOfCurves>
</plot2D>
</script>
</listOfScripts>
</sedML>
OTHER OPTIONS?
ORIGINAL EXAMPLE (SCRIPT)
model = model("urn:sedml:language:sbml", "munz2000.xml",
selectionList=["time", "Susceptible", "Zombie"])
sim1 = uniformTimeCourse(model, 0, 0, 5, 50)
plot2d(sim1, name="Figure 3")
STEADYSTATE EXAMPLE
model = model("urn:sedml:language:sbml", "munz2000.xml",
selectionList=["Susceptible", "Zombie"])
ss1 = steadyState(model)
report(name=“Steady States”, [ss1])
CHANGEMODEL EXAMPLE: MODEL
model = model("urn:sedml:language:sbml", "munz2000.xml",
selectionList=["Susceptible", "Zombie"])
model.set("Zombie", "0.0")
ss1 = steadyState(model)
CHANGEMODEL EXAMPLE: SCRIPT
model = model("urn:sedml:language:sbml", "munz2000.xml",
selectionList=["Susceptible", "Zombie"])
results = array(10)
for Z in range(1, 10):
modelReset("model")
setModel("model", "Zombie", Z)
sim1 = uniformTimeCourse(model, 0, 0, 5, 50)
results[Z] = sim1
report(results, "Different starting Z values")
PARAMETER SCAN EXAMPLE: (PYTHON)
model = model("urn:sedml:language:sbml", "munz2000.xml")
SZ_data = dataDescription("munz2000_data.csv", "CSV", data=row)
def sumOfSquares(sim, data):
return sum((sim-data)^2)
results = array[10, 10, 10]
for alpha in (0.001, 0.010, step=0.001):
for beta in (0.001, 0.010, step=0.001):
for zeta in (0.001, 0.010, step=0.001):
modelReset("model")
setModel("model", “alpha", alpha)
jc1 = executekisao(65,
sim1 = uniformTimeCourse(model, 0, 0, 5, 50,
selectionList=["Susceptible", "Zombie"])
results[alpha][beta][zeta] = sumOfSquares(sim1, SZ_data)
report(results, "Parameter scan")
PARAMETER SCAN EXAMPLE: (YML)
sedML:
level: 2
version: 1
listOfModels:
model:
id: model
language: urn:sedml:language:sbml
source: munz2000.xml
selectionlist: Susceptible, Zombie
listOfDataDescriptions:
dataDescription:
id: SZ_data
format: CSV
source: munz2000_data.csv
listOfUserFunctions:
userFunction:
id: computeSumOfSquares
output: ret
listOfRequriedArguments:
argument:
-
id: sim
-
id: data
script:
executeMath:
assignTo: ret
math: sum((sim-data)^2)
listOfScripts:
script:
id: main
executeMath:
assignTo: results
forLoop:
id: alpha
start: 0.001
numberOfSteps: 9
step: 0.001
parallel: true
script:
forLoop:
id: beta
start: 0.001
numberOfSteps: 9
step: 0.001
parallel: true
script:
forLoop:
id: zeta
start: 0.001
numberOfSteps: 9
step: 0.001
parallel: true
PARAMETER SCAN EXAMPLE: (YML)
script:
modelReset:
model: model
modelSet:
-
model: model
target: alpha
value: alpha
-
model: model
target: beta
value: beta
-
model: model
target: zeta
value: zeta
uniformTimeCourse:
assignTo: sim1
model: model
initialTime: 0
outputStartTime: 0
outputEndTime: 5
numberOfSteps: 50
executeMath:
assignTo: results[alpha][beta][zeta]
math: computeSumOfSquares(sim1, SZ_data)
report:
name: Parameter scan
data: results
PARAMETER SCAN EXAMPLE: (XML)
<sedML xmlns="http://sed-ml.org/sed-ml/level2/version1" level="2" version="1">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="munz2000.xml“
selectionlist="Susceptible, Zombie"/>
</listOfModels>
<listOfDataDescriptions>
<dataDescription id="SZ_data" format="<csv>" source="munz2000_data.csv"/>
</listOfDataDescriptions>
<listOfUserFunctions>
<userFunction id="computeSumOfSquares" output="ret">
<listOfRequriedArguments>
<argument id="sim"/>
<argument id="data"/>
</listOfRequriedArguments>
<script>
<executeMath assignTo="ret">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<apply>
<sum/>
<apply>
<power/>
<apply>
<minus/>
<ci> sim </ci>
<ci> data </ci>
</apply>
<cn type="integer"> 2 </cn>
</apply>
</apply>
</math>
</executeMath>
</script>
</listOfUserFunctions>
PARAMETER SCAN EXAMPLE: (XML)
<listOfScripts>
<script id="main">
<executeMath assignTo="results"/>
<forLoop id="alpha" start="0.001" numberOfSteps="9" step="0.001" parallel="true">
<script>
<forLoop id="beta" start="0.001" numberOfSteps="9" step="0.001" parallel="true">
<script>
<forLoop id="zeta" start="0.001" numberOfSteps="9" step="0.001" parallel="true">
<script>
<modelReset model="model"/>
<modelSet model="model" target="alpha" value="alpha"/>
<modelSet model="model" target="beta" value="beta"/>
<modelSet model="model" target="zeta" value="zeta"/>
<uniformTimeCourse assignTo="sim1" model="model" initialTime="0"
outputStartTime="0" outputEndTime="5" numberOfSteps="50"/>
<executeMath assignTo="results[alpha][beta][zeta]">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<apply>
<ci> computeSumOfSquares </ci>
<ci> sim1 </ci>
<ci> SZ_data </ci>
</apply>
</math>
</executeMath>
</script>
</forLoop>
</script>
</forLoop>
</script>
</forLoop>
<report name="Parameter scan" data="results"/>
</script>
</listOfScripts>