《ZEMAX非序列进行蒙特卡罗光线追迹——光线追迹探测器控制(The Ray Trace/Detector Control)》
过滤字符串(The filter string)
只显示具有特定性质的NSC光线或数据会比较方便。举例来说,如果开启散射以及分束功能,如果有许多光线要追迹,视图会变得非常混乱。过滤字符串可以定义的一个“测试(test)”,光线在被绘出或被显示之前必须通过该测试。过滤字符串的语法包含标志间的逻辑运算,用以显示光线中的某段是否与NSC组中的物体相交,错过,反射,折射,散射,衍射,或鬼影反射。也有“Extended”标志支持数值用法。支持的标志如下
| 过滤字符串标志 | |
| 标志(Flag) | 描述(DeScription) |
| Bn | 物体n内的光线体散射。如果n值是0,那么来自任一物体的体散射光线段将对此测试返回真值。 |
| Dn | 光线交于物体n后衍射。见h。 |
| En | 从父段物体n衍射。当打开光线分束时,从物体衍射的分束光线段,次序不等于0时才设置此标志。 |
| Fn | 从父段物体n散射。当打开光线分光时,从散射表面分束的光线段才设置此标志。镜面段不会打开这个标志,只有散射段可以。如果n值为0,则任何从物体的散射将对此测试返回真值。 |
| Gn | 从父段物体n的鬼影反射。当打开光线分光时,从折射物体反射的光线段才设置此标志。如果D值为0,则从物体反射的鬼影光线对此测试返回真值。 |
| Hn | 光线交于物体n。测试一条光线是否交于物体,标志格式为Hn。举例来说,如要测试光线是否交于物体5,标志即为H5。 |
| Jn | 与Gn完全相似,除了鬼影反射点前的所有段强度都设置为0。允许探测器观察者只看鬼影能量,而不是直接入射能量,甚至于在后来光线从其它物体反射也如此。零强度值仅影响探测器观察器,而非光线数据库查看器或是视图。 |
| Ln | 光线最后到达物体n。要检测光线的最后一个分支是否到达一个物体,标志是Ln形式。例如,如果光线分支的最后一段到达物体5,标志即为L5。参见Hn。 |
| Mn | 光线错过物体n。测试一条光线是否错过物体,标志格式为Mn。举例来说,如要测试光线是否错过物体15,标志即为M15。 |
| On | 由物体n发出的光线。00(“0”是原点(Origin))会选取所有光源。 |
| Rn | 光线交于物体而反射。标志R7将测试光线是否交于物体7后反射。见Gn。 |
| Sn | 光线交于物体n后散射。见Fn。 |
| Tn | 光线进出物体而透射(折射)。标志T4将双0试光线是否交于物体4,然后透射(折射)。 |
| Wn | 光线使用波长n。如果n值为0,则任一波长光线对该测试将返回真值。 |
| X_AXYG(n,v) | 光线在局部X-Y平面中物体n上的入射角(以度为单位)比v大。这个角是不考虑传播方向,关于+y方向测量的。如果光线没有到达物体n,这个标志为false。 |
| X_AXYL(n,v) | 光线在局部X-Y平面中物体n上的入射角(以度为单位)比v小。这个角是不考虑传播方向,关于+y方向测量的。如果光线没有到达物体n,这个标志为false。 |
| X_AXZG(n,v) | 光线在局部X-Z平面中物体n上的入射角(以度为单位)比v大。这个角是不考虑传播方向,关于+z方向测量的。如果光线没有到达物体n,这个标志为false。 |
| X_AXZL(n,v) | 光线在局部X-Z平面中物体n上的入射角(以度为单位)比v小。这个角是不考虑传播方向,关于+z方向测量的。如果光线没有到达物体n,这个标志为false。 |
| X_AYZG(n,v) | 光线在局部Y-Z平面中物体n上的入射角(以度为单位)比v大。这个角是不考虑传播方向,关于+z方向测量的。如果光线没有到达物体n,这个标志为false。 |
| X_AYZL(n,v) | 光线在局部X-Z平面中物体n上的入射角(以度为单位)比v小。这个角是不考虑传播方向,关于+z方向测量的。如果光线没有到达物体n,这个标志为false。 |
| X_GHOST(n,b) | 光线段鬼影反射b次,并至少与物体n相交一次。如果n是零,任意有b次鬼影反射的光线段将通过该测试。例如,要考虑所有二次反射的鬼影(来自父鬼影段的鬼影光线),使用X_GHOST(0,2)。X_GHOST不会考虑以最后是TIR(全内反射)的鬼影光线段,尽管TIR光线也被认为是鬼影。例如,如果一个一次鬼影光线离开了一个面,交于另一个面,然后又在第二个面全内反射。X_GHOST(0,3)将不会包括这个段,因为这个段最后会全内反射,并且没有一根光线终止(光线反射并继续传播)。相同的段会包括在过滤X_HOST(0,4)中,因为光线是第四次鬼影(在TIR点)。这是人为的让ZEMAX怎样定义段以及对鬼影光线计数。在所有情况下,如果b的充分高的值被测试了,所有的鬼影光线都可以找到。注意从折射面全内反射的光线被认为是鬼影,但是从镜面反射的光线不是。也可参见Gn。 |
| X_HIT(n,b) | 与物体n相交b次的光线段。也可参见Hn, X_HITFACE, and X_HITFACE2。 |
| X_HITFACE(n,f) | 与面f上的物体n相交的光线段。也可参见Hn, X_HIT, and X_HITFACE2。 |
| X_HITFACE2(n,f,b) | 与面f上的物体n相交b次的光线段。也可参见Hn and X_HIT。 |
| X_IAGT(n,v) | 在物体n上绝对强度大于v的光线。如果光线不交于物体,则该标志为false。 |
| X_IALT(n,v) | 在物体n上绝对强度小于v的光线。如果光线不交于物体,则该标志为false。 |
| X_IRGT(n,v) | 在物体n上相对强度大于v的光线。如果光线不交于物体,则该标志为false。 |
| X_IRLT(n,v) | 在物体n上相对强度小于v的光线。如果光线不交于物体,则该标志为false。 |
| X_LGT(n,v) | 在物体n上x方向余弦大于v的光线。如果光线不交于物体,则该标志为false。 |
| X_LLT(n,v) | 在物体n上x方向余弦小于v的光线。如果光线不交于物体,则该标志为false。 |
| X_MGT(n, v) | 在物体n上y方向余弦大于v的光线。如果光线不交于物体,则该标志为false。 |
| X_MLT(n,v) | 在物体n上y方向余弦小于v的光线。如果光线不交于物体,则该标志为false。 |
| X_NGT(n,v) | 在物体n上2方向余弦大于v的光线。如果光线不交于物体,则该标志为false。 |
| X_NLT(n,v) | 在物体n土z方向余弦小于v的光线。如果光线不交于物体,则该标志为false。 |
| X_SCATTER(n,b) | 从“父”光线上散射的光线段,并至少与物体n相交一次。如果n为0,任何从“父”光线上散射出来的“子”光线,散射b次将通过测试。例如,要只考虑第一代散射光线,使用X_SCATTER(0, 1)。这个滤光片只测试在ZRD中列出的“父”光线或者“F”标志上发生的散射。也可参见Sn and X_SCATTERF。 |
| X_SCATTERF(n,b) | 在“父”光线与物体n相交b次后,光线段在物体n上发生散射。要应用滤光片,就要研究与物体n相交b次的“父”光线,并且只考虑特定的“父”光线。如果“父”光线没有与物体n相交b次,滤光片返回false。例如,当只考虑在第三次与物体5相交后被散射的光线(即,光源发出的光线之前已经与相同的物体相交两次),使用X_SCATTERF(5,3)。也可参见Fn和X_SCATTER。 |
| X_WAVERANGE(n, a, b) | 光线已经与物体n相交过,并且其波段位于a微米与b微米之间。 |
| X_WAVESHIFT(i,j) | 光线在体散射时从波长i变为波长j。 |
| X_XGT(n,v) | 在物体n上x坐标大于v的光线。如果光线不交于物体,则该标志为false。 |
| X_XLT(n,v) | 在物体n上x坐标小于v的光线。如果九线不交于物体,则该标志为false。 |
| X YGT(n,v) | 在物体n上y坐标大于V的光线。如果光线不交于物体,则该标志为false。 |
| X YLT(n,v) | 在物体n上Y坐标小于v的光线。加果光线不交于物体,则该标志为false。 |
| X ZGT(n,v) | 在物体n上2坐标大于V的光线。如果光线不交于物体,则该标志为false。 |
| X ZLT(n,v) | 在物体n上2坐标小于v的光线。如果光线不交于物体,则该标志为false。 |
| Z | 光线有严重错误。 |
所有的标志除了O,G,E跟F标志外都表示在光线在与下标n表示的物体相交后光线段的情况。G,E以及F标志表示母体光线段交于物体n,因而产生“子光线(child ray)”分别是否为鬼影,衍射,或散射区段等等状况。O标志则表示从光源物体“n”所发出的光线。W标志表示波长序号为“n”的光线。形式为X_***(n,v)需要两个字段,并分别在括号内用逗号隔开,否则会发出报错信息。
每一道光线的光线追迹都会评估每一个标志值,而且标志会被指定一个“TRUE”或“FALSE”的值。此标志能被单独使用,亦可与逻辑运算结合。逻辑操作数一般在两个逻辑标志上作运算(NOT是例外,只需一个标志),支持的逻辑操作数如下:
&:逻辑AND(“且”)。&两端的标志必须同为TRUE,&的运算结果才会回应TRUE。
l:逻辑OR(“或”)。&两端的标志,至少其中一个为TRUE,1的运算结果才会回应TRUE。
^:逻辑EXCLUSIVE 0R(“XOR”),^两端的标志必须有一为TRUE,但不是同为TRUE,^的运算结果才会回应TRUE。
!逻辑NOT:当右端标志为FLASE时为TRUE,或响应FALSE,如果右瑞为TRUE。
括号可以用来界定运算的优先(precedence)
样例过滤字符串(Filter string examples)
要选择交于物体7的光线,过滤字符串应为:
H7
要选择交于物体7及物体9的光线,过滤字串应为:
H7&H9
要选择光线a)交于物体7及物体9的光线,但是不从物体6反射;或b)误失物体15,过滤字串应为:
(H7&H9&!R6)|M15
如果只要选取交于物体3,4,或7而产生鬼影的光线,过滤字串应为:
G3|G4|G7
要选择光线以小于10度角入射平物体5,该物体法线向量沿着局部+z轴,过滤字符串为(注意cos(10)=0.984808):
X_NGT(5,0.984808)3
注意只有交于标志X NGT中指定的物体的光线才可能使标志为真。
过滤字符串会检查基本语法错误,像不对称的括号,但并非所有的错误都会检查出来。符合过滤字符串检测的光线数目可能较少,甚至可能是零。ZEMAX还是针对定义光源的光线进行光线追迹(根据配置光线参数),但是只有部分通过过滤的光线会被储存、显示、绘出。如果光线数据被储存,过滤字符串也能应用于光线数据库文件过滤,请见第430页“进行蒙特卡洛光线追迹(Performing a Monte Carlo ray trace)”。
《ZEMAX中文使用手册》P437