Esempio n. 1
0
def test_ne():
    objs = [
        batoid.SimpleCoating(0.0, 1.0),
        batoid.SimpleCoating(0.0, 0.1),
        batoid.SimpleCoating(0.1, 0.1),
        batoid.CoordSys()
    ]
    all_obj_diff(objs)
Esempio n. 2
0
 def __init__(self, *args, **kwargs):
     Interface.__init__(self, *args, **kwargs)
     # self.forwardCoating = batoid.SimpleCoating(reflectivity=0.0, transmissivity=1.0)
     # self.reverseCoating = batoid.SimpleCoating(reflectivity=0.0, transmissivity=1.0)
     self.forwardCoating = batoid.SimpleCoating(reflectivity=0.02,
                                                transmissivity=0.98)
     self.reverseCoating = batoid.SimpleCoating(reflectivity=0.02,
                                                transmissivity=0.98)
Esempio n. 3
0
def test_rSplit():
    rng = np.random.default_rng(5)
    for _ in range(100):
        R = rng.normal(0.7, 0.8)
        conic = rng.uniform(-2.0, 1.0)
        ncoef = rng.integers(0, 5)
        coefs = [rng.normal(0, 1e-10) for i in range(ncoef)]
        asphere = batoid.Asphere(R, conic, coefs)

        theta_x = rng.normal(0.0, 1e-8)
        theta_y = rng.normal(0.0, 1e-8)
        rays = batoid.RayVector.asPolar(
            backDist=10.0, medium=batoid.Air(),
            wavelength=500e-9, outer=0.25*R,
            theta_x=theta_x, theta_y=theta_y,
            nrad=10, naz=10
        )
        coating = batoid.SimpleCoating(0.9, 0.1)
        reflectedRays = asphere.reflect(rays.copy(), coating=coating)
        m1 = batoid.Air()
        m2 = batoid.ConstMedium(1.1)
        refractedRays = asphere.refract(rays.copy(), m1, m2, coating=coating)
        refractedRays2, reflectedRays2 = asphere.rSplit(rays, m1, m2, coating)

        rays_allclose(reflectedRays, reflectedRays2)
        rays_allclose(refractedRays, refractedRays2)
Esempio n. 4
0
def test_SimpleCoating():
    np.random.seed(5)
    for i in range(1000):
        reflectivity = np.random.uniform(0, 1)
        transmissivity = np.random.uniform(0, 1)
        sc = batoid.SimpleCoating(reflectivity, transmissivity)
        assert sc.reflectivity == reflectivity == sc.getReflect(0.1, 0.2) == sc.getReflect(0.3, 0.4)
        assert sc.transmissivity == transmissivity == sc.getTransmit(0.1, 0.2) == sc.getTransmit(0.3, 0.4)
        do_pickle(sc)
Esempio n. 5
0
def test_SimpleCoating():
    rng = np.random.default_rng(5)
    for i in range(1000):
        reflectivity = rng.uniform(0, 1)
        transmissivity = rng.uniform(0, 1)
        sc = batoid.SimpleCoating(reflectivity, transmissivity)
        assert sc.reflectivity == reflectivity == sc.getReflect(
            0.1, 0.2) == sc.getReflect(0.3, 0.4)
        assert sc.transmissivity == transmissivity == sc.getTransmit(
            0.1, 0.2) == sc.getTransmit(0.3, 0.4)
        r, t = sc.getCoefs(0.3, 0.6)
        assert r == reflectivity
        assert t == transmissivity
        do_pickle(sc)
Esempio n. 6
0
def test_reflect():
    rng = np.random.default_rng(577)
    for i in range(1000):
        R = rng.uniform(1.0, 2.0)
        sphere = batoid.Sphere(R)

        reflectivity = rng.uniform(0, 1)
        transmissivity = rng.uniform(0, 1)
        coating = batoid.SimpleCoating(reflectivity, transmissivity)

        rv = batoid.RayVector(0, 0, 10, 0, 0, -1, 0, 500e-9, 1.0)

        sphere.reflect(rv, coating=coating)

        assert (rv.flux[0] == reflectivity)
Esempio n. 7
0
def test_rSplit():
    for i in range(100):
        R = np.random.normal(0.7, 0.8)
        conic = np.random.uniform(-2.0, 1.0)
        ncoef = np.random.randint(0, 4)
        coefs = [np.random.normal(0, 1e-10) for i in range(ncoef)]
        asphere = batoid.Asphere(R, conic, coefs)

        rays = batoid.rayGrid(10, 2*R, 0.0, 0.0, -1.0, 16, 500e-9, 1.0, batoid.Air())
        coating = batoid.SimpleCoating(0.9, 0.1)
        reflectedRays = asphere.reflect(rays, coating)
        m1 = batoid.Air()
        m2 = batoid.ConstMedium(1.1)
        refractedRays = asphere.refract(rays, m1, m2, coating)
        reflectedRays2, refractedRays2 = asphere.rSplit(rays, m1, m2, coating)

        assert reflectedRays == reflectedRays2
        assert refractedRays == refractedRays2
