如何使用FitsIO(python)创建空的FITS图像?

时间:2018-10-31 18:48:18

标签: python python-3.x python-3.6 fits

我想通过提供输入尺寸来创建一个空的FITS图像。之所以这样做,是因为我要遍历图像的内容并对其进行修改,因此首先需要使用空图像来初始化文件。

使用astropy,这很容易,但是我将库切换到FitsIO,但我无法将此代码转换为实际可用的内容。我一直在寻找FitsIO的github项目,发现了一个名为write_empty_hdu的API,但显然我在滥用它。

这是我的功能:

 def create_image(self, x_size, y_size, header=None):
    """!
    @brief Create a FITS file containing an empty image.
    @param x_size  The number of pixels on the x axis.
    @param y_size  The number of pixels on the y axis.
    """
     if header is not None:
         self.fits.write_empty_hdu(dims=[x_size, y_size], header=header, clobber=True)
    else:
         self.fits.write_empty_hdu(dims=[x_size, y_size], clobber=True) 

结果如下:

  

错误:“ FITS”对象没有属性“ write_empty_hdu”

     

回溯(最近通话最近一次):

     

文件“ /home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/LE3_DET_CL_PZWav.py”在mainMethod中的第159行      pixel_grid.initialize_map()

     

在initialize_map中的文件“ /home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/Grid.py”,第232行

     

self.wavelet_map.create_image(self._pixel_number ['Ny'],self._pixel_number ['Nx'])

     

在create_image中,文件“ /home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/PixelSmoothedImage.py”,第57行       super()。create_image(x_size,y_size)

     

在create_image中,文件“ /home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/FITSImage.py”,第81行       self.fits.write_empty_hdu(dims = [x_size,y_size],clobber = True)

     

AttributeError:“ FITS”对象没有属性“ write_empty_hdu”

您知道我如何用FitsIO编写此图像创作吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

通常,Python内置的内省和帮助功能非常强大。例如:

>>> import fitsio
>>> dir(fitsio)
['ASCII_TBL', 'BINARY_TBL', 'FITS', 'FITSCard', 'FITSHDR', 'FITSRecord', 'FITSRuntimeWarning', 'IMAGE_HDU', 'READONLY', 'READWRITE', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_fitsio_wrap', 'cfitsio_version', 'fitslib', 'read', 'read_header', 'read_scamp_head', 'test', 'util', 'write']

如您所见,没有write_empty_hdu,但是有write,看起来很有前途。所以现在:

>>>help(fitsio.write)

将显示所有您需要了解的内容。在您的情况下,您可能想要:

fitsio.write('somefile',np.empty(shape=(3,4)),header={'a': '','b': 'a','c': 3},clobber=True)

请注意,numpy.empty可以写入任意值-因此,您可能希望zeros确保您不相信数据是真实的。

答案 1 :(得分:0)

使用kabanus的非常有用的输入,我在FitsIO中查看了FITS类的可用API,并发现了create_hdu_image

最后,我的功能只不过是直接调用FitsIO:

def create_image(self, x_size, y_size, header=None):
    """!
    @brief Create a FITS file containing an empty image.
    @param x_size  The number of pixels on the x axis.
    @param y_size  The number of pixels on the y axis.
    """
    self.fits.create_image_hdu(img=None, dims=[x_size, y_size], dtype=("f8", "f8"), extver=0, header=header)