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))
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))
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))
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))
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))
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
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
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))
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.
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))
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
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))
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))
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))
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))
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