def test_my_hyperbolic_mirror(): beam = Beam() beam.set_flat_divergence(0.005, 0.0005) p1 = 130. q1 = 0. spherical_mirror = Optical_element.initialize_as_spherical_mirror(p1, q1, theta=0, alpha=0, R=130.) beam = spherical_mirror.trace_optical_element(beam) p = 15 q = p1 - p theta = 0 * np.pi / 180 hyp_mirror = Optical_element.initialize_my_hyperboloid(p, q, theta) beam = hyp_mirror.trace_optical_element(beam) beam.plot_xz() assert_almost_equal(beam.x, 0., 10) assert_almost_equal(beam.y, 0., 10) assert_almost_equal(beam.z, 0., 10) if do_plot: plt.show()
def test_spherical_mirror(): print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_spherical_mirror") beam1 = Beam(5000) beam1.set_point(0, 0, 0) beam1.set_flat_divergence(5e-3, 5e-2) p = 2. q = 1. theta = 30 theta = theta * np.pi / 180 alpha = 0 * np.pi / 180 spherical_mirror = Optical_element.initialize_as_spherical_mirror( p, q, theta, alpha) #spherical_mirror.set_spherical_mirror_radius_from_focal_distances() print(spherical_mirror.R) beam1 = spherical_mirror.trace_optical_element(beam1) beam1.plot_xz() beam1.plot_xpzp() print(np.mean(beam1.flag)) if do_plot: plt.show() assert_almost_equal(np.abs(beam1.x).mean(), 0.0, 2) assert_almost_equal(np.abs(beam1.y).mean(), 0.0, 2) assert_almost_equal(np.abs(beam1.z).mean(), 0.0, 2)
def test_plane_mirror(): print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_plane_mirror") beam1 = Beam(5000) beam1.set_point(0, 0, 0) beam1.set_flat_divergence(5e-3, 5e-2) p = 1. q = 1. theta = np.pi / 4 alpha = 0 plane_mirror = Optical_element.initialize_as_plane_mirror( p, q, theta, alpha) xmin = -10**5 xmax = 10**5 ymin = 10**5 ymax = -10**5 bound = BoundaryRectangle(xmax, xmin, ymax, ymin) plane_mirror.rectangular_bound(bound) beam1 = plane_mirror.trace_optical_element(beam1) beam1.plot_xz() beam1.plot_xpzp() if do_plot: plt.show()
def test_boundary_condition(): #beam1 = Beam(10000) #beam1.set_point(0, 0, 0) #beam1.set_flat_divergence(5e-3, 5e-2) shadow_beam = run_shadow_source() beam1 = Beam(10000) beam1.initialize_from_arrays( shadow_beam.getshonecol(1), shadow_beam.getshonecol(2), shadow_beam.getshonecol(3), shadow_beam.getshonecol(4), shadow_beam.getshonecol(5), shadow_beam.getshonecol(6), shadow_beam.getshonecol(10), 0 ) bound1=BoundaryRectangle(xmax=0.005,xmin=-0.005,ymax=0.05,ymin=-0.05) bound2=BoundaryRectangle(xmax=0.01,xmin=-0.01,ymax=0.1,ymin=-0.1) plane_mirror=Optical_element.initialize_as_plane_mirror(2,1,65*np.pi/180,0) parabolic_mirror=Optical_element.initialize_as_surface_conic_paraboloid_from_focal_distances(5,2,28*np.pi/180,90*np.pi/180) plane_mirror.rectangular_bound(bound1) parabolic_mirror.rectangular_bound(bound2) beam1=plane_mirror.trace_optical_element(beam1) beam1=parabolic_mirror.trace_optical_element(beam1) beam1.plot_xz() plt.title("Total points plot") beam1.plot_good_xz() plt.title("Good points plot") print(beam1.flag) indices=np.where(beam1.flag>0) print("The good number of ray are: %f" %(beam1.flag[indices].size)) plt.show() shadow_beam=trace_shadow(shadow_beam) assert_almost_equal(beam1.x, shadow_beam.getshonecol(1), 8) assert_almost_equal(beam1.y, shadow_beam.getshonecol(2), 8) assert_almost_equal(beam1.z, shadow_beam.getshonecol(3), 8)
def test_ideal_lens_with_trace_optical_element(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_ideal_lens_with_trace_optical_element" ) beam = Beam() beam.set_flat_divergence(0.05, 0.005) p = 1. q = 5. lens = Optical_element.ideal_lens(p, q) beam = lens.trace_optical_element(beam) beam.plot_xz() if do_plot: plt.show() assert_almost_equal(np.abs(beam.x).mean(), 0.0, 4) assert_almost_equal(np.abs(beam.z).mean(), 0.0, 4)
def test_ellipsoidal_mirror(self): print(">>>>>>>>>>>>>>> test_ellipsoidal_mirror") #beam1=Beam(5000) #beam1.set_point(0,0,0) #beam1.set_flat_divergence(5e-3,5e-2) shadow_beam = run_shadow_source() beam1 = Beam() beam1.initialize_from_arrays( shadow_beam.getshonecol(1), shadow_beam.getshonecol(2), shadow_beam.getshonecol(3), shadow_beam.getshonecol(4), shadow_beam.getshonecol(5), shadow_beam.getshonecol(6), shadow_beam.getshonecol(10), ) p = 20. q = 10. theta = 50 * np.pi / 180 spherical_mirror = Optical_element.initialize_as_surface_conic_ellipsoid_from_focal_distances( p, q, theta) beam1 = spherical_mirror.trace_optical_element(beam1) if do_plot: beam1.plot_xz() beam1.plot_xpzp() plt.title("Ellipsoidal mirror with p=20, q=10, theta=50") plt.show() shadow_beam = run_shadow_elliptical_mirror(beam1) assert_almost_equal(beam1.vx, shadow_beam.getshonecol(4), 1) assert_almost_equal(beam1.vy, shadow_beam.getshonecol(5), 1) assert_almost_equal(beam1.vz, shadow_beam.getshonecol(6), 1)
def test_spherical_mirror(self): print(">>>>>>>>>>>>>>> test_spherical_mirror") shadow_beam = run_shadow_source() beam1 = Beam() beam1.initialize_from_arrays( shadow_beam.getshonecol(1), shadow_beam.getshonecol(2), shadow_beam.getshonecol(3), shadow_beam.getshonecol(4), shadow_beam.getshonecol(5), shadow_beam.getshonecol(6), shadow_beam.getshonecol(10), ) #beam1 = Beam(5000) #beam1.set_point(0, 0, 0) #beam1.set_flat_divergence(5e-3, 5e-2) p = 2. q = 1. theta = 41 * np.pi / 180 shadow_beam = run_shadow_source() spherical_mirror = Optical_element.initialize_as_surface_conic_sphere_from_focal_distances( p, q, theta) beam1 = spherical_mirror.trace_optical_element(beam1) if do_plot: beam1.plot_xz() beam1.plot_xpzp() plt.title("Spherical mirror with p=2, q=1, theta=41") plt.show() shadow_beam = run_shadow_spherical_mirror(shadow_beam) assert_almost_equal(beam1.x, shadow_beam.getshonecol(1), 8) assert_almost_equal(beam1.y, shadow_beam.getshonecol(2), 8) assert_almost_equal(beam1.z, shadow_beam.getshonecol(3), 8)
def test_ideal_lens_collimated_beam(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_ideal_lens_collimated_beam") beam = Beam() beam.set_circular_spot(20 * 1e-9) beam.set_divergences_collimated() beam.plot_xz() p = 1. q = 5. lens = Optical_element.ideal_lens(p, q, q, q) beam = lens.trace_optical_element(beam) beam.plot_xz() if do_plot: plt.show() assert_almost_equal(np.abs(beam.x).mean(), 0.0, 4) assert_almost_equal(np.abs(beam.z).mean(), 0.0, 4)
def test_rectangular_shape(self): beam = Beam(round(1e5)) plane_mirror = Optical_element.initialize_as_surface_conic_plane( p=10., q=0., theta=0.) beam.set_flat_divergence(0.02, 0.1) xmax = 0.01 xmin = -0.0008 ymax = 1. ymin = -0.29 bound = BoundaryRectangle(xmax=xmax, xmin=xmin, ymax=ymax, ymin=ymin) plane_mirror.set_bound(bound) beam = plane_mirror.trace_optical_element(beam) beam.plot_xz() beam.plot_good_xz() indices = np.where(beam.flag > 0) assert_almost_equal(max(beam.x[indices]) - xmax, 0., 2) assert_almost_equal(-min(beam.x[indices]) + xmin, 0., 2) assert_almost_equal(max(beam.z[indices]) + ymin, 0., 2) assert_almost_equal(-min(beam.z[indices]) - ymax, 0., 2) print(max(beam.x[indices]), min(beam.x[indices]), max(beam.y[indices]), min(beam.y[indices])) if do_plot is True: plt.show() ######### BoundaryCircle has to be implemented in the code of intersection_with_optical_element ####################
from Beam import Beam from OpticalElement import Optical_element from Shape import BoundaryRectangle import numpy as np import matplotlib.pyplot as plt from numpy.testing import assert_almost_equal beam = Beam(1) #beam.set_flat_divergence(0.000005,0.001) beam.set_point(0., 0., 100.) beam.plot_xz() p = 2000. q = 2 * np.sqrt(2) theta = 0 * np.pi / 180 hyp_mirror = Optical_element.initialize_my_hyperboloid(p, q, theta) beam = hyp_mirror.trace_optical_element(beam) beam.plot_xz() beam.plot_xy() #print (hyp_mirror.ccc_object.get_coefficients()) print(np.mean(beam.z)) plt.show() # #beam=Beam()
def test_paraboloid_mirror(self): print(">>>>>>>>>>>>>>> test_paraboloid_mirror") #beam1=Beam(5000) #beam1.set_point(0,0,0) #beam1.set_flat_divergence(5e-3,5e-2) shadow_beam = run_shadow_source() beam1 = Beam() beam1.initialize_from_arrays( shadow_beam.getshonecol(1), shadow_beam.getshonecol(2), shadow_beam.getshonecol(3), shadow_beam.getshonecol(4), shadow_beam.getshonecol(5), shadow_beam.getshonecol(6), shadow_beam.getshonecol(10), ) p = 10. q = 20. theta = 72 * np.pi / 180 alpha = 0 * np.pi / 180 spherical_mirror = Optical_element.initialize_as_surface_conic_paraboloid_from_focal_distances( p, q, theta, alpha) beam1 = spherical_mirror.trace_optical_element(beam1) if do_plot: beam1.plot_xz() beam1.plot_xpzp() plt.title("Paraboloid mirror with p=10, q=20, theta=72") print(spherical_mirror.ccc_object.get_coefficients()) plt.show() shadow_beam = run_shadow_parabolic_mirror(shadow_beam) assert_almost_equal(beam1.x, shadow_beam.getshonecol(1), 7) assert_almost_equal(beam1.y, shadow_beam.getshonecol(2), 7) assert_almost_equal(beam1.z, shadow_beam.getshonecol(3), 7) ######## This is problematic ####################################################################################### # #def test_hyperboloid_mirror(): # #beam1=Beam(5000) # #beam1.set_point(0,0,0) # #beam1.set_flat_divergence(5e-3,5e-2) # # shadow_beam=run_shadow_source() # # beam1=Beam(5000) # beam1.initialize_from_arrays( # shadow_beam.getshonecol(1), # shadow_beam.getshonecol(2), # shadow_beam.getshonecol(3), # shadow_beam.getshonecol(4), # shadow_beam.getshonecol(5), # shadow_beam.getshonecol(6), # shadow_beam.getshonecol(10), # 0 # ) # # p=1. # q=2. # theta = 76*np.pi/180 # spherical_mirror=Optical_element.initialize_as_hyperboloid_from_focal_distances(p,q,theta) # beam1=spherical_mirror.trace_surface_conic(beam1) # beam1.plot_xz() # beam1.plot_xpzp() # plt.show() # # shadow_beam=run_shadow_hyperbolic_mirror(shadow_beam) # # ########################################################################################################################
beam1 = Beam() # beam1.set_point(0,0,0) # beam1.set_flat_divergence(5e-3,5e-2) beam1.initialize_from_arrays( beam_shadow.getshonecol(1), beam_shadow.getshonecol(2), beam_shadow.getshonecol(3), beam_shadow.getshonecol(4), beam_shadow.getshonecol(5), beam_shadow.getshonecol(6), beam_shadow.getshonecol(10), ) #### Data of the plane mirron p = 1. q = 1. theta = 45 alpha = 90 R = 2 * p * q / (q + p) / np.cos(theta) spherical_mirror = Optical_element.initialize_as_spherical_mirror( p, q, theta, alpha, R) beam1 = spherical_mirror.trace_optical_element(beam1) beam1.plot_xz() plt.title("xz diagram on the image plane") beam1.plot_xpzp() plt.title("xpzp diagram on the image plane") plt.show()