Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理

图片

附件下载

联系工作人员获取附件

这篇文章会说明如何在 MATLAB 或 Python 中以 Zemax OpticStudio 应用程式介面 (ZOS-API)处理光线数据库(Ray Database, ZRD)档案,过程中我们将使用ZRDLoader.dll。本文提供了在 Matlab 中批次处理序列光线追迹(一般、归一化、偏振或非偏振),以及在 Matlab 和 Python 中使用方法 ReadNextSegmentFull() 批次处理非序列 ZRD 档案的范例。

什么是 RayTrace.dll?

RayTrace.dll 结合了 ZRDLoader.dll 和 ReadNextSegmentFull,并在序列模式中与4个 IBatchRayTrace 介面共同运作。此外,RayTrace.dll 这个动态连结函式库涵盖了以下的介面,并且继承了 ZOSAPI.Tools.RayTrace 的命名空间:

  • IRayTraceDirectPolData (sequential):
    在这个介面中,我们可以直接在 XYZ 座标中完成批次的偏振光线追迹,而这也和 DDE 光线追迹指令(模式3)十分相似。此外,该介面属于 IBatchRayTrace 介面的一种。

  • IRayTraceDirectUnpolData (sequential):

    在这个介面中,我们可以在 XYZ 坐标中完成批次的非偏振光线追迹,而这与 DDE 光线追迹指令(模式1)相似。此外,该介面也同样属于 IBatchRayTrace 介面的一种。

  • IRayTraceNormPolData (sequential):
    在这个介面中,我們可以使用归一化光瞳坐标(normalized pupil coordinate)进行批次偏振光线追迹,这个 DDE 光线追迹指令(模式2)相似。此外,这介面也同样属于 IBatchRayTrace 介面的一种。

  • IRayTraceNormUnpolData (sequential):
    在这个介面中,我们可以使用归一化光瞳坐标进行批次非偏振光线追迹,这与 DDE 光线追迹指令(模式0)相似。

  • IZRDReader (non-sequential):
    我们使用这个介面在 Matlab 中設定 RayDatabaseReader 並使其运作,同時读取 C#dll 中每一个区段(segment)的值。

这个 DLL  的设计是为了使光线或区段的原始值(raw value)可以作为宣告物件的属性,而被传递到 MATLAB 或 Python,因此 DLL 运作的过程中不会涉及任何的计算、合并和分析。这个 DLL 的主要目的是为了減少 MATLAB 或 Python 中十分耗时的 for 回圈,將原先效率极低的程式转为原生且编译完成的 C# 程式码。接著,当原始值经过所有回圈后,C# 程式码会将数值回传到  MATLAB 或 Python 进行最后的处理。

在序列模式的介面中有两种情況会需要 for 回圈的协助: AddRays()和ReadNextResults(),分別用来增加光线和读取数据。为了提高效率,我们会以 DLL 达成这两项任务。文章附件的其中两个范例示范了如何在序列模式中高效率的产生方形网格或低量化误差的光线 (dithered rays)。根据预期达成的光线模式(若与预设模式不同的话),我们可以在 MATLAB 中使用原生阵列索引 (native array indexing)的方式增加 DLL 中的光线,这与原本的方法是十分相似的。无论是在ReadNextResult()或 ReadNextResultFull(),最终回传到 MATLAB 或 Python 中的结果均会与该介面最复杂輸出(verbose output)有着相同的物件属性,包含了正确的相位和相对应的案例。为了提高效率,我们会试着以 MATLAB 的阵列索引(array indexing)取代 for 或 while 回圈的使用。

DLL 使用范例

我们使用三个基础和三个进阶范例示范如何在一般序列模式(sequential direct)、归一化序列模式(sequential normalized)和非序列 ZRD 光线追迹的情況下使用RayTrace.dll。这些示范档案都可以直接下载并使用,不需要对程式码进行任何更改。要注意的是,RayTrace.dll  必须被存放在和其他 MATLAB 或Python 脚本(script)相同的资料夹中,才能确保使用时能被顺利的呼叫。产生每个 DLL 所使用的 C# 原始码以及 Visual Studio 的解都可以在下方的文章中找到。

