Esempio n. 1
0
    def __init__(self, s, l, *args, **kwargs):
        #s alto o profundidad del prisma
        #l Longitud del lado mas largo del prisma

        #La referencia del prisma de dove esta en el centro del prisma

        Component.__init__(self, *args, **kwargs)

        d = 1.4142135623730951 * s

        #Diagonales del prisma

        s1 = Plane(shape=Rectangular(size=(d, s)))
        s2 = Plane(shape=Rectangular(size=(d, s)))

        #Lado largo del prisma
        s3 = Plane(shape=Rectangular(size=(l, s)))
        #lado corto del prisma
        s4 = Plane(shape=Rectangular(size=(l - 2 * s, s)))

        sp1 = (l - s) / 2.
        self.surflist["S1"] = (s1, (-sp1, 0, 0), (0, -pi / 4, 0))
        self.surflist["S2"] = (s2, (sp1, 0, 0), (0, pi / 4, 0))
        self.surflist["S3"] = (s3, (0, 0, -s / 2.), (0, 0, 0))
        self.surflist["S4"] = (s4, (0, 0, s / 2.), (0, 0, 0))
Esempio n. 2
0
    def __init__(self, width=50, height=10., reflectivity=0, *args, **kwargs):

        Component.__init__(self, *args, **kwargs)

        self.width = width
        self.height = height
        self.reflectivity = reflectivity

        __a_face = Plane(shape=Rectangular(size=(self.width, self.height)))
        __b_face = Plane(shape=Rectangular(size=(self.width, self.height)))

        h = sqrt(2.) * self.width

        __h_face = Plane(shape=Rectangular(size=(h, self.height)),
                         reflectivity=self.reflectivity)

        w2 = self.width / 2.
        __e1 = Plane(shape=Triangular(((-w2, w2), (-w2, -w2), (w2, -w2))))
        __e2 = Plane(shape=Triangular(((-w2, w2), (-w2, -w2), (w2, -w2))))

        self.surflist["S1"] = (__a_face, (0, 0, -self.width / 2), (0, 0, 0))
        self.surflist["S2"] = (__b_face, (self.width / 2, 0, 0), (0, pi / 2,
                                                                  0))
        self.surflist["S3"] = (__h_face, (0, 0, 0), (0, -pi / 4, 0))
        self.surflist["S4"] = (__e1, (0, self.height / 2, 0), (pi / 2, -pi / 2,
                                                               0))
        self.surflist["S5"] = (__e2, (0, -self.height / 2, 0), (pi / 2,
                                                                -pi / 2, 0))
Esempio n. 3
0
    def __init__(self,
                 size=(20, 20),
                 thickness=10,
                 curvature_s1=1. / 200,
                 curvature_s2=1. / 200,
                 *args,
                 **kwargs):
        Component.__init__(self, *args, **kwargs)
        self.size = size
        w, h = self.size
        self.thickness = thickness
        self.curvature_s1 = curvature_s1
        self.curvature_s2 = curvature_s2

        if self.curvature_s1 != 0.:
            __a_surf = Cylindrical(shape=Rectangular(size=(w, h)),
                                   curvature=self.curvature_s1)
        else:
            __a_surf = Plane(shape=Rectangular(size=(w, h)))

        if self.curvature_s2 != 0:
            __p_surf = Cylindrical(shape=Rectangular(size=(w, h)),
                                   curvature=self.curvature_s2)
        else:
            __p_surf = Plane(shape=Rectangular(size=(w, h)))

        self.surflist["S1"] = (__a_surf, (0, 0, -self.thickness / 2), (0, 0,
                                                                       0))
        self.surflist["S2"] = (__p_surf, (0, 0, self.thickness / 2), (0, 0, 0))
