Как обновить заголовок файла FITS с помощью FitsIO? - PullRequest
1 голос
/ 18 апреля 2019

Я сейчас пытаюсь изменить заголовок файла FITS.Более конкретно, я хочу добавить новые ключевые слова к нему.Я работаю с FitsIO для python, в его версии 0.9.11.

Во время некоторой обработки данных моя программа создает новые файлы FITS и обновляет их содержимое и заголовок.Раньше я работал с Astropy, но это больше не вариант, поэтому я возвращаюсь к FitsIO, что для меня довольно сложно.

Обновление / перезапись контента довольно проста, но у меня проблемы смодификация заголовка.Чтобы изолировать мои проблемы и найти правильную процедуру (документация была не очень полезна), я создал небольшую программу, которая проверяет только, как написать заголовок.

В качестве входных данных я использую объект FITSHDR, содержащийследующие вещи:

update_data = fitsio.FITSHDR([
"IVAL    =                   36 / integer value           ",
"SHORTS  = 'hello w'                                      ",
"DBL     =                 1.25                           ",
"CDELT1  =                 0.00333333333333               "])

А вот проверенные функции:

def write_hdu_1(data, fits_file):
    with fitsio.FITS(fits_file, 'rw', clobber=True) as fits:
        fits[extension].write_keys(data)

RESULT : удаляет карту END, повреждая HDU.

def write_hdu_2(data, fits_file):
   with fitsio.FITS(fits_file, 'rw', clobber=True) as fits:
       for key in data.keys():
           fits[extension].write_key(key, data.get(key))

РЕЗУЛЬТАТ : удаляет карту КОНЕЦ, повреждая HDU.

def write_hdu_3(fits_file):
    with fitsio.FITS(fits_file, 'rw', clobber=True) as fits:
        keydict = { 'name':'test', 'value':35, 'comment':'keydict test'}
        fits[-1].write_key(**keydict)

РЕЗУЛЬТАТ :

File "test_fitsio.py", line 26, in write_hdu_3
    fits[-1].write_key(**keydict)
TypeError: write_key() got an unexpected keyword argument 'name'

ИзВ отчаянии я наконец-то добавил карту «END» вручную, вот так:

def write_hdu(self, header_content):
    self.fits[extension].write_keys(header_content)
    self.fits[extension].write_key('END', '')

Но затем карта END была заполнена пробелами, которые не были правильно распознаны другими библиотеками, которые я использую.

Итак, есть ли у вас какие-то мысли о том, как добавить / обновить ключевые слова заголовка, с помощью Python FitsIO и без потери карты «END» в процессе?

Спасибо!

1 Ответ

1 голос
/ 19 апреля 2019

Удалите опцию clobber, когда вы откроете свой файл, и редакция заголовка будет работать.Опция clobber позволяет удалить любой существующий файл перед его открытием, см. Реализацию docstring и code .

С моей стороны это работает как очарование дляfitsio 0.9.11 в Python3:

with fitsio.FITS('test.fits', 'rw') as ff:
    ff[-1].write_key('KEY', 'key value', 'my comment')

С другой стороны, используя тот же код в существующем файле для добавления ключевого слова в заданный заголовок HDU, удалите файл с диска, если вы используете опцию clobber.

$ du -sh test.fits                                                                                           
308K    test.fits
$ python3 -c "import fitsio; ff = fitsio.FITS('test.fits', 'rw', clobber=True); ff[-1].write_key('KEY', 'key value', 'my comment')"
$ du -sh test.fits                                                                                  
4.0K    test.fits
$ cat test.fits
KEY     = 'key value'          / my comment                                     END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

Это довольно странный результат, но fitsio добавляет ключевое слово END, но в пустом файле, который, если не является допустимым файлом FITS.

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