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()
def example_montel_paraboloid(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_montel_paraboloid") beam = Beam(25000) beam.set_circular_spot(1e-3) beam.set_flat_divergence(0.01, 0.01) beam.set_flat_divergence(1e-6, 1e-6) beam.flag *= 0 p = 5. q = 15. theta = 88. * np.pi / 180 xmax = 0. xmin = -0.4 ymax = 0.4 ymin = -0.4 zmax = 0.4 zmin = 0. bound1 = BoundaryRectangle(xmax, xmin, ymax, ymin, zmax, zmin) bound2 = BoundaryRectangle(xmax, xmin, ymax, ymin, zmax, zmin) montel = CompoundOpticalElement.initialize_as_montel_parabolic( p=p, q=q, theta=theta, bound1=bound1, bound2=bound2, distance_of_the_screen=q) beam03 = montel.trace_montel(beam) print(beam03[2].N / 25000) plt.figure() plt.plot(beam03[0].x, beam03[0].z, 'ro') plt.plot(beam03[1].x, beam03[1].z, 'bo') plt.plot(beam03[2].x, beam03[2].z, 'go') plt.xlabel('x axis') plt.ylabel('z axis') plt.axis('equal') beam03[2].plot_xz(0) print("No reflection = %d\nOne reflection = %d\nTwo reflection = %d" % (beam03[0].N, beam03[1].N, beam03[2].N)) print("dx = %f" % (max(beam03[2].x) - min(beam03[2].x))) plt.show()
def example_montel_elliptical(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_montel_elliptical") beam = Beam(25000) beam.set_flat_divergence(25 * 1e-6, 25 * 1e-6) beam.set_rectangular_spot(xmax=25 * 1e-6, xmin=-25 * 1e-6, zmax=5 * 1e-6, zmin=-5 * 1e-6) beam.set_gaussian_divergence(25 * 1e-4, 25 * 1e-4) beam.flag *= 0 p = 5. q = 15. #theta = np.pi/2 - 0.15 theta = 85. * np.pi / 180 xmax = 0. xmin = -0.3 ymax = 0.1 ymin = -0.1 zmax = 0.3 zmin = 0. bound1 = BoundaryRectangle(xmax, xmin, ymax, ymin, zmax, zmin) bound2 = BoundaryRectangle(xmax, xmin, ymax, ymin, zmax, zmin) montel = CompoundOpticalElement.initialize_as_montel_ellipsoid( p=p, q=q, theta=theta, bound1=bound1, bound2=bound2) beam03 = montel.trace_montel(beam) print(beam03[2].N / 25000) plt.figure() plt.plot(beam03[0].x, beam03[0].z, 'ro') plt.plot(beam03[1].x, beam03[1].z, 'bo') plt.plot(beam03[2].x, beam03[2].z, 'go') plt.xlabel('x axis') plt.ylabel('z axis') plt.axis('equal') beam03[2].plot_xz(0) print("No reflection = %d\nOne reflection = %d\nTwo reflection = %d" % (beam03[0].N, beam03[1].N, beam03[2].N)) plt.show()
def test_ideal_lens_with_trace_optical_element(self): 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.initialiaze_as_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)
from monwes.Shape import BoundaryRectangle import numpy as np import matplotlib.pyplot as plt from monwes.CompoundOpticalElement import CompoundOpticalElement from monwes.Vector import Vector do_plot = True main = "__main__" if main == "__main__": print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_montel_elliptical") beam = Beam(1e5) beam.set_flat_divergence(25 * 1e-6, 25 * 1e-6) #beam.set_rectangular_spot(xmax=25*1e-6, xmin=-25*1e-6, zmax=5*1e-6, zmin=-5*1e-6) beam.set_gaussian_divergence(25 * 1e-4, 25 * 1e-4) beam.flag *= 0 p = 5. q = 15. #theta = np.pi/2 - 0.15 theta = 85. * np.pi / 180 xmax = 0. xmin = -0.3 ymax = 0.1 ymin = -0.1 zmax = 0.3
from monwes.Shape import BoundaryRectangle import numpy as np import matplotlib.pyplot as plt from monwes.CompoundOpticalElement import CompoundOpticalElement do_plot = True main = "__main__" if main == "__main__": print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_montel_paraboloid") beam = Beam(25000) beam.set_circular_spot(1e-3) beam.set_flat_divergence(0.01, 0.01) beam.set_flat_divergence(1e-6, 1e-6) beam.plot_xz(0) beam.flag *= 0 p = 5. q = 15. theta = 88.*np.pi/180 xmax = 0. xmin = -0.4 ymax = 0.4 ymin = -0.4 zmax = 0.4
#y.x = np.tan(theta_grazing) / np.sqrt(2 + (np.tan(theta_grazing))**2) #y.y = 1 / np.sqrt(2 + np.tan(theta_grazing)**2) #y.normalization() #print(y.x, y.y, y.z) #print(np.arctan(y.x/y.y)*180/np.pi, np.arctan(y.z/y.y)*180/np.pi) # #alpha = -np.arctan(y.z/y.y) #y.rotation(alpha, 'x') #gamma = np.arctan(y.x/y.y) #y.rotation(gamma, 'z') # #print(y.x, y.y, y.z) beam = Beam() beam.set_rectangular_spot(xmax=0.5e-3, xmin=-0.5e-3, zmax=0.5e-3, zmin=-0.5e-3) beam.set_flat_divergence(500 * 1e-6, 800 * 1e-6) beam.set_divergences_collimated() op_axis = Beam(1) op_axis.set_point(0., 0., 0.) op_axis.set_divergences_collimated() beam = op_axis.merge(beam) xmax = 0.0 xmin = -0.01 ymax = 0.300 ymin = -0.300 zmax = 0.01 zmin = 0.0 bound = BoundaryRectangle(xmax=xmax, xmin=xmin,