基本范例

  • MATLAB_BatchRayTrace_Direct.m – (SEQ Direct).
    这个范例使用了 IRayTraceDirectUnpolData 介面。此外,它还同时使用了RayTrace.dll (DirectUnpol.cs) 中的 ReadDirectUnpolData 函数。范例中,系统追迹了特定透镜表面的光迹图(footprint diagram),同时绘出系统的净口径 (Clear Semi-Diameter)和机械半直径 (Mechanical Semi-Diameter)。

    图片

  • MATLAB_BatchRayTrace_Normalized.m – (SEQ Norm).
    这个范例使用了 IRayTraceNormUnpolData 介面,而该介面还包含了RayTrace.dll (NormUnpol.cs) 中的 ReadNormUnpolData 函数。范例中,系统以超过10,000条光线追迹一個方形图案投射至像面的结果。设定上只使用了单一视场,且整个过程耗时不到一秒。

    图片

  • MATLAB_ZRDLoaderFull.m or PythonNET_ZRDLoaderFull.py – (NSC ZRD)
    这个范例使用了 IZRDReader 介面,且同時使用了RayTrace.dll (ZRDLoaderFull.cs)中的 ReadZRDData 函数。范例中,系统解析了 ZRD 档案并决定了特定探测器上接收到的总能量。

    图片

进阶范例

  • MATLAB_BatchRayTrace_Surface_AOI.m – (SEQ Direct).
    这个范例使用了 IRayTraceDirectUnpolData 介面,且同時使用了RayTrace.dll (DirectUnpol.cs)的ReadDirectUnpolData 函数。范例中,系统追迹了光线网格投射至一个特定表面的结果。过程中使用了 LMN 方向的 cosine 向量和 Nxyz 法向量计算光线在表面上每个 XY 点的入射角。

    图片

  • MATLAB_BatchRayTrace_Ex22_Performance_Comparison.m – (SEQ Norm).
    这个范例使用了 IRayTraceNormUnpolData 介面,同时还使用了RayTrace.dll (NormUnpol.cs)的ReadNormUnpolData 函数。范例中,系统使用低量化误差光线图型(dithered ray pattern) 绘制了整个视场的点列图(spot diagram)。模拟过程中,系统可以在一秒內追迹10,000条光线。相同情況下,若使用原生 MATLAB 的 for 回圈,绘制961条光线将耗时超过4秒。根据电脑的性能差异,使用 DLL 最高可将运算过程加速为原先的40倍。

    图片

  • MATLAB_ZRD_Pixelated_Detector_xybin.m – (NSC ZRD).
    这个范例使用了IZRDReader介面,同時也使用了RayTrace.dll (ZRDLoaderFull.cs)的 ReadZRDData 函数。范例中的系统有矩形光源、矩形探测器,以及一个由 “LETTERF.BMP”产生的幻燈片(Slide) 物件,最后在探测器上显现出图型 “F”。接着,我们使用 ZRD 档案中的“xybin”将每个像素的光通量加总,重新在 ZRD 档案中产生一个新的探测器结果。这样的做法可使我们免于使用探测器查看器(Detector Viewer)的分析功能,直接在 MATLAB 中看到结果。

图片

疑难排解

