Как создать пустое изображение FITS с помощью FitsIO (python)? - PullRequest
0 голосов
/ 31 октября 2018

Я хочу создать пустое изображение FITS, задав входное измерение. Я делаю это потому, что перебираю содержимое изображения и изменяю его, поэтому мне нужно сначала инициализировать файл с пустым изображением.

Используя астропию, это было легко, но я переключаю библиотеку на FitsIO и не смог перевести этот код во что-то действительно работающее. Я искал в github-проекте FitsIO и нашел API с именем write_empty_hdu, но я явно неправильно его использую.

Вот моя функция:

 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'

Traceback (последний вызов был последним):

Файл "/home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/LE3_DET_CL_PZWav.py", строка 159, в mainMethod pixel_grid.initialize_map ()

Файл "/home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/Grid.py", строка 232, в initialize_map

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

Файл "/home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/PixelSmoothedImage.py", строка 57, в create_image super (). create_image (x_size, y_size)

Файл "/home/user/Work/Projects/DET_CL_PZWAV/DET_CL_PZWav/python/DET_CL_PZWav/FITSImage.py", строка 81, в create_image self.fits.write_empty_hdu (dims = [x_size, y_size], clobber = True)

AttributeError: объект 'FITS' не имеет атрибута 'write_empty_hdu'

Знаете, как я мог написать создание этого изображения с помощью FitsIO?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Используя очень полезный ввод kabanus, я посмотрел доступный API для класса FITS внутри FitsIO и нашел 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)
0 голосов
/ 31 октября 2018

Вообще, 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 убедиться, что вы не убедили, что данные были чем-то реальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...