s.addElement("droplet", elem) sysseq = [("droplet", [ ("stop", {"is_stop": True}), ("surf1", {}), ("surf2", {"is_mirror": True}), ("surf4", {}), ("image", {})])] raysdict = { "radius": dropletradius*0.05, "starty": dropletradius*0.9, "anglex": -12.*degree, "raster": raster.MeridionalFan() } r_red = raytrace(s, sysseq, 11, raysdict, wave=wave_red)[0] r_blue = raytrace(s, sysseq, 11, raysdict, wave=wave_blue)[0] draw(s, [(r_red, "red"), (r_blue, "blue")]) system_dump = Serializer(s).serialization system_gui_toplevel = UIInterfaceClassWithOptimizableVariables( s.elements["droplet"].surfaces["surf4"].shape).query_for_dictionary() #pprint(system_gui_toplevel) #pprint(system_dump) fp = open("rainbow.yaml", "wt")
# myeps1 = rnd_data1 + complex(0, 1)*rnd_data2 # myeps2 = rnd_data3 + complex(0, 1)*rnd_data4 crystal1 = AnisotropicMaterial(lc1, myeps1, name="crystal1") crystal2 = AnisotropicMaterial(lc2, myeps2, name="crystal2") elem.addMaterial("crystal1", crystal1) elem.addMaterial("crystal2", crystal2) elem.addSurface("stop", stopsurf, (None, None)) elem.addSurface("front", frontsurf, (None, "crystal1")) elem.addSurface("cement", cementsurf, ("crystal1", "crystal2")) elem.addSurface("rear", rearsurf, ("crystal2", None)) elem.addSurface("image", image, (None, None)) s.addElement("AC254-100", elem) sysseq = [("AC254-100", [("stop", {}), ("front", {}), ("cement", {}), ("rear", {}), ("image", {})])] osa = OpticalSystemAnalysis(s, sysseq, name="Analysis") osa.aim(11, {"radius": 11.43, "startz": -5., "raster": raster.MeridionalFan()}, bundletype="collimated", wave=wavelength) r2 = osa.trace(splitup=True)[0] draw(s, [(r2[0], "blue"), (r2[1], "green")], interactive=True, show_box=False, figsize=None, export=None)
file_to_read = sys.argv[1] enpd = float(sys.argv[2]) num_rays = int(sys.argv[3]) p = ZMXParser(file_to_read, name='ZMXParser') lctmp = LocalCoordinates("tmp") #matdict = {} matdict = {"BK7":ConstantIndexGlass(lctmp, 1.5168)} #matdict = {"LAFN21":ConstantIndexGlass(lctmp, 1.788), "SF53":ConstantIndexGlass(lctmp, 1.72)} (s, seq) = p.createOpticalSystem(matdict) rstobj = raster.MeridionalFan() (px, py) = rstobj.getGrid(num_rays) rpup = enpd*0.5 #7.5 o = np.vstack((rpup*px, rpup*py, -5.*np.ones_like(px))) k = np.zeros_like(o) k[1,:] = math.sin(0.0) k[2,:] = math.cos(0.0) ey = np.zeros_like(o) ey[1,:] = 1. E0 = np.cross(k, ey, axisa=0, axisb=0).T initialbundle = RayBundle(x0=o, k0=k, Efield0=E0, wave=standard_wavelength)
(x0, k0, E0) = collimated_bundle(nrays, -5., 0., 1., raster.RectGrid()) t0 = time.clock() initialraybundle = RayBundle(x0=x0, k0=k0, Efield0=E0) raypath = s.seqtrace(initialraybundle, seq) logging.info("benchmark : " + str(time.clock() - t0) + "s for tracing " + str(nrays) + " rays through " + str(len(s.elements["stdelem"].surfaces) - 1) + " surfaces.") logging.info(" That is " + str( int( round(nrays * (len(s.elements["stdelem"].surfaces) - 1) / (time.clock() - t0)))) + "ray-surface-operations per second") # plot (x0_draw, k0_draw, E0_draw) = collimated_bundle(nrays_draw, -5., 0., 1., raster.MeridionalFan()) initialraybundle_draw = RayBundle(x0=x0_draw, k0=k0_draw, Efield0=E0_draw) raypath_draw = s.seqtrace(initialraybundle_draw, seq) fig = plt.figure(1) ax = fig.add_subplot(111) ax.axis('equal') if StrictVersion(matplotlib.__version__) < StrictVersion('2.0.0'): ax.set_axis_bgcolor('white') else: ax.set_facecolor('white') phi = 0. #math.pi/4 pn = np.array([math.cos(phi), 0, math.sin(phi)]) # canonical_ex up = canonical_ey
sys.exit() initialbundles_dict = p.create_initial_bundle() osa = OpticalSystemAnalysis(s, seq, name="Analysis") ray_paths = [] if initialbundles_dict == []: initialbundles_dict = [{"radius": enpd * 0.5}] for d in initialbundles_dict: if show_spot: d["raster"] = raster.RectGrid() osa.aim(num_rays * num_rays, d, wave=standard_wavelength) osa.draw_spotdiagram() else: d["raster"] = raster.MeridionalFan() d["anglex"] = anglex osa.aim(num_rays, d, wave=standard_wavelength) ray_paths.append(osa.trace()[0]) if not show_spot: draw(s, ray_paths, do_not_draw_surfaces=surfaces_do_not_draw, do_not_draw_raybundles=raybundles_do_not_draw) else: plt.show() osa.prettyprint()
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) elem.addSurface("stop", stopsurf, (None, None)) elem.addSurface("front", frontsurf, (None, "BK7")) elem.addSurface("cement", cementsurf, ("BK7", "SF5")) elem.addSurface("rear", rearsurf, ("SF5", None)) elem.addSurface("image", image, (None, None)) s.addElement("AC254-100", elem) sysseq = [("AC254-100", [ ("stop", {"is_stop": True}), ("front", {}), ("cement", {}), ("rear", {}), ("image", {})])] r2 = raytrace(s, sysseq, 20, {"startz": -5, "radius": 11.43, "raster": raster.MeridionalFan()}, wave=wavelength)[0] draw(s, (r2, "blue"))
stopsurf = Surface(lc0) frontsurf = Surface(lc1, shape=surfShape.Conic(lc1, curv=1./62.8), apert=CircularAperture(lc1, 12.7)) cementsurf = Surface(lc2, shape=surfShape.Conic(lc2, curv=-1./45.7), apert=CircularAperture(lc2, 12.7)) rearsurf = Surface(lc3, shape=surfShape.Conic(lc3, curv=-1./128.2), apert=CircularAperture(lc3, 12.7)) image = Surface(lc4) elem = OpticalElement(lc0, name="thorlabs_AC_254-100-A") bk7 = ConstantIndexGlass(lc1, n=1.5168) sf5 = ConstantIndexGlass(lc2, n=1.6727) elem.addMaterial("BK7", bk7) elem.addMaterial("SF5", sf5) elem.addSurface("stop", stopsurf, (None, None)) elem.addSurface("front", frontsurf, (None, "BK7")) elem.addSurface("cement", cementsurf, ("BK7", "SF5")) elem.addSurface("rear", rearsurf, ("SF5", None)) elem.addSurface("image", image, (None, None)) s.addElement("AC254-100", elem) sysseq = [("AC254-100", [("stop", {"is_stop":True}), ("front", {}), ("cement", {}), ("rear", {}), ("image", {})])] r2 = raytrace(s, sysseq, 20, {"startz": -5, "radius": 11.43, "raster": raster.MeridionalFan()}, wave=wavelength)[0] draw(s, (r2, "blue"))
image = Surface(lc3) elem = OpticalElement(lc0, name="crystalelem") no = 1.5 neo = 1.8 myeps = np.array([[no, 0, 0], [0, no, 0], [0, 0, neo]]) crystal = AnisotropicMaterial(lc1, myeps) elem.addMaterial("crystal", crystal) elem.addSurface("stop", stopsurf, (None, None)) elem.addSurface("front", frontsurf, (None, "crystal")) elem.addSurface("rear", rearsurf, ("crystal", "crystal")) elem.addSurface("image", image, ("crystal", None)) s.addElement("crystalelem", elem) sysseq = [("crystalelem", [("stop", {}), ("front", {}), ("rear", { "is_mirror": True }), ("image", {})])] rays = raytrace(s, sysseq, 10,\ {"radius":20*degree, "startz":-5., "raster":raster.MeridionalFan()},\ bundletype="divergent", traceoptions={"splitup":True}, wave=wavelength) draw(s, rays)
sysseq = [("TMA", [ ("object", {}), ("m1", {"is_mirror": True}), ("m2", {"is_stop": True, "is_mirror": True}), ("m3", {"is_mirror": True}), ("image1", {}), ("oapara", {"is_mirror": True}), ("image2", {}), ("image3", {}) ] ) ] a = Aimy(s, sysseq, name="Aimy", stopsize=2., num_pupil_points=5) a.pupil_raster = raster.MeridionalFan() def correctKRayBundle(bundle): """ Should get correct k from raybundle. """ pass initbundle1 = a.aim(np.array([0, 0])) initbundle2 = a.aim(np.array([0, 0.5*degree])) initbundle3 = a.aim(np.array([0, -0.5*degree])) (pp1, r1p) = s.para_seqtrace(a.pilotbundle, initbundle1, sysseq) (pp2, r2p) = s.para_seqtrace(a.pilotbundle, initbundle2, sysseq)
#grinmaterial = ConstantIndexGlass(lc1, 1.0 + grin_strength) grinmaterial = IsotropicGrinMaterial(lc1, nfunc, dndx, dndy, dndz, parameterlist=[("n0", 0.5)]) grinmaterial.ds = 0.05 grinmaterial.energyviolation = 0.01 grinmaterial.boundaryfunction = bnd elem.addMaterial("grin", grinmaterial) elem.addSurface("object", stopsurf, (None, None)) elem.addSurface("surf1", surf1, (None, "grin")) elem.addSurface("surf2", surf2, ("grin", None)) elem.addSurface("image", image, (None, None)) s.addElement("grinelement", elem) sysseq = [("grinelement", [("object", { "is_stop": True }), ("surf1", {}), ("surf2", {}), ("image", {})])] r2 = raytrace(s, sysseq, 21,\ {"startz": -5., "radius": 2.5, "raster": raster.MeridionalFan()},\ wave=wavelength) draw(s, r2)