|
9 | 9 |
|
10 | 10 | import tempfile |
11 | 11 |
|
| 12 | +import petab.v1 as petab |
| 13 | + |
12 | 14 |
|
13 | 15 | class SimulationController: |
14 | 16 | """Controller for PEtab simulations. |
@@ -57,6 +59,49 @@ def simulate(self): |
57 | 59 | # obtain petab problem |
58 | 60 | petab_problem = self.model.current_petab_problem |
59 | 61 |
|
| 62 | + # Check if nominalValue column exists, if not add it from SBML model |
| 63 | + parameter_df = petab_problem.parameter_df.copy() |
| 64 | + if ( |
| 65 | + parameter_df is not None |
| 66 | + and not parameter_df.empty |
| 67 | + and petab.C.NOMINAL_VALUE not in parameter_df.columns |
| 68 | + ): |
| 69 | + self.logger.log_message( |
| 70 | + "nominalValue column missing in parameter table. " |
| 71 | + "Extracting nominal values from SBML model...", |
| 72 | + color="orange", |
| 73 | + ) |
| 74 | + # Extract parameter values from SBML model |
| 75 | + sbml_model = self.model.sbml.get_current_sbml_model() |
| 76 | + if sbml_model is not None: |
| 77 | + nominal_values = [] |
| 78 | + for param_id in parameter_df.index: |
| 79 | + try: |
| 80 | + value = sbml_model.get_parameter_value(param_id) |
| 81 | + nominal_values.append(value) |
| 82 | + except Exception: |
| 83 | + # If parameter not found in SBML, use default value of 1 |
| 84 | + nominal_values.append(1.0) |
| 85 | + |
| 86 | + # Add nominalValue column to parameter_df |
| 87 | + parameter_df[petab.C.NOMINAL_VALUE] = nominal_values |
| 88 | + self.logger.log_message( |
| 89 | + f"Successfully extracted {len(nominal_values)} " |
| 90 | + f"nominal values from SBML model. Add nominalValue " |
| 91 | + f"column to parameter table to set values manually.", |
| 92 | + color="green", |
| 93 | + ) |
| 94 | + |
| 95 | + # Update the petab problem with the modified parameter_df |
| 96 | + petab_problem = petab.Problem( |
| 97 | + condition_df=petab_problem.condition_df, |
| 98 | + measurement_df=petab_problem.measurement_df, |
| 99 | + observable_df=petab_problem.observable_df, |
| 100 | + parameter_df=parameter_df, |
| 101 | + visualization_df=petab_problem.visualization_df, |
| 102 | + model=petab_problem.model, |
| 103 | + ) |
| 104 | + |
60 | 105 | # import petabsimualtor |
61 | 106 | import basico |
62 | 107 | from basico.petab import PetabSimulator |
|
0 commit comments