def test_from_fiber_component(self):
     r = Rotation.from_fiber_component(alpha=np.zeros(2),
                                       beta=np.zeros(2),
                                       sigma=0.0,
                                       N=1,
                                       rng_seed=0)
     assert np.all(
         Orientation.from_fiber_component(alpha=np.zeros(2),
                                          beta=np.zeros(2),
                                          sigma=0.0,
                                          N=1,
                                          rng_seed=0,
                                          lattice='triclinic').quaternion ==
         r.quaternion)
Beispiel #2
0
    def test_from_fiber_component(self, N, sigma):
        p = []
        for run in range(5):
            alpha = np.random.random() * 2 * np.pi, np.arccos(
                np.random.random())
            beta = np.random.random() * 2 * np.pi, np.arccos(
                np.random.random())

            f_in_C = np.array([
                np.sin(alpha[0]) * np.cos(alpha[1]),
                np.sin(alpha[0]) * np.sin(alpha[1]),
                np.cos(alpha[0])
            ])
            f_in_S = np.array([
                np.sin(beta[0]) * np.cos(beta[1]),
                np.sin(beta[0]) * np.sin(beta[1]),
                np.cos(beta[0])
            ])
            ax = np.append(np.cross(f_in_C, f_in_S),
                           -np.arccos(np.dot(f_in_C, f_in_S)))
            n = Rotation.from_axis_angle(
                ax if ax[3] > 0.0 else ax * -1.0, normalize=True
            )  # rotation to align fiber axis in crystal and sample system

            o = Rotation.from_fiber_component(alpha, beta, np.radians(sigma),
                                              N, False)
            angles = np.arccos(
                np.clip(
                    np.dot(o @ np.broadcast_to(f_in_S, (N, 3)), n @ f_in_S),
                    -1, 1))
            dist = np.array(angles) * (np.random.randint(0, 2, N) * 2 - 1)

            p.append(stats.normaltest(dist)[1])

        sigma_out = np.degrees(np.std(dist))
        p = np.average(p)
        assert (.9 < sigma / sigma_out <
                1.1) and p > 1e-2, f'{sigma/sigma_out},{p}'