当前位置: 首页 > news >正文

Ansys Zemax / SPEOS | 光源文件转换器

本文解释了如何在 SPEOS 与 Zemax 之间转换二进制光源文件。

下载

联系工作人员获取附件

简介

在本文中,为用户提供了一组Python代码,用于在Zemax和SPEOS之间转换源文件。

有些光源,如 .IES 文件,可在 SPEOS 和 Zemax 中进行载入和读取。然而,IES 源文件只包含角数据,只有当光学系统位于光源远场时才适用。如果我们想要在光源文件中包含位置数据,则对应的光源文件格式在 SPEOS 和 Zemax 中是不同的。在 SPEOS 中,对应文件为 .RAY 文件;在Zemax中,有两种对应文件格式,即 .DAT(单色)和 .SDF(多色)。

在第一部分中,我们描述了 Zemax 与 SPEOS 分别使用的光源文件格式。

在第二部分中,我们描述了如何使用文章中所提供的的 Python 代码将 Zemax 光源转换为 SPEOS 光源,所使用的示例光学文件为 rayfile_LCB_G6SP_100k_20210701_Zemax.dat。

在第三部分中,我们描述了如何使用文章中所提供的的 Python 代码将 SPEOS 光源转换为 Zemax 光源,所使用的示例光学文件为 rayfile_LCB_G6SP_100k_20210701_Speos.ray。

SPEOS 以及 ZEMAX 光源文件格式

在本章节中,介绍了 Zemax 和 SPEOS 的光源文件格式。但这并不是本文的主要目的,但用户可以按照这里描述的定义创建自己的 SPEOS 或 Zemax 光源文件。

.RAY、.SDF 和 .DAT 的文件格式都是以二进制形式定义的。二进制光源文件包含一个数据头结构,然后是每条光线的数据。SPEOS 和 Zemax 光源文件包含不同的数据标题信息,光线数据也将按照不同的顺序定义。

1.1 SPEOS 光源文件格式

SPEOS 光源文件数据标题结构将包含 28 字节,即 7 个双精度数值,分别表示如下内容:

1:辐射功率 

2、3、4、5、6:定义光线文件的版本

7:光度学功率

在文件数据标题之后定义了每条光线的数据,每条光线将包含 8 个双精度数据:

  • X

  • Wavelength 

  • Energy  

X, Y, Z 表示光线的位置

L, M, N 表示光线的方向 

Wavelength 表示光线的波长

Energy 表示光线的能量,以 Watts 为单位 

1.2 Zemax 光源文件格式

Zemax 光源文件的格式在 Zemax 帮助手册中的如下章节中有详细描述:

The Setup Tab > Editors Group (Setup Tab) > Non-sequential Component Editor > Non-sequential Sources > Source File 

在本文章中,我们也将简单进行说明。Zemax 二进制光源文件将具有 208 字节,其中对应为:

描述部分包含 100 字节,其他数据的大小为 4 字节,请在您创建自定义光源文件时对此谨慎。

ray_format_type 必须为 0(仅光通量格式)或 2(光谱颜色格式),不支持其他格式类型。当且仅当 ray_format_type 为 0 时,则 flux_type 为 0 Watts,以及 1 Lumens。对于光谱颜色格式,光通量必须以 Watts 为单位,波长必须以 μm 为单位。

在数据标题之后定义光线结构,光线结构格式取决于光线格式类型。

以下为单色光源的光线格式: 

SPEOS 光线数据也相同,X、Y、Z 表示光线位置,L、M、N 表示光线方向。Zemax 光源文件中的光通量等效于 SPEOS 中的能量数据。 

以下为复色光源的光线格式: 

1.3 Speos 与 Zemax 光谱文件格式

有时我们可以找到与光源文件一起提供的光谱文件,所以我们添加了这一部分,以便光谱文件可以得到转换和应用。两个光谱文件都是文本格式定义的。

SPEOS 光谱文件以扩展名 *.spectrum 结束,将包含以下信息:数据标题、名称、波长总数和它们的权重、具体波长和权重。

Zemax 光谱文件以扩展名 *.SPCD 结束,并且放置在 <objects>\Sources\Spectrum 文件夹中。文件将用于描述光源颜色模拟的用户自定义光谱。文件格式为以下形式的成对数据:

 

