def test_basex_zeros(): n = 21 x = np.zeros((n, n), dtype='float32') bs = get_bs_basex_cached(n, basis_dir=None, verbose=False) recon = basex_transform(x, *bs) assert_allclose(recon, 0)
def test_basex_shape(): n = 21 x = np.ones((n, n), dtype='float32') bs = get_bs_basex_cached(n, basis_dir=None, verbose=False) recon = basex_transform(x, *bs) assert recon.shape == (n, n)
def test_basex_step_ratio(): """Check a gaussian solution for BASEX""" n = 51 r_max = 25 ref = GaussianAnalytical(n, r_max, symmetric=True, sigma=10) tr = np.tile(ref.abel[None, :], (n, 1)) # make a 2D array from 1D bs = get_bs_basex_cached(n, basis_dir=None, verbose=False) recon = basex_transform(tr, *bs) recon1d = recon[n//2 + n%2] ratio = absolute_ratio_benchmark(ref, recon1d) assert_allclose( ratio , 1.0, rtol=3e-2, atol=0)
# define a symmetric step function and calculate its analytical Abel transform st = StepAnalytical(n, r_max, r1, r2, A0) ax.plot(st.r, st.func, 'b', label='Original signal') ax.plot( st.r, st.abel*0.05, 'r', label='Direct Abel transform x0.05 [analytical]') center = n//2 right_half = st.abel[center:] left_half = st.abel[:center+1][::-1] # BASEX Transform: # Calculate the inverse abel transform for the centered data recon_right = basex_transform( right_half, basis_dir='./', dr=st.dr, verbose=True) recon_left = basex_transform( left_half, basis_dir='./', dr=st.dr, verbose=False) plt.plot( st.r[center:], recon_right, '--.', c='red', label='Inverse transform [BASEX]') plt.plot(st.r[:center+1], recon_left[::-1], '--.', c='red') ax.legend() ax.set_xlim(-20, 20) ax.set_ylim(-5, 20) ax.set_xlabel('x') ax.set_ylabel("f(x)")
# define a symmetric step function and calculate its analytical Abel transform st = StepAnalytical(n, r_max, r1, r2, A0) ax.plot(st.r, st.func, 'b', label='Original signal') ax.plot( st.r, st.abel*0.05, 'r', label='Direct Abel transform x0.05 [analytical]') center = n//2 right_half = st.abel[center:] left_half = st.abel[:center+1][::-1] # BASEX Transform: # Calculate the inverse abel transform for the centered data recon_right = basex_transform( right_half, basis_dir='bases', dr=st.dr, verbose=True) recon_left = basex_transform( left_half, basis_dir='bases', dr=st.dr, verbose=False) plt.plot( st.r[center:], recon_right, '--.', c='red', label='Inverse transform [BASEX]') plt.plot(st.r[:center+1], recon_left[::-1], '--.', c='red') ax.legend() ax.set_xlim(-20, 20) ax.set_ylim(-5, 20) ax.set_xlabel('x') ax.set_ylabel("f(x)")