我过去曾使用 iraf 来执行此操作,当像素比例不变时我没有问题(尽管我必须手动编辑任务参数才能使其正确工作)。现在我正在处理一些我需要的适合格式的模型光谱,并且“rspectex”任务不会自动将 ascii 文件的第一列转换为真实波长。
我也尝试过使用astropy和specutils,但同样,色散不正确。这不会太复杂,但我已经没有想法了。你以前做过吗,或者有什么想法吗?
谢谢!
data = np.loadtxt('spectrum.ascii')
hdu = fits.PrimaryHDU(data)
hdr = fits.Header()
hdr['SIMPLE'] = True
hdr['OBJECT'] = 'object'
hdr['COMMENT'] = 'comment'
hdu.header = hdr
hdu.writeto('spectrum.fits')
通常,如果这是一个相对简单的输入文件,我将使用天文表来完成此操作。所以,它会像下面这样:
from astropy.table import Table
# The names keyword is only needed if you want to change the column names.
spec = Table.read('spectrum.ascii',format='ascii',names=['wave','flux','err'])
# Add header comments
spec.meta['OBJECT']='object'
spec.meta['COMMENT']='comment'
# Save as FITS file
spec.write('spectrum.fits')
有一些注意事项:此方法不会在第 0 个扩展标头中写入对象名称和注释,仅在第一个扩展标头中写入。不过,我确信有办法做到这一点。另一件需要调整的事情是读取 ascii 文件的格式。您可以查看Table.read文档了解详细信息。