def test_nt(self):
     p = np.ones((2, 3))
     nt0, nt1 = 100, 200
     pa0 = mdtd._make_4d_peak_array_test_data(p, p, p, p, p, nt=nt0)
     pa1 = mdtd._make_4d_peak_array_test_data(p, p, p, p, p, nt=nt1)
     assert len(pa0[0, 0][:, 0]) == nt0
     assert len(pa1[0, 0][:, 0]) == nt1
예제 #2
0
 def test_semi_len_ratio_lim(self):
     xf, yf = np.ones((2, 3)) * 200, np.ones((2, 3)) * 210
     semi00, semi01 = np.ones((2, 3)) * 100, np.ones((2, 3)) * 100
     semi10, semi11 = np.ones((2, 3)) * 100, np.ones((2, 3)) * 190
     rot = np.zeros((2, 3))
     peak_array = mdtd._make_4d_peak_array_test_data(xf,
                                                     yf,
                                                     semi00,
                                                     semi01,
                                                     rot,
                                                     nt=20)
     peak_array1 = mdtd._make_4d_peak_array_test_data(xf,
                                                      yf,
                                                      semi10,
                                                      semi11,
                                                      rot,
                                                      nt=20)
     for iy, ix in np.ndindex(xf.shape):
         peak_array[iy, ix] = np.vstack(
             (peak_array[iy, ix], peak_array1[iy, ix]))
     ellipse_array0, inlier_array0 = ret.get_ellipse_model_ransac(
         peak_array,
         xf=200,
         yf=210,
         rf_lim=20,
         semi_len_min=95,
         semi_len_max=195,
         semi_len_ratio_lim=1.11,
         min_samples=15,
         max_trails=200,
     )
     ellipse_array1, inlier_array1 = ret.get_ellipse_model_ransac(
         peak_array,
         xf=200,
         yf=210,
         rf_lim=20,
         semi_len_min=95,
         semi_len_max=195,
         semi_len_ratio_lim=2.0,
         min_samples=15,
         max_trails=200,
     )
     semi_len_ratio_list = []
     for iy, ix in np.ndindex(xf.shape):
         if ellipse_array1[iy, ix] is not None:
             semi0, semi1 = ellipse_array1[iy, ix][2:4]
             semi_len_ratio = max(semi0, semi1) / min(semi0, semi1)
             semi_len_ratio_list.append(semi_len_ratio)
     semi_len_ratio_list = np.array(semi_len_ratio_list)
     assert (semi_len_ratio_list > 1.8).any()
예제 #3
0
 def test_rf_lim(self):
     xf, yf = np.ones((2, 3)) * 200, np.ones((2, 3)) * 210
     np.random.seed(7)
     semi0 = np.random.randint(90, 110, size=(2, 3))
     semi1 = np.random.randint(130, 140, size=(2, 3))
     rot = np.zeros((2, 3))
     peak_array = mdtd._make_4d_peak_array_test_data(
         xf, yf, semi0, semi1, rot, nt=20
     )
     ellipse_array0, inlier_array0 = ret.get_ellipse_model_ransac(
         peak_array,
         xf=200,
         yf=210,
         rf_lim=20,
         semi_len_min=80,
         semi_len_max=150,
         semi_len_ratio_lim=1.7,
         min_samples=15,
         max_trails=20,
     )
     ellipse_array1, inlier_array1 = ret.get_ellipse_model_ransac(
         peak_array,
         xf=200,
         yf=210,
         rf_lim=20,
         semi_len_min=80,
         semi_len_max=150,
         semi_len_ratio_lim=1.01,
         min_samples=15,
         max_trails=20,
     )
     for iy, ix in np.ndindex(xf.shape):
         ellipse_params0 = ellipse_array0[iy, ix]
         ellipse_params1 = ellipse_array1[iy, ix]
         assert ellipse_params0 != ellipse_params1