Esempio n. 8
0
def test_refract():
    rng = np.random.default_rng(5772)
    for i in range(1000):
        R = rng.uniform(1.0, 2.0)
        sphere = batoid.Sphere(R)

        reflectivity = rng.uniform(0, 1)
        transmissivity = rng.uniform(0, 1)
        coating = batoid.SimpleCoating(reflectivity, transmissivity)

        m1 = batoid.ConstMedium(rng.uniform(1.1, 1.2))
        m2 = batoid.ConstMedium(rng.uniform(1.2, 1.3))

        rv = batoid.RayVector(0, 0, 10, 0, 0, -1, 0, 500e-9, 1.0)

        sphere.refract(rv, m1, m2, coating=coating)

        assert (rv.flux[0] == transmissivity)
Esempio n. 9
0
import numpy as np
import matplotlib.pyplot as plt

# telescope = batoid.Optic.fromYaml("LSST_g.yaml")
# factor = 0.2/1e-5/3600

telescope = batoid.Optic.fromYaml("HSC.yaml")
factor = 0.168 / 1.5e-5 / 3600

# telescope = batoid.Optic.fromYaml("DECam.yaml")
# factor = 0.27/1.5e-5/3600

# Make refractive interfaces partially reflective
for surface in telescope.itemDict.values():
    if isinstance(surface, batoid.RefractiveInterface):
        surface.forwardCoating = batoid.SimpleCoating(0.02, 0.98)
        surface.reverseCoating = batoid.SimpleCoating(0.02, 0.98)
    if isinstance(surface, batoid.Detector):
        surface.forwardCoating = batoid.SimpleCoating(0.02, 0.98)

