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
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()
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
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)
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]
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
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
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