diff --git a/petabtests/cases/v2.0.0/sbml/0030/0030.py b/petabtests/cases/v2.0.0/sbml/0030/0030.py new file mode 100644 index 0000000..1669285 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/0030.py @@ -0,0 +1,118 @@ +from inspect import cleandoc + +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import ( + PetabV2TestCase, + antimony_to_sbml_str, +) +from pathlib import Path + +DESCRIPTION = cleandoc(""" +## Objective + +This case tests simultaneous re-initialization of compartment size and +contained species when an SBML event triggers at the exact same +time-point as a PEtab condition. + +## Model + +A species `S`, defined in terms of concentrations, with `dS/dt = p = 1`, +in a compartment `C`. `S` and `C` are changed via the condition table. + +There is a PEtab condition triggered at `t=10`, which is triggered +at the exact time as an SBML event that re-initializes the compartment +volume after the condition table is applied. +""") + +# problem -------------------------------------------------------------------- + +sbml_file = Path(__file__).parent / "model.xml" + +vol0 = 4 +conc0 = 2 +conc10 = 8 +dSdt = 1 +vol10 = (conc0 + 10 * dSdt) + vol0 # = 16 + +ant_model = f""" +model petab_test_0030 + compartment C = {vol0} + + species S in C = 3 # this is overwritten by the condition table + + p = {dSdt} + S' = p + + at time >= 10, fromTrigger=false: C = C * 2 # this is executed after PEtab condition +end +""" +sbml_file.write_text(antimony_to_sbml_str(ant_model)) + +problem = Problem() +problem.add_observable("obs_C", "C", noise_formula="1") +problem.add_observable("obs_amount_S", "S * C", noise_formula="1") +problem.add_observable("obs_conc_S", "S", noise_formula="1") + +problem.add_parameter("p", lb=0, ub=10, nominal_value=1) + +problem.add_experiment("experiment1", 0, "condition1", 10, "condition2") +# at t=0 +problem.add_condition( + "condition1", + "condition1", + S=conc0, +) +# t=10 +problem.add_condition( + "condition2", + "condition2", + S="S + C", + C=conc10, +) + +ts = [0, 5, 10, 15] +for t in ts: + for obs in ["obs_C", "obs_amount_S", "obs_conc_S"]: + problem.add_measurement( + obs, experiment_id="experiment1", time=t, measurement=t + ) + +# solutions ------------------------------------------------------------------ + +simulation_df = problem.measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION} +) +simulation_df[SIMULATION] = [ + # vol, amount, conc + # --- t=0 --- + vol0, + conc0 * vol0, + conc0, + # --- t=5 --- + vol0, + (conc0 + 5 * dSdt) * vol0, + (conc0 + 5 * dSdt), + # --- t=10 --- + # condition table: + # 8, 16 * 8 = 128 , 12 + 4 = 16 + # event (triggered at same time as PEtab condition) + # volume is changed by event, amount is preserved, conc changes + # C = 8 * 2 = 16, 128, 8 + vol10, + conc10 * vol10, + conc10, + # --- t=15 --- + vol10, + (conc10 + 5 * dSdt) * vol10, + (conc10 + 5 * dSdt) +] + +case = PetabV2TestCase.from_problem( + id=30, + brief="Simultaneous trigger of PEtab condition and SBML event.", + description=DESCRIPTION, + model=sbml_file, + problem=problem, + simulation_df=simulation_df, +) diff --git a/petabtests/cases/v2.0.0/sbml/0030/README.md b/petabtests/cases/v2.0.0/sbml/0030/README.md new file mode 100644 index 0000000..0660157 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/README.md @@ -0,0 +1,16 @@ +# PEtab test case 0030 + +## Objective + +This case tests simultaneous re-initialization of compartment size and +contained species when an SBML event triggers at the exact same +time-point as a PEtab condition. + +## Model + +A species `S`, defined in terms of concentrations, with `dS/dt = p = 1`, +in a compartment `C`. `S` and `C` are changed via the condition table. + +There is a PEtab condition triggered at `t=10`, which is triggered +at the exact time as an SBML event that re-initializes the compartment +volume after the condition table is applied. diff --git a/petabtests/cases/v2.0.0/sbml/0030/_0030.yaml b/petabtests/cases/v2.0.0/sbml/0030/_0030.yaml new file mode 100644 index 0000000..f698cb3 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_0030.yaml @@ -0,0 +1,17 @@ +condition_files: +- _conditions.tsv +experiment_files: +- _experiments.tsv +format_version: 2.0.0 +mapping_files: +- _mapping.tsv +measurement_files: +- _measurements.tsv +model_files: + model_0: + language: sbml + location: _model.xml +observable_files: +- _observables.tsv +parameter_files: +- _parameters.tsv diff --git a/petabtests/cases/v2.0.0/sbml/0030/_0030_solution.yaml b/petabtests/cases/v2.0.0/sbml/0030/_0030_solution.yaml new file mode 100644 index 0000000..9a84d27 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_0030_solution.yaml @@ -0,0 +1,7 @@ +chi2: 51836.0 +llh: -25929.027262398453 +simulation_files: +- _simulations.tsv +tol_chi2: 0.001 +tol_llh: 0.001 +tol_simulations: 0.001 diff --git a/petabtests/cases/v2.0.0/sbml/0030/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0030/_conditions.tsv new file mode 100644 index 0000000..9acd156 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_conditions.tsv @@ -0,0 +1,4 @@ +conditionId targetId targetValue +condition1 S 2.0 +condition2 S C + S +condition2 C 8.0 diff --git a/petabtests/cases/v2.0.0/sbml/0030/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0030/_experiments.tsv new file mode 100644 index 0000000..f53af51 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +experiment1 0.0 condition1 +experiment1 10.0 condition2 diff --git a/petabtests/cases/v2.0.0/sbml/0030/_mapping.tsv b/petabtests/cases/v2.0.0/sbml/0030/_mapping.tsv new file mode 100644 index 0000000..205aa11 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_mapping.tsv @@ -0,0 +1,3 @@ +petabEntityId modelEntityId name +condition1 condition1 +condition2 condition2 diff --git a/petabtests/cases/v2.0.0/sbml/0030/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0030/_measurements.tsv new file mode 100644 index 0000000..f224e9e --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_measurements.tsv @@ -0,0 +1,13 @@ +modelId observableId experimentId time measurement observableParameters noiseParameters + obs_C experiment1 0.0 0.0 + obs_amount_S experiment1 0.0 0.0 + obs_conc_S experiment1 0.0 0.0 + obs_C experiment1 5.0 5.0 + obs_amount_S experiment1 5.0 5.0 + obs_conc_S experiment1 5.0 5.0 + obs_C experiment1 10.0 10.0 + obs_amount_S experiment1 10.0 10.0 + obs_conc_S experiment1 10.0 10.0 + obs_C experiment1 15.0 15.0 + obs_amount_S experiment1 15.0 15.0 + obs_conc_S experiment1 15.0 15.0 diff --git a/petabtests/cases/v2.0.0/sbml/0030/_model.xml b/petabtests/cases/v2.0.0/sbml/0030/_model.xml new file mode 100644 index 0000000..f28463d --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_model.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + p + + + + + + + + + + time + 10 + + + + + + + + + C + 2 + + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0030/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0030/_observables.tsv new file mode 100644 index 0000000..c71865c --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_observables.tsv @@ -0,0 +1,4 @@ +observableId observableName observableFormula noiseFormula noiseDistribution observablePlaceholders noisePlaceholders +obs_C C 1.00000000000000 normal +obs_amount_S C*S 1.00000000000000 normal +obs_conc_S S 1.00000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0030/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0030/_parameters.tsv new file mode 100644 index 0000000..00aa02c --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_parameters.tsv @@ -0,0 +1,2 @@ +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +p 0.0 10.0 1.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0030/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0030/_simulations.tsv new file mode 100644 index 0000000..143a6f2 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/_simulations.tsv @@ -0,0 +1,13 @@ +modelId observableId experimentId time simulation observableParameters noiseParameters + obs_C experiment1 0.0 4 + obs_amount_S experiment1 0.0 8 + obs_conc_S experiment1 0.0 2 + obs_C experiment1 5.0 4 + obs_amount_S experiment1 5.0 28 + obs_conc_S experiment1 5.0 7 + obs_C experiment1 10.0 16 + obs_amount_S experiment1 10.0 128 + obs_conc_S experiment1 10.0 8 + obs_C experiment1 15.0 16 + obs_amount_S experiment1 15.0 208 + obs_conc_S experiment1 15.0 13 diff --git a/petabtests/cases/v2.0.0/sbml/0030/model.xml b/petabtests/cases/v2.0.0/sbml/0030/model.xml new file mode 100644 index 0000000..f28463d --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0030/model.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + p + + + + + + + + + + time + 10 + + + + + + + + + C + 2 + + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/README.md b/petabtests/cases/v2.0.0/sbml/README.md index 4f65ce5..9d4a315 100644 --- a/petabtests/cases/v2.0.0/sbml/README.md +++ b/petabtests/cases/v2.0.0/sbml/README.md @@ -110,3 +110,7 @@ Simulation. None t0 condition applied at time-point without measurements. Simulation. Non-zero simulation start time +# [0030](0030/) + +Simultaneous trigger of PEtab condition and SBML event. +