angles = np.linspace(0.0, 1.0, 21, endpoint=True)
angles = [0.3]
for angle in angles:
    dirCos = batoid.utils.gnomonicToDirCos(0.0, np.deg2rad(angle))

    rays = batoid.circularGrid(
        telescope.backDist,
        telescope.pupilSize / 2,
        telescope.pupilSize * telescope.pupilObscuration / 2,
        dirCos[0],
        dirCos[1],
Esempio n. 10
0
def test_traceSplit_simple():
    telescope = batoid.CompoundOptic(
        name = "simple",
        stopSurface=batoid.Interface(batoid.Plane()),
        items = [
            batoid.Lens(
                name = "L1",
                items = [
                    batoid.RefractiveInterface(
                        batoid.Plane(),
                        name = "L1_entrance",
                        coordSys=batoid.CoordSys(origin=[0,0,0.3]),
                        inMedium=batoid.ConstMedium(1.0),
                        outMedium=batoid.ConstMedium(1.1)
                    ),
                    batoid.RefractiveInterface(
                        batoid.Plane(),
                        name = "L1_exit",
                        coordSys=batoid.CoordSys(origin=[0,0,0.2]),
                        inMedium=batoid.ConstMedium(1.1),
                        outMedium=batoid.ConstMedium(1.0)
                    )
                ]
            ),
            batoid.Mirror(
                batoid.Plane(),
                name="Mirror"
            ),
            batoid.Detector(
                batoid.Plane(),
                name="detector",
                coordSys=batoid.CoordSys(origin=[0, 0, 0.1])
            )
        ],
        pupilSize=1.0,
        backDist=1.0,
        inMedium=batoid.ConstMedium(1.0)
    )
    telescope['L1_entrance'].forwardCoating = batoid.SimpleCoating(0.02, 0.98)
    telescope['L1_entrance'].reverseCoating = batoid.SimpleCoating(0.02, 0.98)
    telescope['L1_exit'].forwardCoating = batoid.SimpleCoating(0.02, 0.98)
    telescope['L1_exit'].reverseCoating = batoid.SimpleCoating(0.02, 0.98)
    telescope['detector'].forwardCoating = batoid.SimpleCoating(0.02, 0.98)
    rays = batoid.RayVector.asPolar(
        telescope,
        wavelength=500e-9,
        theta_x=np.deg2rad(1.0),
        theta_y=0.0,
        nrad=10, naz=60
    )
    rForward, rReverse = telescope.traceSplit(rays.copy(), minFlux=1e-4)

    for r in rForward:
        r2 = telescope.trace(rays.copy(), path=r.path)
        w = ~r2.vignetted
        np.testing.assert_allclose(r.r, r2.r[w])
        np.testing.assert_allclose(r.v, r2.v[w])
        np.testing.assert_allclose(r.t, r2.t[w])

        tf = telescope.traceFull(rays.copy(), path=r.path)
        keys = []
        for item in r.path:
            j = 0
            key = f"{item}_{j}"
            while key in keys:
                j += 1
                key = f"{item}_{j}"
            keys.append(key)
        assert keys == [k for k in tf.keys()]

        r3 = tf[keys[-1]]['out']
        w = ~r3.vignetted
        np.testing.assert_allclose(r.r, r3.r[w])
        np.testing.assert_allclose(r.v, r3.v[w])
        np.testing.assert_allclose(r.t, r3.t[w])

    for r in rReverse:
        r2 = telescope.trace(rays.copy(), path=r.path)
        w = ~r2.vignetted
        np.testing.assert_allclose(r.r, r2.r[w])
        np.testing.assert_allclose(r.v, r2.v[w])
        np.testing.assert_allclose(r.t, r2.t[w])

        tf = telescope.traceFull(rays.copy(), path=r.path)
        keys = []
        for item in r.path:
            j = 0
            key = f"{item}_{j}"
            while key in keys:
                j += 1
                key = f"{item}_{j}"
            keys.append(key)
        assert keys == [k for k in tf.keys()]

        r3 = tf[keys[-1]]['out']
        w = ~r3.vignetted
        np.testing.assert_allclose(r.r, r3.r[w])
        np.testing.assert_allclose(r.v, r3.v[w])
        np.testing.assert_allclose(r.t, r3.t[w])
Esempio n. 11
0
def test_traceSplit():
    optics = [
        batoid.Optic.fromYaml("DECam.yaml"),
        batoid.Optic.fromYaml("HSC.yaml"),
        batoid.Optic.fromYaml("LSST_r.yaml"),
        batoid.Optic.fromYaml("DESI.yaml"),
    ]
    minFlux = 1e-4
    if __name__ != '__main__':
        optics = optics[0:1]
        minFlux = 1e-3

    for optic in optics:
        # Make refractive interfaces partially reflective
        for surface in optic.itemDict.values():
            if isinstance(surface, batoid.RefractiveInterface):
                surface.forwardCoating = batoid.SimpleCoating(0.02, 0.98)
                surface.reverseCoating = batoid.SimpleCoating(0.02, 0.98)
            if isinstance(surface, batoid.Detector):
                surface.forwardCoating = batoid.SimpleCoating(0.02, 0.98)
        rays = batoid.RayVector.asPolar(
            optic,
            wavelength=620e-9,
            theta_x=np.deg2rad(0.1), theta_y=0.0,
            nrad=15, naz=90,
        )
        rForward, rReverse = optic.traceSplit(rays.copy(), minFlux=minFlux)

        for r in rForward:
            r2 = optic.trace(rays.copy(), path=r.path)
            w = ~r2.vignetted
            np.testing.assert_allclose(r.r, r2.r[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.v, r2.v[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.t, r2.t[w], atol=1e-12, rtol=0)

            tf = optic.traceFull(rays.copy(), path=r.path)
            keys = []
            for item in r.path:
                j = 0
                key = f"{item}_{j}"
                while key in keys:
                    j += 1
                    key = f"{item}_{j}"
                keys.append(key)
            assert keys == [k for k in tf.keys()]

            r3 = tf[keys[-1]]['out']
            w = ~r3.vignetted
            np.testing.assert_allclose(r.r, r3.r[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.v, r3.v[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.t, r3.t[w], atol=1e-12, rtol=0)

        for r in rReverse:
            r2 = optic.trace(rays.copy(), path=r.path)
            w = ~r2.vignetted
            np.testing.assert_allclose(r.r, r2.r[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.v, r2.v[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.t, r2.t[w], atol=1e-12, rtol=0)

            tf = optic.traceFull(rays.copy(), path=r.path)
            keys = []
            for item in r.path:
                j = 0
                key = f"{item}_{j}"
                while key in keys:
                    j += 1
                    key = f"{item}_{j}"
                keys.append(key)
            assert keys == [k for k in tf.keys()]

            r3 = tf[keys[-1]]['out']
            w = ~r3.vignetted
            np.testing.assert_allclose(r.r, r3.r[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.v, r3.v[w], atol=1e-12, rtol=0)
            np.testing.assert_allclose(r.t, r3.t[w], atol=1e-12, rtol=0)