如何读取 IRAF 多光谱光谱?
Posted
技术标签:
【中文标题】如何读取 IRAF 多光谱光谱?【英文标题】:How to read in IRAF multispec spectra? 【发布时间】:2015-04-28 15:17:00 【问题描述】:我在使用 Iraf 生成的 fit 文件中有一个光谱。波长轴在标头中编码为:
WAT0_001= 'system=multispec'
WAT1_001= 'wtype=multispec label=Wavelength units=angstroms'
WAT2_001= 'wtype=multispec spec1 = "1 1 2 1. 2.1919422441886 4200 0. 452.53 471'
WAT3_001= 'wtype=linear'
WAT2_002= '.60 1. 0. 3 3 1. 4200.00000000001 1313.88904209266 1365.65012876239 '
WAT2_003= '1422.67911152069 1479.0560707956 1535.24082980747 1584.94609332243'
有没有一种简单的方法可以将它加载到 python 中?
【问题讨论】:
你有安装 Pyfits 或 astropy 吗? @Tom。我们在天文学家的 Facebook 群组上讨论了这个问题,并自己找到了答案。我们想打开一个帖子并给出答案以供将来参考。 【参考方案1】:我一直在使用 Rick White 给我的this 代码。但是,specutils 包可能是更好的方法:
from specutils.io import read_fits
spectra_list = read_fits.read_fits_spectrum1d('mymultispec.fits')
print spectra_list[0]
Spectrum1D([ 338.06109619, 395.59234619, 326.0012207 , ...,
660.0098877 , 686.54498291, 689.58374023])
print spectra_list[1].dispersion
<Quantity [ 8293.44875263, 8293.40459999, 8293.36044556,...,
8166.53073537, 8166.48250242, 8166.43426803] Angstrom>
【讨论】:
您能将此标记为正确答案吗?这样一来,新手就会知道这是可行的。 我同意,specutils 是要走的路。 specutils 现在已经停止支持多规范格式,因为他们重组了代码并且到目前为止还没有重写多规范部分。他们将来可能会将其添加回来。 我想指出specutils已经更新,这里解释的方法已经失效了。【参考方案2】:跟进@kgully 的回答 - 以及相关讨论:specutils 支持再次读取多规格文件(已经有好几年了,即使在这些答案之间没有一点作用)。相关代码 sn-p(对于 any IRAF 格式的文件)现在是:
>>> from specutils import Spectrum1D
>>> spec = Spectrum1D.read('mymultispec.fits')
>>> print(spec)
Spectrum1D (length=762078)
flux: [ 0.4408 adu, ..., -1.0 adu ], mean=0.74146 adu
spectral axis: [ 3726.7 Angstrom, ..., 9300.0 Angstrom ],
mean=6094.4 Angstrom
如果您的 multispec 文件实际上有多个光谱,则将 Spectrum1D
替换为 SpectrumCollection
。
【讨论】:
以上是关于如何读取 IRAF 多光谱光谱?的主要内容,如果未能解决你的问题,请参考以下文章
Python遥感图像处理应用篇(十四):GDAL 读取多光谱数据为二维数组并存入csv文件
Python遥感图像处理应用篇(十五):GDAL 读取多光谱数据做归一化处理
Python遥感图像处理应用篇(十五):GDAL 读取多光谱数据做归一化处理