Esempio n. 1
0
def conic_grad(test_vector):
    """
    Computation of conic grad equals explicit calculation.
    """
    coordinate_system = LocalCoordinates.p(name="root")
    radius = 10.0
    conic_constant = -1.5
    curvature = 1./radius
    maxradius = (math.sqrt(1./((1+conic_constant)*curvature**2))
                 if conic_constant > -1 else abs(radius))
    values = (2*test_vector-1.)*maxradius
    x = values[0]
    y = values[1]
    shape = Conic.p(coordinate_system, curv=curvature, cc=conic_constant)

    gradient = shape.getGrad(x, y)

    comparison = np.zeros_like(gradient)
    comparison[2, :] = 1.
    comparison[0] = (-curvature**3*x*(conic_constant + 1)*(x**2 + y**2)/
                        (np.sqrt(-curvature**2*(conic_constant + 1)*(x**2 + y**2) + 1)*
                            (np.sqrt(-curvature**2*(conic_constant + 1)*(x**2 + y**2) + 1) + 1)**2)
                            - 2*curvature*x/(np.sqrt(-curvature**2*(conic_constant + 1)*(x**2 + y**2) + 1) + 1))
    comparison[1] = (-curvature**3*y*(conic_constant + 1)*(x**2 + y**2)/
                        (np.sqrt(-curvature**2*(conic_constant + 1)*(x**2 + y**2) + 1)*
                            (np.sqrt(-curvature**2*(conic_constant + 1)*(x**2 + y**2) + 1) + 1)**2)
                            - 2*curvature*y/(np.sqrt(-curvature**2*(conic_constant + 1)*(x**2 + y**2) + 1) + 1))
    comparison = comparison*gradient[2] # comparison and gradient are calculated differently

    assert np.allclose(gradient, comparison)
Esempio n. 2
0
    def create_surfaces(self, cs):  #cs=coordinate Systems
        surface_objects = []
        for i in range(self.surfaces.shape[0]):
            if (self.get_sufval("shape", i) == "Conic"):
                #hier noch cc einfuegen
                shape_ = Conic.p(cs[i],
                                 cc=float(self.get_sufval("conic", i)),
                                 curv=float(self.get_sufval("curvature", i)))
                #print(self.get_sufval("curvature",i))
            else:
                shape_ = None
            if (self.get_sufval("aperture", i) == "Circular"):
                aperture_ = CircularAperture(
                    cs[i],
                    minradius=float(self.get_sufval("minrad", i)),
                    maxradius=float(self.get_sufval("maxrad", i)))
                #print(float(self.get_sufval("maxrad",i)).__class__.__name__)
            else:
                aperture_ = None

            self.SurfNameList.append(self.get_sufval("name", i))
            surface_objects.append(
                Surface.p(cs[i], shape=shape_, aperture=aperture_))

        return surface_objects
Esempio n. 3
0
    def initShConic(self, curv=0., cc=0., **kwargs):
        shapeclass = None
        if "surface" in kwargs:
            shapeclass = kwargs["surface"].shape
            curv = shapeclass.curvature.evaluate()
            cc = shapeclass.conic.evaluate()
        else:
            shapeclass = Conic.p(self.__obj.LocalCoordinatesLink.getLC(),
                                 curv=curv,
                                 cc=cc)

        self.__obj.addProperty("App::PropertyFloat", "curv", "Shape",
                               "central curvature").curv = curv
        self.__obj.addProperty("App::PropertyFloat", "cc", "Shape",
                               "conic constant").cc = cc
        self.__obj.shapeclass = shapeclass
Esempio n. 4
0
    def create():
        from pyrateoptics.raytracer.surface_shape import Conic
        from pyrateoptics.raytracer.surface import Surface
        from pyrateoptics.raytracer.aperture import CircularAperture

        lc = LocalCoordinates.p(name="----LCglobal----")
        lc2 = LocalCoordinates.p(name="----LCap----", tiltx=0.1, decx=0.2)
        lc3 = LocalCoordinates.p(name="----LCsh----", tiltx=-0.1, decx=-0.2)

        lc.addChild(lc2)
        lc.addChild(lc3)

        ap = CircularAperture.p(lc2)
        sh = Conic.p(lc3, curv=0.01, cc=-1)

        su = Surface.p(lc, sh, ap, name="mysurface")

        return su
