def test_autocenter_no_side_effects(): """ Test that autocenter() does not modify the inputs """ im = np.random.random(size=(256, 256)) mask = np.ones_like(im, dtype=bool) # Modifying the arrays will result in "ValueError: output array is read-only" im.setflags(write=False) mask.setflags(write=False) autocenter(im, mask=mask)
def test_autocenter_gaussian_shifted(rc, cc): """ Test that autocenter() finds the center of a shifted gaussian """ im = np.zeros(shape=(128, 128), dtype=float) rows, cols = np.indices(im.shape) center = np.array([64 + rc, 64 + cc]) im += gaussian([rows, cols], center=center, fwhm=20) assert np.allclose(autocenter(im), center, atol=1)
def test_autocenter_trivial(): """ Test that autocenter() finds the center of perfect gaussian at (0,0) """ im = np.zeros(shape=(256, 256), dtype=float) center = np.asarray(im.shape) / 2 rows, cols = np.indices(im.shape) im += gaussian([rows, cols], center=center, fwhm=center.max() / 2) assert np.allclose(autocenter(im), center, atol=1)
def test_autocenter_single_crystal(rc, cc): """Test that autocenter() finds the center of a simulated shifted single-crystal diffraction pattern.""" I = 10 * diff_pattern_sc(center=(rc, cc)) mask = np.ones_like(I, dtype=bool) mask[0:rc + 10, cc - 10:cc + 10] = False I += 0.01 * I.max() * np.random.random(size=I.shape) assert np.allclose(autocenter(I, mask=mask), (rc, cc), atol=1)
def test_autocenter_shifted_with_mask(rc, cc): """Test that autocenter() finds the center of a shifted gaussian, where the center has been masked away.""" im = np.zeros(shape=(256, 256), dtype=float) mask = np.ones_like(im, dtype=bool) mask[0:130, 118:138] = False rows, cols = np.indices(im.shape) center = np.array([128 + rc, 128 + cc]) im += gaussian([rows, cols], center=center, fwhm=50) im[np.logical_not(mask)] *= 0.8 assert np.allclose(autocenter(im, mask=mask), center, atol=1)
def test_autocenter_single_crystal_ewald_walkoff(rc, cc): """Test that autocenter() finds the center of a simulated shifted single-crystal diffraction pattern.""" I = 10 * diff_pattern_sc(center=(rc, cc)) # Walkoff is the effect when diffraction patterns slide reflections # at strange angles, such that certain bragg peaks that should have the same # intensity do not (e.g. brigher (n00) vs (-n00)) # We simulate this with a linear intensity gradient rows, cols = np.indices(I.shape) walkoff = rows.astype(float) / rows.max() walkoff *= 0.2 I += walkoff mask = np.ones_like(I, dtype=bool) mask[0:rc + 10, cc - 10:cc + 10] = False I += 0.01 * I.max() * np.random.random(size=I.shape) assert np.allclose(autocenter(I, mask=mask), (rc, cc), atol=1)