def get_rays_dict(self): rays_list = [] if (type(self.rays) == list): for line in range(len(self.rays)): dummy_dict = {} for i in range(len(self.ray_order)): value = self.get_rayval(self.ray_order[i], line) name = self.ray_order[i] if not isinstance(value, str): dummy_dict[name] = value elif name == "raster": if (value == "RectGrid"): dummy_dict[name] = raster.RectGrid() rays_list.append(dummy_dict) else: for i in range(len(self.ray_order)): value = self.get_rayval_tupel(self.ray_order[i]) name = self.ray_order[i] if not isinstance(value, str): dummy_dict[name] = value elif name == "raster": if (value == "RectGrid"): dummy_dict[name] = raster.RectGrid() rays_list.append(dummy_dict) return rays_list
def plotSpotDia(osa, numrays, rays_dict, wavelength): #Set defaults for dictionary rays_dict.setdefault("startx", [0]) rays_dict.setdefault("starty", [0]) rays_dict.setdefault("startz", [-7]) rays_dict.setdefault("angley", [0]) rays_dict.setdefault("anglex", [0]) rays_dict.setdefault("rasterobj", raster.RectGrid()) rays_dict.setdefault("radius", [15]) #Iterate over all entries for i in rays_dict["startx"]: for j in rays_dict["starty"]: for k in rays_dict["startz"]: for l in rays_dict["angley"]: for m in rays_dict["anglex"]: for n in rays_dict["radius"]: #Setup dict for current Bundle bundle_dict = { "startx": i, "starty": j, "startz": k, "angley": l, "anglex": m, "radius": n, "rasterobj": rays_dict["rasterobj"] } for o in wavelength: osa.aim(numrays, bundle_dict, wave=o) osa.drawSpotDiagram()
def mytiming(): if sys.version_info.major >= 3: return time.perf_counter() else: return time.clock() nrays = 100000 nrays_draw = 21 osa = OpticalSystemAnalysis(s, seq, name="Analysis") (x0, k0, E0) = osa.divergent_bundle(nrays, { "radius": 10. * degree, "raster": raster.RectGrid() }) t0 = mytiming() initialraybundle = RayBundle(x0=x0, k0=k0, Efield0=E0) t1 = mytiming() raypath = s.seqtrace(initialraybundle, seq) t2 = mytiming() logging.info("benchmark : " + str(t2 - t1) + " 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) / (t2 - t1)))) + " ray-surface-operations per second") # plot
if s is None: 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()
nrays = 100000 nrays_draw = 21 # benchmark # definition of rays #nray = 1E5 # number of rays #aimy = aim.aimFiniteByMakingASurfaceTheStop(s, pupilType=pupil.ObjectSpaceNA, #.StopDiameter, # pupilSizeParameter=0.2,#3.0, # fieldType= field.ObjectHeight, # rasterType= raster.RectGrid, # nray=nray, wavelength=wavelength, stopPosition=5) #initialBundle = aimy.getInitialRayBundle(s, fieldXY=np.array([0, 0]), wavelength=wavelength) #nray = len(initialBundle.o[0, :]) (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())