CODE V的API 之 ThirdAberration(初级像差的获取)数据的获取(4)

像差的变化数据提取


文章目录

  • 像差的变化数据提取
  • 前言
  • 一、主要目标
  • 二、主要代码
    • 1.VBA代码
    • 2.CODE V macro
  • 输出结果


前言

在优化过程中,相差的观察非常重要,尤其是镜片变多以后哪一面的曲率,厚度以及非球面系数的变化对像差的影响需要总结,提炼以便后续更好的优化,此数据提出非常重要。

一、主要目标

将三级像差输出至相应的单元格。

二、主要代码

1.VBA代码

代码如下(示例):

Sub getTHirdabrr()

'定义接口
Dim Session As CVCommand

'102是CODEV的版本,即10.2
Set Session = CreateObject("CodeV.Command.102")
'设置打开文件的初始位置
Session.SetStartingDirectory ("c:\CVUSER")
Session.StartCodeV
'载入(dbgauss.lens),在命令处输入res cv_lens:dbgauss
result = Session.Command("res cv_lens:dbgauss;")

'提取三级像差至 abr.txt文件
result = Session.Command("in cv_macro:forder;")
result = Session.Command("buf del ba;buf yes;in cv_macro:thirdabrget 1 0 1;buf mov b1;buf cop b0 I3..14 J2..7;buf exp abr.txt;go")

 '转化字符为数据
Dim s As String
 i = 1
Open "C:\CVUSER\abr.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, s

        str_txt = Split(s, vbTab)
        For j = 0 To UBound(str_txt)
             str_num = CDbl(str_txt(j))
           Worksheets("Sheet1").Range(Cells(i, j + 1), Cells(i, j + 1)) = str_num
        Next j
i = i + 1
Loop
Close #1
 
'关闭CODEV实例
Session.StopCodeV
Set Session = Nothing

End Sub

2.CODE V macro

需要自定义一个宏

!**************************************************************************
! Sequence:     THIRDABRGET
!
! Purpose:      Prints a table for surface range i to j of third order
!               aberrations
!
!               This macro can be called stand-alone, but is intended to be
!               called by FORDER.
!
! Syntax:       in THIRDABRGET [start_surf [end_surf [zoom_pos]]]
!
! Inputs:       start_surf  - first surface of surface range (if -1,
!                             computes sums at image surface)
!               end_surf    - ending surface of surface range (if -1,
!                             only computes contributions for one surface;
!                             if 0, computes to image surface)
!               zoom_pos    - zoom position (default 1)
!               list_opd    - list OPDs (default: N)
!               list_pup    - list pupil aberrations (default: N)
!
! Notes:        Assumes FIFTHDEF has been run first.
!               Examples of usage are as follows:
!                 in THIRDABRGET 1 3    ! print contributions for surfaces 1 to 3
!                 in THIRDABRGET 5 0    ! print contributions from surface 5 to image
!                 in THIRDABRGET 5      ! print contributions for surface 5 only
!                 in THIRDABRGET        ! print totals only
!                 in THIRDABRGET 0 0 0 Y! print wave aberrations
!                 in THIRDABRGET 0 0 0 N Y! print transverse pupil aberrations
!
! Author:       YS       Date: 2024-02-08
!

!**************************************************************************
! ARG0 "Prints out a table of third and fifth order aberrations. Output"
! ARG0 "can be surface contributions for specified surfaces, or can "
! ARG0 "include aberration sums at the image (default)."
!
! ARG1 NAME     "Start surface"
! ARG1 TYPE     lit
! ARG1 DEFAULT  -1
! ARG1 HELP     "Starting surface (negative 1 gives sums at image only)"
!
! ARG2 NAME     "Ending surface"
! ARG2 TYPE     lit
! ARG2 DEFAULT  -1
! ARG2 HELP     "Ending surface (negative = starting surface only; 0 = image surface)"
!
! ARG3 NAME     "Zoom position"
! ARG3 TYPE     lit
! ARG3 DEFAULT  1
! ARG3 HELP     "Zoom position (default 1)"

! ARG4 NAME     "List wave aberrations"
! ARG4 TYPE     STR
! ARG4 DEFAULT  "N"
! ARG4 HELP     "List wave aberrations"

