Пример #1
0
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()
Пример #2
0
    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