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)
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)
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)
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)
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)
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)
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
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)
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],
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])
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)