! ARG5 NAME     "List pupil aberrations"
! ARG5 TYPE     STR
! ARG5 DEFAULT  "N"
! ARG5 HELP     "List pupil aberrations"
!**************************************************************************

rfd -1 -1 1 N N

lcl num ^junk ^surface ^surface1 ^surface2 ^z
lcl num ^dum ^ref_wl

lcl str ^format2 ^format3 ^format4 ^format5 ^format6
lcl str ^format2w ^format3w ^format4w ^format5w ^format6w
lcl str ^errorMessage
lcl str ^tempString1
lcl str ^tempString2
lcl str ^tempString3
lcl str ^aber_type ^list_opd ^list_pup

ver n
^format2 == "STO'4d.6d''4d.6d''4d.6d''4d.6d''4d.6d''4d.6d'"
^format3 == "'3d''4d.6d''4d.6d''4d.6d''4d.6d''4d.6d''4d.6d'"
^format4 == "SUM'4d.6d''4d.6d''4d.6d''4d.6d''4d.6d''4d.6d'"
^format5 == "   '4d.6d''4d.6d''4d.6d''4d.6d''4d.6d''4d.6d'"
^format6 == "   '4d.6d''4d.6d''4d.6d''4d.6d'"
^format2w == "STO'6d.4d''6d.4d''6d.4d''6d.4d''6d.4d'"
^format3w == "'3d''6d.4d''6d.4d''6d.4d''6d.4d''6d.4d'"
^format4w == "SUM'6d.4d''6d.4d''6d.4d''6d.4d''6d.4d'"
^format5w == "   '6d.4d''6d.4d''6d.4d''6d.4d''6d.4d'"
^format6w == "   '6d.4d''6d.4d''6d.4d''6d.4d''6d.4d'"

^surface1 == str_to_num(rfstr(1))

^surface2 == str_to_num(rfstr(2))

^z == str_to_num(rfstr(3))
^z == roundf(absf(^z))

^list_opd == upcase(rfstr(4))
if ^list_opd <> "Y"
  ^list_opd == "N"
end if
^aber_type == upcase(rfstr(5))
if ^aber_type <> "Y"
  ^aber_type == "IMAGE"
else
  ^aber_type == "PUPIL"
end if

if (num z) > 1
  if (^z < 1) or ^z > (num z)
    ^tempString1 == 'The specified zoom position, '
    ^tempString2 == NUM_TO_STR(^z)
    ^tempString3 == CONCAT(^tempString1,^tempString2)
    ^tempString1 == ', is not a valid input.'
    ^errorMessage == CONCAT(^tempString3,^tempString1)
    ^dum == cverror(^errorMessage,0)
    rtn
  end if
end if

if ^surface1 = -1
  ^surface1 == (FOC z^z)
else
  if ^surface1 = 0
    ^surface1 == 1
  else if ^surface1 > (FOC z^z)
    ^tempString1 == 'The specified starting surface, '
    ^tempString2 == NUM_TO_STR(^surface1)
    ^tempString3 == CONCAT(^tempString1,^tempString2)
    ^tempString1 == ', is not a valid input.'
    ^errorMessage == CONCAT(^tempString3,^tempString1)
    ^dum == cverror(^errorMessage,0)
    rtn
  end if
end if

if ^surface2 = -1
  ^surface2 == ^surface1
else if ^surface2 = 0
  ^surface2 == (FOC z^z)
else
  if ^surface2 < ^surface1
    ^surface2 == ^surface1
  else if ^surface2 > (FOC z^z)
    ^tempString1 == 'The specified ending surface, '
    ^tempString2 == NUM_TO_STR(^surface2)
    ^tempString3 == CONCAT(^tempString1,^tempString2)
    ^tempString1 == ', is not a valid input.'
    ^errorMessage == CONCAT(^tempString3,^tempString1)
    ^dum == cverror(^errorMessage,0)
    rtn
  end if
end if

! When ^surface is 0, the variables are initialized, when ^surface is (NUM S)
! the final sums are converted to aberrations, otherwise the surface
! contributions are calculated.

! This is to force a warning message for a zero last field
^dummy == (hcy si)

for ^surface 0 ^surface2
  out n
  ^junk == @FORDER(^surface,^z, ^aber_type)  ! Evaluate aberrations (dummy variable)
  out

