1

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

4

1 回答 1

3

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

我下载了这个文件:HST FOS(FOS 2 x 2064 初级阵列光谱,包含通量和波长阵列,加上一个小表格扩展),其中包含光谱和波长。现在,我不熟悉格式,但这是我能找到的:

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. 显示匹配行的波长
于 2013-06-20T12:27:45.997 回答