如何在Zemax非序列式建模中查看探测器接收光纤的入射角 ...

[复制链接]
内托体头 发表于 2023-3-3 12:13:40 | 显示全部楼层 |阅读模式
最近接触到一个模拟项目,涉及到滤光片的应用。由于滤光片的有效过滤角度比较小,大角度入射的光线无法过滤。于是需要建模分析,考察达到接收器前滤光片上的光线入射角。从而在原始机械或电路板结构上微调一下滤光片或LED的角度,提高过滤效率。
结构建模已经有初始的stp文件,而且机械结构复杂,所以选择非序列模式。然而探测器面上的光线数据,不管何种探测器类型,detector viewer中始终办法查看该面上接收光线入射角度信息。研究好久终于找到了下面这篇文档:https://community.zemax.com/got-a-question-7/is-an-angle-of-incidence-report-available-in-the-ray-database-viewer-866
这篇文档中提供了一种方案,将每次ray trace结果保存后,通过ray database viewer导出zrd文件中的光线数据。并附带了一个宏文件读取ray database中原始数据,计算打到每个面上的光线入射角度(AOI)。有兴趣的小伙伴可以仔细看一下原文中的算法,同时用到的zpl文件也可以直接下载。
踏破铁鞋终于找到的现成解决方案,虽然说解决了问题的大体,但还是不够满意。我只需要统计打到探测面上的光线AOI,而该算法读取了所有光线的传输路径,计算出了每根光线经过每一个面时的角度信息(分成了无数个seg#,计算前已经将光线能量下限截至于0.001)。
将统计的ray data数量增加到1000条时,总共的数据行数已经超过了一万多行,所以得再想办法删除掉冗余的光线数据。首先的想法是:抓一个软件的同事,帮我看一眼zpl的语句,添几行筛选的定义:只读取comment为“滤波片前面”的光线segment。几个软件的同事们看下来都说语法类似python,但没空帮忙改代码。自己对编程一窍不通,短时间更改zpl语言根本不现实,于是在macro中添加筛选代码的方案只好作罢。
于是又回到了先前的问题上,如何筛选有效的光线segment。 欸?筛选,ray database viewer中不正好有一个apply filter吗?它会不会是问题最偷懒的解法呢?

如何在Zemax非序列式建模中查看探测器接收光纤的入射角 ...-1.jpg
不会用就查询manual,点击问号, 导到了ray database viewer的详情页,

如何在Zemax非序列式建模中查看探测器接收光纤的入射角 ...-2.jpg
很接近答案了,具体语句还要到filter string中查询一下。Filter string可以定义NSC中有特定属性的光线,甚至光线segment,此时答案已经很明显了,只要找到合适的filter语句就能删去大量冗余ray data,给我直接导出需要的数据。

如何在Zemax非序列式建模中查看探测器接收光纤的入射角 ...-3.jpg

如何在Zemax非序列式建模中查看探测器接收光纤的入射角 ...-4.jpg
Hn: 可筛选出打到n号面上的光线;

如何在Zemax非序列式建模中查看探测器接收光纤的入射角 ...-5.jpg
X_HITxxx的语句可以更细致地定义所需过滤或筛选出来的光线segment。
到这里,所需解决的问题圆满收工,概括下来就是:

  • 建模后ray trace,并保存源文件;
  • 打开ray database viewer, 筛选最有用的ray和segment;
  • 打开AOI宏文件计算特定面上入射光的角度。
回复

使用道具 举报

全部回复0 显示全部楼层
暂无回复,精彩从你开始!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册 手机动态码快速登录

本版积分规则

关于楼主

新手上路
  • 主题

    6
  • 回答

    2
  • 积分

    6
联系客服 关注微信 访问手机版 返回顶部 返回列表