From 7c264b47bb65ca369d7c5d563f8a3811a185e0ef Mon Sep 17 00:00:00 2001 From: Daniel Weindl Date: Thu, 13 Jun 2024 15:48:56 +0200 Subject: [PATCH] =?UTF-8?q?Add=20test=20case=20with=20estimated=20initial?= =?UTF-8?q?=20conditions=20specified=20via=20the=20con=E2=80=A6=20(#63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add test case with estimated initial conditions specified via the conditions table Closes #62 Co-authored-by: Dilan Pathirana <59329744+dilpath@users.noreply.github.com> --- petabtests/cases/v1.0.0/sbml/0011/0011.py | 2 +- petabtests/cases/v1.0.0/sbml/0011/README.md | 2 +- petabtests/cases/v1.0.0/sbml/0019/0019.py | 69 +++++++++++++++ petabtests/cases/v1.0.0/sbml/0019/README.md | 13 +++ petabtests/cases/v1.0.0/sbml/0019/_0019.yaml | 11 +++ .../v1.0.0/sbml/0019/_0019_solution.yaml | 7 ++ .../cases/v1.0.0/sbml/0019/_conditions.tsv | 2 + .../cases/v1.0.0/sbml/0019/_measurements.tsv | 3 + petabtests/cases/v1.0.0/sbml/0019/_model.xml | 87 +++++++++++++++++++ .../cases/v1.0.0/sbml/0019/_observables.tsv | 2 + .../cases/v1.0.0/sbml/0019/_parameters.tsv | 5 ++ .../cases/v1.0.0/sbml/0019/_simulations.tsv | 3 + .../v1.0.0/sbml/0019/conversion_modified.xml | 87 +++++++++++++++++++ petabtests/cases/v1.0.0/sbml/README.md | 4 + petabtests/cases/v2.0.0/sbml/0020/0020.py | 69 +++++++++++++++ petabtests/cases/v2.0.0/sbml/0020/README.md | 13 +++ petabtests/cases/v2.0.0/sbml/0020/_0020.yaml | 13 +++ .../v2.0.0/sbml/0020/_0020_solution.yaml | 7 ++ .../cases/v2.0.0/sbml/0020/_conditions.tsv | 2 + .../cases/v2.0.0/sbml/0020/_measurements.tsv | 3 + petabtests/cases/v2.0.0/sbml/0020/_model.xml | 87 +++++++++++++++++++ .../cases/v2.0.0/sbml/0020/_observables.tsv | 2 + .../cases/v2.0.0/sbml/0020/_parameters.tsv | 5 ++ .../cases/v2.0.0/sbml/0020/_simulations.tsv | 3 + .../v2.0.0/sbml/0020/conversion_modified.xml | 87 +++++++++++++++++++ petabtests/cases/v2.0.0/sbml/README.md | 4 + 26 files changed, 590 insertions(+), 2 deletions(-) create mode 100644 petabtests/cases/v1.0.0/sbml/0019/0019.py create mode 100644 petabtests/cases/v1.0.0/sbml/0019/README.md create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_0019.yaml create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_0019_solution.yaml create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_conditions.tsv create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_measurements.tsv create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_model.xml create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_observables.tsv create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_parameters.tsv create mode 100644 petabtests/cases/v1.0.0/sbml/0019/_simulations.tsv create mode 100644 petabtests/cases/v1.0.0/sbml/0019/conversion_modified.xml create mode 100644 petabtests/cases/v2.0.0/sbml/0020/0020.py create mode 100644 petabtests/cases/v2.0.0/sbml/0020/README.md create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_0020.yaml create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_0020_solution.yaml create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_conditions.tsv create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_model.xml create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_observables.tsv create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv create mode 100644 petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv create mode 100644 petabtests/cases/v2.0.0/sbml/0020/conversion_modified.xml diff --git a/petabtests/cases/v1.0.0/sbml/0011/0011.py b/petabtests/cases/v1.0.0/sbml/0011/0011.py index 9f5af1a..3b3b82b 100644 --- a/petabtests/cases/v1.0.0/sbml/0011/0011.py +++ b/petabtests/cases/v1.0.0/sbml/0011/0011.py @@ -10,7 +10,7 @@ This case tests initial concentrations in the condition table. For species `B`, the initial concentration is specified in the condition -table, while for `A` it is given via an assignment rule in the SBML model. +table, while for `A` it is given via an initial assignment in the SBML model. ## Model diff --git a/petabtests/cases/v1.0.0/sbml/0011/README.md b/petabtests/cases/v1.0.0/sbml/0011/README.md index 3a28865..6f65594 100644 --- a/petabtests/cases/v1.0.0/sbml/0011/README.md +++ b/petabtests/cases/v1.0.0/sbml/0011/README.md @@ -4,7 +4,7 @@ This case tests initial concentrations in the condition table. For species `B`, the initial concentration is specified in the condition -table, while for `A` it is given via an assignment rule in the SBML model. +table, while for `A` it is given via an initial assignment in the SBML model. ## Model diff --git a/petabtests/cases/v1.0.0/sbml/0019/0019.py b/petabtests/cases/v1.0.0/sbml/0019/0019.py new file mode 100644 index 0000000..2042ed0 --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/0019.py @@ -0,0 +1,69 @@ +from inspect import cleandoc + +import pandas as pd +from petab.C import * + +from petabtests import PetabTestCase, analytical_a + +DESCRIPTION = cleandoc(""" +## Objective + +This case tests handling of initial concentrations that are specified +in the conditions table. For species `A`, the initial concentration is +estimated. 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 -------------------------------------------------------------------- + +condition_df = pd.DataFrame(data={ + CONDITION_ID: ['c0'], + 'A': ["initial_A"], + 'B': ["initial_B"], +}).set_index([CONDITION_ID]) + +measurement_df = pd.DataFrame(data={ + OBSERVABLE_ID: ['obs_a', 'obs_a'], + SIMULATION_CONDITION_ID: ['c0', 'c0'], + TIME: [0, 10], + MEASUREMENT: [0.7, 0.1] +}) + +observable_df = pd.DataFrame(data={ + OBSERVABLE_ID: ['obs_a'], + OBSERVABLE_FORMULA: ['A'], + NOISE_FORMULA: [0.5] +}).set_index([OBSERVABLE_ID]) + +parameter_df = pd.DataFrame(data={ + PARAMETER_ID: ['k1', 'k2', 'initial_A', 'initial_B'], + PARAMETER_SCALE: [LIN, LIN, LOG10, LIN], + LOWER_BOUND: [0, 0, 1, 0], + UPPER_BOUND: [10] * 4, + NOMINAL_VALUE: [0.8, 0.6, 2, 3], + ESTIMATE: [1] * 3 + [0], +}).set_index(PARAMETER_ID) + +# solutions ------------------------------------------------------------------ + +simulation_df = measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION}) +simulation_df[SIMULATION] = [analytical_a(t, 2, 3, 0.8, 0.6) + for t in simulation_df[TIME]] + +case = PetabTestCase( + id=19, + brief="Simulation. Estimated initial value via conditions table.", + description=DESCRIPTION, + model='conversion_modified.xml', + condition_dfs=[condition_df], + observable_dfs=[observable_df], + measurement_dfs=[measurement_df], + simulation_dfs=[simulation_df], + parameter_df=parameter_df, +) diff --git a/petabtests/cases/v1.0.0/sbml/0019/README.md b/petabtests/cases/v1.0.0/sbml/0019/README.md new file mode 100644 index 0000000..240391c --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/README.md @@ -0,0 +1,13 @@ +# PEtab test case 0019 + +## Objective + +This case tests handling of initial concentrations that are specified +in the conditions table. For species `A`, the initial concentration is +estimated. 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/v1.0.0/sbml/0019/_0019.yaml b/petabtests/cases/v1.0.0/sbml/0019/_0019.yaml new file mode 100644 index 0000000..b193feb --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_0019.yaml @@ -0,0 +1,11 @@ +format_version: 1 +parameter_file: _parameters.tsv +problems: +- condition_files: + - _conditions.tsv + measurement_files: + - _measurements.tsv + observable_files: + - _observables.tsv + sbml_files: + - _model.xml diff --git a/petabtests/cases/v1.0.0/sbml/0019/_0019_solution.yaml b/petabtests/cases/v1.0.0/sbml/0019/_0019_solution.yaml new file mode 100644 index 0000000..05ebe5f --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_0019_solution.yaml @@ -0,0 +1,7 @@ +chi2: 23.45305928312484 +llh: -12.17811234685187 +simulation_files: +- _simulations.tsv +tol_chi2: 0.001 +tol_llh: 0.001 +tol_simulations: 0.001 diff --git a/petabtests/cases/v1.0.0/sbml/0019/_conditions.tsv b/petabtests/cases/v1.0.0/sbml/0019/_conditions.tsv new file mode 100644 index 0000000..1297d08 --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_conditions.tsv @@ -0,0 +1,2 @@ +conditionId A B +c0 initial_A initial_B diff --git a/petabtests/cases/v1.0.0/sbml/0019/_measurements.tsv b/petabtests/cases/v1.0.0/sbml/0019/_measurements.tsv new file mode 100644 index 0000000..a497632 --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_measurements.tsv @@ -0,0 +1,3 @@ +observableId simulationConditionId time measurement +obs_a c0 0 0.7 +obs_a c0 10 0.1 diff --git a/petabtests/cases/v1.0.0/sbml/0019/_model.xml b/petabtests/cases/v1.0.0/sbml/0019/_model.xml new file mode 100644 index 0000000..845f96f --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_model.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a0 + + + + + + + + + + + + + + + + + compartment + k1 + A + + + + + + + + + + + + + + + + compartment + k2 + B + + + + + + + + diff --git a/petabtests/cases/v1.0.0/sbml/0019/_observables.tsv b/petabtests/cases/v1.0.0/sbml/0019/_observables.tsv new file mode 100644 index 0000000..0b78dd1 --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_observables.tsv @@ -0,0 +1,2 @@ +observableId observableFormula noiseFormula +obs_a A 0.5 diff --git a/petabtests/cases/v1.0.0/sbml/0019/_parameters.tsv b/petabtests/cases/v1.0.0/sbml/0019/_parameters.tsv new file mode 100644 index 0000000..07a1f72 --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_parameters.tsv @@ -0,0 +1,5 @@ +parameterId parameterScale lowerBound upperBound nominalValue estimate +k1 lin 0 10 0.8 1 +k2 lin 0 10 0.6 1 +initial_A log10 1 10 2.0 1 +initial_B lin 0 10 3.0 0 diff --git a/petabtests/cases/v1.0.0/sbml/0019/_simulations.tsv b/petabtests/cases/v1.0.0/sbml/0019/_simulations.tsv new file mode 100644 index 0000000..ccac85f --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/_simulations.tsv @@ -0,0 +1,3 @@ +observableId simulationConditionId time simulation +obs_a c0 0 2.0 +obs_a c0 10 2.1428570240673257 diff --git a/petabtests/cases/v1.0.0/sbml/0019/conversion_modified.xml b/petabtests/cases/v1.0.0/sbml/0019/conversion_modified.xml new file mode 100644 index 0000000..845f96f --- /dev/null +++ b/petabtests/cases/v1.0.0/sbml/0019/conversion_modified.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a0 + + + + + + + + + + + + + + + + + compartment + k1 + A + + + + + + + + + + + + + + + + compartment + k2 + B + + + + + + + + diff --git a/petabtests/cases/v1.0.0/sbml/README.md b/petabtests/cases/v1.0.0/sbml/README.md index 58983a8..629a35c 100644 --- a/petabtests/cases/v1.0.0/sbml/README.md +++ b/petabtests/cases/v1.0.0/sbml/README.md @@ -70,3 +70,7 @@ Simulation. Preequilibration. One species reinitialized, one not (NaN in conditi Simulation. Preequilibration and RateRules. One state reinitialized, one not (NaN in condition table). InitialAssignment to species overridden. +# [0019](0019/) + +Simulation. Estimated initial value via conditions table. + diff --git a/petabtests/cases/v2.0.0/sbml/0020/0020.py b/petabtests/cases/v2.0.0/sbml/0020/0020.py new file mode 100644 index 0000000..75581c9 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/0020.py @@ -0,0 +1,69 @@ +from inspect import cleandoc + +import pandas as pd +from petab.C import * + +from petabtests import PetabTestCase, analytical_a + +DESCRIPTION = cleandoc(""" +## Objective + +This case tests handling of initial concentrations that are specified +in the conditions table. For species `A`, the initial concentration is +estimated. 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 -------------------------------------------------------------------- + +condition_df = pd.DataFrame(data={ + CONDITION_ID: ['c0'], + 'A': ["initial_A"], + 'B': ["initial_B"], +}).set_index([CONDITION_ID]) + +measurement_df = pd.DataFrame(data={ + OBSERVABLE_ID: ['obs_a', 'obs_a'], + SIMULATION_CONDITION_ID: ['c0', 'c0'], + TIME: [0, 10], + MEASUREMENT: [0.7, 0.1] +}) + +observable_df = pd.DataFrame(data={ + OBSERVABLE_ID: ['obs_a'], + OBSERVABLE_FORMULA: ['A'], + NOISE_FORMULA: [0.5] +}).set_index([OBSERVABLE_ID]) + +parameter_df = pd.DataFrame(data={ + PARAMETER_ID: ['k1', 'k2', 'initial_A', 'initial_B'], + PARAMETER_SCALE: [LIN, LIN, LOG10, LIN], + LOWER_BOUND: [0, 0, 1, 0], + UPPER_BOUND: [10] * 4, + NOMINAL_VALUE: [0.8, 0.6, 2, 3], + ESTIMATE: [1] * 3 + [0], +}).set_index(PARAMETER_ID) + +# solutions ------------------------------------------------------------------ + +simulation_df = measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION}) +simulation_df[SIMULATION] = [analytical_a(t, 2, 3, 0.8, 0.6) + for t in simulation_df[TIME]] + +case = PetabTestCase( + id=20, + brief="Simulation. Estimated initial value via conditions table.", + description=DESCRIPTION, + model='conversion_modified.xml', + condition_dfs=[condition_df], + observable_dfs=[observable_df], + measurement_dfs=[measurement_df], + simulation_dfs=[simulation_df], + parameter_df=parameter_df, +) diff --git a/petabtests/cases/v2.0.0/sbml/0020/README.md b/petabtests/cases/v2.0.0/sbml/0020/README.md new file mode 100644 index 0000000..c19ad55 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/README.md @@ -0,0 +1,13 @@ +# PEtab test case 0020 + +## Objective + +This case tests handling of initial concentrations that are specified +in the conditions table. For species `A`, the initial concentration is +estimated. 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/0020/_0020.yaml b/petabtests/cases/v2.0.0/sbml/0020/_0020.yaml new file mode 100644 index 0000000..b1337e7 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_0020.yaml @@ -0,0 +1,13 @@ +format_version: 2.0.0 +parameter_file: _parameters.tsv +problems: +- condition_files: + - _conditions.tsv + measurement_files: + - _measurements.tsv + model_files: + model_0: + language: sbml + location: _model.xml + observable_files: + - _observables.tsv diff --git a/petabtests/cases/v2.0.0/sbml/0020/_0020_solution.yaml b/petabtests/cases/v2.0.0/sbml/0020/_0020_solution.yaml new file mode 100644 index 0000000..05ebe5f --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_0020_solution.yaml @@ -0,0 +1,7 @@ +chi2: 23.45305928312484 +llh: -12.17811234685187 +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/0020/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0020/_conditions.tsv new file mode 100644 index 0000000..1297d08 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_conditions.tsv @@ -0,0 +1,2 @@ +conditionId A B +c0 initial_A initial_B diff --git a/petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv new file mode 100644 index 0000000..a497632 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv @@ -0,0 +1,3 @@ +observableId simulationConditionId time measurement +obs_a c0 0 0.7 +obs_a c0 10 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0020/_model.xml b/petabtests/cases/v2.0.0/sbml/0020/_model.xml new file mode 100644 index 0000000..845f96f --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_model.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a0 + + + + + + + + + + + + + + + + + compartment + k1 + A + + + + + + + + + + + + + + + + compartment + k2 + B + + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0020/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0020/_observables.tsv new file mode 100644 index 0000000..0b78dd1 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_observables.tsv @@ -0,0 +1,2 @@ +observableId observableFormula noiseFormula +obs_a A 0.5 diff --git a/petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv new file mode 100644 index 0000000..07a1f72 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv @@ -0,0 +1,5 @@ +parameterId parameterScale lowerBound upperBound nominalValue estimate +k1 lin 0 10 0.8 1 +k2 lin 0 10 0.6 1 +initial_A log10 1 10 2.0 1 +initial_B lin 0 10 3.0 0 diff --git a/petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv new file mode 100644 index 0000000..ccac85f --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv @@ -0,0 +1,3 @@ +observableId simulationConditionId time simulation +obs_a c0 0 2.0 +obs_a c0 10 2.1428570240673257 diff --git a/petabtests/cases/v2.0.0/sbml/0020/conversion_modified.xml b/petabtests/cases/v2.0.0/sbml/0020/conversion_modified.xml new file mode 100644 index 0000000..845f96f --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/conversion_modified.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a0 + + + + + + + + + + + + + + + + + compartment + k1 + A + + + + + + + + + + + + + + + + compartment + k2 + B + + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/README.md b/petabtests/cases/v2.0.0/sbml/README.md index 3b50f43..6aa12fa 100644 --- a/petabtests/cases/v2.0.0/sbml/README.md +++ b/petabtests/cases/v2.0.0/sbml/README.md @@ -74,3 +74,7 @@ Simulation. Preequilibration and RateRules. One state reinitialized, one not (Na Mapping table. +# [0020](0020/) + +Simulation. Estimated initial value via conditions table. +