class TestTraceProtocol1(unittest.TestCase): """ Tests intersect_ray and the bundle driver with a single flat surface, not rotated, with a single interation """ def setUp(self): dir = N.array([[1,1,-1],[-1,1,-1],[-1,-1,-1],[1,-1,-1]]).T/math.sqrt(3) position = N.c_[[0,0,1],[1,-1,1],[1,1,1],[-1,1,1]] self._bund = RayBundle(position, dir, energy=N.ones(4)) self.assembly = Assembly() object = AssembledObject() object.add_surface(Surface(FlatGeometryManager(), opt.perfect_mirror)) self.assembly.add_object(object) self.engine = TracerEngine(self.assembly) def test_intersect_ray1(self): surfaces = self.assembly.get_surfaces() objects = self.assembly.get_objects() surfs_per_obj = [len(obj.get_surfaces()) for obj in objects] surf_ownership = N.repeat(N.arange(len(objects)), surfs_per_obj) ray_ownership = -1*N.ones(self._bund.get_num_rays()) surfs_relevancy = N.ones((len(surfaces), self._bund.get_num_rays()), dtype=N.bool) params = self.engine.intersect_ray(self._bund, surfaces, objects, \ surf_ownership, ray_ownership, surfs_relevancy)[0] self.failUnless(params.all()) def test_ray_tracer(self): """Ray tracer after one iteration returns what the surface would have""" params = self.engine.ray_tracer(self._bund,1,.05)[0] correct_pts = N.zeros((3,4)) correct_pts[:2,0] = 1 N.testing.assert_array_almost_equal(params, correct_pts)
class TestTraceProtocol3(unittest.TestCase): """ Tests intersect_ray and the bundle driver with two rotated planes, with a single iteration """ def setUp(self): self.x = 1 / (math.sqrt(2)) dir = N.c_[[0, self.x, -self.x], [0, 1, 0]] position = N.c_[[0, 0, 1], [0, 0, 1]] self._bund = RayBundle(position, dir, energy=N.ones(2)) rot1 = general_axis_rotation([1, 0, 0], N.pi / 4) rot2 = general_axis_rotation([1, 0, 0], N.pi / (-4)) surf1 = Surface(FlatGeometryManager(), opt.perfect_mirror, rotation=rot1) surf2 = Surface(FlatGeometryManager(), opt.perfect_mirror, rotation=rot2) self.assembly = Assembly() object = AssembledObject() object.add_surface(surf1) object.add_surface(surf2) self.assembly.add_object(object) self.engine = TracerEngine(self.assembly) def test_intersect_ray(self): surfaces = self.assembly.get_surfaces() objects = self.assembly.get_objects() surfs_per_obj = [len(obj.get_surfaces()) for obj in objects] surf_ownership = N.repeat(N.arange(len(objects)), surfs_per_obj) ray_ownership = -1 * N.ones(self._bund.get_num_rays()) surfs_relevancy = N.ones((len(surfaces), self._bund.get_num_rays()), dtype=N.bool) params = self.engine.intersect_ray(self._bund, surfaces, objects, \ surf_ownership, ray_ownership, surfs_relevancy)[0] correct_params = N.array([[True, True], [False, False]]) N.testing.assert_array_almost_equal(params, correct_params) def test_ray_tracer1(self): params = self.engine.ray_tracer(self._bund, 1, .05)[0] correct_params = N.c_[[0, .5, .5], [0, 1, 1]] N.testing.assert_array_almost_equal(params, correct_params)
class TestTraceProtocol3(unittest.TestCase): """ Tests intersect_ray and the bundle driver with two rotated planes, with a single iteration """ def setUp(self): self.x = 1/(math.sqrt(2)) dir = N.c_[[0,self.x,-self.x],[0,1,0]] position = N.c_[[0,0,1],[0,0,1]] self._bund = RayBundle(position, dir, energy=N.ones(2)) rot1 = general_axis_rotation([1,0,0],N.pi/4) rot2 = general_axis_rotation([1,0,0],N.pi/(-4)) surf1 = Surface(FlatGeometryManager(), opt.perfect_mirror, rotation=rot1) surf2 = Surface(FlatGeometryManager(), opt.perfect_mirror, rotation=rot2) self.assembly = Assembly() object = AssembledObject() object.add_surface(surf1) object.add_surface(surf2) self.assembly.add_object(object) self.engine = TracerEngine(self.assembly) def test_intersect_ray(self): surfaces = self.assembly.get_surfaces() objects = self.assembly.get_objects() surfs_per_obj = [len(obj.get_surfaces()) for obj in objects] surf_ownership = N.repeat(N.arange(len(objects)), surfs_per_obj) ray_ownership = -1*N.ones(self._bund.get_num_rays()) surfs_relevancy = N.ones((len(surfaces), self._bund.get_num_rays()), dtype=N.bool) params = self.engine.intersect_ray(self._bund, surfaces, objects, \ surf_ownership, ray_ownership, surfs_relevancy)[0] correct_params = N.array([[True, True],[False, False]]) N.testing.assert_array_almost_equal(params,correct_params) def test_ray_tracer1(self): params = self.engine.ray_tracer(self._bund, 1,.05)[0] correct_params = N.c_[[0,.5,.5],[0,1,1]] N.testing.assert_array_almost_equal(params,correct_params)
def test_intersect_ray2(self): rot = general_axis_rotation([1,0,0],N.pi/4) surface = Surface(FlatGeometryManager(), opt.perfect_mirror, rotation=rot) assembly = Assembly() object = AssembledObject() object.add_surface(surface) assembly.add_object(object) engine = TracerEngine(assembly) surfaces = assembly.get_surfaces() objects = assembly.get_objects() surfs_per_obj = [len(obj.get_surfaces()) for obj in objects] surf_ownership = N.repeat(N.arange(len(objects)), surfs_per_obj) ray_ownership = -1*N.ones(self._bund.get_num_rays()) surfs_relevancy = N.ones((len(surfaces), self._bund.get_num_rays()), dtype=N.bool) params = engine.intersect_ray(self._bund, surfaces, objects, \ surf_ownership, ray_ownership, surfs_relevancy)[0] correct_params = N.array([[False, True, False]]) N.testing.assert_array_almost_equal(params, correct_params)
class TestTraceProtocol1(unittest.TestCase): """ Tests intersect_ray and the bundle driver with a single flat surface, not rotated, with a single interation """ def setUp(self): dir = N.array([[1, 1, -1], [-1, 1, -1], [-1, -1, -1], [1, -1, -1] ]).T / math.sqrt(3) position = N.c_[[0, 0, 1], [1, -1, 1], [1, 1, 1], [-1, 1, 1]] self._bund = RayBundle(position, dir, energy=N.ones(4)) self.assembly = Assembly() object = AssembledObject() object.add_surface(Surface(FlatGeometryManager(), opt.perfect_mirror)) self.assembly.add_object(object) self.engine = TracerEngine(self.assembly) def test_intersect_ray1(self): surfaces = self.assembly.get_surfaces() objects = self.assembly.get_objects() surfs_per_obj = [len(obj.get_surfaces()) for obj in objects] surf_ownership = N.repeat(N.arange(len(objects)), surfs_per_obj) ray_ownership = -1 * N.ones(self._bund.get_num_rays()) surfs_relevancy = N.ones((len(surfaces), self._bund.get_num_rays()), dtype=N.bool) params = self.engine.intersect_ray(self._bund, surfaces, objects, \ surf_ownership, ray_ownership, surfs_relevancy)[0] self.failUnless(params.all()) def test_ray_tracer(self): """Ray tracer after one iteration returns what the surface would have""" params = self.engine.ray_tracer(self._bund, 1, .05)[0] correct_pts = N.zeros((3, 4)) correct_pts[:2, 0] = 1 N.testing.assert_array_almost_equal(params, correct_pts)
def test_intersect_ray2(self): rot = general_axis_rotation([1, 0, 0], N.pi / 4) surface = Surface(FlatGeometryManager(), opt.perfect_mirror, rotation=rot) assembly = Assembly() object = AssembledObject() object.add_surface(surface) assembly.add_object(object) engine = TracerEngine(assembly) surfaces = assembly.get_surfaces() objects = assembly.get_objects() surfs_per_obj = [len(obj.get_surfaces()) for obj in objects] surf_ownership = N.repeat(N.arange(len(objects)), surfs_per_obj) ray_ownership = -1 * N.ones(self._bund.get_num_rays()) surfs_relevancy = N.ones((len(surfaces), self._bund.get_num_rays()), dtype=N.bool) params = engine.intersect_ray(self._bund, surfaces, objects, \ surf_ownership, ray_ownership, surfs_relevancy)[0] correct_params = N.array([[False, True, False]]) N.testing.assert_array_almost_equal(params, correct_params)