Esempio n. 4
0
    def __init__(self,
                 radius=50.,
                 thickness=10,
                 curvature_s1=1. / 200,
                 curvature_s2=1. / 200,
                 *args,
                 **kwargs):
        Component.__init__(self, *args, **kwargs)
        self.radius = radius
        self.thickness = thickness
        self.curvature_s1 = curvature_s1
        self.curvature_s2 = curvature_s2

        if self.curvature_s1 != 0.:
            __a_surf = Spherical(shape=Circular(radius=self.radius),
                                 curvature=self.curvature_s1)
        else:
            __a_surf = Plane(shape=Circular(radius=self.radius))

        if self.curvature_s2 != 0:
            __p_surf = Spherical(shape=Circular(radius=self.radius),
                                 curvature=self.curvature_s2)
        else:
            __p_surf = Plane(shape=Circular(radius=self.radius))

        self.surflist["S1"] = (__a_surf, (0, 0, -self.thickness / 2), (0, 0,
                                                                       0))
        self.surflist["S2"] = (__p_surf, (0, 0, self.thickness / 2), (0, 0, 0))

        if self.curvature_s1 != 0:
            r_a = 1. / self.curvature_s1
            s_a = absolute(r_a) - sqrt(r_a * r_a - self.radius * self.radius)
            if (r_a) < 0: s_a = -s_a
        else:
            s_a = 0.

        if self.curvature_s2 != 0:
            r_p = 1. / self.curvature_s2
            s_p = absolute(r_p) - sqrt(r_p * r_p - self.radius * self.radius)
            if (r_p) > 0: s_p = -s_p
        else:
            s_p = 0.

        #Ojo, falta verificar si la lente es fisicamente posible es decir th1>0
        th1 = self.thickness - s_a - s_p

        zp = float(-self.thickness / 2 + s_a + th1 / 2.)
        __c_surf_1 = Cylindrical(shape=Rectangular(size=(2. * self.radius,
                                                         th1)),
                                 curvature=1. / self.radius)

        __c_surf_2 = Cylindrical(shape=Rectangular(size=(2 * self.radius,
                                                         th1)),
                                 curvature=1. / self.radius)

        self.surflist["B1"] = (__c_surf_1, (-self.radius, 0, zp), (pi / 2., 0,
                                                                   pi / 2))

        self.surflist["B2"] = (__c_surf_2, (self.radius, 0, zp), (-pi / 2., 0,
                                                                  pi / 2))
Esempio n. 5
0
    def __init__(self,
                 radius=50.,
                 thickness=10,
                 reflectivity=0.5,
                 *args,
                 **kwargs):
        Component.__init__(self, *args, **kwargs)
        __a_surf = Plane(shape=Circular(radius=radius),
                         reflectivity=reflectivity)
        __p_surf = Plane(shape=Circular(radius=radius))

        self.surflist["S1"] = (__a_surf, (0, 0, 0), (0, 0, 0))
        self.surflist["S2"] = (__p_surf, (0, 0, thickness), (0, 0, 0))

        __c_surf_1 = Cylindrical(shape=Rectangular(size=(2. * radius,
                                                         thickness)),
                                 curvature=1. / radius)
        __c_surf_2 = Cylindrical(shape=Rectangular(size=(2 * radius,
                                                         thickness)),
                                 curvature=1. / radius)

        self.surflist["B1"] = (__c_surf_1, (-radius, 0, thickness / 2.),
                               (pi / 2., 0, pi / 2))
        self.surflist["B2"] = (__c_surf_2, (radius, 0, thickness / 2.),
                               (-pi / 2., 0, pi / 2))
Esempio n. 6
0
def IdealTLens(
    shape=Rectangular(size=(50, 50)), ap_shape=Rectangular(size=(40, 40)), f=100, d=20
):
    """Function to define an ideal thick lens."""
    S1 = IdealPPlanes(shape=shape, f=f, d=d)
    S2 = Aperture(shape=Rectangular(size=(50, 50)), ap_shape=ap_shape)
    S3 = Aperture(shape=Rectangular(size=(50, 50)), ap_shape=ap_shape)
    A1 = Component(
        surflist=[
            (S2, (0, 0, 0), (0, 0, 0)),
        ]
    )
    A2 = Component(
        surflist=[
            (S3, (0, 0, 0), (0, 0, 0)),
        ]
    )
    L1 = Component(
        surflist=[
            (S1, (0, 0, 0), (0, 0, 0)),
        ]
    )
    Si = System(
        complist=[
            (L1, (0, 0, 0), (0, 0, 0)),
            (A1, (0, 0, -1.001 * d / 2), (0, 0, 0)),
            (A2, (0, 0, 1.001 * d / 2), (0, 0, 0)),
        ],
        n=1,
    )

    return Si
Esempio n. 7
0
def IdealTLens(shape=Rectangular(size=(50,50)), ap_shape=Rectangular(size=(40,40)), f=100,d=20):
    """Funcion envoltorio que representa una lente ideal gruesa
    """
    S1=IdealPPlanes(shape=shape, f=f,d=d)
    S2=Aperture(shape=Rectangular(size=(50,50)),ap_shape=ap_shape)
    S3=Aperture(shape=Rectangular(size=(50,50)),ap_shape=ap_shape)
    A1=Component(surflist=[(S2,(0,0,0),(0,0,0)),])
    A2=Component(surflist=[(S3,(0,0,0),(0,0,0)),])
    L1=Component(surflist=[(S1,(0,0,0),(0,0,0)),])
    Si=System(complist=[(L1,(0,0,0),(0,0,0)),
                        (A1,(0,0,-1.001*d/2),(0,0,0)),
                        (A2,(0,0, 1.001*d/2),(0,0,0)),],n=1)

    return Si
