【问题标题】:switch axis for a data cube (fits file)数据立方体的切换轴(适合文件)
【发布时间】:2018-03-19 10:52:12
【问题描述】:

我有一些问题,我找不到任何问题的答案。

我正在尝试在 python 中创建一个数据立方体,其中三个轴是(RA,DEC,z),即 2 天空位置和红移。 我认为生成多维数据集的代码有效,我将多维数据集定义为:

cube     = np.zeros([int(size_x),int(size_y),int(Nchannel)])

其中xy 是像素坐标,红移在通道中被分割。有了这个立方体,我用一些线条的强度填充它。最后,我将 .fits 标头定义如下:

hdr = fits.Header()

hdr['EQUINOX'] = 2000
hdr['CRPIX1']  = round(size_ra*3600./pix_size/2.) 
hdr['CRPIX2']  = round(size_dec*3600./pix_size/2.)
hdr['CRPIX3']  = 0
hdr['CRVAL1']  = ra0
hdr['CRVAL2']  = dec0
hdr['CRVAL3']  = z_min
hdr['CD1_1']   =  pix_size/3600.
hdr['CD1_2']   =  0.
hdr['CD2_1']   =  0.
hdr['CD2_2']   =  pix_size/3600.
hdr['CTYPE1']  = "RA---TAN"
hdr['CTYPE2']  = "DEC--TAN"
hdr['CTYPE3']  = "Z"
hdr['BUNIT']   = "Jy/pixel"

fits.writeto('cube.fits',cube,hdr,overwrite=True)

这就是问题所在,我的 cube.fits 是在“坏”的方向。当我使用 ds9 打开它时,z 轴不是红移 z... 我怀疑标题错误,但我可以在哪里指定适合标题中的轴? 干杯

【问题讨论】:

    标签: python axis astronomy fits data-cube


    【解决方案1】:

    轴确实是倒置的,FITS 使用 Fortran 约定(列优先顺序),而 Python/Numpy 使用 C 约定(行优先顺序)。 http://docs.astropy.org/en/latest/io/fits/appendix/faq.html#what-convention-does-astropy-use-for-indexing-such-as-of-image-coordinates

    因此,对于您的立方体,您需要将轴定义为(z, y, x)

    In [1]: import numpy as np
    
    In [2]: from astropy.io import fits
    
    In [3]: fits.ImageHDU(data=np.zeros((5,4,3))).header
    Out[3]: 
    XTENSION= 'IMAGE   '           / Image extension                                
    BITPIX  =                  -64 / array data type                                
    NAXIS   =                    3 / number of array dimensions                     
    NAXIS1  =                    3                                                  
    NAXIS2  =                    4                                                  
    NAXIS3  =                    5                                                  
    PCOUNT  =                    0 / number of parameters                           
    GCOUNT  =                    1 / number of groups          
    

    【讨论】:

    • 感谢您的回答,我认为可以在标题中修改此约定,但似乎不可能。
    • 轴排序约定就是这样——有办法改变它。但是请注意github.com/astropy/astropy/issues/3836 中的讨论。一般来说,在 FITS 中存储数组时,不必(实际上几乎总是不得)手动设置NAXIS* 关键字。这些将从数组对象适当地生成。 Python 领域中的数组使用类似 Python/C 的轴排序,但在存储文件时将映射到 FITS 排序。因此,如果 Python 中的轴为 (x, y, z),它们仍将存储为 z -> NAXIS1,依此类推。
    • 同样,您在编写 WCS 标头时必须反转轴号。 WCS 界面也会正确处理这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2017-11-08
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多