You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python3的oifits模块筛选指定INSNAME(GRAVITY_SC_P1)数据

问题描述

在OIFitsExplorer中打开.fits文件时可看到对应结构,我希望通过Python3的oifits模块仅获取GRAVITY_SC_P1的数据。当前使用的代码会获取所有四个INSNAME(对应“子目录”)的数据,而非指定的单个数据,请问如何筛选出指定INSNAME的数据?

现有代码

target = "Zeta_Ori"

for infile in sys.argv[1:]:

    obj = oifits.open(infile)
    obj.info()

    outfile = os.path.basename(infile).replace("fits", "dat")
    fout = open("dat_vis/" + outfile, "w")

    for vis2 in obj.vis2:

        if vis2.target.target == target:
            fout.write("# %s\n" % (vis2))
            fout.write("# %s\n" % (vis2.target))

            t1 = astropy.time.Time(vis2.timeobs, scale='utc', format='datetime')
            t2 = t1.tdb

            for i in range(len(vis2.wavelength.eff_wave)):
                if vis2.vis2data[i] != "--":
                    fout.write("%22.8f    %32.16e %32.16e    %32.16e %32.16e    %32.16e %32.16e %8s\n" % (t2.jd, vis2.ucoord, vis2.vcoord, vis2.wavelength.eff_wave[i], vis2.wavelength.eff_band[i], vis2.vis2data[i], vis2.vis2err[i], str(vis2.station[0])[:2]+str(vis2.station[1])[:2]))


    fout.close()
解决方案

只需在遍历obj.vis2的判断条件中,增加对INSNAME的匹配即可——OIFITS格式里的INSNAME字段对应vis2对象的insname属性,直接叠加该判断就能过滤出指定仪器的数据。

修改后的代码

import sys
import os
import astropy.time
import oifits

target = "Zeta_Ori"
target_insname = "GRAVITY_SC_P1"  # 定义要筛选的目标INSNAME

for infile in sys.argv[1:]:
    obj = oifits.open(infile)
    obj.info()

    outfile = os.path.basename(infile).replace("fits", "dat")
    fout = open("dat_vis/" + outfile, "w")

    for vis2 in obj.vis2:
        # 同时匹配目标天体和指定INSNAME
        if vis2.target.target == target and vis2.insname == target_insname:
            fout.write("# %s\n" % (vis2))
            fout.write("# %s\n" % (vis2.target))

            t1 = astropy.time.Time(vis2.timeobs, scale='utc', format='datetime')
            t2 = t1.tdb

            for i in range(len(vis2.wavelength.eff_wave)):
                if vis2.vis2data[i] != "--":
                    fout.write("%22.8f    %32.16e %32.16e    %32.16e %32.16e    %32.16e %32.16e %8s\n" % (t2.jd, vis2.ucoord, vis2.vcoord, vis2.wavelength.eff_wave[i], vis2.wavelength.eff_band[i], vis2.vis2data[i], vis2.vis2err[i], str(vis2.station[0])[:2]+str(vis2.station[1])[:2]))

    fout.close()

内容的提问来源于stack exchange,提问作者Elena Greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:31:16