Python 和一维谱 - 如何访问拟合文件中的数据

标签 python arrays astronomy spectrum

我对 Python 很陌生,一直在寻找我想要的答案,但还没有找到。我有一个一维光谱文件 (.fits),想访问其波长和通量信息。例如,如果我插入一个波长值,我会尝试编写一个程序来给出输入波长的通量。谁能给我一个关于如何编写这样的程序的快速指南,或者我需要从哪些模块开始? numpy 和 pyfits 足以完成任务吗?非常感谢。

最佳答案

据我从 Klaus 提到的 FITS 标准中得知,您需要 PyFits 和 Numpy(Numpy 是 PyFits 的先决条件)。获取 numpy 1.7 的 MKL 版本

我下载了这个文件:HST FOS (FOS 2 x 2064 primary array spectrum containing the flux and wavelength arrays, plus a small table extension) ,其中包含光谱和波长。现在,我不熟悉这种格式,但这是我可以找到的:

import pyfits
hdulist = pyfits.open('testFits.fits')
tbdata = hdulist[1].data

hdulist.info() 给了我这个: hdulist.info()

Filename: D:\Downloads\Documents\Python_Scripts\testFits.fits No.   
Name         Type      Cards   Dimensions   Format 0    PRIMARY    
PrimaryHDU     163   (2064, 2)    float32    1    y19g0309t.c2h.tab 
TableHDU        85   2R x 19C     [D25.16, E15.7, E15.7, E15.7,
E15.7, D25.16, D25.16, I11, I11, D25.16, D25.16, A8, A8, I11, E15.7,
A4, E15.7, E15.7, E15.7]

显然,我对此一无所知:),所以更深入一点:

print tbdata[0]

给了我:

(1.0, 1.0, 1.0, 0.0, 2.738755e-15,
182.63573015259999, 39.405888372579994, 0, 0, 49099.133531036357, 49099.133541163668, 'PIXEL', 'SINGLE', 0, -1516.0, 'OBJ', 31.249689, 0.0, 0.0)

我假设这对您来说有意义。

print tbdata.columns

ColDefs(

    name = 'CRVAL1'; format = 'D25.16'; start = 1
    name = 'CRPIX1'; format = 'E15.7'; start = 29
    name = 'CD1_1'; format = 'E15.7'; start = 45
    name = 'DATAMIN'; format = 'E15.7'; start = 61
    name = 'DATAMAX'; format = 'E15.7'; start = 77
    name = 'RA_APER'; format = 'D25.16'; start = 93
    name = 'DEC_APER'; format = 'D25.16'; start = 121
    name = 'FILLCNT'; format = 'I11'; start = 149
    name = 'ERRCNT'; format = 'I11'; start = 161
    name = 'FPKTTIME'; format = 'D25.16'; start = 173
    name = 'LPKTTIME'; format = 'D25.16'; start = 201
    name = 'CTYPE1'; format = 'A8'; start = 229
    name = 'APER_POS'; format = 'A8'; start = 241
    name = 'PASS_DIR'; format = 'I11'; start = 253
    name = 'YPOS'; format = 'E15.7'; start = 265
    name = 'YTYPE'; format = 'A4'; start = 281
    name = 'EXPOSURE'; format = 'E15.7'; start = 289
    name = 'X_OFFSET'; format = 'E15.7'; start = 305
    name = 'Y_OFFSET'; format = 'E15.7'; start = 321

)

现在使用这些列,您可以将模块制作为:

  1. 获取输入通量
  2. 搜索列以查找匹配的通量
  3. 显示匹配行的波长

关于Python 和一维谱 - 如何访问拟合文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17207561/

相关文章:

arrays - 使用字典的 Vlookup 替代方案

java - 无法在屏幕上显示输出

javascript - 将 CSV 文件放入堆栈布局 d3.js 中的内置数组中

python - Pyephem,定义和绘制不同时期的恒星

python - 使用Python类进行封装,而不是实例化

python - 安排 python 的 sorted(set( <collection> ))

python - SageMaker 示例访问被拒绝

python - 数据立方体的切换 Axis (适合文件)

language-agnostic - 以计算方式求解开普勒方程

python - 从 Python 时区感知日期获取 UNIX 时间戳(即 UTC 时间戳)