@@ -561,14 +561,18 @@ 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 (
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 (required_estimates .difference (
570574 self .estimated_parameters
571- )
575+ ))
572576 if missing_estimates :
573577 raise ValueError (
574578 "Try again with `set_estimated_parameters=False`, because "
@@ -580,17 +584,18 @@ 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+ NOMINAL_VALUE : self .estimated_parameters ,
597+ })
598+
594599 petab_yaml = None
595600 if output_path is not None :
596601 output_path = Path (output_path )
0 commit comments