! Output aberrations

  if ^list_opd = "N"

   if ^surface = 0

!       Get units
    if (dim) = "I"
      ^tempString1 == "inches"
    else if (dim) = "C"
      ^tempString1 == "centimeters"
    else if (dim) = "M"
      ^tempString1 == "millimeters"
    end if
    if (afc z^z) <> 0
      if (adm) = 'RAD'
        ^tempString1 == "radians"
      else if (adm) = 'MR'
        ^tempString1 == "milliradians"
      else if (adm) = 'UR'
        ^tempString1 == "microradians"
      else if (adm) = 'NR'
        ^tempString1 == "nanoradians"
      else if (adm) = 'DEG'
        ^tempString1 == "degrees"
      else if (adm) = 'MIN'
        ^tempString1 == "minutes"
      else if (adm) = 'SEC'
        ^tempString1 == "seconds"
      end if
    end if

    if ^aber_type = "IMAGE"
      ^tempString2 == CONCAT(CONCAT("THIRD AND FIFTH ORDER IMAGE ABERRATIONS (", ^tempString1), ")")
      !wri
      !wri "              " ^tempString2
      !wri
      !wri "         SA3        TCO        TAS        SAG        PTZ        DST"
      !wri "         SA5        TCO5       TAS5       SAG5       PTZ5       DST5"
      !wri "         SA7        ECOM       OTSA       OSSA"
    else
      ^tempString2 == CONCAT(CONCAT("THIRD AND FIFTH ORDER PUPIL ABERRATIONS (", ^tempString1), ")")
      !wri
      !wri "              " ^tempString2
      !wri
      !wri "         SA3P       TCOP       TASP       SAGP       PTZP       DSTP"
      !wri "         SA5P       TCO5P      TAS5P      SAG5P      PTZ5P      DST5P"
      !wri "         SA7P       ECOMP      OTSAP      OSSAP"
    end if

    !wri

   els if ^surface <= ^surface2 AND ^surface >= ^surface1
    if ^surface = (STO z^z)
      if ^aber_type = "IMAGE"
        write q^format2 ^SA3 ^TCO ^TAS ^SAG ^PTZ ^DST
        !write  q^format2 ^SA3 ^TCO ^TAS ^SAG ^PTZ ^DST
      else
        !write q^format2 ^SA3P ^TCOP ^TASP ^SAGP ^PTZP ^DSTP
      end if
    els if ^surface = (FOC z^z)
      !write
      if ^aber_type = "IMAGE"
        write q^format4 ^SA3 ^TCO ^TAS ^SAG ^PTZ ^DST
        !write  q^format4 ^SA3 ^TCO ^TAS ^SAG ^PTZ ^DST
      else
        !write q^format4 ^SA3P ^TCOP ^TASP ^SAGP ^PTZP ^DSTP
      end if
    els
      if ^aber_type = "IMAGE"
        write q^format3 ^surface ^SA3 ^TCO ^TAS ^SAG ^PTZ ^DST
        !write  q^format3 ^SA3 ^TCO ^TAS ^SAG ^PTZ ^DST
      else
        !write q^format3 ^surface ^SA3P ^TCOP ^TASP ^SAGP ^PTZP ^DSTP
      end if
    end if
    if ^aber_type = "IMAGE"
      !write q^format5 ^SA5 ^TCO5 ^TAS5 ^SAG5 ^PTZ5 ^DST5
      !write q^format6 ^SA7 ^ECOM ^OTSA ^OSSA
    else
      !write q^format5 ^SA5P ^TCO5P ^TAS5P ^SAG5P ^PTZ5P ^DST5P
      !write q^format6 ^SA7P ^ECOMP ^OTSAP ^OSSAP
    end if
    !write

   end if

  else

   if ^surface = 0

   ^ref_wl == (ref)

   ! wri
    if ^aber_type = "IMAGE"
      !wri q" '60c' '6d.4d' '4c'"  "           THIRD AND FIFTH ORDER IMAGE ABERRATIONS (Waves at " (wl w^ref_wl) "nm.)"
      !wri
      !wri "         W040       W131       W220       W222       W311"
      !wri "         W060       W151       W420       W422       W511"
      !wri "         W080       W331       W333       W240       W242"
    else
      !wri q" '60c' '6d.4d' '4c'"  "           THIRD AND FIFTH ORDER PUPIL ABERRATIONS (Waves at " (wl w^ref_wl) "nm.)"
     ! wri
      !wri "         W040P      W131P      W220P      W222P      W311P"
      !wri "         W060P      W151P      W420P      W422P      W511P"
      !wri "         W080P      W331P      W333P      W240P      W242P"
    end if
    !wri

   els if ^surface <= ^surface2 AND ^surface >= ^surface1
    if ^surface = (STO z^z)
      if ^aber_type = "IMAGE"
        !write q^format2w ^W040 ^W131 ^W220 ^W222 ^W311
      else
        !write q^format2w ^W040P ^W131P ^W220P ^W222P ^W311P
      end if
    els if ^surface = (FOC z^z)
      write
      if ^aber_type = "IMAGE"
        !write q^format4w ^W040 ^W131 ^W220 ^W222 ^W311
      else
        !write q^format4w ^W040P ^W131P ^W220P ^W222P ^W311P
      end if
    els
      if ^aber_type = "IMAGE"
        !write q^format3w ^surface ^W040 ^W131 ^W220 ^W222 ^W311
      else
        !write q^format3w ^surface ^W040P ^W131P ^W220P ^W222P ^W311P
      end if
    end if
    if ^aber_type = "IMAGE"
      !write q^format5w ^W060 ^W151 ^W420 ^W422 ^W511
      !write q^format6w ^W080 ^W331 ^W333 ^W240 ^W242
    else
      !write q^format5w ^W060P ^W151P ^W420P ^W422P ^W511P
      !write q^format6w ^W080P ^W331P ^W333P ^W240P ^W242P
    end if
    !write

   end if

  end if