예제 #4
0
 def test_semi_lengths(self):
     xf, yf = np.ones((2, 3)) * 200, np.ones((2, 3)) * 210
     np.random.seed(7)
     semi0 = np.random.randint(90, 110, size=(2, 3))
     semi1 = np.random.randint(130, 140, size=(2, 3))
     rot = np.zeros((2, 3))
     peak_array = mdtd._make_4d_peak_array_test_data(
         xf, yf, semi0, semi1, rot, nt=20
     )
     ellipse_array, inlier_array = ret.get_ellipse_model_ransac(
         peak_array,
         xf=200,
         yf=210,
         rf_lim=20,
         semi_len_min=80,
         semi_len_max=150,
         semi_len_ratio_lim=1.7,
         min_samples=15,
         max_trails=20,
     )
     for iy, ix in np.ndindex(xf.shape):
         semi_min = min(ellipse_array[iy, ix][2], ellipse_array[iy, ix][3])
         semi_max = max(ellipse_array[iy, ix][2], ellipse_array[iy, ix][3])
         assert approx(semi_min, abs=0.01) == semi0[iy, ix]
         assert approx(semi_max, abs=0.01) == semi1[iy, ix]
 def test_rotation(self):
     rot0, rot1 = np.zeros((2, 3)), np.ones((2, 3)) * np.pi / 2
     xf, yf = np.ones((2, 3)), np.ones((2, 3))
     semi0, semi1 = np.ones((2, 3)) * 5, np.ones((2, 3))
     pa0 = mdtd._make_4d_peak_array_test_data(xf,
                                              yf,
                                              semi0,
                                              semi1,
                                              rot0,
                                              nt=1000)
     pa1 = mdtd._make_4d_peak_array_test_data(xf,
                                              yf,
                                              semi0,
                                              semi1,
                                              rot1,
                                              nt=1000)
     assert not np.array_equal(pa0, pa1)
예제 #6
0
 def test_simple(self):
     xc, yc = np.ones((2, 3)), np.ones((2, 3))
     semi0, semi1 = np.ones((2, 3)), np.ones((2, 3))
     rot = np.zeros((2, 3))
     peak_array = mdtd._make_4d_peak_array_test_data(xc, yc, semi0, semi1, rot)
     ellipse_array, inlier_array = ret.get_ellipse_model_ransac(
         peak_array, max_trails=50
     )
     assert ellipse_array.shape == xc.shape
     assert inlier_array.shape == xc.shape
 def test_semi_lengths(self):
     semi0 = np.random.randint(10, 20, size=(2, 3))
     semi1 = np.random.randint(10, 20, size=(2, 3))
     xf, yf, rot = np.ones((2, 3)) * 10, np.ones((2, 3)), np.zeros((2, 3))
     peak_array0 = mdtd._make_4d_peak_array_test_data(xf,
                                                      yf,
                                                      semi0,
                                                      semi0,
                                                      rot,
                                                      nt=1000)
     peak_array1 = mdtd._make_4d_peak_array_test_data(xf,
                                                      yf,
                                                      semi1,
                                                      semi1,
                                                      rot,
                                                      nt=1000)
     for iy, ix in np.ndindex(xf.shape):
         semi0_max = semi0[iy, ix] + xf[iy, ix]
         assert approx(peak_array0[iy, ix][:, 1].max()) == semi0_max
         semi1_max = semi1[iy, ix] + yf[iy, ix]
         assert approx(peak_array1[iy, ix][:, 0].max()) == semi1_max
 def test_xf_yf(self):
     xf = np.random.randint(10, 20, size=(2, 3))
     yf = np.random.randint(39, 60, size=(2, 3))
     semi0, semi1, rot = np.ones((2, 3)), np.ones((2, 3)), np.ones((2, 3))
     peak_array = mdtd._make_4d_peak_array_test_data(xf,
                                                     yf,
                                                     semi0,
                                                     semi1,
                                                     rot,
                                                     nt=1000)
     for iy, ix in np.ndindex(xf.shape):
         x_pos_mean = peak_array[iy, ix][:, 1].mean()
         assert approx(x_pos_mean, abs=0.01) == xf[iy, ix]
         y_pos_mean = peak_array[iy, ix][:, 0].mean()
         assert approx(y_pos_mean, abs=0.01) == yf[iy, ix]
