def example_wolter3(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_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.oe[0].ccc_object.get_coefficients()) print(wolter3.oe[1].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_gaussian_beam(self): print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test_gaussian_beam") beam=Beam(5000) beam.set_point(1.,1.,1.) beam.set_gaussian_divergence(0.05,0.0005) print(np.mean(beam.vx)) print(np.mean(beam.vz)) assert_almost_equal(np.mean(beam.vx),0.0,1) assert_almost_equal(np.mean(beam.vz),0.0,1)
def example_wolter2_good_rays(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_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 *= 100. beam1.z *= 100. 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 example_optimezed_wolter1_good_rays(): print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_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()
main = "__main__" if main == "__main__": print( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example_wolter3" ) p = 50. q = 5. 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( p, q, distance_between_the_foci) print(wolter3.oe[0].ccc_object.get_coefficients()) print(wolter3.oe[1].ccc_object.get_coefficients()) #beam = wolter3.trace_wolter3(beam, z0)
theta2=theta2) beam = Beam() beam.set_gaussian_divergence(5 * 1e-5, 0.00025) beam.set_rectangular_spot(xmax=200 * 1e-6, xmin=-200 * 1e-6, zmax=10 * 1e-6, zmin=-10 * 1e-6) #beam.set_divergences_collimated() beam.plot_xz(0) plt.title('wolter microscope') beam.plot_xpzp(0) op_axis = Beam(1) op_axis.set_point(0., 0., 0.) op_axis.set_divergences_collimated() beam = op_axis.merge(beam) beam = wolter_jap.trace_compound(beam) #b2 = beam.y #b3 = beam.z #beam.y = b3 #beam.z = b2 #beam.x *= 1e6 #beam.z *= 1e6