Esempio n. 5
0
def conic_sag(test_vector):
    """
    Computation of conic sag equals explicit calculation.
    """
    coordinate_system = LocalCoordinates.p(name="root")
    radius = 10.0
    conic_constant = -1.5
    curvature = 1. / radius
    maxradius = (math.sqrt(1. / ((1 + conic_constant) * curvature**2))
                 if conic_constant > -1 else abs(radius))
    values = (2 * test_vector - 1.) * maxradius
    x_coordinate = values[0]
    y_coordinate = values[1]
    shape = Conic.p(coordinate_system, curv=curvature, cc=conic_constant)
    sag = shape.getSag(x_coordinate, y_coordinate)
    # comparison with explicitly entered formula
    assert np.allclose(
        sag, (curvature * (x_coordinate**2 + y_coordinate**2) /
              (1. + np.sqrt(1. - (1. + conic_constant) * curvature**2 *
                            (x_coordinate**2 + y_coordinate**2)))))
Esempio n. 6
0
 def create():
     from pyrateoptics.raytracer.surface_shape import Conic
     lc = LocalCoordinates.p(name="global")
     c = Conic.p(lc, curv=0.01, cc=-0.1)
     return c
Esempio n. 7
0
lc1 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf1", decz=10.0),
                                 refname=lc0.name)
lc2 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf2",
                                                    decz=5.0,
                                                    tiltx=10 * math.pi /
                                                    180.0),
                                 refname=lc1.name)
lc3 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="image",
                                                    decz=-5.0,
                                                    tiltx=-10 * math.pi /
                                                    180.0),
                                 refname=lc2.name)

stopsurf = Surface.p(lc0)
frontsurf = Surface.p(lc1,
                      shape=Conic.p(lc1, curv=0),
                      aperture=CircularAperture.p(lc1, maxradius=10.0))
rearsurf = Surface.p(lc2,
                     shape=Conic.p(lc2, curv=0),
                     aperture=CircularAperture.p(lc3, maxradius=10.0))
image = Surface.p(lc3)

elem = OpticalElement.p(lc0, name="crystalelem")

no = 1.5
neo = 1.8

myeps = np.array([[no, 0, 0], [0, no, 0], [0, 0, neo]])

crystal = AnisotropicMaterial.p(lc1, myeps)
Esempio n. 8
0
                                                    decz=5.0,
                                                    tiltx=2.5 * degree),
                                 refname=lc2.name)
lc4 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf4", decz=3.0),
                                 refname=lc3.name)
lc5 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf5", decz=3.0),
                                 refname=lc4.name)
lc6 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf6", decz=2.0),
                                 refname=lc5.name)
lc7 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf7", decz=3.0),
                                 refname=lc6.name)
lc8 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="image", decz=19.0),
                                 refname=lc7.name)

objectsurf = Surface.p(lc0)
surf1 = Surface.p(lc1, shape=Conic.p(lc1, curv=1 / -5.922))
surf2 = Surface.p(lc2, shape=Conic.p(lc2, curv=1 / -3.160))
surf3 = Surface.p(lc3, shape=Conic.p(lc3, curv=1 / 15.884))
surf4 = Surface.p(lc4, shape=Conic.p(lc4, curv=1 / -12.756))
stopsurf = Surface.p(lc5)
surf6 = Surface.p(lc6, shape=Conic.p(lc6, curv=1 / 3.125))
surf7 = Surface.p(lc7, shape=Conic.p(lc7, curv=0.1 * 1 / 1.479))
image = Surface.p(lc8)

elem = OpticalElement.p(lc0, name="lenssystem")

glass = ConstantIndexGlass.p(lc0, n=1.7)
glass2 = ConstantIndexGlass.p(lc0, n=1.5)

elem.addMaterial("glass", glass)
elem.addMaterial("glass2", glass2)
Esempio n. 9
0
 def initShExplicit(self, **kwargs):
     # this function offers the flexibility to use function objects
     # with tunable parameters
     # TODO: implement
     self.__obj.shapeclass = Conic.p(curv=0, cc=0)
Esempio n. 10
0
lc0 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="stop", decz=0.0),
            refname=s.rootcoordinatesystem.name)
lc1 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="surf1", decz=-1.048), refname=lc0.name)
# objectDist
lc2 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="surf2", decz=4.0), refname=lc1.name)
lc3 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="surf3", decz=2.5), refname=lc2.name)
lc4 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="image", decz=97.2), refname=lc3.name)


stopsurf = Surface.p(lc0)
frontsurf = Surface.p(lc1, shape=Conic.p(lc1, curv=1./62.8),
                    aperture=CircularAperture.p(lc1, maxradius=12.7))
