Example #1
0
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)
Example #2
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) 
Example #3
0
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)
Example #4
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)")
Example #5
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='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)")