# comment <optional>
wavelength1 weight1
wavelength2 weight2
etc...

波长数据以 μm 为单位,并且需要以升序的形式排列。权重则表示为相对功率单位的无量纲形式。请注意定义的数据最少为 3 对,最多为 200 对。

将 Zemax 文件转换至 SPEOS 

本章节解释了如何使用 Python 代码将 Zemax 光源文件转换为 SPEOS 光源文件。

2.1 执行 Python 代码 

打开 Python IDLE 程序,注意本文中使用的 Python 版本为 3.9.2。 

点击 文件 > 打开: 

选择本文附件 ZIP 中名为 Convert_ZEMAX_to_SPEOS.py 的文件。在执行文件之前,请确保您已经将光源文件的路径进行了对应修改:

如需要,修改 theZemaxSpectrumPath 至电脑内光源文件对应的路径:

如果您倾向于在图形用户界面中选择文件,您可以将后续三行的代码取消 “注释” 设置: 

后续,点击运行模块: 

在文章附件中,我们提供了后续使用的光源文件,用于介绍如何使用对应转换器,文件为:

rayfile_LCB_G6SP_100K_20210701_Zemax.dat. 

注意,通过 .DAT 的文件尾缀可以了解到该文件为单色光源文件,我们也支持 .SDF 文件的转换。

在转换过程中,将输出一些重要的信息。转换后得到的文件将保存至原光源文件相同的路径当中。

2.2 Zemax 中的角向和位置分布结果 

为了验证光源文件转换前后的一致性,我们将光源文件载入了 Zemax OpticStudio 后进行了光线追迹。

光源文件位于:\Document\Zemax\Objects\Sources\Source 文件夹,如此可以直接从光源文件列表中进行选择。

下图为光源文件和光源类型的选择: 

我们创建了一个极探测器 (Detector Polar) 用于观察角向分布情况。最大的角度为 180 度,并且径向和角向像素数量设置为 180。

同样也创建了一个矩形探测器 (Detector Rectangle),参数为 Z = 1mm、X Half Width = Y Half Width = 10 mm 以及 #X Pixel = #Y Pixel = 100。也将使得我们可以在 1mm 之外查看光源发出的光斑情况。

以下为光源的角向和位置分布: 

2.3 SPEOS 中的角向和位置分布结果

以下为 SPEOS 中的探测器参数: 

以下为在 SPEOS 中查看到的光源角向和位置分布情况:

将 SPEOS 光源文件转换至 Zemax

本章节解释了如何使用 Python 代码将 SPEOS 光源文件转换为 Zemax 光源文件。由于 SPEOS 光源文件将包含波长信息,转换得到的 Zemax 文件将始终为 .SDF 文件。 

我们将再次使用 IDLE Shell 3.9.2 运行对应代码。使用的 Python 代码文件名为:

Convert_SPEOS_to_ZEMAX.py 

将文件路径修改为电脑中存放以下光源文件的路径:

rayfile_LCB_G6SP_100k_20210701_Speos.RAY 

如需要,修改 SpeoSpectrumPath 至电脑中光源文件所处的路径:

点击执行模块: 

如果在 Python 窗口中未出现任何警告或错误,通常情况下表示转换成功:

3.2 SPEOS 中的角向和位置分布结果

我们将使用与上述示例相同的探测器参数执行模拟,将得到与我们先前转换完全相同的角向与位置分布结果:

3.3 Zemax 中的角向以及位置分布结果 

生成的光源文件将位于:<data>\Objects\Sources\Source 文件夹中,并且可以选择成为光源文件。

转换得到的光谱文件为:LCB_G6SP_20210701_spectrum.spcd,需要被放置在 <data>\Objects\Sources\Spectrum 文件夹,并且可以选择作为光源文件:

将使用与上述示例相同的探测器设置: 

以下为最终得到的角向和位置分布结果: 

3.4 其他注解

请注意 SPEOS 并不是唯一可以生成 .RAY 光源文件的软件。

如果在转换过程中收到 “Warning: File size is not 28 + 8 * 4 * N ? Please verify if it is a SPEOS .ray file.” 的错误提示,表示转换得到的光源文件中将丢失部分光线数据。

