吾爱光设

 找回密码
 注册
会员须知
会员须知
实用帮助
实用帮助
查看: 1648|回复: 17

[求助] [已解决]ZPL宏读取行数,以及操作数相减求助!

[复制链接]
  • TA的每日心情
    奋斗
    2024-5-14 08:18
  • 签到天数: 989 天

    [LV.10]以坛为家III

    16

    主题

    266

    回帖

    49

    积分

    新手

    积分
    49
    发表于 2023-11-1 09:46 | 显示全部楼层 |阅读模式
    先说一下想法目的:使用diff操作数,conf2 的MTFT数据-conf1 的MTFT数据,现在问题是采样太密集,手敲得累死,所以就想用宏实现。MTFT的循环是这样的


    目的如下:
    !别的多重结构需要生成MTFT,同时还需要diff与第一个结构的MTFT相减
    !如何确定操作数之间的数量关系呢?精确diff到想要的行()
    !conf 2 从k+1或 k + 2开始 同时还需要diff (conf 1 MTFT) 这样需要插入2k行
    循环是k:3k+1  其中k:2k是MTFT操作数  2k:3k是diff操作数
    所以 CONF 2 MTFT 范围是K:2K      DIFF 范围是2k:3k


    !同理对 conf 3  循环是从 3k:5k
        setoperand 2k+1,11,"diff"
        setoperand 2k+1,2,k   !conf 1 操作数MTFT的行
        setoperand 2k+1,3,2k  !conf 2 操作数MTFT的行
        setoperand 2k+1,8,0
        setoperand 2k+1,9,1


    上面叙述得循环,个人能力有限没有实现。因为我这个2k+1,不太对,是奇数了。
    只能循环生成MTFT操作数,然后再去查行,再相减。具体如下:


    现在知道conf1得MTFT的行数是从2-337;conf2的MTFT数据是从339-674 ;需要从conf2的行数是从690:690+335


    上面的例子是:自己可以通过查已有操作数所在行数去写循环。但是这样感觉还是没那么智能。关键对于conf3 还得自己去查操作数所在行数,然后再写一个一样得macro,diff循环。
    求助如何能精确确定第一个循环之后,在已有的操作数行之后再进行循环写入操作数,
    以及diff(diff操作数的特殊性就必须得把行数弄明白,不然结果根本是错的!)
    有点蒙了,应该是循环有什么问题,自己编程水平太低了。希望有大佬可以指点一下!万分感谢!




    最佳答案
    2023-11-1 10:29
    我之前也编写了类似的,不同结构的MTF相减,想了两个办法(1)和楼主类似,就是用宏插入操作数弄得,但是后来遇见的问题跟你差不多,插入的操作数太多,行数也要对应上(2)利用gettextfile读取mtf的文本文档,mtf一开始就要设置好间距和截止频率等参数,然后在宏里面用read读出mtf值进行运算

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-5-13 16:28
  • 签到天数: 567 天

    [LV.9]以坛为家II

    22

    主题

    414

    回帖

    80

    积分

    入门

    积分
    80
    发表于 2023-11-1 10:10 | 显示全部楼层
    本帖最后由 shishenlaoba 于 2023-11-1 10:12 编辑

    写的太多了,可以精简一下自己的想法。另外,要读取评价函数值,不一定要插入评价函数值

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-14 08:18
  • 签到天数: 989 天

    [LV.10]以坛为家III

    16

    主题

    266

    回帖

    49

    积分

    新手

    积分
    49
     楼主| 发表于 2023-11-1 10:16 | 显示全部楼层
    shishenlaoba 发表于 2023-11-1 10:10
    写的太多了,可以精简一下自己的想法。另外,要读取评价函数值,不一定要插入评价函数值

    这个我也试过了,需要CEV0读取存储,我这里不仅是需要读取,还需要diff相减。目的是要几个conf里的MTF趋于一致。并不是需要多高。PS:这是一个波前编码系统。
    因为相减所以才最后想得办法是循环写操作数。因为还需要优化的


    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-5-14 10:07
  • 签到天数: 556 天

    [LV.9]以坛为家II

    3

    主题

    55

    回帖

    7

    积分

    小白

    积分
    7
    发表于 2023-11-1 10:29 | 显示全部楼层    本楼为最佳答案   
    我之前也编写了类似的,不同结构的MTF相减,想了两个办法(1)和楼主类似,就是用宏插入操作数弄得,但是后来遇见的问题跟你差不多,插入的操作数太多,行数也要对应上(2)利用gettextfile读取mtf的文本文档,mtf一开始就要设置好间距和截止频率等参数,然后在宏里面用read读出mtf值进行运算

    评分

    参与人数 1金币 +3 收起 理由
    知音2020 + 3 很给力!

    查看全部评分

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-14 09:34
  • 签到天数: 184 天

    [LV.7]常住居民III

    30

    主题

    72

    回帖

    0

    积分

    小白

    积分
    0
    发表于 2023-11-1 10:30 | 显示全部楼层
    这个是不是要考虑外部的编译程序,用zemax-ZPL和matlab/python/c++通信,但是要返回值的话,只能考虑C++
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-5-13 16:28
  • 签到天数: 567 天

    [LV.9]以坛为家II

    22

    主题

    414

    回帖

    80

    积分

    入门

    积分
    80
    发表于 2023-11-1 10:31 | 显示全部楼层
    本帖最后由 shishenlaoba 于 2023-11-1 10:42 编辑

    自己在这基础上加循环,500那个指的是空间频率。(另外:反复切换当前系统结构,zpl运行速度会很慢,所以写循环的时候,先循环读取结构1不同空间频率下的mtf,存到数组里面,再切结构n读取mtf存数组。最后数组进行运算,效率高不少)

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-5-14 10:07
  • 签到天数: 556 天

    [LV.9]以坛为家II

    3

    主题

    55

    回帖

    7

    积分

    小白

    积分
    7
    发表于 2023-11-1 10:33 | 显示全部楼层
    知音2020 发表于 2023-11-1 10:16
    这个我也试过了,需要CEV0读取存储,我这里不仅是需要读取,还需要diff相减。目的是要几个conf里的MTF趋 ...

    我也是波前编码系统才编写了类似的,用宏插入操作数的方法最终有一千多个操作数,优化的时候几分钟才一次循环,就放弃这种方法了
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-14 09:34
  • 签到天数: 184 天

    [LV.7]常住居民III

    30

    主题

    72

    回帖

    0

    积分

    小白

    积分
    0
    发表于 2023-11-1 10:33 | 显示全部楼层
    知音2020 发表于 2023-11-1 10:16
    这个我也试过了,需要CEV0读取存储,我这里不仅是需要读取,还需要diff相减。目的是要几个conf里的MTF趋 ...

    波前编码系统就是把光阑改成奇次非球面,让不同物距的mtf趋于一致吗


    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-14 08:18
  • 签到天数: 989 天

    [LV.10]以坛为家III

    16

    主题

    266

    回帖

    49

    积分

    新手

    积分
    49
     楼主| 发表于 2023-11-1 10:46 | 显示全部楼层
    龙傲天 发表于 2023-11-1 10:33
    我也是波前编码系统才编写了类似的,用宏插入操作数的方法最终有一千多个操作数,优化的时候几分钟才一次 ...

    是啊!我想了一下,MTFT操作数本来就慢,这样插操作数也不是个办法。只能用你说的第二个方法了。gettextfile,您方便说一下设计这个系统的时候还有别的需要注意的事项吗?
    目前就是已知肯定是扩展多项式,然后6/9阶设为变量,把这个面是stop。
    核心其实就是优化这个MTF一致性,同时也不能太低,截止频率处MTF>0.1吧。

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-5-13 16:28
  • 签到天数: 567 天

    [LV.9]以坛为家II

    22

    主题

    414

    回帖

    80

    积分

    入门

    积分
    80
    发表于 2023-11-1 10:47 | 显示全部楼层
    搞半天发现你不只是要读取数值,还要写入评价函数里面。要是怕混乱,结构1用了789行评价函数,你就从第1000行开始写结构2的,这样代码逻辑好理些
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )

    GMT+8, 2024-5-14 11:01 , Processed in 0.109375 second(s), 26 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表