def test_default_epsilon(self): l = LinearROI([0, 0], 1, 0) p = [0, 1e-16] self.assertNotEqual([0, 0], p) self.assertTrue(l.contains_point(p)) p = [0, 2e-15] self.assertFalse(l.contains_point(p))
def test_negative_length(self): l = LinearROI([0, 0], -sqrt(2), pi / 4) p = [-1, -1] self.assertTrue(l.contains_point(p)) p = [-1.0001, -1.0001] self.assertFalse(l.contains_point(p)) p = [-0.1, -0.001] self.assertFalse(l.contains_point(p))
def test_wide_angle(self): l = LinearROI([0, 0], sqrt(2), 5 * pi / 4) p = [-1, -1] self.assertTrue(l.contains_point(p)) p = [-1.0001, -1.0001] self.assertFalse(l.contains_point(p)) p = [-0.1, -0.001] self.assertFalse(l.contains_point(p))
def test_to_dict(self): l = LinearROI([1.1, 2.2], 3.3, pi / 3) expected = { "typeid": "scanpointgenerator:roi/LinearROI:1.0", "start": [1.1, 2.2], "length": 3.3, "angle": pi / 3 } self.assertEquals(expected, l.to_dict())
def test_mask_points(self): l = LinearROI([1, 1], 2 * sqrt(2), -pi / 4 - 2 * pi) px = [ 1, 2, 3, 1 + 1e-10, 3 - 1e-10, 2 + 1e-10, 2 - 1e-14, 3 + 1e-14, 1 ] py = [1, 0, -1, 1, -1, 0 + 1e-10, 0 + 1e-14, -1 - 1e-14, 1 + 1e-14] p = [np.array(px), np.array(py)] points_cp = [axis.copy().tolist() for axis in p] expected = [True, True, True, False, False, False, True, True, True] mask = l.mask_points(p, 1e-12) self.assertEquals(expected, mask.tolist()) self.assertEqual(points_cp, [axis.tolist() for axis in p])
def test_near_endpoints(self): l = LinearROI([1, 1], 1.4, pi / 4) p = [0.9, 0.9] self.assertFalse(l.contains_point(p, 0)) self.assertTrue(l.contains_point(p, 0.2)) p = [2, 2] self.assertFalse(l.contains_point(p, 0)) self.assertTrue(l.contains_point(p, 0.02)) l = LinearROI([0, 0], sqrt(2), pi / 4) p = [1, 1] self.assertTrue(l.contains_point(p))
def test_from_dict(self): d = { "typeid": "scanpointgenerator:roi/LinearROI:1.0", "start": [0, 1], "length": 0.2, "angle": pi / 6 } l = LinearROI.from_dict(d) self.assertEqual([0.0, 1.0], l.start) self.assertEqual(0.2, l.length) self.assertEqual(pi / 6, l.angle)
def test_negative_angle(self): l = LinearROI([0, 0], sqrt(2), -pi / 4) p = [0, 0] self.assertTrue(l.contains_point(p)) p = [1, -1] self.assertTrue(l.contains_point(p)) p = [0.1, 0.1] self.assertFalse(l.contains_point(p)) p = [-0.0001, 0.0001] self.assertFalse(l.contains_point(p))
def test_wraparound_angle(self): l = LinearROI([0, 0], sqrt(2), 2 * pi + pi / 4) p = [1, 1] self.assertTrue(l.contains_point(p))
def test_near_midsection(self): l = LinearROI([-1, -1], 3 * sqrt(2), pi / 4) p = [0, 0] self.assertTrue(l.contains_point(p)) p = [0, 0.1] self.assertFalse(l.contains_point(p))
def test_invalid_length_raises(self): with self.assertRaises(ValueError): l = LinearROI([0, 0], 0, 0)
def test_init(self): l = LinearROI([0, 1], 2, 3) self.assertEquals([0, 1], l.start) self.assertEquals(2, l.length) self.assertEquals(3, l.angle)