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
+ 57
25
Compare changes
  • Side-by-side
  • Inline
Files
2
import numpy as np
import numpy as np
import pytest
import pytest
from ..knife_edge import range_slice
from ..knife_edge import prepare_arrays, range_mask
def test_range_slice():
def test_range_mask():
arr = np.array([1, 2, 3, 4, 5])
arr = np.array([1, 2, 3, 4, 5])
# Exact
# Exact
slice_ = range_slice(arr, minimum=2, maximum=4)
slice_ = range_mask(arr, minimum=2, maximum=4)
np.testing.assert_array_equal(slice_, [False, True, True, True, False])
np.testing.assert_array_equal(slice_, [False, True, True, True, False])
# Range exceeds the closest values
# Range exceeds the closest values
slice_ = range_slice(arr, minimum=1.75, maximum=4.25)
slice_ = range_mask(arr, minimum=1.75, maximum=4.25)
np.testing.assert_array_equal(slice_, [False, True, True, True, False])
np.testing.assert_array_equal(slice_, [False, True, True, True, False])
# Range misses the closest values
# Range misses the closest values
slice_ = range_slice(arr, minimum=2.25, maximum=3.75)
slice_ = range_mask(arr, minimum=2.25, maximum=3.75)
np.testing.assert_array_equal(slice_, [False, False, True, False, False])
np.testing.assert_array_equal(slice_, [False, False, True, False, False])
# Equidistant
# Equidistant
slice_ = range_slice(arr, minimum=2.5, maximum=4.5)
slice_ = range_mask(arr, minimum=2.5, maximum=4.5)
np.testing.assert_array_equal(slice_, [False, False, True, True, False])
np.testing.assert_array_equal(slice_, [False, False, True, True, False])
# Out of bounds, valid minimum
# Out of bounds, valid minimum
slice_ = range_slice(arr, minimum=0)
slice_ = range_mask(arr, minimum=0)
np.testing.assert_array_equal(slice_, [True, True, True, True, True])
np.testing.assert_array_equal(slice_, [True, True, True, True, True])
# Out of bounds, invalid minimum
# Out of bounds, invalid minimum
with pytest.raises(ValueError):
with pytest.raises(ValueError):
range_slice(arr, minimum=6)
range_mask(arr, minimum=6)
# Out of bounds, valid maximum
# Out of bounds, valid maximum
slice_ = range_slice(arr, maximum=6)
slice_ = range_mask(arr, maximum=6)
np.testing.assert_array_equal(slice_, [True, True, True, True, True])
np.testing.assert_array_equal(slice_, [True, True, True, True, True])
# Out of bounds, invalid minimum
# Out of bounds, invalid minimum
with pytest.raises(ValueError):
with pytest.raises(ValueError):
range_slice(arr, maximum=0)
range_mask(arr, maximum=0)
# with NaNs
# with NaNs
arr = np.array([1, np.nan, 3, np.nan, 5])
arr = np.array([1, np.nan, 3, np.nan, 5])
slice_ = range_slice(arr, minimum=3)
slice_ = range_mask(arr, minimum=3)
np.testing.assert_array_equal(slice_, [False, False, True, False, True])
np.testing.assert_array_equal(slice_, [False, False, True, False, True])
 
 
 
def test_prepare_arrays():
 
# Setup test values
 
trains, pulses = 5, 10
 
size = trains * pulses
 
motor = np.arange(trains)
 
signal = np.random.randint(100, size=(trains, pulses))
 
 
# Test finite motor and signal values
 
positions, intensities = prepare_arrays(motor, signal)
 
assert positions.shape == (size,)
 
assert intensities.shape == (size,)
 
 
# Test finite motors and signals with NaNs
 
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()
 
assert intensities.shape == (size-20,)
 
assert np.isfinite(intensities).all()
 
 
# Test finite signals and motors with NaNs
 
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()
 
assert intensities.shape == ((trains-3) * pulses,)
 
assert np.isfinite(intensities).all()
 
 
 
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