Ошибка при использовании astWCS при попытке создать объект WCS - PullRequest
1 голос
/ 12 января 2010

Я использую python2.5 и пытаюсь использовать библиотеку astLib для анализа информации WCS на астрономических изображениях. Я пытаюсь получить экземпляр объекта со следующим кодом скелета:

from astLib import astWCS

w = astWCS.WCS('file.fits') # error here

где file.fits - строка, указывающая на допустимый файл подгонки.

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

import pyfits
from astLib import astWCS

f = pyfits.open('file.fits')
header = f[0].header
f.close()

w = astWCS.WCS(header, mode='pyfits') # error here also

Ошибка заключается в следующем:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/astro/phrfbf/build/lib/python2.6/site-packages/astLib/astWCS.py", line 79, in __init__
    self.updateFromHeader()
  File "/home/astro/phrfbf/build/lib/python2.6/site-packages/astLib/astWCS.py", line 119, in updateFromHeader
    self.WCSStructure=wcs.wcsinit(cardstring)
  File "/home/astro/phrfbf/build/lib/python2.6/site-packages/PyWCSTools/wcs.py", line 70, in wcsinit
    return _wcs.wcsinit(*args)
TypeError: in method 'wcsinit', argument 1 of type 'char *'

Когда я запускаю ipython, я получаю полную ошибку здесь на pastebin

Я знаю, что модуль astWCS является упакованной версией WCStools, но я бы предпочел использовать модуль Python, так как остальная часть моего кода написана на Python

Может кто-нибудь помочь с этой проблемой?

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Только что обнаружил, что обновленная версия этой библиотеки исправила проблему, спасибо всем за помощь

0 голосов
/ 14 января 2010

О, прости, я должен был увидеть. Если взглянуть на pastebin более подробно, единственная ошибка, о которой я могу думать, это то, что по какой-то причине в заголовке есть Unicode. Он не может быть преобразован в char *, и вы получите ошибку. Я пытался что-то искать в шапке, но все выглядит хорошо. Можете ли вы сделать это и опубликовать вывод в другой папке?

import pyfits

f = pyfits.open('file.fits')
header = f[0].header
f.close()

for x, i in enumerate(header.iteritems()):
    if len(str(i[1])) >= 70:
        print x, str(i[1])

cardlist = header.ascardlist() 
cardstring = "" 
for card in cardlist: 
    cardstring = cardstring + str(card)

print repr(cardstring)

Или, если вы можете проверить заголовок вашего файла подгонки на наличие "забавных" персонажей, избавление от них должно решить проблему.

...