end for
ver y


输出结果

code的输出
在这里插入图片描述
VBA输出

在这里插入图片描述

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

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

相关文章

GPT-4模型中的token和Tokenization概念介绍

Token从字面意思上看是游戏代币&#xff0c;用在深度学习中的自然语言处理领域中时&#xff0c;代表着输入文字序列的“代币化”。那么海量语料中的文字序列&#xff0c;就可以转化为海量的代币&#xff0c;用来训练我们的模型。这样我们就能够理解“用于GPT-4训练的token数量大…

Mybatis中的sql-xml延迟加载机制

Mybatis中的sql-xml延迟加载机制 hi&#xff0c;我是阿昌&#xff0c;今天记录一下关于Mybatis中的sql-xml延迟加载机制 一、前言 首先mybatis技术本身就不多介绍&#xff0c;说延迟加载机制之前&#xff0c;那要先知道2个概念&#xff1a; 主查询对象关联对象 假设咱们现…

Kubernetes实战(二十七)-HPA实战

1 HPA简介 HPA 全称是 Horizontal Pod Autoscaler&#xff0c;用于POD 水平自动伸缩&#xff0c; HPA 可以 基于 POD CPU 利用率对 deployment 中的 pod 数量进行自动扩缩容&#xff08;除了 CPU 也可以基于自定义的指标进行自动扩缩容&#xff09;。pod 自动缩放不适用于无法…

AI:123-基于机器学习的行人行为分析与异常检测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

伯克利研究院推出Ghostbuster用于检测由LLM代笔的文本

Ghostbuster的架构&#xff0c;用于检测人工智能生成文本的最先进的新方法 像 ChatGPT 这样的大型语言模型写得非常好&#xff0c;但事实上&#xff0c;它们已经成为一个棘手的问题。学生们已经开始使用这些模型代写作业&#xff0c;导致一些学校禁止 ChatGPT。此外&#xff0c…

Git的基础操作指令

目录 1 前言 2 指令 2.1 git init 2.2 touch xxx 2.3 git status 2.4 git add xxx 2.5 git commit -m xxxx 2.5 git log及git log --prettyoneline --all --graph --abbrev-commit 2.6 rm xxx 2.7 git reset --hard xxx(含小技巧) 2.8 git reflog 2.9 mv xxx yyy 1…

vue 引入 百度地图API 和 路书

公司项目中&#xff0c;偶尔都会涉及到地图的使用&#xff0c;这里以百度地图为例&#xff0c;我们梳理一下引用流程及注意点 账号和获取密钥 百度地图示例 百度地图 类参考 1、账号和获取密钥 // api.map.baidu.com/api?typewebgl&v3.0&ak您的密钥<script type…

