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
Esempio n. 2
0
    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
Esempio n. 3
0
    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)
Esempio n. 5
0
    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