Skip to content
Snippets Groups Projects

Base knife-edge scan analysis implementation

Merged Cammille Carinan requested to merge knife-edge-base into master
1 unresolved thread
2 files
+ 25
14
Compare changes
  • Side-by-side
  • Inline
Files
2
import numpy as np
import pytest
from ..knife_edge import prepare_arrays, range_mask
from ..knife_edge import erfc, knife_edge_base, prepare_arrays, range_mask
def test_range_mask():
@@ -58,7 +58,7 @@ def test_prepare_arrays_nans():
assert intensities.shape == (size,)
# Test finite motors and signals with NaNs
signal_nan = with_values(signal, value=np.nan, num=20)
signal_nan = _with_values(signal, value=np.nan, num=20)
positions, intensities = prepare_arrays(motor, signal_nan)
assert positions.shape == (size-20,)
assert np.isfinite(positions).all()
@@ -66,7 +66,7 @@ def test_prepare_arrays_nans():
assert np.isfinite(intensities).all()
# Test finite signals and motors with NaNs
motor_nan = with_values(motor, value=np.nan, num=3)
motor_nan = _with_values(motor, value=np.nan, num=3)
positions, intensities = prepare_arrays(motor_nan, signal)
assert positions.shape == ((trains-3) * pulses,)
assert np.isfinite(positions).all()
@@ -91,7 +91,23 @@ def test_prepare_arrays_size():
assert intensities.shape == (size,)
def with_values(array, value, num=5):
def test_knife_edge_base():
p0 = [0, -1.5, 1, 0]
x = np.linspace(-3, 3)
y = erfc(x, *p0)
noise = y * np.random.normal(0, .02, y.shape) # 2% error
eff_y = (y + noise).reshape(1, -1)
# Test noisy data
popt, _ = knife_edge_base(x, eff_y)
np.testing.assert_allclose(p0, popt, atol=1e-1)
# Test flipped data
popt, _ = knife_edge_base(x, eff_y[::-1])
np.testing.assert_allclose(p0, popt, atol=1e-1)
def _with_values(array, value, num=5):
copy = array.astype(np.float)
copy.ravel()[np.random.choice(copy.size, num, replace=False)] = value
return copy
Loading