我想使用TESScut中的数据绘制Beta Dor的TESS测量值。在Gaia DR2 archive中,我查找Beta Dor的RA和DEC值,得到:

RA: 83.40630967798376 DEC:  -62.48977125108528


我转到TESScut,将这两个值放入,选择“扇区1”,然后选择“ Download FFI Cutout”。解压缩下载的文件,然后在Python中执行以下操作:

import matplotlib.pyplot as plt
from lightkurve import TessTargetPixelFile
import numpy as np

sector1ffi_cutout='tess-s0001-4-4_83.40630967798376_-62.48977125108528_64x64_astrocut.fits'
tpf_s1 = TessTargetPixelFile(sector1ffi_cutout)

fig = plt.figure(figsize=(5,5))
fig.add_subplot(111, projection=tpf_s1.wcs)
plt.pcolormesh(np.log(tpf_s1.flux[0]))
plt.show()


给我:

python - 如何使用Python将TESScut中的一颗恒星绘制到天空的正确位置(并且不会出现10度左右的误差)?-LMLPHP

根据盖亚(及其他来源)的资料,看坐标(〜-53°,〜6h30min)显然是错误的,恒星不在此位置。

我做错了什么,如何将这颗星标绘在应有的位置?



为了完整起见,当我绘制星星时,会收到以下警告:

> /home/szabopal/.local/lib/python3.5/site-packages/ipykernel_launcher.py:10:
> RuntimeWarning: divide by zero encountered in log   # Remove the CWD
> from sys.path while we load stuff.
> /home/szabopal/.local/lib/python3.5/site-packages/ipykernel_launcher.py:10:
> RuntimeWarning: invalid value encountered in log   # Remove the CWD
> from sys.path while we load stuff.
> /home/szabopal/.local/lib/python3.5/site-packages/astropy/visualization/wcsaxes/grid_paths.py:73:
> RuntimeWarning: invalid value encountered in greater   discontinuous =
> step[1:] > DISCONT_FACTOR * step[:-1]
> /home/szabopal/.local/lib/python3.5/site-packages/astropy/visualization/wcsaxes/grid_paths.py:73:
> RuntimeWarning: invalid value encountered in greater   discontinuous =
> step[1:] > DISCONT_FACTOR * step[:-1]
> /home/szabopal/.local/lib/python3.5/site-packages/astropy/visualization/wcsaxes/grid_paths.py:73:
> RuntimeWarning: invalid value encountered in greater   discontinuous =
> step[1:] > DISCONT_FACTOR * step[:-1]
> /home/szabopal/.local/lib/python3.5/site-packages/astropy/visualization/wcsaxes/grid_paths.py:73:
> RuntimeWarning: invalid value encountered in greater   discontinuous =
> step[1:] > DISCONT_FACTOR * step[:-1]




进一步发展

我认为上述问题是由wcs引用整个FFI而非切口引起的。

print(tpf_s1.wcs)


给出:

WCS Keywords

Number of WCS axes: 2
CTYPE : 'RA---TAN-SIP'  'DEC--TAN-SIP'
CRVAL : 90.634460449219  -57.666290283203
CRPIX : 250.0  -984.0
PC1_1 PC1_2  : 1.0  1.0
PC2_1 PC2_2  : 1.0  1.0
CDELT : 0.00571299832697903  0.005705604460241471
NAXIS : 81986  1282

最佳答案

此问题源于matplotlib处理WCS投影的方式的微妙之处。

为maplotlib图创建WCS投影的WCSAxes不考虑WCS中的SIP变形(因为它使用wcs.wcs_world2pix而不是wcs.all_world2pix)。

通常,这没什么大不了的,但是在显示TESScut切口时,有两个因素会使它变得很重要。首先是TESScut生成的TPF带有来自全帧图像的原始WCS信息,该信息已针对剪切位置进行了调整。这意味着与TESS管道TPF中的WCS信息不同,TESScut TPFS中的WCS信息包含SIP失真的完整补充,而matplotlib会忽略这些失真。显示坐标的准确性的第二个因素是光源在TESS CCD上的位置。由于TESS视场很大,因此在全帧图像的边缘,通过忽略SIP失真而产生的差异可能约为15个像素。

这个特定的源非常在FFI的边缘,因此SIP失真将产生很大的不同:

python - 如何使用Python将TESScut中的一颗恒星绘制到天空的正确位置(并且不会出现10度左右的误差)?-LMLPHP

有两个选项可以解决此问题:


不要直接使用matplotlib投影选项,而是将所有内容移到像素空间中,根据需要手动调用wcs.all_world2pix或wcs.allpix2world。
为不包含SIP失真的切口创建一个新的WCS(这很好,因为切口足够小,以至于不需要它们)。这是一个Jupyter笔记本,描述了为抠图制作此新WCS的一种方法:https://github.com/ceb8/tessworkshop_wcs_hack/blob/master/tesscut_wcs_hack.ipynb

07-26 09:36