如何运行心理学知识(心流)来指导工作和生活

如何运用心流来指导工作和生活 如何联系我 作者&#xff1a;鲁伟林 邮箱&#xff1a;thinking_fioa163.com或vlinyes163.com GitHub&#xff1a;https://github.com/thinkingfioa/ReadingSummary 版权声明&#xff1a;文章和记录为个人所有&#xff0c;如果转载或个人学习…

Nature Machine Intelligence 使用机器学习驱动的可拉伸智能纺织手套捕捉复杂的手部动作和物体交互

研究背景 对灵巧手运动的精确实时跟踪在人机交互、元宇宙、机器人和远程医疗等领域有着广泛的应用。当前的可穿戴设备中的大多数仅用于检测精度有限的特定手势&#xff0c;并且没有解决与设备的可靠性、准确性和可清洗相关的挑战。对传感器直接放置在用户的手上有严格的要求&am…

MVC框架学习

大一的时候写过一个mvc框架的跑酷游戏&#xff0c;但是那时候基础不扎实&#xff0c;没学明白也没听懂。现在深入的学习一下 以下内容参考&#xff1a;MVC 模式 | 菜鸟教程 (runoob.com) MVC 模式 MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff…

搜索插入位置[简单]

一、题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为O(log n)的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例…

【linux开发工具】vim详解

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 “学如逆水行舟&#xff0…

项目02《游戏-11-开发》Unity3D

基于 项目02《游戏-10-开发》Unity3D &#xff0c; 任务&#xff1a;飞行坐骑 首先创建脚本&#xff0c; 绑定脚本&#xff0c; using UnityEngine; public class Dragon : MonoBehaviour{ [SerializeField] private float speed 10f; public Transfo…

如何判断线程池已经执行完所有任务了?

目录 不判断的问题 方法1&#xff1a;isTerminated 缺点分析 扩展&#xff1a;线程池的所有状态 方法2&#xff1a;getCompletedTaskCount 方法说明 优缺点分析 方法3&#xff1a;CountDownLatch&#xff08;推荐&#xff09; 优缺点分析 方法4&#xff1a;CyclicBar…

微软.NET6开发的C#特性——委托和事件

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;看到不少初学者在学习编程语言的过程中如此的痛苦&#xff0c;我决定做点什么&#xff0c;下面我就重点讲讲微软.NET6开发人员需要知道的C#特性&#xff0c;然后比较其他各种语言进行认识。 C#经历了多年发展…

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层&#xff1f;1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识&#xff1a;概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题&#xff08;复杂&#xff09; 大问题划分为小问题 怎么分层&#…

Stable Diffusion 模型下载:Disney Pixar Cartoon Type B(迪士尼皮克斯动画片B类)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 这是我之前的模型迪士尼皮克斯卡通类型A与我自己训练的Lora在中途旅程图像上的合并结果。与之前的版本相比&#xff0c;男性和老年人看起来更像真正的皮克斯角色&a…

黄金交易策略:手工同向单减保留仓

虽然保留仓的仓位不大&#xff0c;扛个一年半载不是问题&#xff0c;但闲着也可以手工处理掉&#xff08;10000点以内的不要处理&#xff09;。挑一个最大的单&#xff0c;同向相同的手数&#xff0c;并把两单的止盈设置中位数&#xff08;也没有这么严格&#xff0c;差不多就好…

Node.js之npm单独与批量升级依赖包的方式

Node.js之npm单独与批量升级依赖包的方式 文章目录 Node.js之npm单独与批量升级依赖包的方式npm查看与升级依赖包1. 单独安装或升级最新版本2. 查看依赖但不升级1. npm outdated2. npm update 3. 批量升级新版本4. npm-check-updates1. 全局安装2. ncu查看可升级的版本3. 升级依…

【Linux驱动】块设备驱动(三)—— 块设备读写(不使用请求队列)

并非每种块设备都会用到请求队列&#xff0c;从上节可以知道&#xff0c;请求队列的作用是管理和调用IO请求&#xff0c;那么反过来想&#xff0c;如果IO请求较少&#xff0c;那就可以无需使用请求队列。在以下情况中&#xff0c;可以不使用请求队列。 单任务环境: 当系统中只有…