def form_object(self) -> NoReturn: coord_xyz = self.coord_xyz if coord_xyz is None: return False r, b = transform_string_to_r_b(coord_xyz, labels=("x", "y", "z")) self.__dict__["r"] = r self.__dict__["b"] = b it_coord_xyz = self.it_coord_xyz centring_type = self.centring_type shift = get_shift_by_centring_type(centring_type) if it_coord_xyz is not None: full_r, full_b = [], [] full_coord_xyz = [] for _coord_xyz in it_coord_xyz: r, b = transform_string_to_r_b(_coord_xyz, labels=("x", "y", "z")) for _shift in shift: b_new = numpy.mod(b + numpy.array(_shift, dtype=Fraction), 1) _symop = transform_r_b_to_string(r, b_new, labels=("x", "y", "z")) full_coord_xyz.append(_symop) full_r.append(r) full_b.append(b_new) self.__dict__["full_r"] = full_r self.__dict__["full_b"] = full_b self.__dict__["full_coord_xyz"] = full_coord_xyz
def get_symops_by_generator_xyz(self, generator_xyz: str) -> Tuple[str]: r, b = self.r, self.b symop = [] W_g, w_g = transform_string_to_r_b(generator_xyz, labels=("x", "y", "z")) flag = True W_i = copy.deepcopy(r) w_i = copy.deepcopy(b) % 1 _symop = transform_r_b_to_string(W_i, w_i, labels=("x", "y", "z")) symop.append(_symop) i_stop = 1 while flag: i_stop += 1 w_i = (mult_matrix_vector(W_g, w_i) + w_g) % 1 # w3 = W2 x w1 + w2 W_i = mult_matrixes(W_g, W_i) # W3 = W2 x W1 _symop = transform_r_b_to_string(W_i, w_i, labels=("x", "y", "z")) if ((_symop in symop) | (i_stop > 100)): flag = False else: symop.append(_symop) res = [] gen_orig = "" if not (self.generator_xyz is None): gen_orig = f"{self.generator_xyz:}" res = [ SpaceGroupSymop(id=f"{_i+1:}", operation_xyz=_symop, generator_xyz=f"{gen_orig:}_{generator_xyz:}") for _i, _symop in enumerate(symop) ] return res
def form_object(self) -> NoReturn: operation_xyz = self.operation_xyz if operation_xyz is None: return False r, b = transform_string_to_r_b(operation_xyz, labels=("x", "y", "z")) self.__dict__["r"] = r self.__dict__["b"] = b self.__dict__["r_11"] = r[0, 0] self.__dict__["r_12"] = r[0, 1] self.__dict__["r_13"] = r[0, 2] self.__dict__["r_21"] = r[1, 0] self.__dict__["r_22"] = r[1, 1] self.__dict__["r_23"] = r[1, 2] self.__dict__["r_31"] = r[2, 0] self.__dict__["r_32"] = r[2, 1] self.__dict__["r_33"] = r[2, 2] self.__dict__["b_1"] = b[0] self.__dict__["b_2"] = b[1] self.__dict__["b_3"] = b[2]
def form_object(self) -> NoReturn: """Form object.""" xyz = self.xyz if xyz is None: return False r, b = transform_string_to_r_b(xyz, labels=("x", "y", "z")) r_11, r_12, r_13 = int(r[0, 0]), int(r[0, 1]), int(r[0, 2]) r_21, r_22, r_23 = int(r[1, 0]), int(r[1, 1]), int(r[1, 2]) r_31, r_32, r_33 = int(r[2, 0]), int(r[2, 1]), int(r[2, 2]) den_1, den_2 = b[0].denominator, b[1].denominator den_3 = b[2].denominator num_1, num_2 = b[0].numerator, b[1].numerator num_3 = b[2].numerator den = numpy.lcm.reduce([den_1, den_2, den_3]) num_1 *= den // den_1 num_2 *= den // den_2 num_3 *= den // den_3 theta = int(b[3]) self.__dict__["r_11"] = r_11 self.__dict__["r_12"] = r_12 self.__dict__["r_13"] = r_13 self.__dict__["r_21"] = r_21 self.__dict__["r_22"] = r_22 self.__dict__["r_23"] = r_23 self.__dict__["r_31"] = r_31 self.__dict__["r_32"] = r_32 self.__dict__["r_33"] = r_33 self.__dict__["b_1"] = b[0] self.__dict__["b_2"] = b[1] self.__dict__["b_3"] = b[2] self.__dict__["theta"] = theta self.__dict__["sym_elem"] = numpy.array([ num_1, num_2, num_3, den, r_11, r_12, r_13, r_21, r_22, r_23, r_31, r_32, r_33, theta * r_11, theta * r_12, theta * r_13, theta * r_21, theta * r_22, theta * r_23, theta * r_31, theta * r_32, theta * r_33 ], dtype=int)
def calc_susc_i(self, atom_site_susceptibility: AtomSiteSusceptibilityL): """Calculate susceptibility of point i. Parameters ---------- atom_site_susceptibility : AtomSiteSusceptibilityL DESCRIPTION. Returns ------- susc_11 : TYPE DESCRIPTION. susc_22 : TYPE DESCRIPTION. susc_33 : TYPE DESCRIPTION. susc_12 : TYPE DESCRIPTION. susc_13 : TYPE DESCRIPTION. susc_23 : TYPE DESCRIPTION. """ numpy_basin_atom_label = self.numpy_basin_atom_label numpy_basin_atom_symop = self.numpy_basin_atom_symop if numpy_basin_atom_label is None: numpy_basin_atom_label = numpy.array(self.basin_atom_label, dtype=str) numpy_basin_atom_symop = numpy.array(self.basin_atom_symop, dtype=str) self.numpy_basin_atom_label = numpy_basin_atom_label self.numpy_basin_atom_symop = numpy_basin_atom_symop np_label = numpy.array(atom_site_susceptibility.label, dtype=str) np_chi_11 = numpy.array(atom_site_susceptibility.chi_11, dtype=float) np_chi_22 = numpy.array(atom_site_susceptibility.chi_22, dtype=float) np_chi_33 = numpy.array(atom_site_susceptibility.chi_33, dtype=float) np_chi_12 = numpy.array(atom_site_susceptibility.chi_12, dtype=float) np_chi_13 = numpy.array(atom_site_susceptibility.chi_13, dtype=float) np_chi_23 = numpy.array(atom_site_susceptibility.chi_23, dtype=float) l_r = [] for symop in numpy_basin_atom_symop: r, b = transform_string_to_r_b(symop) r = r.astype(float) l_r.append((r[0, 0], r[0, 1], r[0, 2], r[1, 0], r[1, 1], r[1, 2], r[2, 0], r[2, 1], r[2, 2])) np_r = numpy.array(l_r, dtype=float) np_r_11, np_r_12, np_r_13 = np_r[:, 0], np_r[:, 1], np_r[:, 2] np_r_21, np_r_22, np_r_23 = np_r[:, 3], np_r[:, 4], np_r[:, 5] np_r_31, np_r_32, np_r_33 = np_r[:, 6], np_r[:, 7], np_r[:, 8] susc_11 = numpy.zeros(numpy_basin_atom_label.size, dtype=float) susc_22 = numpy.zeros(numpy_basin_atom_label.size, dtype=float) susc_33 = numpy.zeros(numpy_basin_atom_label.size, dtype=float) susc_12 = numpy.zeros(numpy_basin_atom_label.size, dtype=float) susc_13 = numpy.zeros(numpy_basin_atom_label.size, dtype=float) susc_23 = numpy.zeros(numpy_basin_atom_label.size, dtype=float) for _l, chi_11, chi_22, chi_33, chi_12, chi_13, chi_23 in \ zip(np_label, np_chi_11, np_chi_22, np_chi_33, np_chi_12, np_chi_13, np_chi_23): f_1 = numpy_basin_atom_label == _l chi_ij = (chi_11, chi_12, chi_13, chi_12, chi_22, chi_23, chi_13, chi_23, chi_33) c_11, c_12, c_13, c_21, c_22, c_23, c_31, c_32, c_33 = \ calc_mRmCmRT((np_r_11[f_1], np_r_12[f_1], np_r_13[f_1], np_r_21[f_1], np_r_22[f_1], np_r_23[f_1], np_r_31[f_1], np_r_32[f_1], np_r_33[f_1]), chi_ij) susc_11[f_1] = c_11 susc_22[f_1] = c_22 susc_33[f_1] = c_33 susc_12[f_1] = c_12 susc_13[f_1] = c_13 susc_23[f_1] = c_23 l_rs_i = self.l_rs_i l_c_11, l_c_22, l_c_33, l_c_12, l_c_13, l_c_23 = [], [], [], [], [], [] for s_11, s_22, s_33, s_12, s_13, s_23, rs_i in zip( susc_11, susc_22, susc_33, susc_12, susc_13, susc_23, l_rs_i): r_11, r_12, r_13, r_21, r_22, r_23, r_31, r_32, r_33 = rs_i c_11, c_12, c_13, c_21, c_22, c_23, c_31, c_32, c_33 = \ calc_mRmCmRT(rs_i, (s_11, s_12, s_13, s_12, s_22, s_23, s_13, s_23, s_33)) ns = c_11.size l_c_11.append(c_11.sum()/float(ns)) l_c_22.append(c_22.sum()/float(ns)) l_c_33.append(c_33.sum()/float(ns)) l_c_12.append(c_12.sum()/float(ns)) l_c_13.append(c_13.sum()/float(ns)) l_c_23.append(c_23.sum()/float(ns)) chi_11 = numpy.array(l_c_11, dtype=float) chi_22 = numpy.array(l_c_22, dtype=float) chi_33 = numpy.array(l_c_33, dtype=float) chi_12 = numpy.array(l_c_12, dtype=float) chi_13 = numpy.array(l_c_13, dtype=float) chi_23 = numpy.array(l_c_23, dtype=float) return chi_11, chi_22, chi_33, chi_12, chi_13, chi_23