cementsurf = Surface.p(lc2, shape=Conic.p(lc2, curv=-1./45.7),
                     aperture=CircularAperture.p(lc2, maxradius=12.7))
rearsurf = Surface.p(lc3, shape=Conic.p(lc3, curv=-1./128.2),
                   aperture=CircularAperture.p(lc3, maxradius=12.7))
image = Surface.p(lc4)


elem = OpticalElement.p(lc0, name="thorlabs_AC_254-100-A")

bk7 = ConstantIndexGlass.p(lc1, n=1.5168)
sf5 = ConstantIndexGlass.p(lc2, n=1.6727)

elem.addMaterial("BK7", bk7)
elem.addMaterial("SF5", sf5)
Esempio n. 11
0
lc0 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="stop", decz=0.0),
                                 refname=s.rootcoordinatesystem.name)
lc1 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf1", decz=-1.048),
                                 refname=lc0.name)
# objectDist
lc2 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf2", decz=4.0),
                                 refname=lc1.name)
lc3 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf3", decz=2.5),
                                 refname=lc2.name)
lc4 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="image", decz=97.2),
                                 refname=lc3.name)

stopsurf = Surface.p(lc0)
frontsurf = Surface.p(lc1,
                      shape=Conic.p(lc1, curv=1. / 62.8),
                      aperture=CircularAperture.p(lc1, maxradius=12.7))
cementsurf = Surface.p(lc2,
                       shape=Conic.p(lc2, curv=-1. / 45.7),
                       aperture=CircularAperture.p(lc2, maxradius=12.7))
rearsurf = Surface.p(lc3,
                     shape=Conic.p(lc3, curv=-1. / 128.2),
                     aperture=CircularAperture.p(lc3, maxradius=12.7))
image = Surface.p(lc4)

elem = OpticalElement.p(lc0, name="thorlabs_AC_254-100-A")

bk7 = ConstantIndexGlass.p(lc1, n=1.5168)
sf5 = ConstantIndexGlass.p(lc2, n=1.6727)

elem.addMaterial("BK7", bk7)
Esempio n. 12
0
            LocalCoordinates.p(name="image1", decz=-50, decy=-15,
                               tiltx=-math.pi/16), refname=lc3.name)
lc5 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="oapara", decz=-100, decy=-35),
            refname=lc4.name)
lc5ap = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="oaparaap", decz=0, decy=35),
            refname=lc5.name)
lc6 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="image2", decz=52.8, tiltx=1*math.pi/32),
            refname=lc5.name)
lc7 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="image3", decz=5), refname=lc6.name)

objectsurf = Surface.p(lc0)
m1surf = Surface.p(lc1, shape=Conic.p(lc1, curv=-0.01))
m2surf = Surface.p(lc2, shape=Conic.p(lc2, curv=0.01))
m3surf = Surface.p(lc3, shape=Conic.p(lc3, curv=-0.006))
image1 = Surface.p(lc4)
oapara = Surface.p(lc3, shape=Conic.p(lc5, curv=0.01, cc=-1.))
image2 = Surface.p(lc6, aperture=CircularAperture.p(lc6, maxradius=20.0))
image3 = Surface.p(lc7, aperture=CircularAperture.p(lc7, maxradius=20.0))


elem = OpticalElement.p(lc0, name="TMA")

elem.addMaterial("air", air)

elem.addSurface("object", objectsurf, (None, None))
elem.addSurface("m1", m1surf, (None, None))
elem.addSurface("m2", m2surf, (None, None))
Esempio n. 13
0
lc5 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="oapara",
                                                    decz=-100,
                                                    decy=-35),
                                 refname=lc4.name)
lc5ap = s.addLocalCoordinateSystem(LocalCoordinates.p(name="oaparaap",
                                                      decz=0,
                                                      decy=35),
                                   refname=lc5.name)
lc6 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="image2",
                                                    decz=55,
                                                    tiltx=1 * math.pi / 32),
                                 refname=lc5.name)

objectsurf = Surface.p(lc0)
m1surf = Surface.p(lc1,
                   shape=Conic.p(lc1, curv=-0.01),
                   aperture=CircularAperture.p(lc1, maxradius=20.))
m2surf = Surface.p(lc2,
                   shape=Conic.p(lc2, curv=0.01),
                   aperture=CircularAperture.p(lc2, maxradius=12.7))
m3surf = Surface.p(lc3,
                   shape=Conic.p(lc3, curv=-0.006),
                   aperture=CircularAperture.p(lc3, maxradius=20.7))
