我对 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
)
现在使用这些列,您可以将模块制作为:
- 获取输入通量
- 搜索列以查找匹配的通量
- 显示匹配行的波长
关于Python 和一维谱 - 如何访问拟合文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17207561/