Переупорядочить карты в заголовке FITS - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь изменить изображение FITS и соответствующим образом изменить его заголовок, а затем сохранить его в новый файл FITS

from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename

# Open FITS file
image_file = get_pkg_data_filename('tutorials/FITS-images/HorseHead.fits')
cube = fits.open(image_file)[0]

# Modify the cube
cube.header.remove('NAXIS2')

# ...

cube.header['NAXIS2'] = 5

# Save the new FITS file
hdu = fits.PrimaryHDU(cube.data)
hdu.header = cube.header
hdu.writeto('new.fits', overwrite=True)

Однако возвращается следующая ошибка:

VerifyError: 
Verification reported errors:
HDU 0:
    'NAXIS2' card at the wrong place (card 159).
    'EXTEND' card at the wrong place (card 160).
Note: astropy.io.fits uses zero-based indexing.

Как мне поставить карты в правильном порядке в шапке? Или есть способ установить карту прямо в нужном месте?


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

1 Ответ

0 голосов
/ 05 марта 2019

Класс Header имеет функцию insert, которая позволяет добавить карту до или после данной карты.

cube.header.insert('EXTEND', ('NAXIS2', 5))

добавит карту 'NAXIS2' со значением 5 прямо перед картой 'EXTEND'.

Используя ключевое слово after=True, также можно установить новую карту сразу после данной карты.Другой способ сделать то же самое:

cube.header.insert('NAXIS1', ('NAXIS2', 5), after=True)

С этой модификацией hdu.writeto(...) больше не выдает ошибку.

...