From ef53be51c30c642dd4481c7256f22db01956ee20 Mon Sep 17 00:00:00 2001 From: LeonardSchmiester Date: Wed, 25 Nov 2020 13:56:45 +0100 Subject: [PATCH 1/5] Different value for B in preeq and sim condition --- petabtests/cases/0010/0010.py | 4 ++-- petabtests/cases/0010/_0010_solution.yaml | 4 ++-- petabtests/cases/0010/_conditions.tsv | 2 +- petabtests/cases/0010/_simulations.tsv | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/petabtests/cases/0010/0010.py b/petabtests/cases/0010/0010.py index f22dfa8..3469ce4 100644 --- a/petabtests/cases/0010/0010.py +++ b/petabtests/cases/0010/0010.py @@ -14,7 +14,7 @@ condition_df = pd.DataFrame(data={ CONDITION_ID: ['preeq_c0', 'c0'], 'k1': [0.3, 0.8], - 'B': [0, 0], + 'B': [0, 1], }).set_index([CONDITION_ID]) measurement_df = pd.DataFrame(data={ @@ -49,7 +49,7 @@ steady_state_a = analytical_a(1000, 1, 0, 0.3, 0.6) # use steady state as initial state simulation_df[SIMULATION] = [ - analytical_a(t, steady_state_a, 0, 0.8, 0.6) + analytical_a(t, steady_state_a, 1, 0.8, 0.6) for t in simulation_df[TIME]] chi2 = petab.calculate_chi2( diff --git a/petabtests/cases/0010/_0010_solution.yaml b/petabtests/cases/0010/_0010_solution.yaml index 18a4188..0f10272 100644 --- a/petabtests/cases/0010/_0010_solution.yaml +++ b/petabtests/cases/0010/_0010_solution.yaml @@ -1,5 +1,5 @@ -chi2: 0.548440802855135 -llh: -0.7258031067170223 +chi2: 1.5094134279439457 +llh: -1.2062894192614277 simulation_files: - _simulations.tsv tol_chi2: 0.001 diff --git a/petabtests/cases/0010/_conditions.tsv b/petabtests/cases/0010/_conditions.tsv index 85b0024..96cbc94 100644 --- a/petabtests/cases/0010/_conditions.tsv +++ b/petabtests/cases/0010/_conditions.tsv @@ -1,3 +1,3 @@ conditionId k1 B preeq_c0 0.3 0 -c0 0.8 0 +c0 0.8 1 diff --git a/petabtests/cases/0010/_simulations.tsv b/petabtests/cases/0010/_simulations.tsv index a2acfab..c467087 100644 --- a/petabtests/cases/0010/_simulations.tsv +++ b/petabtests/cases/0010/_simulations.tsv @@ -1,3 +1,3 @@ observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.3796559862634692 -obs_a preeq_c0 c0 10 0.28571460248713115 +obs_a preeq_c0 c0 1 0.7025430017170664 +obs_a preeq_c0 c0 10 0.7142856746891086 From 958fb4e621fa85d33d9021217c78b00824a9d6fb Mon Sep 17 00:00:00 2001 From: LeonardSchmiester Date: Wed, 25 Nov 2020 13:59:03 +0100 Subject: [PATCH 2/5] Added case for NaN in condition table --- petabtests/cases/0017/0017.md | 18 ++++ petabtests/cases/0017/0017.py | 61 ++++++++++++ petabtests/cases/0017/_0017.yaml | 11 +++ petabtests/cases/0017/_0017_solution.yaml | 7 ++ petabtests/cases/0017/_conditions.tsv | 3 + petabtests/cases/0017/_measurements.tsv | 3 + petabtests/cases/0017/_model.xml | 94 +++++++++++++++++++ petabtests/cases/0017/_observables.tsv | 2 + petabtests/cases/0017/_parameters.tsv | 2 + petabtests/cases/0017/_simulations.tsv | 3 + petabtests/cases/pysb/0017/_0017.yaml | 11 +++ .../cases/pysb/0017/_0017_solution.yaml | 7 ++ petabtests/cases/pysb/0017/_conditions.tsv | 3 + petabtests/cases/pysb/0017/_measurements.tsv | 3 + petabtests/cases/pysb/0017/_model.py | 21 +++++ petabtests/cases/pysb/0017/_observables.tsv | 2 + petabtests/cases/pysb/0017/_parameters.tsv | 2 + petabtests/cases/pysb/0017/_simulations.tsv | 3 + 18 files changed, 256 insertions(+) create mode 100644 petabtests/cases/0017/0017.md create mode 100644 petabtests/cases/0017/0017.py create mode 100644 petabtests/cases/0017/_0017.yaml create mode 100644 petabtests/cases/0017/_0017_solution.yaml create mode 100644 petabtests/cases/0017/_conditions.tsv create mode 100644 petabtests/cases/0017/_measurements.tsv create mode 100644 petabtests/cases/0017/_model.xml create mode 100644 petabtests/cases/0017/_observables.tsv create mode 100644 petabtests/cases/0017/_parameters.tsv create mode 100644 petabtests/cases/0017/_simulations.tsv create mode 100644 petabtests/cases/pysb/0017/_0017.yaml create mode 100644 petabtests/cases/pysb/0017/_0017_solution.yaml create mode 100644 petabtests/cases/pysb/0017/_conditions.tsv create mode 100644 petabtests/cases/pysb/0017/_measurements.tsv create mode 100644 petabtests/cases/pysb/0017/_model.py create mode 100644 petabtests/cases/pysb/0017/_observables.tsv create mode 100644 petabtests/cases/pysb/0017/_parameters.tsv create mode 100644 petabtests/cases/pysb/0017/_simulations.tsv diff --git a/petabtests/cases/0017/0017.md b/petabtests/cases/0017/0017.md new file mode 100644 index 0000000..2485b78 --- /dev/null +++ b/petabtests/cases/0017/0017.md @@ -0,0 +1,18 @@ +# PEtab test case 0017 + +## Objective + +This case tests support for partial preequilibration with `NaN`'s in the +condition file. + +The model is to be simulated for a preequilibration condition and a +simulation condition. +For preequilibration, species `B` is initialized with `0`. For simulation, +`B` is set to `NaN`, meaning that it is initialized with the result from +preequilibration. +For `A` the preequilibration result is to be used. + +## Model + +A simple conversion reaction `A <=> B` in a single compartment, following +mass action kinetics. diff --git a/petabtests/cases/0017/0017.py b/petabtests/cases/0017/0017.py new file mode 100644 index 0000000..b8c2651 --- /dev/null +++ b/petabtests/cases/0017/0017.py @@ -0,0 +1,61 @@ +from petabtests import * +from petab.C import * +import petab + +import pandas as pd + + +test_id = 17 + +# problem -------------------------------------------------------------------- + +model = DEFAULT_SBML_FILE + +condition_df = pd.DataFrame(data={ + CONDITION_ID: ['preeq_c0', 'c0'], + 'k1': [0.3, 0.8], + 'B': [0, 'NaN'], +}).set_index([CONDITION_ID]) + +measurement_df = pd.DataFrame(data={ + OBSERVABLE_ID: ['obs_a', 'obs_a'], + PREEQUILIBRATION_CONDITION_ID: ['preeq_c0', 'preeq_c0'], + SIMULATION_CONDITION_ID: ['c0', 'c0'], + TIME: [1, 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: ['k2'], + PARAMETER_SCALE: [LIN], + LOWER_BOUND: [0], + UPPER_BOUND: [10], + NOMINAL_VALUE: [0.6], + ESTIMATE: [1], +}).set_index(PARAMETER_ID) + + +# solutions ------------------------------------------------------------------ + +simulation_df = measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION}) +# simulate for far time point as steady state +steady_state_a = analytical_a(1000, 1, 0, 0.3, 0.6) +steady_state_b = analytical_b(1000, 1, 0, 0.3, 0.6) +# use steady state as initial state +simulation_df[SIMULATION] = [ + analytical_a(t, steady_state_a, steady_state_b, 0.8, 0.6) + for t in simulation_df[TIME]] + +chi2 = petab.calculate_chi2( + measurement_df, simulation_df, observable_df, parameter_df) + +llh = petab.calculate_llh( + measurement_df, simulation_df, observable_df, parameter_df) +print(llh) diff --git a/petabtests/cases/0017/_0017.yaml b/petabtests/cases/0017/_0017.yaml new file mode 100644 index 0000000..b193feb --- /dev/null +++ b/petabtests/cases/0017/_0017.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/0017/_0017_solution.yaml b/petabtests/cases/0017/_0017_solution.yaml new file mode 100644 index 0000000..09cf387 --- /dev/null +++ b/petabtests/cases/0017/_0017_solution.yaml @@ -0,0 +1,7 @@ +chi2: 0.6128279546163969 +llh: -0.7579966825976534 +simulation_files: +- _simulations.tsv +tol_chi2: 0.001 +tol_llh: 0.001 +tol_simulations: 0.001 diff --git a/petabtests/cases/0017/_conditions.tsv b/petabtests/cases/0017/_conditions.tsv new file mode 100644 index 0000000..99d14aa --- /dev/null +++ b/petabtests/cases/0017/_conditions.tsv @@ -0,0 +1,3 @@ +conditionId k1 B +preeq_c0 0.3 0 +c0 0.8 NaN diff --git a/petabtests/cases/0017/_measurements.tsv b/petabtests/cases/0017/_measurements.tsv new file mode 100644 index 0000000..a9a1cb0 --- /dev/null +++ b/petabtests/cases/0017/_measurements.tsv @@ -0,0 +1,3 @@ +observableId preequilibrationConditionId simulationConditionId time measurement +obs_a preeq_c0 c0 1 0.7 +obs_a preeq_c0 c0 10 0.1 diff --git a/petabtests/cases/0017/_model.xml b/petabtests/cases/0017/_model.xml new file mode 100644 index 0000000..8119c97 --- /dev/null +++ b/petabtests/cases/0017/_model.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a0 + + + + + b0 + + + + + + + + + + + + + + + + + compartment + k1 + A + + + + + + + + + + + + + + + + compartment + k2 + B + + + + + + + + diff --git a/petabtests/cases/0017/_observables.tsv b/petabtests/cases/0017/_observables.tsv new file mode 100644 index 0000000..0b78dd1 --- /dev/null +++ b/petabtests/cases/0017/_observables.tsv @@ -0,0 +1,2 @@ +observableId observableFormula noiseFormula +obs_a A 0.5 diff --git a/petabtests/cases/0017/_parameters.tsv b/petabtests/cases/0017/_parameters.tsv new file mode 100644 index 0000000..72b88de --- /dev/null +++ b/petabtests/cases/0017/_parameters.tsv @@ -0,0 +1,2 @@ +parameterId parameterScale lowerBound upperBound nominalValue estimate +k2 lin 0 10 0.6 1 diff --git a/petabtests/cases/0017/_simulations.tsv b/petabtests/cases/0017/_simulations.tsv new file mode 100644 index 0000000..0b86e24 --- /dev/null +++ b/petabtests/cases/0017/_simulations.tsv @@ -0,0 +1,3 @@ +observableId preequilibrationConditionId simulationConditionId time simulation +obs_a preeq_c0 c0 1 0.48728499141466824 +obs_a preeq_c0 c0 10 0.42857162655445696 diff --git a/petabtests/cases/pysb/0017/_0017.yaml b/petabtests/cases/pysb/0017/_0017.yaml new file mode 100644 index 0000000..dcde465 --- /dev/null +++ b/petabtests/cases/pysb/0017/_0017.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.py diff --git a/petabtests/cases/pysb/0017/_0017_solution.yaml b/petabtests/cases/pysb/0017/_0017_solution.yaml new file mode 100644 index 0000000..09cf387 --- /dev/null +++ b/petabtests/cases/pysb/0017/_0017_solution.yaml @@ -0,0 +1,7 @@ +chi2: 0.6128279546163969 +llh: -0.7579966825976534 +simulation_files: +- _simulations.tsv +tol_chi2: 0.001 +tol_llh: 0.001 +tol_simulations: 0.001 diff --git a/petabtests/cases/pysb/0017/_conditions.tsv b/petabtests/cases/pysb/0017/_conditions.tsv new file mode 100644 index 0000000..99d14aa --- /dev/null +++ b/petabtests/cases/pysb/0017/_conditions.tsv @@ -0,0 +1,3 @@ +conditionId k1 B +preeq_c0 0.3 0 +c0 0.8 NaN diff --git a/petabtests/cases/pysb/0017/_measurements.tsv b/petabtests/cases/pysb/0017/_measurements.tsv new file mode 100644 index 0000000..a9a1cb0 --- /dev/null +++ b/petabtests/cases/pysb/0017/_measurements.tsv @@ -0,0 +1,3 @@ +observableId preequilibrationConditionId simulationConditionId time measurement +obs_a preeq_c0 c0 1 0.7 +obs_a preeq_c0 c0 10 0.1 diff --git a/petabtests/cases/pysb/0017/_model.py b/petabtests/cases/pysb/0017/_model.py new file mode 100644 index 0000000..57ec588 --- /dev/null +++ b/petabtests/cases/pysb/0017/_model.py @@ -0,0 +1,21 @@ +from pysb import Model, Monomer, Parameter, Compartment, Rule, Initial, Observable + +Model() + +Compartment('compartment') + +Monomer('A_') +Monomer('B_') + +Parameter('a0', 1.0) +Parameter('b0', 1.0) +Parameter('k1', 0.0) +Parameter('k2', 0.0) + +Rule('conversion', A_() ** compartment | B_() ** compartment, k1, k2) + +Initial(A_() ** compartment, a0) +Initial(B_() ** compartment, b0) + +Observable("A", A_()) +Observable("B", B_()) diff --git a/petabtests/cases/pysb/0017/_observables.tsv b/petabtests/cases/pysb/0017/_observables.tsv new file mode 100644 index 0000000..0b78dd1 --- /dev/null +++ b/petabtests/cases/pysb/0017/_observables.tsv @@ -0,0 +1,2 @@ +observableId observableFormula noiseFormula +obs_a A 0.5 diff --git a/petabtests/cases/pysb/0017/_parameters.tsv b/petabtests/cases/pysb/0017/_parameters.tsv new file mode 100644 index 0000000..72b88de --- /dev/null +++ b/petabtests/cases/pysb/0017/_parameters.tsv @@ -0,0 +1,2 @@ +parameterId parameterScale lowerBound upperBound nominalValue estimate +k2 lin 0 10 0.6 1 diff --git a/petabtests/cases/pysb/0017/_simulations.tsv b/petabtests/cases/pysb/0017/_simulations.tsv new file mode 100644 index 0000000..0b86e24 --- /dev/null +++ b/petabtests/cases/pysb/0017/_simulations.tsv @@ -0,0 +1,3 @@ +observableId preequilibrationConditionId simulationConditionId time simulation +obs_a preeq_c0 c0 1 0.48728499141466824 +obs_a preeq_c0 c0 10 0.42857162655445696 From 5f51a39e81e9a020e3ff7f44e15c44fff5d85229 Mon Sep 17 00:00:00 2001 From: LeonardSchmiester Date: Wed, 25 Nov 2020 13:59:16 +0100 Subject: [PATCH 3/5] Adapted case 10 --- petabtests/cases/pysb/0010/_0010_solution.yaml | 4 ++-- petabtests/cases/pysb/0010/_conditions.tsv | 2 +- petabtests/cases/pysb/0010/_simulations.tsv | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/petabtests/cases/pysb/0010/_0010_solution.yaml b/petabtests/cases/pysb/0010/_0010_solution.yaml index 18a4188..0f10272 100644 --- a/petabtests/cases/pysb/0010/_0010_solution.yaml +++ b/petabtests/cases/pysb/0010/_0010_solution.yaml @@ -1,5 +1,5 @@ -chi2: 0.548440802855135 -llh: -0.7258031067170223 +chi2: 1.5094134279439457 +llh: -1.2062894192614277 simulation_files: - _simulations.tsv tol_chi2: 0.001 diff --git a/petabtests/cases/pysb/0010/_conditions.tsv b/petabtests/cases/pysb/0010/_conditions.tsv index 85b0024..96cbc94 100644 --- a/petabtests/cases/pysb/0010/_conditions.tsv +++ b/petabtests/cases/pysb/0010/_conditions.tsv @@ -1,3 +1,3 @@ conditionId k1 B preeq_c0 0.3 0 -c0 0.8 0 +c0 0.8 1 diff --git a/petabtests/cases/pysb/0010/_simulations.tsv b/petabtests/cases/pysb/0010/_simulations.tsv index a2acfab..c467087 100644 --- a/petabtests/cases/pysb/0010/_simulations.tsv +++ b/petabtests/cases/pysb/0010/_simulations.tsv @@ -1,3 +1,3 @@ observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.3796559862634692 -obs_a preeq_c0 c0 10 0.28571460248713115 +obs_a preeq_c0 c0 1 0.7025430017170664 +obs_a preeq_c0 c0 10 0.7142856746891086 From 69dae6a83928446756648c3726eade33f8a0bcc4 Mon Sep 17 00:00:00 2001 From: LeonardSchmiester Date: Thu, 26 Nov 2020 10:21:07 +0100 Subject: [PATCH 4/5] Reinitialize A --- petabtests/cases/0017/0017.md | 3 ++- petabtests/cases/0017/0017.py | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/petabtests/cases/0017/0017.md b/petabtests/cases/0017/0017.md index 2485b78..fcd0e1b 100644 --- a/petabtests/cases/0017/0017.md +++ b/petabtests/cases/0017/0017.md @@ -10,7 +10,8 @@ simulation condition. For preequilibration, species `B` is initialized with `0`. For simulation, `B` is set to `NaN`, meaning that it is initialized with the result from preequilibration. -For `A` the preequilibration result is to be used. +`A` is reinitialized to the value in the condition table after +preequilibration. ## Model diff --git a/petabtests/cases/0017/0017.py b/petabtests/cases/0017/0017.py index b8c2651..0bbac00 100644 --- a/petabtests/cases/0017/0017.py +++ b/petabtests/cases/0017/0017.py @@ -15,6 +15,7 @@ CONDITION_ID: ['preeq_c0', 'c0'], 'k1': [0.3, 0.8], 'B': [0, 'NaN'], + 'A': [0, 1], }).set_index([CONDITION_ID]) measurement_df = pd.DataFrame(data={ @@ -46,11 +47,10 @@ simulation_df = measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION}) # simulate for far time point as steady state -steady_state_a = analytical_a(1000, 1, 0, 0.3, 0.6) -steady_state_b = analytical_b(1000, 1, 0, 0.3, 0.6) +steady_state_b = analytical_b(1000, 0, 0, 0.3, 0.6) # use steady state as initial state simulation_df[SIMULATION] = [ - analytical_a(t, steady_state_a, steady_state_b, 0.8, 0.6) + analytical_a(t, 1, steady_state_b, 0.8, 0.6) for t in simulation_df[TIME]] chi2 = petab.calculate_chi2( From f5c0a9a2643d64efc1d36594f36f80de804bbbb7 Mon Sep 17 00:00:00 2001 From: LeonardSchmiester Date: Thu, 26 Nov 2020 10:24:20 +0100 Subject: [PATCH 5/5] Update Case 17 --- petabtests/cases/0017/_0017_solution.yaml | 4 ++-- petabtests/cases/0017/_conditions.tsv | 6 +++--- petabtests/cases/0017/_simulations.tsv | 4 ++-- petabtests/cases/pysb/0017/_0017_solution.yaml | 4 ++-- petabtests/cases/pysb/0017/_conditions.tsv | 6 +++--- petabtests/cases/pysb/0017/_simulations.tsv | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/petabtests/cases/0017/_0017_solution.yaml b/petabtests/cases/0017/_0017_solution.yaml index 09cf387..457e499 100644 --- a/petabtests/cases/0017/_0017_solution.yaml +++ b/petabtests/cases/0017/_0017_solution.yaml @@ -1,5 +1,5 @@ -chi2: 0.6128279546163969 -llh: -0.7579966825976534 +chi2: 0.4999757102229031 +llh: -0.7015705604009064 simulation_files: - _simulations.tsv tol_chi2: 0.001 diff --git a/petabtests/cases/0017/_conditions.tsv b/petabtests/cases/0017/_conditions.tsv index 99d14aa..664076e 100644 --- a/petabtests/cases/0017/_conditions.tsv +++ b/petabtests/cases/0017/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId k1 B -preeq_c0 0.3 0 -c0 0.8 NaN +conditionId k1 B A +preeq_c0 0.3 0 0 +c0 0.8 NaN 1 diff --git a/petabtests/cases/0017/_simulations.tsv b/petabtests/cases/0017/_simulations.tsv index 0b86e24..7320171 100644 --- a/petabtests/cases/0017/_simulations.tsv +++ b/petabtests/cases/0017/_simulations.tsv @@ -1,3 +1,3 @@ observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.48728499141466824 -obs_a preeq_c0 c0 10 0.42857162655445696 +obs_a preeq_c0 c0 1 0.5694839793952038 +obs_a preeq_c0 c0 10 0.42857190373069665 diff --git a/petabtests/cases/pysb/0017/_0017_solution.yaml b/petabtests/cases/pysb/0017/_0017_solution.yaml index 09cf387..457e499 100644 --- a/petabtests/cases/pysb/0017/_0017_solution.yaml +++ b/petabtests/cases/pysb/0017/_0017_solution.yaml @@ -1,5 +1,5 @@ -chi2: 0.6128279546163969 -llh: -0.7579966825976534 +chi2: 0.4999757102229031 +llh: -0.7015705604009064 simulation_files: - _simulations.tsv tol_chi2: 0.001 diff --git a/petabtests/cases/pysb/0017/_conditions.tsv b/petabtests/cases/pysb/0017/_conditions.tsv index 99d14aa..664076e 100644 --- a/petabtests/cases/pysb/0017/_conditions.tsv +++ b/petabtests/cases/pysb/0017/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId k1 B -preeq_c0 0.3 0 -c0 0.8 NaN +conditionId k1 B A +preeq_c0 0.3 0 0 +c0 0.8 NaN 1 diff --git a/petabtests/cases/pysb/0017/_simulations.tsv b/petabtests/cases/pysb/0017/_simulations.tsv index 0b86e24..7320171 100644 --- a/petabtests/cases/pysb/0017/_simulations.tsv +++ b/petabtests/cases/pysb/0017/_simulations.tsv @@ -1,3 +1,3 @@ observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.48728499141466824 -obs_a preeq_c0 c0 10 0.42857162655445696 +obs_a preeq_c0 c0 1 0.5694839793952038 +obs_a preeq_c0 c0 10 0.42857190373069665