def create_parameter_table(problem: petab.Problem, nominal_parameters): """Create PEtab parameter table""" df = petab.create_parameter_df(problem.sbml_model, problem.condition_df, problem.observable_df, problem.measurement_df, include_optional=True, lower_bound=1e-3, upper_bound=1e5) df['hierarchicalOptimization'] = 0 df.loc['scaling_x1_common', 'hierarchicalOptimization'] = 1 df.loc['offset_x2_batch_0', 'hierarchicalOptimization'] = 1 df.loc['offset_x2_batch_1', 'hierarchicalOptimization'] = 1 df.loc['x1withsigma_sigma', 'hierarchicalOptimization'] = 1 for pid, val in nominal_parameters.items(): if pid in df.index: df.loc[pid, ptc.NOMINAL_VALUE] = val df.loc[pid, ptc.PARAMETER_SCALE] = ptc.LOG10 df.loc[pid, ptc.ESTIMATE] = 1 elif pid.startswith('noiseParameter') \ or pid.startswith('observableParameter'): continue else: print("extra parameter", pid, val) # offsets can be negative: adapt scaling and bounds: offsets = df.index.str.startswith('offset_') df.loc[offsets, ptc.PARAMETER_SCALE] = ptc.LIN problem.parameter_df = df
def create_parameter_table(problem: petab.Problem, parameter_file, nominal_parameters): """Create PEtab parameter table""" df = problem.create_parameter_df(lower_bound=-3, upper_bound=5) # TODO: move to peTAB df['hierarchicalOptimization'] = 0 df.loc['scaling_x1_common', 'hierarchicalOptimization'] = 1 df.loc['offset_x2_batch-0', 'hierarchicalOptimization'] = 1 df.loc['offset_x2_batch-1', 'hierarchicalOptimization'] = 1 df.loc['x1withsigma_sigma', 'hierarchicalOptimization'] = 1 #df.parameterScale = 'lin' #df.estimate = 0 print(nominal_parameters) for pid, val in nominal_parameters.items(): if pid in df.index: df.loc[pid, 'nominalValue'] = val df.loc[pid, 'parameterScale'] = 'log10' df.loc[pid, 'estimate'] = 1 elif pid.startswith('noiseParameter') \ or pid.startswith('observableParameter'): continue else: print("extra parameter", pid, val) # offsets can be negative: adapt scaling and bounds: offsets = df.index.str.startswith('offset_') df.loc[offsets, 'parameterScale'] = 'lin' df.loc[offsets, 'lowerBound'] = np.power(10.0, df.loc[offsets, 'lowerBound']) df.loc[offsets, 'upperBound'] = np.power(10.0, df.loc[offsets, 'upperBound']) problem.parameter_df = df df.to_csv(parameter_file, sep="\t", index=True)