Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
    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    ####################
Exemplo n.º 10
0
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()
Exemplo n.º 11
0
    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)
#
#
########################################################################################################################
Exemplo n.º 12
0
    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()