class ParameterValues(object): """ Parameters set for kinetic models wich can be indexed with symbols or """ def __init__(self, parameter_values, kmodel=None): """ :param kmodel: KineticModel class :param parameter_values: a dict contaning parameter names and values """ if parameter_values.__class__ is Series: parameter_values = parameter_values.to_dict() self._parameter_values = TabDict([ (str(p), v) for p, v in parameter_values.items() ]) # Check if this is a good solution if kmodel is not None: model_params = kmodel.parameters self._str_to_sym = { p: model_params[p].symbol for p in model_params } else: self._str_to_sym = {p: Symbol(p) for p in parameter_values} self._sym_to_str = { self._str_to_sym[p]: p for p in self._parameter_values } #self._str_to_param = {p:model_params[p] for p in self._parameter_values} def __getitem__(self, item): if item.__class__ is str: return self._parameter_values[item] if item.__class__ is Symbol: return self._parameter_values[self._sym_to_str[item]] def __setitem__(self, item, value): if item.__class__ is str: self._parameter_values[item] = value if item.__class__ is Symbol: self._parameter_values[self._sym_to_str[item]] = value def items(self): return self._parameter_values.items() def keys(self): return self._parameter_values.keys() def values(self): return self._parameter_values.values()
def reactant_stoichiometry(self): reactant_stoichiometry = TabDict([]) for k, v in self.mechanism.reactant_stoichiometry.items(): if self.mechanism.reactants[k].type == VARIABLE: this_reactant = self.mechanism.reactants[k] if this_reactant in reactant_stoichiometry.keys(): reactant_stoichiometry[this_reactant] += v else: reactant_stoichiometry[this_reactant] = v for this_modifier in self.modifiers.values(): for k, v in this_modifier.reactants.items(): if v.type == VARIABLE and this_modifier.reactant_stoichiometry[ k] != 0: reactant_stoichiometry[ v] = this_modifier.reactant_stoichiometry[k] return reactant_stoichiometry