我对 Python 很陌生,一直在寻找我想要的答案,但还没有找到。我有一个 1D 光谱文件 (.fits),想访问它的波长和通量信息。例如,如果我插入一个波长值,我正在尝试编写一个程序,该程序会给我输入波长的通量。谁能给我一个关于如何编写这样一个程序的快速指南,或者我需要从哪些模块开始?numpy 和 pyfits 是否足以完成这项任务?太感谢了。
问问题
1459 次
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
)
现在使用这些列,您可以将模块制作为:
- 获取输入通量
- 搜索匹配通量的列
- 显示匹配行的波长
于 2013-06-20T12:27:45.997 回答