diff --git a/petabtests/cases/v2.0.0/sbml/0032/0032.py b/petabtests/cases/v2.0.0/sbml/0032/0032.py new file mode 100644 index 0000000..eacca5b --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/0032.py @@ -0,0 +1,87 @@ +from inspect import cleandoc + +from petab.v2.C import * +from petab.v2 import Problem + +from petabtests import ( + PetabV2TestCase, + analytical_a, + analytical_b, + antimony_to_sbml_str, +) +from pathlib import Path + +DESCRIPTION = cleandoc(""" +## Objective + +This case tests handling of parameters to be estimated both assigning +initial concentrations, and appearing in the observable formula. +For species `A`, the initial concentration is estimated, and the parameter +setting the concentration of A appears in the observable formulas. For species +`B`, the initial concentration is specified in the parameters table. + +## Model + +A simple conversion reaction `A <=> B` in a single compartment, following +mass action kinetics. +""") + +# problem -------------------------------------------------------------------- +ant_model = """ +model *petab_test_0032() + compartment compartment_ = 1; + species A in compartment_, B in compartment_; + + fwd: A => B; compartment_ * k1 * A; + rev: B => A; compartment_ * k2 * B; + + A = a0; + B = 1; + a0 = 1; + k1 = 0; + k2 = 0; +end +""" +model_file = Path(__file__).parent / "_model.xml" +model_file.write_text(antimony_to_sbml_str(ant_model)) + +problem = Problem() + +problem.add_condition("c0", A="initial_A", B="initial_B") +problem.add_experiment("e1", 0, "c0") + +problem.add_observable("obs_a", "A + initial_A", noise_formula="0.5") +problem.add_observable("obs_b", "B", noise_formula="0.5") +problem.add_measurement("obs_a", experiment_id="e1", time=0, measurement=0.7) +problem.add_measurement("obs_a", experiment_id="e1", time=10, measurement=0.1) +problem.add_measurement("obs_b", experiment_id="e1", time=0, measurement=0.7) +problem.add_measurement("obs_b", experiment_id="e1", time=10, measurement=0.1) + +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) +problem.add_parameter("initial_A", lb=1, ub=10, nominal_value=2, estimate=True) +problem.add_parameter( + "initial_B", lb=0, ub=10, nominal_value=3, estimate=False +) + + +# solutions ------------------------------------------------------------------ + +simulation_df = problem.measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION} +) +initial_A = 2.0 +simulation_df[SIMULATION] = [ + *(analytical_a(t, initial_A, 3, 0.8, 0.6) + initial_A for t in (0, 10)), + *(analytical_b(t, initial_A, 3, 0.8, 0.6) for t in (0, 10)), +] + +case = PetabV2TestCase.from_problem( + id=32, + brief="Simulation. A parameter to estimate both sets initial value and appears in observable \ + formulas", + description=DESCRIPTION, + model=model_file, + problem=problem, + simulation_df=simulation_df, +) diff --git a/petabtests/cases/v2.0.0/sbml/0032/README.md b/petabtests/cases/v2.0.0/sbml/0032/README.md new file mode 100644 index 0000000..208100f --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/README.md @@ -0,0 +1,14 @@ +# PEtab test case 0032 + +## Objective + +This case tests handling of parameters to be estimated both assigning +initial concentrations, and appearing in the observable formula. +For species `A`, the initial concentration is estimated, and the parameter +setting the concentration of A appears in the observable formulas. For species +`B`, the initial concentration is specified in the parameters table. + +## Model + +A simple conversion reaction `A <=> B` in a single compartment, following +mass action kinetics. diff --git a/petabtests/cases/v2.0.0/sbml/0032/_0032.yaml b/petabtests/cases/v2.0.0/sbml/0032/_0032.yaml new file mode 100644 index 0000000..2a7c4ad --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_0032.yaml @@ -0,0 +1,15 @@ +condition_files: +- _conditions.tsv +experiment_files: +- _experiments.tsv +format_version: 2.0.0 +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/0032/_0032_solution.yaml b/petabtests/cases/v2.0.0/sbml/0032/_0032_solution.yaml new file mode 100644 index 0000000..52443fa --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_0032_solution.yaml @@ -0,0 +1,7 @@ +chi2: 160.50612122714156 +llh: -81.1562260241497 +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/0032/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0032/_conditions.tsv new file mode 100644 index 0000000..4c79dbf --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_conditions.tsv @@ -0,0 +1,3 @@ +conditionId targetId targetValue +c0 A initial_A +c0 B initial_B diff --git a/petabtests/cases/v2.0.0/sbml/0032/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0032/_experiments.tsv new file mode 100644 index 0000000..5d8c1e0 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e1 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0032/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0032/_measurements.tsv new file mode 100644 index 0000000..d9f5e7b --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_measurements.tsv @@ -0,0 +1,5 @@ +modelId observableId experimentId time measurement observableParameters noiseParameters + obs_a e1 0.0 0.7 + obs_a e1 10.0 0.1 + obs_b e1 0.0 0.7 + obs_b e1 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0032/_model.xml b/petabtests/cases/v2.0.0/sbml/0032/_model.xml new file mode 100644 index 0000000..9bf8f5a --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_model.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + a0 + + + + + + + + + + + + + + + + compartment_ + k1 + A + + + + + + + + + + + + + + + + compartment_ + k2 + B + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0032/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0032/_observables.tsv new file mode 100644 index 0000000..c462bfd --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_observables.tsv @@ -0,0 +1,3 @@ +observableId observableName observableFormula noiseFormula noiseDistribution observablePlaceholders noisePlaceholders +obs_a A + initial_A 0.500000000000000 normal +obs_b B 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0032/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0032/_parameters.tsv new file mode 100644 index 0000000..639c2ab --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_parameters.tsv @@ -0,0 +1,5 @@ +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +initial_A 1.0 10.0 2.0 true +initial_B 0.0 10.0 3.0 false diff --git a/petabtests/cases/v2.0.0/sbml/0032/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0032/_simulations.tsv new file mode 100644 index 0000000..e61827d --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0032/_simulations.tsv @@ -0,0 +1,5 @@ +modelId observableId experimentId time simulation observableParameters noiseParameters + obs_a e1 0.0 4.0 + obs_a e1 10.0 4.142857024067325 + obs_b e1 0.0 3.0 + obs_b e1 10.0 2.8571429759326743 diff --git a/petabtests/cases/v2.0.0/sbml/README.md b/petabtests/cases/v2.0.0/sbml/README.md index 79a7a59..afa4609 100644 --- a/petabtests/cases/v2.0.0/sbml/README.md +++ b/petabtests/cases/v2.0.0/sbml/README.md @@ -118,3 +118,7 @@ Simultaneous trigger of PEtab condition and SBML event. Simulation. Two PEtab conditions applied at the same time point. +# [0032](0032/) + +Simulation. A parameter to estimate both sets initial value and appears in observable formulas +