若是使用了范例提供的 Visual Studio 解,但却在编译的过程中出现错误的话,请先照着以下步骤操作以确保 ZOSAPI  和 ZOSAPI_Interfaces 的来源(Reference)是正确的。我們可以打开 Solution Explorer,并点选 References。假如这时 ZOSAPI  和 ZOSAPI_Interfaces  旁边出现黃色的警示标语,你将会需要进行以下操作:

  • 移除现有的 references (滑鼠右键>移除(Remove))

  • 右键选取 Reference 并选择 Add References

  • 点选 Browse 并找到 OpticStudio 的安装资料夹

  • 以快捷键 Shift+Click 选择 ZOSAPI 和 ZOSAPI_Interfaces,接着点选 Add

  • 点选 OK 加入新的解

  • 选取所有的 references,打开 Properties 接着将 Copy Local 由True 改为 False

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/489079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python知识点总结(九)

python知识点总结九 1、TCP中socket的实现代码实现TCP协议a、服务端b、客户端: 2、写装饰器,限制函数被执行的频率,如10秒一次3、请实现一个装饰器,通过一次调用函数重复执行5次4、写一个登录装饰器对一下函数进行装饰&#xff0c…

ChatGPT-PDF辅助读论文,实现用gpt对pdf 解析(开源)

文章目录 思路接口代码上传代码pdf转文本代码综合上述步骤完整代码效果 思路 主要为开发者提供一个思路,这里并不是完整的商业项目,只是一时兴起写的一份demo,希望对大家有帮助。 制作一个接口用于上传文件写一个程序把文件上传到上面的接口中对得到的…

深入了解 Vue 3:性能与可用性的巨大提升

摘要:本文深入探讨了 Vue 3 相对于 Vue 2 在性能和可用性方面的重大改进,特别关注了虚拟 DOM 模块的重构(静态提升)、基于 Proxy 的响应式对象、事件缓存、更好的 Tree Shaking 支持、TypeScript 和 Monorepo 代码组织&#xff0c…

合辑下载 | MatrixOne 与 MySQL 全面对比

前言 MatrixOne是一款高度兼容MySQL语法的HTAP数据库,采用云原生化和存储、计算、事务分离的架构打造了HSTAP超融合数据引擎,实现单一数据库系统同时支持OLTP、OLAP、流计算等多种业务负载。基于MatrixOne高度兼容MySQL的定位,社区的小伙伴在…

使用 NocoDB 一键将各种数据库转换为智能表格

NocoDB 是一款开源的无代码数据库平台,可以进行数据管理和应用开发。它的灵感来自 Airtable,支持与 Airtable 类似的电子表格式交互、关系型数据库 Schema 设计、API 自动生成等特性。 但与 Airtable 相比,NocoDB 完全免费且代码开源&#xf…

柯桥专业会计培训|会计实操做账手工账电脑账出纳报税手把手教

开具纸质发票时,经常有小伙伴纠结发票开票人和复核人的问题。现在全国已施行数电票,这个问题还存在吗?一起来看看~ 暂未规定!! 开票人和复核人不应为同一人! 目前,全国大部分城市已基本实现数电票的开票试点&#x…

KIOXIA铠侠CM7系列E3.S双端口NVMe2.0 PCIe5.0 SSD KCM71RJE7T68

KIOXIA 铠侠推出的CM7-R E3.S企业级NVMe读密集型企业级固态硬盘,采用PCIe 5.0和NVMe 2.0技术,性能出色,最高可达2,700K IOPS(随机读取)和310K IOPS(随机写入)1 DWPD的耐用性和高达15.36 TB的存储…

ReactNative项目构建分析与思考之RN组件化

传统RN项目对比 ReactNative项目构建分析与思考之react-native-gradle-plugin ReactNative项目构建分析与思考之native_modules.gradle ReactNative项目构建分析与思考之 cli-config 在之前的文章中,已经对RN的默认项目有了一个详细的分析,下面我们来…

vue-office/docx插件实现docx文件预览

1.下包 //预览docx文件 npm install vue-office/docx vue-demi//如果是vue2.6版本或以下还需要额外安装 vue/composition-api2.引入 <template><div>//在src填入文档地址<VueOfficeDocx srchttp://...../xx.docx style"width:80%" rendered"re…

