Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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()
Exemple #4
0
    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()
Exemple #5
0
    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()
Exemple #6
0
#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")
Exemple #7
0
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()