예제 #1
0
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
예제 #2
0
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)