yarn按包的时候报错 ../../../package.json: No license field

运行 yarn config list 然后运行 yarn config set strict-ssl false 之后yarn就成功了

基于ssm学校运动会信息管理系统论文

摘 要 在当今社会上&#xff0c;体育运动越来越普及&#xff0c;参与运动会的人越来越多&#xff0c;但是目前对运动会信息管理还是处于手工记录的时代&#xff0c;这远远满足不了现在用户需求&#xff0c;因此建立一个运动会信息管理系统已经变的非常重要。 本文重点阐述了学…

Midjourney 换脸大法:保姆级教学

元宇宙和人工智能的不断发展使得真实世界和虚拟世界的边界越来越模糊。本文将介绍如何借助 Midjourney 和另一个第三方插件 InsightFace&#xff0c;来实现令人惊叹的换脸效果。 InsightFace 简介 InsightFace 是由中科院研究人员开发的开源 2D 和 3D 深度人脸识别框架。它使用…

latex下载与安装

用jupyter导出pdf时&#xff0c;需要用到Tex 1.Tex下载安装 官网 直接git下载 git clone https://github.com/latex3/latex2e.git 或者 清华大学开源软件镜像 双击.bat文件 大概需要1-2小时&#xff0c;如果安装失败&#xff0c;重新进行安装 查看是否安装成功&#xff…

男青年穿什么裤子好看?适合男生穿的百搭神裤

这几年衣服的款式可谓是越来越多了&#xff0c;很多男生在选裤子的时候都发现虽然款式越来越多&#xff0c;但现在市面上的裤子质量参差不齐&#xff0c;导致难以选择。而且还有很多商家为了利润采用低廉的材料&#xff0c;从而上身舒适性极差。 那么今天就给大家详细介绍几点…

『VUE』01. 开发前的准备(详细图文注释)

目录 nodejs安装软件检查环境变量设置镜像源 安装vue环境并搭建项目全局安装 Vue 的命令行工具&#xff08;Vue CLI&#xff09;验证安装是否成功创建新vue项目 启动vue项目进入项目根目录安装依赖启动项目 配置开发ide (vscode)安装vscode配置vue插件vue2与vue3兼容性插件js插…

10款AI写作软件,提升写作效率的武器

当今社会&#xff0c;随着人工智能技术的不断发展&#xff0c;AI写作软件正逐渐成为提升写作效率的利器。无论是从学术论文到商业文案&#xff0c;AI写作软件都为各行各业的写作者提供了强大的支持和帮助。在本文中&#xff0c;我们将探讨10款AI写作软件&#xff0c;这些工具不…

plt实现色系反转

例如我们用的色系是jet&#xff1a; import numpy as np import matplotlib.pylab as pltdef custom_min_max_scaling(data):# 计算每列的最小值和最大值min_vals np.min(data)max_vals np.max(data)# 最大最小归一化计算公式normalized_data (data - min_vals) / (max_val…

力扣由浅至深 每日一题.15 删除排序链表中的重复元素

没关系的&#xff0c;昨天的暴雨不会淋湿今天的自己 —— 24.3.26 删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出…

香港云服务器推荐2024

香港云服务器推荐 2024 。至于为什么众多类型的海外服务器当中&#xff0c;香港服务器成为了首选&#xff0c;主要是因为大家考虑的还是以访问速度为前提&#xff0c;相对于美国服务器要快许多。而新加坡、日本空间则在两者之间。 “预算不够&#xff0c;服务器到底购买哪个更…

花钱买不到系列-linux信号[2]卷

上一篇信号&#xff0c;我们知道了&#xff0c;进程需要保存信号&#xff0c;信号究竟是什么&#xff1f;什么又叫做发送信号呢&#xff1f;什么又叫做进程保存信号呢&#xff1f;那么&#xff0c;实际上呢&#xff1f;给大家一个基本的思考切入点&#xff0c;就是我们常见的信…