Esempio n. 8
0
 def __init__(self, sides=3, height=3, inner_radius=10, **traits):
     if sides < 3:
         raise Exception("Polygon should have at least 3 sides.")
     side_length = 2 * inner_radius * np.tan(np.pi / sides)
     Component.__init__(self, **traits)
     # create a side base shape
     side = Plane(shape=Rectangular(size=(side_length, height)))
     for i in range(sides):
         angle = 2 * np.pi / sides * i
         center = inner_radius * np.array([np.cos(angle), np.sin(angle)])
         self.surflist[f"S{i}"] = (side, (center[0], center[1], 0),
                                   (np.pi / 2, 0, angle + np.pi / 2))
     # create a top/bottom base shape
     triangle = Plane(shape=Triangular(((0, 0), (-inner_radius,
                                                 -side_length / 2),
                                        (-inner_radius, side_length / 2))))
     for i in ['bottom', 'height']:
         surface = len(self.surflist)
         if i == 'bottom':
             offset = -height / 2
         else:
             offset = height / 2
         for i in range(sides):
             angle = 2 * np.pi / sides * i
             if sides % 2:
                 offset = 2 * np.pi / (sides * 2)
             else:
                 offset = 0
             self.surflist[f"S{i+surface}"] = (triangle, (0, 0, offset),
                                               (0, 0, angle + offset))
Esempio n. 9
0
 def __init__(self, size=(10, 10), transparent=True, *args, **kwargs):
     Component.__init__(self, *args, **kwargs)
     self.__d_surf = Plane(
         shape=Rectangular(size=size)
     )  #ArrayDetector (size=self.size, transparent=self.transparent)
     self.size = size
     self.surflist["S1"] = (self.__d_surf, (0, 0, 0), (0, 0, 0))
     self.material = 1.
Esempio n. 10
0
    def __init__(self, s, *args, **kwargs):

        Component.__init__(self, *args, **kwargs)

        s1 = Plane(shape=Rectangular(size=(s, s)))
        s2 = Plane(shape=Rectangular(size=(s, s)))
        d = s / cos(radians(22.5))
        s3 = Plane(shape=Rectangular(size=(d, s)), reflectivity=1)
        s4 = Plane(shape=Rectangular(size=(d, s)), reflectivity=1)
        d1 = d * sin(radians(22.5) / 2.)
        s5 = Plane(shape=Rectangular(size=(2 * sqrt(2) * d1, s)))

        self.surflist["S1"] = (s1, (0, 0, -s / 2.), (0, 0, 0))
        self.surflist["S2"] = (s2, (s / 2., 0, 0), (0, pi / 2, 0))
        self.surflist["S3"] = (s3, (0, 0, s / 2. + d1), (0, pi / 8, 0))
        self.surflist["S4"] = (s4, (-s / 2. - d1, 0, 0), (0, 3 * pi / 8, 0))
        self.surflist["S5"] = (s5, (-s / 2. - d1, 0, s / 2. + d1), (0, -pi / 4,
                                                                    0))
Esempio n. 11
0
def IdealLens(shape=Rectangular(size=(50,50)), f=100):
    """Function to create a component that behaves as an ideal lens

    :param shape: Shape of the lens
    :type shape: :class:`~pyoptools.raytrace.shape.shape.Shape`
    """
    S1=IdealSurface(shape=shape, f=f)
    L1=Component(surflist=[(S1,(0,0,0),(0,0,0))])
    return L1
Esempio n. 12
0
    def __init__(self,
                 size=(50.0, 50.0, 10.0),
                 reflectivity=0.0,
                 lpmm=600,
                 angle=0,
                 M=[1],
                 *args,
                 **kwargs):
        Component.__init__(self, *args, **kwargs)
        self.size = size
        w, h, l = self.size
        lpmmx = lpmm * cos(angle)
        lpmmy = lpmm * sin(angle)
        phf = poly2d([0, 2 * pi * lpmmx, 2 * pi * lpmmy])
        __a_surf = RPPMask(shape=Rectangular(size=(w, h)),
                           phm=phf,
                           reflectivity=reflectivity,
                           M=M)
        __p_surf = Plane(shape=Rectangular(size=(w, h)))

        __u_surf = Plane(shape=Rectangular(size=(w, l)))
        __l_surf = Plane(shape=Rectangular(size=(w, l)))

        __lf_surf = Plane(shape=Rectangular(size=(l, h)))
        __rg_surf = Plane(shape=Rectangular(size=(l, h)))

        self.surflist["S1"] = (__a_surf, (0, 0, 0), (0, 0, 0))
        self.surflist["S2"] = (__p_surf, (0, 0, l), (0, 0, 0))

        self.surflist["S3"] = (__u_surf, (0, h / 2, l / 2.0), (pi / 2, 0, 0))
        self.surflist["S4"] = (__l_surf, (0, -h / 2, l / 2.0), (pi / 2, 0, 0))

        self.surflist["S5"] = (__lf_surf, (-w / 2, 0, l / 2.0), (0, pi / 2, 0))
        self.surflist["S6"] = (__rg_surf, (w / 2, 0, l / 2.0), (0, pi / 2, 0))
