【发布时间】:2021-02-05 13:48:39
【问题描述】:
我正在尝试使用 astropy/spectral_cube 提取 FITS 数据集的光谱轴。具体来说,我想将通道值转换为速度值,考虑不同的无线电/光学约定和所检查谱线的静止频率。 这适用于一个 FITS 文件,但不适用于另一个。我认为这是由于标题的差异,但我无法弄清楚关键差异是什么。
我的代码:
from astropy.io import fits as pyfits
from astropy.wcs import WCS
from astropy import units
import spectral_cube
from spectral_cube import SpectralCube
fitsfile = pyfits.open(fitsfilename)
scube = SpectralCube.read(fitsfile)
vcube = scube.with_spectral_unit(units.km / units.s, velocity_convention='optical', rest_value=1420405750.0 * units.Hz)
'fitsfilename' 显然设置了要加载的文件的名称。 'rest_value' 是从标头中获得的。两个立方体都是 HI 数据。
然后我打印出光谱轴:
vcube.spectral_axis
(在愤怒中使用它时,我会做额外的步骤,因为我需要在非整数通道值和速度之间来回转换,例如:
cubewcs = vcube.wcs
wx, wy, wz = cubewcs.all_pix2world(150.0,125,0.0,0)
print(wx,wy,wz/vunit)
但我认为这对主要问题并不重要)
现在对于THINGS data sets(例如NGC 628)的情况,它会打印出我期望的准确速度值,范围从 588 到 735 km/s(使用 kvis 和 miriad 验证,两者都是超可靠的)。如果我将速度约定更改为无线电,结果会按预期更改。
但是对于AGES data sets(例如VC2),我得到的值大不相同。我预计范围 -2277 - 20108 km/s;我实际得到的是 -2350 - 19370,在上端时速超过 700 公里/秒!有趣的是,如果我不使用 .with_spectral_unit,即如果我只是这样做:
vcube.spectral_axis
...然后我得到正确的结果。所以这与单位转换有关,但我不知道是什么。我尝试将速度绘制为通道的函数。与正确速度的差异遵循抛物线,但最低差异不在参考通道处。
我唯一的怀疑是它可能与立方体的网格化方式有关。 AGES 网格使通道在频率上具有恒定大小,因此每个通道的速度宽度略有变化。我相信 THINGS 使用的是恒定的速度间隔。那么,spectral_cube 可以处理必要的转换,还是我找错了树?
【问题讨论】:
标签: python astropy astronomy fits