2010-01-12 9 views
1

Я запускаю python2.5 и пытаюсь использовать библиотеку astLib для анализа информации WCS в астрономических изображениях. Я стараюсь и получить объект инстанциирован со следующим кодом скелета:Ошибка при использовании astWCS, пытающегося создать объект 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, так как остальная часть моего кода находится в P ython

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

+0

Какую версию Python вы используете? –

+0

@Alok как указано в первой строке: python2.5. Более конкретно 2.5.4 –

ответ

1

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

0

О, извините, я должен был видеть. Глядя на pastebin более подробно, единственная ошибка, о которой я могу думать, состоит в том, что по какой-то причине заголовок имеет в нем юникод. Он не может быть преобразован в 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) 

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