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, 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=(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, 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=(50., 50., 10.), reflectivity=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.), (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, 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, 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, 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, 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 __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, radius=4.445, thickness=7.62, K=-4.302, R=3.00, *args, **kwargs): Component.__init__(self, *args, **kwargs) self.radius = radius self.thickness = thickness self.K = K self.R = R __a_surf = Aspherical(shape=Circular(radius=self.radius), Ax=0, Ay=self.R, Kx=-1, Ky=self.K, poly=poly2d((0, 0))) self.surflist["S1"] = (__a_surf, (0, 0, 0), (0, 0, 0)) __p_surf = Plane(shape=Circular(radius=(self.radius))) self.surflist["B1"] = (__p_surf, (0, 0, self.thickness), (0, 0, 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))
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,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, 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 __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 __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 __init__(self, s, *args, **kwargs): """ :param s: alto y base de las entradas del pentaprisma :param args: :param kwargs: :return: """ 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 __init__( self, outer_diameter=8.0, thickness=3.0, material=1.5, origin="center", s1={ "diameter": 6.0, "roc": 3.0, "k": -1.5, "polycoefficents": (0, 0, 0, 0, 3e-3, 0, -10e-6), "max_thickness": None, }, s2=None, *args, **kwargs): Component.__init__(self, *args, **kwargs) self.material = material self.thickness = thickness self.outer_diameter = outer_diameter # Fill defaults and put surface definitions into namespaces if not "max_thickness" in s1: s1["max_thickness"] = None if s2 is not None and not "max_thickness" in s2: s2["max_thickness"] = None s1_defn = SimpleNamespace(**s1) if s2 is not None: s2_defn = SimpleNamespace(**s2) else: s2_defn = None self.s1_defn, self.s2_defn = (s1_defn, s2_defn) # Auto select outer diameter if None if self.outer_diameter is None: candidates = [s1_defn.diameter] if s2 is not None: candidates.append(s2_defn.diameter) self.outer_diameter = max(candidates) # Start side thickness calculation, surfaces will be subtracted from this side_thickness = thickness # First surface s1_surf = Aspherical( shape=Circular(radius=0.5 * s1_defn.diameter), Ax=1.0 / s1_defn.roc, Ay=1.0 / s1_defn.roc, Kx=s1_defn.k, Ky=s1_defn.k, poly=poly1Drot(s1_defn.polycoefficents), ) if s1_defn.max_thickness is None: s1_defn.max_thickness = s1_surf.topo(s1_defn.diameter / 2.0, 0) side_thickness -= s1_defn.max_thickness self.surflist.append((s1_surf, (0, 0, 0), (0, 0, pi / 2))) # Second surface if s2_defn is None: s2_surf = Plane(shape=Circular(radius=0.5 * self.outer_diameter)) else: s2_surf = Aspherical( shape=Circular(radius=0.5 * s2_defn.diameter), Ax=1.0 / s2_defn.roc, Ay=1.0 / s2_defn.roc, Kx=s2_defn.k, Ky=s2_defn.k, poly=poly1Drot(s2_defn.polycoefficents), ) if s2_defn.max_thickness is None: s2_defn.max_thickness = s2_surf.topo(s2_defn.diameter / 2.0, 0) side_thickness -= s2_defn.max_thickness self.surflist.append((s2_surf, (0, 0, thickness), (0, pi, pi / 2))) # Outer edge if side_thickness > 0: outer_edge = Cylinder(radius=self.outer_diameter / 2, length=side_thickness) self.surflist.append(( outer_edge, (0, 0, s1_defn.max_thickness + 0.5 * side_thickness), (0, 0, pi / 2), )) elif side_thickness < 0: raise InvalidGeometryException( "Lens is not thick enough to support surfaces.") # Brim self._add_brim(s1_defn, s1_defn.max_thickness) if s2_defn is not None: self._add_brim(s2_defn, thickness - s2_defn.max_thickness) # Apply offset self._translate_origin(origin)
def __init__(self, shape=None, ap_shape=None, **traits): Component.__init__(self, **traits) #self.shape=shape #self.ap_shape=ap_shape face = Aperture(shape=shape, ap_shape=ap_shape) self.surflist["S1"] = (face, (0, 0, 0), (0, 0, 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.
def __init__(self,shape=None,ap_shape=None,**traits): Component.__init__(self,**traits) #self.shape=shape #self.ap_shape=ap_shape face= Aperture (shape=shape, ap_shape=ap_shape) self.surflist["S1"]=(face,(0,0,0),(0,0,0))