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
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
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