def parse_constraints(self,constraint_dict):
        """This function converts constraints which are input as a dictionary
        to lists compatible with the function to obtain scaling coefficients."""
        coefficient_mins = []
        coefficient_maxs = []

        if constraint_dict:
            for key in constraint_dict.keys():
                if '_' not in key:
                    constraint_dict[key+'_'+self._default_site] = \
                            constraint_dict[key]
                    del constraint_dict[key]

            for ads in self.parameter_names:
                if ads not in constraint_dict:
                    constr = self.default_constraints
                elif not hasattr(constraint_dict[ads], '__iter__'):
                    constr = self.default_constraints
                else:
                    constr = constraint_dict[ads]
                minvs,maxvs = parse_constraint(constr,ads)
                coefficient_mins.append(minvs)
                coefficient_maxs.append(maxvs)

            self.coefficient_mins = coefficient_mins
            self.coefficient_maxs = coefficient_maxs
            return coefficient_mins, coefficient_maxs
Esempio n. 2
0
    def parse_constraints(self, constraint_dict):
        """This function converts constraints which are input as a dictionary
        to lists compatible with the function to obtain scaling coefficients."""
        coefficient_mins = []
        coefficient_maxs = []

        if constraint_dict:
            for key in constraint_dict.keys():
                if '_' not in key:
                    constraint_dict[key+'_'+self._default_site] = \
                            constraint_dict[key]
                    del constraint_dict[key]

            for ads in self.adsorbate_names:
                if ads not in constraint_dict:
                    constr = self.default_constraints
                else:
                    constr = constraint_dict[ads]
                minvs, maxvs = parse_constraint(constr, ads)
                coefficient_mins.append(minvs)
                coefficient_maxs.append(maxvs)

            self.coefficient_mins = coefficient_mins
            self.coefficient_maxs = coefficient_maxs
            return coefficient_mins, coefficient_maxs
Esempio n. 3
0
    def get_interaction_scaling_matrix(self):
        interaction_dict = self.get_interaction_info()

        cross_names = self.interaction_cross_term_names
        if cross_names:
            param_names = self.adsorbate_names + cross_names
        else:
            param_names = self.adsorbate_names

        constraint_dict = {}
        if not self.interaction_scaling_constraint_dict:
            self.interaction_scaling_constraint_dict = self.scaling_constraint_dict.copy(
            )
            for ads in self.interaction_scaling_constraint_dict:
                if '-' not in ads:
                    constr = self.interaction_scaling_constraint_dict[ads]
                    new_constr = []
                    #preserve only 0 constraints
                    for ci in constr:
                        if ci != 0:
                            new_constr.append(None)
                        else:
                            new_constr.append(0)
                    constraint_dict[ads] = new_constr

        for ads in self.interaction_scaling_constraint_dict:
            if '&' in ads:
                a, b = ads.split('&')
                a, b = sorted([a, b])
                new_ads = '&'.join([a, b])
                constraint_dict[
                    new_ads] = self.interaction_scaling_constraint_dict[ads]
            else:
                constraint_dict[
                    ads] = self.interaction_scaling_constraint_dict[ads]

        #get mins/maxs
        interaction_mins = []
        interaction_maxs = []
        if self.default_interaction_constraints is None:
            self.default_interaction_constraints = [None] * (
                len(self.descriptor_names) + 1)
        for p in param_names:
            if p not in constraint_dict:
                constr = self.default_interaction_constraints
            else:
                constr = constraint_dict[p]
            minvs, maxvs = parse_constraint(constr, p)
            interaction_mins.append(minvs)
            interaction_maxs.append(maxvs)

        #get coefficient matrix
        C = catmap.functions.scaling_coefficient_matrix(
            interaction_dict, self.descriptor_dict, self.surface_names,
            param_names, interaction_mins, interaction_maxs)
        self.interaction_coefficient_matrix = C.T

        return self.interaction_coefficient_matrix
    def get_interaction_scaling_matrix(self):
        cross_names = self.interaction_cross_term_names
        if cross_names:
            param_names = self.adsorbate_names + cross_names
        else:
            param_names = self.adsorbate_names

        interaction_dict = self.get_interaction_info()
        constraint_dict = {}
        if not self.interaction_scaling_constraint_dict:
            self.interaction_scaling_constraint_dict = self.scaling_constraint_dict

        for ads in self.interaction_scaling_constraint_dict:
            if '-' not in ads:
                constr = self.interaction_scaling_constraint_dict[ads]
                new_constr = []
                #preserve only 0 constraints
                for ci in constr:
                    if ci != 0:
                        new_constr.append(None)
                    else:
                        new_constr.append(0)
                constraint_dict[ads] = new_constr

        for ads in self.interaction_scaling_constraint_dict:
            if '&' in ads:
                a,b = ads.split('&')
                a,b = sorted([a,b])
                new_ads = '&'.join([a,b])
                constraint_dict[new_ads] = self.interaction_scaling_constraint_dict[ads]
            else:
                constraint_dict[ads] = self.interaction_scaling_constraint_dict[ads]


        #get mins/maxs
        interaction_mins = []
        interaction_maxs = []
        if self.default_interaction_constraints is None:
            self.default_interaction_constraints = [None]*(len(self.descriptor_names)+1)
        for p in param_names:
            if p not in constraint_dict:
                constr = self.default_interaction_constraints
            else:
                constr = constraint_dict[p]
            minvs,maxvs = parse_constraint(constr,p)
            interaction_mins.append(minvs)
            interaction_maxs.append(maxvs)

        #get coefficient matrix
        C = catmap.functions.scaling_coefficient_matrix(
                interaction_dict, self.descriptor_dict, 
                self.surface_names, 
                param_names,
                interaction_mins,
                interaction_maxs)
        self.interaction_coefficient_matrix = C.T

        return self.interaction_coefficient_matrix