def test_compound_wolter1_with_hole(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_compound_wolter1_with_hole" ) p = 100. beam1 = Beam.initialize_as_person(100000) beam1.x *= 50. beam1.z *= 50. beam1.set_point(p, 0., p) op_ax = Beam(1) op_ax.set_point(p, 0., p) beam = op_ax.merge(beam1) beam.set_divergences_collimated() beam.plot_xz() p = 6 * 1e8 R = 100. theta = 0.001 * np.pi / 180 wolter = CompoundOpticalElement.initialiaze_as_wolter_1_with_two_parameters( p1=p, R=R, theta=theta) #beam = wolter.trace_compound(beam) beam = wolter.trace_good_rays(beam) beam.plot_good_xz() beam.retrace(10.) beam.plot_good_xz() plt.show()
def test_clean_wolter3(): p = 50. beam1 = Beam.initialize_as_person() beam1.set_point(p, 0., p) #beam1.set_rectangular_spot(5 / 2 * 1e-5, -5 / 2 * 1e-5, 5 / 2 * 1e-5, -5 / 2 * 1e-5) op_ax = Beam(1) op_ax.set_point(p, 0., p) beam = op_ax.merge(beam1) beam.set_divergences_collimated() beam.plot_xz() distance_between_the_foci = 10. wolter3 = CompoundOpticalElement.initialize_as_wolter_3( 20., 5., distance_between_the_foci) print(wolter3.oe1.ccc_object.get_coefficients()) print(wolter3.oe2.ccc_object.get_coefficients()) #beam = wolter3.trace_wolter3(beam, z0) beam = wolter3.trace_compound(beam) beam.plot_xz() beam.retrace(0.1) beam.plot_xz() plt.show()
def test_compound_wolter2_with_hole(): p = 0. #beam1 = Beam.initialize_as_person(10000) beam1 = Beam(100000) beam1.set_circular_spot(1.) #beam1.set_rectangular_spot(5 / 2 * 1e-5, -5 / 2 * 1e-5, 5 / 2 * 1e-5, -5 / 2 * 1e-5) beam1.x *= 10. beam1.z *= 10. beam1.set_point(p, 0., p) op_ax = Beam(1) op_ax.set_point(p, 0., p) beam = op_ax.merge(beam1) beam.set_divergences_collimated() beam.plot_xz(0) p = 20000. q = 30. z0 = 5. focal = 2 * z0 + q wolter2 = CompoundOpticalElement.initialiaze_as_wolter_2(p1=p, q1=q, z0=z0) #oe1 = Optical_element.initialize_as_surface_conic_paraboloid_from_focal_distances(p=p, q=0., theta=0., alpha=0., infinity_location="p", focal=focal) #oe2 = Optical_element.initialize_my_hyperboloid(p=0., q=-q, theta=90*np.pi/180, alpha=0., wolter=2, z0=z0, distance_of_focalization=focal) #oe1.rotation_to_the_optical_element(beam) #oe1.translation_to_the_optical_element(beam) #[beam, t] = oe1.intersection_with_optical_element(beam) #oe1.output_direction_from_optical_element(beam) #[beam, t] = oe2.intersection_with_optical_element(beam) #oe2. output_direction_from_optical_element(beam) #oe2.theta = 0. #oe2.rotation_to_the_screen(beam) #oe2.translation_to_the_screen(beam) #oe2.intersection_with_the_screen(beam) beam = wolter2.trace_compound(beam) beam.plot_xz() print("mean(beam.x)=%f, mean(beam.y)=%f, mean(beam.z)=%f" % (np.mean(beam.x), np.mean(beam.y), np.mean(beam.z))) beam.retrace(10.) beam.plot_xz() plt.show()
def test_wolter2_good_rays(self): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_wolter2_good_rays" ) p = 100. ##### if p=100 the trace_good_ray goes crazy beam1 = Beam.initialize_as_person(10000) #beam1 = Beam(100000) #beam1.set_circular_spot(1.) # beam1.set_rectangular_spot(5 / 2 * 1e-5, -5 / 2 * 1e-5, 5 / 2 * 1e-5, -5 / 2 * 1e-5) beam1.x *= 10. beam1.z *= 10. beam1.set_point(p, 0., p) op_ax = Beam(1) op_ax.set_point(p, 0., p) beam = op_ax.merge(beam1) beam.set_divergences_collimated() beam.plot_xz(0) p = 20000. q = 30. z0 = 5. focal = 2 * z0 + q wolter2 = CompoundOpticalElement.initialiaze_as_wolter_2(p1=p, q1=q, z0=z0) beam = wolter2.trace_good_rays(beam) beam.plot_good_xz() beam.retrace(10.) beam.plot_good_xz() plt.title("test_wolter2_good_rays") print(beam.flag) if do_plot: plt.show()
def test_optimezed_wolter1_good_rays(self): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_optimezed_wolter1_good_rays" ) p = 100. beam1 = Beam.initialize_as_person() beam1.x *= 50. beam1.z *= 50. beam1.set_point(p, 0., p) op_ax = Beam(1) op_ax.set_point(p, 0., p) beam = op_ax.merge(beam1) beam.set_divergences_collimated() beam.plot_xz() p = 1e12 R = 100. theta = 1e-3 * np.pi / 180 wolter1 = CompoundOpticalElement.initialiaze_as_wolter_1_with_two_parameters( p1=p, R=R, theta=theta) beam = wolter1.trace_good_rays(beam) beam.plot_good_xz() indices = np.where(beam.flag >= 0) assert_almost_equal(beam.x[indices], 0., 8) assert_almost_equal(beam.z[indices], 0., 8) beam.retrace(100.) beam.plot_good_xz() plt.title("optimezed_wolter1_good_rays") if do_plot: plt.show()
#plt.show() beam1=Beam() beam1.set_divergences_collimated() beam1.set_point(0.+100,0.,20.+100) beam1.set_circular_spot(5.) beam2=Beam() beam2.set_divergences_collimated() beam2.set_point(0.+100,0.,0.+100) beam2.set_rectangular_spot(20.,-20.,15.,10.) beam=beam1.merge(beam2) beam3=Beam() beam3.set_divergences_collimated() beam3.set_point(0.+100,0.,0.+100) beam3.set_rectangular_spot(5.,-5.,10.,-40.) beam=beam.merge(beam3) beamd=beam.duplicate() p = 10. q = 25. theta = 44 * np.pi / 180 alpha = 90 * np.pi / 180 prova = Optical_element.initialize_as_surface_conic_paraboloid_from_focal_distances(p,q,theta,alpha,"p")
def test_wolter_1_microscope(): p = 0. beam1 = Beam.initialize_as_person() beam1.set_flat_divergence_with_different_optical_axis(0.005, 0.005) beam1.set_point(p, 0., p) op_ax = Beam (1) op_ax.set_point(p, 0., p) beam = op_ax.merge(beam1) beam.x = beam.x beam.z = beam.z #beam.set_divergences_collimated() beam.plot_xz() distance_of_focalization = 5. hyp = Optical_element.initialize_my_hyperboloid(p=distance_of_focalization, q=0., theta=0., alpha=0., wolter=1.1, z0=0., distance_of_focalization=distance_of_focalization) ah = distance_of_focalization/np.sqrt(2) q = 20. z0 = 0.5*(q - np.sqrt(2)*ah) c = z0 + np.sqrt(2)*ah #b = c + 0.1 #a=np.sqrt(b**2-c**2) b = c*1.5 a = np.sqrt(b**2-c**2) ccc = np.array ([1/a**2, 1/a**2, 1/b**2, 0., 0., 0., 0., 0., -2*z0/b**2, z0**2/b**2-1]) ellips = Optical_element.initialize_as_surface_conic_from_coefficients(ccc) hyp.effect_of_optical_element(beam) beam.plot_yx(0) plt.title("footprint %s" % (hyp.type)) ellips.p = 0. ellips.theta = 90*np.pi/180 ellips.effect_of_optical_element(beam) beam.plot_yx(0) plt.title("footprint %s" % (ellips.type)) t = -beam.y/beam.vy beam.x = beam.x + beam.vx * t beam.y = beam.y + beam.vy * t beam.z = beam.z + beam.vz * t beam.plot_yx(0) beam.plot_xz() print("a of ellips is: %f" %(a)) print("b of ellips is: %f" %(b)) print("c of ellips is: %f" %(c)) print(np.mean(beam.z)) beam.histogram() plt.show()