image1 = Surface.p(lc4)
oapara = Surface.p(lc3,
                   shape=Conic.p(lc5, curv=0.01, cc=-1.),
                   aperture=CircularAperture.p(lc5ap, maxradius=30.0))
image2 = Surface.p(lc6, aperture=CircularAperture.p(lc6, maxradius=20.0))

elem = OpticalElement.p(lc0, name="TMA")
Esempio n. 14
0
                                                 (si * 4.529e-12, -2.085)]),
                   aperture=CircularAperture.p(lcS2, maxradius=40.0))
D2Psurf = Surface.p(lcD2prime)
D3surf = Surface.p(lcD3)
S3surf = Surface.p(lcS3,
                   shape=Biconic.p(lcS3,
                                   curvy=si * 1. / 108.187,
                                   curvx=si * 1. / 73.105,
                                   coefficients=[(0., 0.),
                                                 (-si * 5.542e-7, -0.08),
                                                 (-si * 8.176e-11, -1.379)]),
                   aperture=CircularAperture.p(lcS3, maxradius=40.0))
D3Psurf = Surface.p(lcD3prime)
D4surf = Surface.p(lcD4)
S4surf = Surface.p(lcS4,
                   shape=Conic.p(lcS4, curv=1. / 77.772),
                   aperture=CircularAperture.p(lcS4, maxradius=40.0))
D4Psurf = Surface.p(lcD4prime)
imgsurf = Surface.p(lcimage)

elem = OpticalElement.p(lc0, name="HUD")

elem.addMaterial("air", air)
elem.addMaterial("glass", glass)

elem.addSurface("object", objsurf, (None, None))
elem.addSurface("d1", D1surf, (None, None))
elem.addSurface("s1", S1surf, (None, "glass"))
elem.addSurface("d1p", D1Psurf, ("glass", "glass"))
elem.addSurface("d2", D2surf, ("glass", "glass"))
elem.addSurface("s2", S2surf, ("glass", "glass"))
Esempio n. 15
0
    def initDemoSystem(self):
        s = OpticalSystem.p()

        lc0 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="object",
                                                            decz=0.0),
                                         refname=s.rootcoordinatesystem.name)
        lc1 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf1",
                                                            decz=2.0),
                                         refname=lc0.name)  # objectDist
        lc2 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf2",
                                                            decz=3.0),
                                         refname=lc1.name)
        lc3 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf3",
                                                            decz=5.0,
                                                            tiltx=0.0 *
                                                            math.pi / 180.0),
                                         refname=lc2.name)
        lc4 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf4",
                                                            decz=3.0),
                                         refname=lc3.name)
        lc5 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf5",
                                                            decz=3.0),
                                         refname=lc4.name)
        lc6 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf6",
                                                            decz=2.0),
                                         refname=lc5.name)
        lc7 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf7",
                                                            decz=3.0),
                                         refname=lc6.name)
        lc8 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="image",
                                                            decz=19.0),
                                         refname=lc7.name)

        objectsurf = Surface.p(lc0)
        surf1 = Surface.p(lc1,
                          shape=Conic.p(lc1, curv=1 / -5.922),
                          aperture=CircularAperture.p(lc1, maxradius=10.0))
        surf2 = Surface.p(lc2,
                          shape=Conic.p(lc2, curv=1 / -3.160),
                          aperture=CircularAperture.p(lc2, maxradius=10.0))
        surf3 = Surface.p(lc3,
                          shape=Conic.p(lc3, curv=1 / 15.884),
                          aperture=CircularAperture.p(lc3, maxradius=10.0))
        surf4 = Surface.p(lc4,
                          shape=Conic.p(lc4, curv=1 / -12.756),
                          aperture=CircularAperture.p(lc4, maxradius=10.0))
        stopsurf = Surface.p(lc5,
                             aperture=CircularAperture.p(lc5, maxradius=10.0))
        surf6 = Surface.p(lc6,
                          shape=Conic.p(lc6, curv=1 / 3.125),
                          aperture=CircularAperture.p(lc6, maxradius=10.0))
        surf7 = Surface.p(lc7,
                          shape=Conic.p(lc7, curv=1 / 1.479),
                          aperture=CircularAperture.p(lc7, maxradius=10.0))
        image = Surface.p(lc8)

        elem = OpticalElement.p(lc0, name="lenssystem")

        glass = material_isotropic.ConstantIndexGlass.p(lc0, n=1.7)
        glass2 = material_isotropic.ConstantIndexGlass.p(lc0, n=1.5)

        elem.addMaterial("glass", glass)
        elem.addMaterial("glass2", glass2)

        elem.addSurface("object", objectsurf, (None, None))
        elem.addSurface("surf1", surf1, (None, "glass"))
        elem.addSurface("surf2", surf2, ("glass", None))
        elem.addSurface("surf3", surf3, (None, "glass"))
        elem.addSurface("surf4", surf4, ("glass", None))
        elem.addSurface("stop", stopsurf, (None, None))
        elem.addSurface("surf6", surf6, (None, "glass2"))
        elem.addSurface("surf7", surf7, ("glass2", None))
        elem.addSurface("image", image, (None, None))

        for mysurf in elem.surfaces.values():
            print(mysurf.aperture.annotations)

        s.addElement("lenssys", elem)

        return s
