Example #1
0
 def add_H(self):
     self.get_free_coor_vector()
     new_Hs = []
     for atom in self.choosed_atoms:
         if len(atom.coor_vec_free) > 0:
             length = read_cov_rad(atom.nat, unit='a') + \
                 read_cov_rad('1', unit='a')
             new_H = self.get_new_atom_according_to_vetor(
                 atom, atom.coor_vec_free[0], length, nat='1')
             new_Hs.append(new_H)
     final_cluster = self.choosed_atoms + new_Hs
     return final_cluster
Example #2
0
 def cal_coor_no_of_all_atoms(self, atoms):
     for i in range(len(atoms)):
         coor = 0
         coor_vec = []
         for j in range(len(atoms)):
             if i != j:
                 cor_rad = read_cov_rad(
                     atoms[i].nat, unit='a') + read_cov_rad(atoms[j].nat,
                                                            unit='a')
                 dis = self.cal_dis_two_atoms(atoms[i], atoms[j])
                 if dis <= cor_rad * 1.1 and dis > 0:
                     # print(atoms[i], atoms[j], cor_rad*1.2, dis)
                     vec = self.cal_vector_between_two_atoms(
                         atoms[i], atoms[j])
                     coor_vec.append(vec)
                     coor += 1
         atoms[i].coor = coor
         atoms[i].coor_vec = coor_vec
     # for i in self.original_atoms:
     #     print(i.coor)
     return atoms
Example #3
0
 def cal_coordinate_number_of_original_atoms(self):
     """
     according to the distance between two atoms to judge if there is conectivity between these two atoms
     afterwards calculate the coordniation number of each atom
     and calculate the direction of each coordinated atom of each atom
     :return:
     """
     if self.dimensionality == 2:
         vec = (1, 1)
     else:
         vec = (1, 1, 1)
     new_atoms = self.gen_all_atoms(self.original_atoms, vec)
     all_atoms = new_atoms + self.original_atoms
     for i in range(len(self.original_atoms)):
         coor = 0
         coor_vec = []
         for new_atom in all_atoms:
             if new_atom != self.original_atoms[i]:
                 cov_rad = (
                     read_cov_rad(self.original_atoms[i].nat, unit='a') +
                     read_cov_rad(new_atom.nat, unit='a')) * 1.1
                 distance = self.cal_dis_two_atoms(self.original_atoms[i],
                                                   new_atom)
                 if distance <= cov_rad:
                     #print(self.original_atoms[i], new_atom.nat, distance, cov_rad)
                     vec = self.cal_vector_between_two_atoms(
                         self.original_atoms[i], new_atom)
                     coor_vec.append(vec)
                     coor += 1
         self.original_atoms[i].coor = coor
         # print(coor)
         self.original_atoms[i].coor_vec = coor_vec
         # print(coor_vec)
     atoms_coor_dict, atoms_coor_vec_dict = {}, {}
     for atom in self.original_atoms:
         atoms_coor_dict[atom.no] = atom.coor
         atoms_coor_vec_dict[atom.no] = atom.coor_vec
     return atoms_coor_dict, atoms_coor_vec_dict