相关文章:

Ansys Zemax / SPEOS | 光源文件转换器

本文解释了如何在 SPEOS 与 Zemax 之间转换二进制光源文件。 下载 联系工作人员获取附件 简介 在本文中&#xff0c;为用户提供了一组Python代码&#xff0c;用于在Zemax和SPEOS之间转换源文件。 有些光源&#xff0c;如 .IES 文件&#xff0c;可在 SPEOS 和 Zemax 中进行…...

PRML笔记2-关于回归参数w的先验的理解

接上篇&#xff0c;现在考虑给w\boldsymbol{w}w加入先验&#xff0c;考虑最简单的假设&#xff0c;也就是w\boldsymbol{w}w服从均值为0&#xff0c;协方差矩阵为α−1I\alpha^{-1}\boldsymbol{I}α−1I的高斯分布。 p(w∣α)N(w∣0,α−1I)(α2π)(M1)/2exp⁡{−α2wTw}\begin{…...

Selenium原理

我们使用Selenium实现自动化测试&#xff0c;主要需要3个东西1.测试脚本&#xff0c;可以是python&#xff0c;java编写的脚本程序&#xff08;也可以叫做client端&#xff09;2.浏览器驱动, 这个驱动是根据不同的浏览器开发的&#xff0c;不同的浏览器使用不同的webdriver驱动…...

Disconf、Apollo和Nacos分布式配置框架差异对比

差异对比表格&#xff1a; 功能点DisconfApolloNacos依赖高可用框架完全依赖于Zookeeper来实现监听拉取&#xff0c;向外提供了HTTP拉取数据接口依赖于Eureka实现内部服务发现注册&#xff0c;提供HTTP接口给Client SDK拉取监听数据内部自研实现框架高可用CAP理论偏重点Zookee…...

高新技术企业认定条件条件 高企认定要求

高新技术企业认定条件 一、成立年限&#xff1a;申报企业须注册成立365个日历天数&#xff0c;而非一个会计年度。 二、知识产权 &#xff08;1&#xff09;申报企业必须拥有在中国境内授权或审批审定的知识产权&#xff0c;且知识产权在有效保护期内。知识产权权属人应为申请企…...