Esempio n. 16
0
            LocalCoordinates.p(name="prismcenter", decz=50.0),
            refname=lc0.name)

lc1 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="surf1", decz=-10.0, tiltx=30.*degree),
            refname=lccomprism.name)  # objectDist
lc2 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="surf2", decz=10.0, tiltx=-30.*degree),
            refname=lccomprism.name)
lc3 = s.addLocalCoordinateSystem(
            LocalCoordinates.p(name="image", decz=50.0),
            refname=lccomprism.name)


stopsurf = Surface.p(lc0)
frontsurf = Surface.p(lc1, shape=Conic.p(lc1, curv=0),
                      aperture=CircularAperture.p(lc1,
                                                  maxradius=20.0))
rearsurf = Surface.p(lc2, shape=Conic.p(lc2, curv=0),
                     aperture=CircularAperture.p(lc2,
                                                 maxradius=20.0))
image = Surface.p(lc3)


elem = OpticalElement.p(lc0, name="prism")

glass = ModelGlass.p(lc1)


elem.addMaterial("glass", glass)
Esempio n. 17
0
s = OpticalSystem.p(name='os')

lc0 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="stop", decz=0.0),
                                 refname=s.rootcoordinatesystem.name)
lc1 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf1", decz=-1.048),
                                 refname=lc0.name)  # objectDist
lc2 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf2", decz=4.0),
                                 refname=lc1.name)
lc3 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf3", decz=2.5),
                                 refname=lc2.name)
lc4 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="image", decz=97.2),
                                 refname=lc3.name)

stopsurf = Surface.p(lc0, name="stopsurf")
frontsurf = Surface.p(lc1, name="frontsurf",
                      shape=Conic.p(lc1, curv=1./62.8, name='conic1'),
                      aperture=CircularAperture.p(lc1, maxradius=12.7))
cementsurf = Surface.p(lc2, name="cementsurf",
                       shape=Conic.p(lc2, curv=-1./45.7, name='conic2'),
                       aperture=CircularAperture.p(lc2, maxradius=12.7))
rearsurf = Surface.p(lc3, name="rearsurf",
                     shape=Conic.p(lc3, curv=-1./128.2, name='conic3'),
                     aperture=CircularAperture.p(lc3, maxradius=12.7))
image = Surface.p(lc4, name="imagesurf")

elem = OpticalElement.p(lc0, name="thorlabs_AC_254-100-A")

rnd_data1 = np.random.random((3, 3))  # np.eye(3)
rnd_data2 = np.random.random((3, 3))  # np.zeros((3, 3))#
rnd_data3 = np.random.random((3, 3))  # np.eye(3)
rnd_data4 = np.random.random((3, 3))  # np.zeros((3, 3))#
Esempio n. 18
0
lc1 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf1",
                                                    decz=10.0,
                                                    tiltx=5. * math.pi /
                                                    180.0),
                                 refname=lc0.name)  # objectDist
lc2 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="surf2",
                                                    decz=20.0,
                                                    tiltx=10. * math.pi /
                                                    180.0),
                                 refname=lc1.name)
lc3 = s.addLocalCoordinateSystem(LocalCoordinates.p(name="image", decz=10.0),
                                 refname=lc2.name)

stopsurf = Surface.p(lc0)
surf1 = Surface.p(lc1,
                  shape=Conic.p(lc1, curv=1. / 24.0),
                  aperture=CircularAperture.p(lc1, maxradius=5.0))
surf2 = Surface.p(lc2,
                  shape=Conic.p(lc2, curv=-1. / 24.0),
                  aperture=CircularAperture.p(lc2, maxradius=5.0))
image = Surface.p(lc3)

elem = OpticalElement.p(lc0, name="grinelement")

mysource =\
r"""

import numpy as np

grin_strength = 0.5