예제 #9
0
    def test_xc_yc(self):
        np.random.seed(7)
        xf = np.random.randint(90, 100, size=(2, 3))
        yf = np.random.randint(110, 120, size=(2, 3))
        semi0, semi1 = np.ones((2, 3)) * 60, np.ones((2, 3)) * 60
        rot = np.zeros((2, 3))
        peak_array = mdtd._make_4d_peak_array_test_data(xf,
                                                        yf,
                                                        semi0,
                                                        semi1,
                                                        rot,
                                                        nt=20)
        ellipse_array0, inlier_array0 = ret.get_ellipse_model_ransac(
            peak_array,
            xf=95,
            yf=115,
            rf_lim=20,
            semi_len_min=50,
            semi_len_max=65,
            semi_len_ratio_lim=1.2,
            min_samples=15,
            max_trails=20,
        )
        ellipse_array1, inlier_array1 = ret.get_ellipse_model_ransac(
            peak_array,
            xf=10,
            yf=12,
            rf_lim=20,
            semi_len_min=50,
            semi_len_max=65,
            semi_len_ratio_lim=1.2,
            min_samples=15,
            max_trails=20,
        )

        for iy, ix in np.ndindex(xf.shape):
            assert approx(xf[iy, ix], abs=0.0005) == ellipse_array0[iy, ix][1]
            assert approx(yf[iy, ix], abs=0.0005) == ellipse_array0[iy, ix][0]
            assert inlier_array0[iy, ix].all()
            assert ellipse_array1[iy, ix] is None
            assert inlier_array1[iy, ix] is None
예제 #10
0
def get_simple_ellipse_signal_peak_array():
    """Get a signal and peak array of an ellipse.

    Returns
    -------
    signal, peak_array : HyperSpy Signal2D, NumPy array

    Examples
    --------
    >>> s, peak_array = pxm.dummy_data.get_simple_ellipse_signal_peak_array()
    >>> s.add_peak_array_as_markers(peak_array, color='blue', size=30)

    """
    xc = np.random.randint(95, 105, size=(4, 5))
    yc = np.random.randint(95, 105, size=(4, 5))
    semi0 = np.random.randint(55, 60, size=(4, 5))
    semi1 = np.random.randint(75, 80, size=(4, 5))
    rot = np.random.random(size=(4, 5)) * np.pi
    peak_array = mdtd._make_4d_peak_array_test_data(xc, yc, semi0, semi1, rot)
    s = Diffraction2D(np.zeros((4, 5, 200, 200)))
    return s, peak_array
예제 #11
0
    def test_residual_threshold(self):
        xyf, semi = np.ones((2, 3)) * 100, np.ones((2, 3)) * 90
        rot = np.zeros((2, 3))
        peak_array = mdtd._make_4d_peak_array_test_data(xyf,
                                                        xyf,
                                                        semi,
                                                        semi,
                                                        rot,
                                                        nt=20)
        for iy, ix in np.ndindex(xyf.shape):
            peak_array[iy, ix] = np.vstack((peak_array[iy, ix], [100, 5]))
        ellipse_array0, inlier_array0 = ret.get_ellipse_model_ransac(
            peak_array,
            xf=100,
            yf=100,
            semi_len_min=85,
            semi_len_max=95,
            semi_len_ratio_lim=1.1,
            residual_threshold=1,
            max_trails=100,
            min_samples=15,
        )
        ellipse_array1, inlier_array1 = ret.get_ellipse_model_ransac(
            peak_array,
            xf=100,
            yf=100,
            semi_len_min=85,
            semi_len_max=95,
            semi_len_ratio_lim=1.1,
            residual_threshold=5,
            max_trails=100,
            min_samples=15,
        )

        for iy, ix in np.ndindex(xyf.shape):
            inlier0 = inlier_array0[iy, ix]
            inlier1 = inlier_array1[iy, ix]
            assert inlier0.sum() == 20
            assert inlier1.sum() == 21
 def test_simple(self):
     xf, yf = np.ones((2, 3)), np.ones((2, 3))
     semi0, semi1, rot = np.ones((2, 3)), np.ones((2, 3)), np.ones((2, 3))
     peak_array = mdtd._make_4d_peak_array_test_data(
         xf, yf, semi0, semi1, rot)
     assert peak_array.shape == xf.shape