Source code for parpe.dataprovider

"""Reading parPE input files"""
import amici
import h5py
import numpy as np


[docs] class DataProvider: """Interface to HDF5 input files for parPE parameter estimation Attributes: filename: hdf5 file to access """
[docs] def __init__(self, filename: str): self.filename = filename
[docs] def apply_solver_settings(self, solver: 'amici.Solver'): """Apply settings to Solver""" amici.readSolverSettingsFromHDF5( self.filename, solver.get(), '/amiciOptions')
[docs] def apply_model_settings(self, model: 'amici.Model'): """Apply settings to Model""" amici.readModelDataFromHDF5( self.filename, model.get(), '/amiciOptions')
[docs] def get_expdata_for_condition( self, model: 'amici.Model', condition_idx: int): """Get ExpData for the given simulation condition""" edata = amici.ExpData(model.get()) with h5py.File(self.filename, 'r') as f: edata.setTimepoints(self._get_timepoints(f, condition_idx)) y = np.array(edata.getObservedData()) y = y.reshape((len(edata.getTimepoints()), model.ny), ) y[:, :] = self._get_measurements(f, condition_idx) edata.setObservedData(y.flatten()) y = np.array(edata.getObservedDataStdDev()) y = y.reshape((len(edata.getTimepoints()), model.ny), ) y[:, :] = self._get_measurement_sigmas(f, condition_idx) edata.setObservedDataStdDev(y.flatten()) preeq_cond_idx, sim_cond_idx, reinit_states_flag = \ self._get_fixed_par_indices(f, condition_idx) edata.fixedParameters = self._get_fixed_parameters(f, sim_cond_idx) if preeq_cond_idx > 0: edata.fixedParametersPreequilibration = \ self._get_fixed_parameters(f, preeq_cond_idx) if reinit_states_flag > 0: edata.reinitializeFixedParameterInitialStates = True return edata
@staticmethod def _get_fixed_parameters(f: h5py.File, idx: int): return f['/fixedParameters/k'][:, idx] @staticmethod def _get_fixed_par_indices(f, simulation_idx): preeq_cond_idx, sim_cond_idx, reinit_states_flag = \ f['/fixedParameters/simulationConditions'][simulation_idx, :] return preeq_cond_idx, sim_cond_idx, reinit_states_flag @staticmethod def _get_measurements(f, simulation_idx): return f[f'/measurements/y/{simulation_idx}'][:, :] @staticmethod def _get_measurement_sigmas(f, simulation_idx): return f[f'/measurements/ysigma/{simulation_idx}'][:, :] @staticmethod def _get_timepoints(f, simulation_idx): return f[f'/measurements/t/{simulation_idx}']
[docs] def get_starting_points(self, start_idx=None, simulation_idx=None): with h5py.File(self.filename, 'r') as f: x_full = f['/optimizationOptions/randomStarts'][:, start_idx] if simulation_idx is None: return x_full mapping = self.get_opt_sim_mapping(simulation_idx) x = np.full(shape=(mapping.shape[0], 1), fill_value=np.nan) for idx, mapped_idx in enumerate(mapping): if idx >= 0: x[idx] = x_full[mapped_idx] else: raise AssertionError("Implement overrides") return x
@property def num_simulations(self): with h5py.File(self.filename, 'r') as f: return f['/parameters/optimizationSimulationMapping'].shape[1]
[docs] def get_opt_sim_mapping(self, simulation_idx = None): with h5py.File(self.filename, 'r') as f: return f['/parameters/optimizationSimulationMapping'][:, simulation_idx]