Skip to content

Commit e8c020e

Browse files
authored
Fix missing estimated parameters in exported PEtab (#166)
* closes #164
1 parent d603a01 commit e8c020e

10 files changed

Lines changed: 27 additions & 15 deletions

File tree

.github/dependabot.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ updates:
88
ignore:
99
- dependency-name: "*"
1010
update-types: ["version-update:semver-patch", "version-update:semver-minor"]
11-
target-branch: "develop"
11+
target-branch: "main"

doc/examples/model_selection/calibrated_M1_4.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ model_subspace_petab_yaml: ../model_selection/petab_problem.yaml
1010
estimated_parameters:
1111
k2: 0.15
1212
k3: 0.0
13+
sigma_x2: 0.01
1314
iteration: 1
1415
model_id: M1_4-000
1516
parameters:

doc/examples/model_selection/calibrated_M1_7.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ estimated_parameters:
1111
k1: 0.25
1212
k2: 0.1
1313
k3: 0.0
14+
sigma_x2: 0.01
1415
iteration: 2
1516
model_id: M1_7-000
1617
parameters:

petab_select/model.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -561,13 +561,17 @@ def to_petab(
561561
set_estimated_parameters = True
562562

563563
if set_estimated_parameters:
564-
required_estimates = {
565-
parameter_id
566-
for parameter_id, value in self.parameters.items()
567-
if value == ESTIMATE
568-
}
569-
missing_estimates = required_estimates.difference(
570-
self.estimated_parameters
564+
# Check that estimates are provided for all estimated parameters
565+
required_estimates = set()
566+
for parameter_id in petab_problem.x_ids:
567+
if parameter_id in self.parameters:
568+
if self.parameters[parameter_id] == ESTIMATE:
569+
required_estimates.add(parameter_id)
570+
elif parameter_id in petab_problem.x_free_ids:
571+
required_estimates.add(parameter_id)
572+
573+
missing_estimates = sorted(
574+
required_estimates.difference(self.estimated_parameters)
571575
)
572576
if missing_estimates:
573577
raise ValueError(
@@ -580,17 +584,20 @@ def to_petab(
580584
# If the parameter is to be estimated.
581585
if parameter_value == ESTIMATE:
582586
petab_problem.parameter_df.loc[parameter_id, ESTIMATE] = 1
583-
if set_estimated_parameters:
584-
petab_problem.parameter_df.loc[
585-
parameter_id, NOMINAL_VALUE
586-
] = self.estimated_parameters[parameter_id]
587587
# Else the parameter is to be fixed.
588588
else:
589589
petab_problem.parameter_df.loc[parameter_id, ESTIMATE] = 0
590590
petab_problem.parameter_df.loc[parameter_id, NOMINAL_VALUE] = (
591591
parameter_string_to_value(parameter_value)
592592
)
593593

594+
if set_estimated_parameters:
595+
petab_problem.parameter_df.update(
596+
{
597+
NOMINAL_VALUE: self.estimated_parameters,
598+
}
599+
)
600+
594601
petab_yaml = None
595602
if output_path is not None:
596603
output_path = Path(output_path)

test/cli/expected_output/model/parameters.tsv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ k2 k_{2} lin 0.0 1000.0 0.15 1
44
k3 k_{3} lin 0.0 1000.0 0.0 1
55
k4 k_{4} lin 0.0 1000.0 0.0 0
66
k5 k_{5} lin 0.0 1000.0 0.0 0
7-
sigma_x2 \sigma_{x2} lin 1e-05 1000.0 0.15 1
7+
sigma_x2 \sigma_{x2} lin 1e-05 1000.0 0.01 1

test/cli/expected_output/models/model_1/parameters.tsv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ k2 k_{2} lin 0.0 1000.0 0.15 1
44
k3 k_{3} lin 0.0 1000.0 0.0 1
55
k4 k_{4} lin 0.0 1000.0 0.0 0
66
k5 k_{5} lin 0.0 1000.0 0.0 0
7-
sigma_x2 \sigma_{x2} lin 1e-05 1000.0 0.15 1
7+
sigma_x2 \sigma_{x2} lin 1e-05 1000.0 0.01 1

test/cli/input/model.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
estimated_parameters:
1010
k2: 0.15
1111
k3: 0.0
12+
sigma_x2: 0.01
1213
model_id: model
1314
parameters:
1415
k1: 0.2

test/cli/input/models.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
estimated_parameters:
1010
k2: 0.15
1111
k3: 0.0
12+
sigma_x2: 0.01
1213
model_id: model_1
1314
parameters:
1415
k1: 0.2

test/model/expected_output/petab/parameters.tsv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ k2 k_{2} lin 0.0 1000.0 0.15 1
44
k3 k_{3} lin 0.0 1000.0 0.0 1
55
k4 k_{4} lin 0.0 1000.0 0.0 0
66
k5 k_{5} lin 0.0 1000.0 0.0 0
7-
sigma_x2 \sigma_{x2} lin 1e-05 1000.0 0.15 1
7+
sigma_x2 \sigma_{x2} lin 1e-05 1000.0 0.01 1

test/model/input/model.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ parameters:
1313
estimated_parameters:
1414
k2: 0.15
1515
k3: 0.0
16+
sigma_x2: 0.01

0 commit comments

Comments
 (0)