Esempio n. 13
0
    def __init__(self,
                 size=(50., 50., 10.),
                 reflectivity=0.5,
                 *args,
                 **kwargs):
        Component.__init__(self, *args, **kwargs)
        self.size = size
        w, h, l = self.size
        __a_surf = Plane(shape=Rectangular(size=(w, h)),
                         reflectivity=reflectivity)
        __p_surf = Plane(shape=Rectangular(size=(w, h)))

        __u_surf = Plane(shape=Rectangular(size=(w, l)))
        __l_surf = Plane(shape=Rectangular(size=(w, l)))

        __lf_surf = Plane(shape=Rectangular(size=(l, h)))
        __rg_surf = Plane(shape=Rectangular(size=(l, h)))

        self.surflist["S1"] = (__a_surf, (0, 0, 0), (0, 0, 0))
        self.surflist["S2"] = (__p_surf, (0, 0, l), (0, 0, 0))

        self.surflist["S3"] = (__u_surf, (0, h / 2, l / 2.), (pi / 2, 0, 0))
        self.surflist["S4"] = (__l_surf, (0, -h / 2, l / 2.), (pi / 2, 0, 0))

        self.surflist["S5"] = (__lf_surf, (-w / 2, 0, l / 2.), (0, pi / 2, 0))
        self.surflist["S6"] = (__rg_surf, (w / 2, 0, l / 2.), (0, pi / 2, 0))
Esempio n. 14
0
    def __init__(self, s, *args, **kwargs):
        """
        :param s: alto y base de las entradas del pentaprisma
        :param args:
        :param kwargs:
        :return:
        """

        s1 = Plane(shape=Rectangular(size=(s, s)))
        s2 = Plane(shape=Rectangular(size=(s, s)))
        d = s / cos(radians(22.5))
        s3 = Plane(shape=Rectangular(size=(d, s)), reflectivity=1)
        s4 = Plane(shape=Rectangular(size=(d, s)), reflectivity=1)
        d1 = d * sin(radians(22.5) / 2.)
        s5 = Plane(shape=Rectangular(size=(2 * sqrt(2) * d1, s)))

        self.surflist["S1"] = (s1, (0, 0, -s / 2.), (0, 0, 0))
        self.surflist["S2"] = (s2, (s / 2., 0, 0), (0, pi / 2, 0))
        self.surflist["S3"] = (s3, (0, 0, s / 2. + d1), (0, pi / 8, 0))
        self.surflist["S4"] = (s4, (-s / 2. - d1, 0, 0), (0, 3 * pi / 8, 0))
        self.surflist["S5"] = (s5, (-s / 2. - d1, 0, s / 2. + d1), (0, -pi / 4,
                                                                    0))
Esempio n. 15
0
    def __init__(self, size=(10, 10, 10), **traits):
        Component.__init__(self, **traits)
        self.size = size
        w, h, l = self.size
        __a_surf = Plane(shape=Rectangular(size=(w, h)))
        __p_surf = Plane(shape=Rectangular(size=(w, h)))

        __u_surf = Plane(shape=Rectangular(size=(w, l)))
        __l_surf = Plane(shape=Rectangular(size=(w, l)))

        __lf_surf = Plane(shape=Rectangular(size=(l, h)))
        __rg_surf = Plane(shape=Rectangular(size=(l, h)))

        self.surflist["S1"] = (__a_surf, (0, 0, -l / 2), (0, 0, 0))
        self.surflist["S2"] = (__p_surf, (0, 0, l / 2), (0, 0, 0))

        self.surflist["S3"] = (__u_surf, (0, h / 2, 0), (pi / 2, 0, 0))
        self.surflist["S4"] = (__l_surf, (0, -h / 2, 0), (pi / 2, 0, 0))

        self.surflist["S5"] = (__lf_surf, (-w / 2, 0, 0), (0, pi / 2, 0))
        self.surflist["S6"] = (__rg_surf, (w / 2, 0, 0), (0, pi / 2, 0))
Esempio n. 16
0
def IdealLens(shape=Rectangular(size=(50,50)), f=100):
    """Funcion envoltorio que representa una lente ideal
    """
    S1=IdealSurface(shape=shape, f=f)
    L1=Component(surflist=[(S1,(0,0,0),(0,0,0))])
    return L1