华为OD机试 - 新学校选址(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】

新学校选址 题目 为了解新学期学生暴涨的问题,小乐村要建立所新学校 考虑到学生上学安全问题,需要所有学生家到学校的距离最短. 假设学校和所有学生家都走在一条直线之上,请问学校建立在什么位置, 能使得到学校到各个学生家的距离和最短 输入 第一行: 整数 n 取值范围 [1,1…...

二进制部署K8S

目录 一、环境准备 1、常见的k8s部署方式 2、关闭防火墙 3、关闭selinux 4、关闭swap 5、根据规划设置主机名 6、在master添加hosts 7、将桥接的IPv4流量传递到iptables的链 8、时间同步 二、部署etcd集群 1、master节点部署 2、查看证书的信息 2.1 创建k8s工作目…...

高效获知Activity的生命周期

Activity生命周期监听 使用 Instrumentation 对 Activity 生命周期进行监听。 优点&#xff1a; 全局仅一次反射&#xff0c;性能影响极小所有Activity的生命周期都能够被监听到由于Java的单继承&#xff0c;为了拓展性&#xff0c;可以使用装饰器模式对Instrumentation进行功…...

分析现货黄金价格一般有什么方法

分析现货黄金价格一般有什么方法呢&#xff1f;我相信很多投资者都会说&#xff0c;是技术分析。很多人并不知道技术分析是什么&#xff0c;并且技术分析是如何去分析现货黄金价格的&#xff0c;那么本文就介绍一下技术分析的主要分类。可以说&#xff0c;小编的其他文章都是以…...

Spring中的拦截器

这里写目录标题基本概念HandlerInterceptor拦截器HandlerInterceptor讲解MethodInterceptor拦截器二者的区别基本概念 在web开发中&#xff0c;拦截器是经常用到的功能。它可以帮我们预先设置数据以及统计方法的执行效率等等。 Spring中拦截器主要分两种&#xff0c;一个是Han…...

【Linux操作系统】【综合实验四 Linux的编译环境及线程编程】

文章目录一、实验目的二、实验要求三、实验内容四、实验报告要求一、实验目的 要求熟悉Linux环境中的程序编译、调试与项目管理过程并能实现具体操作&#xff1b;熟练使用基础函数库中与线程库中的管理函数&#xff0c;实现用户线程编程过程&#xff0c;并深入了解Linux的线程…...

Switch 如何使用NSCB 转换XCI NSP NSZ教程

很多小白经常碰到Switch游戏文件格式和预期不符的情况&#xff0c;比如碰到nsz自己不会安装&#xff08;安装NSZ格式文件教程&#xff09;&#xff1b;或者是碰到xci格式的&#xff0c;想转换为nsp&#xff1b;抑或想将nsz格式文件还原回nsp格式。本文对此提供了解决方案。 文中…...

JVM12 字节码指令集

1. 概述 2. 加载与存储指令 2.1. 局部变量压栈指令 iload 从局部变量中装载int类型值 lload 从局部变量中装载long类型值 fload 从局部变量中装载float类型值 dload 从局部变量中装载double类型值 aload 从局部变量中装载引用类型值&#xff08;refernce&#xff09; iload_0 从…...

centos之python安装与多版本python之间的共存

一、背景 随着python版本迭代加快&#xff0c;有写python模块再低版本无法运行&#xff0c;此时需要我们在进行安装一个python版本 例如&#xff1a;uvloop 在python3.7上运行&#xff1b;python 3.6官方不再维护与更新 有些模块或不支持较低版本、有些模块支持较高版本python…...

SpringBoot学习笔记(一)

Idea中隐藏指定文件或指定类型文件 setting->File Types->Ignored Files and Folders输入要隐藏的文件名&#xff0c;支持*号通配符回车确认添加 SpringBoot概述 parent 小结&#xff1a; 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-pa…...

美国原装KEYSIGHT E4981A(安捷伦) E4981A电容计

KEYSIGHT E4981A&#xff08;安捷伦&#xff09; Keysight E4981A&#xff08;安捷伦&#xff09;电容计为生产线中的陶瓷电容器测试提供了高速、可靠的测量。E4981A 实现了电容从小到大的测量能力&#xff0c;测量准确。Agilent E4981A 电容计有助于提高测试吞吐量&#xff0…...

K8S的基础概念

目录 一、k8s概述 1、k8s简介 1.1 k8s的作用 1.2 k8s的由来 1.3 k8s的含义 1.4 k8s的官网 1.5 GitHub 2、为什么要用 K8S? 2.1 K8s的目标 2.2 K8s解决了裸跑Docker 的若干痛点: 2.3 K8s的主要功能 3、K8s的特性 二、Kubernetes 集群架构与组件 1、工作流程 2、…...

【数据结构】——环形队列

文章目录一.环形队列的定义及其特点二.使用数组来实现环形队列1.创建一个队列2.初始化队列3. 判断环形队列是否为空4.判断环形队列是否已满5. 向循环队列插入元素&#xff0c;插入成功返回真6.删除环形链表的数据7. 取队头元素8.取队尾元素8.释放空间总结一.环形队列的定义及其…...

windows 安装Qt

下载 下载地址https://download.qt.io/&#xff0c;此文已5.7.0为例子。 根据图片依次选择即可。 安装 安装过程参考另一篇文章Ubuntu 安装 Qt5.7.0即可 配置环境变量 ps&#xff1a;我就是之前没配置环境变量&#xff0c;直接使用创建项目&#xff0c;项目源码直接运行是…...

spring cloud gateway集成sentinel并扩展支持restful api进行url粒度的流量治理

sentinel集成网关支持restful接口进行url粒度的流量治理前言使用网关进行总体流量治理&#xff08;sentinel版本&#xff1a;1.8.6&#xff09;1、cloud gateway添加依赖:2、sentinel配置3、网关类型项目配置4、通过zk事件监听刷新上报api分组信息1、非网关项目上报api分组信息…...

如何使用 Redis 快速实现布隆过滤器?

以下是使用 Redis 实现布隆过滤器的两种方案&#xff0c;结合原理说明和操作步骤&#xff1a; 方案一&#xff1a;手动实现&#xff08;基于 Redis Bitmap&#xff09; 原理 利用 Redis 的 SETBIT 和 GETBIT 操作位数组&#xff0c;结合多个哈希函数计算位置。 步骤 确定参数…...

行为设计模式之Iterator(迭代器)

行为设计模式之Iterator&#xff08;迭代器&#xff09; 摘要&#xff1a; 迭代器模式(Iterator)是一种行为设计模式&#xff0c;它提供顺序访问聚合对象元素的方法&#xff0c;同时不暴露内部结构。该模式由迭代器接口(Iterator)、具体迭代器(ConcreteIterator)、聚合接口(Ag…...

[蓝桥杯 2024 国 B] 蚂蚁开会

问题描述 二维平面上有 n 只蚂蚁&#xff0c;每只蚂蚁有一条线段作为活动范围&#xff0c;第 i 只蚂蚁的活动范围的两个端点为 (uix,uiy),(vix,viy)。现在蚂蚁们考虑在这些线段的交点处设置会议中心。为了尽可能节省经费&#xff0c;它们决定只在所有交点为整点的地方设置会议…...

矩阵详解:从基础概念到实际应用

矩阵详解&#xff1a;从基础概念到实际应用 目录 矩阵的基本概念矩阵的类型矩阵运算特殊矩阵矩阵的逆与伴随矩阵的秩与等价分块矩阵矩阵的应用 矩阵知识体系思维导图 mindmaproot((矩阵))基本概念定义mn数表元素aij矩阵记号基本术语行数和列数方阵与非方阵矩阵相等矩阵类型…...

asp.net mvc如何简化控制器逻辑

在ASP.NET MVC中&#xff0c;可以通过以下方法简化控制器逻辑&#xff1a; ASP.NET——MVC编程_aspnet mvc-CSDN博客 .NET/ASP.NET MVC Controller 控制器&#xff08;IController控制器的创建过程&#xff09; https://cloud.tencent.com/developer/article/1015115 【转载…...

0x-4-Oracle 23 ai-sqlcl 25.1.1 独立安装-配置和优化

一、独立安装sqlcl 1. ​安装 Java 环境​ SQLcl 需要 Java 1.8.0_220 或更高版本&#xff0c; Oracle Linux9.6 上已经默认安装Oracle 23ai后Java 是11 lts版本 如果java jdk安装错误将遇上SQLcl困扰n多人的bug sql /nolog 错误&#xff1a;找不到或加载主类 oracle.dbto…...

vm+ubuntu24.04扩展磁盘

vmubuntu24.04扩展磁盘 $ lsblk $ sudo fdisk -l 1.修复 GPT 表警告 $ sudo parted /dev/sda print当询问是否修复时&#xff0c;输入 Fix2.扩展物理分区 /dev/sda3 $ sudo growpart /dev/sda 33.刷新物理卷 (PV) $ sudo pvresize /dev/sda3检查可用的扩展空间. $ sudo vgd…...

Linux 系统中的算法技巧与性能优化

引言​ Linux 系统以其开源、稳定和高度可定制的特性&#xff0c;在服务器端、嵌入式设备以及开发环境中得到了极为广泛的应用。对于开发者而言&#xff0c;不仅要掌握在 Linux 环境下实现各类算法的方法&#xff0c;更要知晓如何利用系统特性对算法进行优化&#xff0c;以提升…...

【工具使用】STM32CubeMX-FreeRTOS操作系统-信号标志、互斥锁、信号量篇

一、概述 无论是新手还是大佬&#xff0c;基于STM32单片机的开发&#xff0c;使用STM32CubeMX都是可以极大提升开发效率的&#xff0c;并且其界面化的开发&#xff0c;也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片FreeRTOS信号标志、互斥锁和信号…...

华为手机开机卡在Huawei界面不动怎么办?

遇到华为手机卡在启动界面&#xff08;如HUAWEI Logo界面&#xff09;的情况&#xff0c;可依次尝试以下解决方案&#xff0c;按操作复杂度和风险由低到高排序&#xff1a; &#x1f527; 一、强制重启&#xff08;优先尝试&#xff09; 1.通用方法‌ 长按 ‌电源键 音量下键‌…...