MontageError: неверный файл таблицы
Я использую Python 2.7.3 на моем сервере Debian. Вот входной код:
import aplpy
import pyfits
from numpy import *
import matplotlib as plt
import montage as montage_wrapper
import PIL
r = pyfits.open('3c324IR.fits')
b = pyfits.open('3c324UVIS.fits')
g = pyfits.open('3c5GHZ.fits')
r.info()
g.info()
b.info()
print(r[1].header)
print(g[1].header)
print(b[1].header)
r1 = r[1].data
g1 = g[0].data
b1 = b[1].data
hdu = pyfits.PrimaryHDU(r1)
hdulist = pyfits.HDUList([hdu])
hdulist.writeto('r.fits')
hdu = pyfits.PrimaryHDU(g1)
hdulist = pyfits.HDUList([hdu])
hdulist.writeto('g.fits')
hdu = pyfits.PrimaryHDU(b1)
hdulist = pyfits.HDUList([hdu])
hdulist.writeto('b.fits')
aplpy.make_rgb_cube(['r.fits','g.fits','b.fits'], '3c_324_rgb.fits')
aplpy.make_rgb_image('3c_324_rgb.fits','3c_324_rgb.png')
f = aplpy.FITSFigure('3c_324_rgb.fits')
f.show_rgb()
f.save('3c_324_rgb2.png')
print 'END'
Все работает нормально, пока не начну aplpy.make_rgb_cube()
часть кода. Я знаю это, потому что, когда я запускаю его и вырезаю, все работает нормально (пока он не поймет, что из этого куска нет выхода для продолжения). Вот беспорядок в терминале:
Traceback (most recent call last):
File "test9.py", line 47, in <module>
aplpy.make_rgb_cube(['r.fits','g.fits','b.fits'], '3c_324_rgb.fits')
File "/usr/local/lib/python2.7/dist-packages/aplpy/rgb.py", line 309, in make_rgb_cube
montage.mMakeHdr(images_raw_tbl, header_hdr, north_aligned=north, system=system, equinox=equinox)
File "/usr/local/lib/python2.7/dist-packages/montage_wrapper/commands.py", line 1468, in mMakeHdr
return status.parse_struct("mMakeHdr", p.stdout.read().strip())
File "/usr/local/lib/python2.7/dist-packages/montage_wrapper/status.py", line 33, in parse_struct
result = Struct(command, string)
File "/usr/local/lib/python2.7/dist-packages/montage_wrapper/status.py", line 70, in __init__
raise MontageError("%s: %s" % (command, self.msg))
montage_wrapper.status.MontageError: mMakeHdr: Invalid table file: /tmp/tmpmyYyN7/images_raw.tbl
Я не знаю, что значит выше. Я просмотрел это, чтобы найти что-то в Google, и я оказался пустым. Что это за ошибка и как я могу ее исправить?
3 ответа
Вот вывод с использованием отладчика:
> /home/python_lib/test10.py(59)<module>()
-> aplpy.make_rgb_cube(['/tmp/tmpmyYyN7/r.fits','/tmp/tmpmyYyN7/g.fits'], '3c_324_rgb.fits')
(Pdb) n
MontageError: MontageE...aw.tbl',)
> /home/python_lib/test10.py(59)<module>()
-> aplpy.make_rgb_cube(['/tmp/tmpmyYyN7/r.fits','/tmp/tmpmyYyN7/g.fits'], '3c_324_rgb.fits')
(Pdb) n
--Return--
> /home/python_lib/test10.py(59)<module>()->None
-> aplpy.make_rgb_cube(['/tmp/tmpmyYyN7/r.fits','/tmp/tmpmyYyN7/g.fits'], '3c_324_rgb.fits')
Затем, когда я нажимаю "n", "ввод" снова выдает ошибку:
(Pdb) n
Traceback (most recent call last):
File "test10.py", line 59, in <module>
aplpy.make_rgb_cube(['/tmp/tmpmyYyN7/r.fits','/tmp/tmpmyYyN7/g.fits'], '3c_324_rgb.fits')
File "/usr/local/lib/python2.7/dist-packages/aplpy/rgb.py", line 309, in make_rgb_cube
montage.mMakeHdr(images_raw_tbl, header_hdr, north_aligned=north, system=system, equinox=equinox)
File "/usr/local/lib/python2.7/dist-packages/montage_wrapper/commands.py", line 1468, in mMakeHdr
return status.parse_struct("mMakeHdr", p.stdout.read().strip())
File "/usr/local/lib/python2.7/dist-packages/montage_wrapper/status.py", line 33, in parse_struct
result = Struct(command, string)
File "/usr/local/lib/python2.7/dist-packages/montage_wrapper/status.py", line 70, in __init__
raise MontageError("%s: %s" % (command, self.msg))
montage_wrapper.status.MontageError: mMakeHdr: Invalid table file: /tmp/tmpQILi76/images_raw.tbl
Exception AttributeError: "'NoneType' object has no attribute 'path'" in <function _remove at 0x7f7ad03c2668> ignored
Я посмотрю и посмотрю, смогу ли я понять это... Я вставил
pdb.set_trace()
линия как раз перед
aplpy.make_rgb_cube
и, конечно же, вот где ошибка. Возможно ли, что это из-за того, как я "нарезал" изображения в предыдущем коде? Проблема с изображениями.fits, с которыми я сталкиваюсь, заключается в том, что для каждого из них есть несколько файлов "изображений":
Filename: 3c324IR.fits
No. Name Type Cards Dimensions Format
0 PRIMARY PrimaryHDU 748 ()
1 SCI ImageHDU 144 (1091, 966) float32
2 WHT ImageHDU 48 (1091, 966) float32
3 CTX ImageHDU 43 (1091, 966) int32
4 HDRTAB BinTableHDU 557 2R x 274C [9A, 3A, J, D, D, D, D, D, D, D, D, D, D, D, D, J, 6A, 9A, 7A, 18A, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, J, J, D, D, D, D, D, D, J, J, 8A, 23A, 11A, 18A, 4A, D, D, J, J, D, D, D, D, 23A, D, D, D, D, J, J, D, 23A, 8A, J, D, D, D, 23A, 1A, D, D, D, D, D, D, 12A, 12A, 8A, 23A, D, D, 10A, 10A, D, D, D, 2A, 3A, 3A, 4A, 8A, 7A, D, J, D, 6A, 9A, D, D, D, 4A, 18A, 3A, J, 5A, D, D, D, 8A, D, D, D, D, D, 23A, 1A, D, 23A, D, D, D, 3A, J, 1A, 4A, D, 3A, 6A, D, D, D, D, D, 23A, D, D, D, D, D, 1A, J, J, J, J, 8A, 23A, J, J, 10A, 7A, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, 12A, D, 24A, 23A, D, 2A, 8A, D, J, D, D, 6A, 4A, D, D, D, D, D, D, D, D, D, D, D, 19A, D, J, 23A, D, 8A, D, D, 13A, D, D, J, D, D, 5A, 9A, 1A, 4A, D, 1A, J, 1A, 1A, 1A, 1A, D, D, D, D, D, D, 4A, D, D, 4A, 3A, 1A, J, 3A, 6A, J, D, D, D, 4A, J, D, D, D, J, J, J, 1A, D, D, D, D, J, J, 6A, J, 8A, D, D, 1A, 5A, J, 3A, 8A, 8A, D, J, D, 8A, 8A]
5 WCSCORR BinTableHDU 59 7R x 24C [40A, I, 1A, 24A, 24A, 24A, 24A, D, D, D, D, D, D, D, D, 24A, 24A, D, D, D, D, J, 40A, 128A]
Выше приведен вывод, когда я печатаю заголовок Hubble IR.fits, который показывает, что есть несколько HDU, но я хочу только один #1, который является изображением поля. То же самое следует для изображений UVIS и VLA. Единственный способ выбрать один из них - открыть их с помощью PyFITS, а затем выбрать каждый из них в виде строки
r1 = r[1].data
Это правильный способ сделать это? Я думаю, что большинство изображений.fits не имеют этой настройки нескольких изображений для одного файла. Когда я пытаюсь запустить его другим способом, откройте исходный файл, хотя он определенно не понравится.
После выбора с помощью строки выше я просто сохраняю ее отдельно, как изображение.fits.
Брэндон Дойл
aplpy.make_rgb_cube создает несколько файлов, которые используются Montage mMakeHdr в качестве шага на пути к созданию вашего куба.
aplpy.make_rgb_cube проходит все шаги вплоть до mMakeHdr.
mMakeHdr пытается прочитать один из созданных файлов с именем /tmp/tmpmyYyN7/images_raw.tbl. Чтение файла не удается, потому что файл недействителен. Неверный файл может содержать недопустимое содержимое, это также может означать, что файл не существует.
- Действительно ли /tmp/tmpmyYyN7/images_raw.tbl был создан?
- Если он создан, содержит ли он список имен файлов изображений?
- Проверьте дату создания и посмотрите, является ли это файл, который вы создали, или более старый, который вы не можете перезаписать.
- Убедитесь, что у вас есть права на чтение и запись для / tmp и / tmp / tmpmyYyN7
- Если этого файла нет, но у вас есть разрешение на запись во временную папку, проверьте, не был ли файл с именем images_raw.tbl записан где-нибудь на вашем жестком диске.
Проверьте, установлено ли в вашей системе более одной установки Montage: Запустите "which mProjectPP" из командной строки оболочки
В Python сделать: import os os.system('which mProjectPP') Оба должны дать один и тот же ответ. Если нет, у вас есть две установки Montage, и они перепутаны.
- Я пошел в /tmp/tmpmyYyN7/ и images_raw.tbl там.
- Если я наберу "nano images_raw.tbl", он ничего не содержит... значит ли это, что он не содержит имен файлов изображений?
- Я изменил разрешения на чтение / запись с помощью "chmod 777", и он все еще не работал, когда я его запустил, просто привел к тому же результату.
ввод "stat images_raw.tbl" приводит к следующему:
root @ jarvis: / tmp / tmpmyYyN7 # stat images_raw.tbl Файл: `images_raw.tbl'Размер: 0 Блоки: 0 Блок ввода-вывода: 4096 обычных пустых файлов Устройство: 801h/2049d Индекс: 5772965 Ссылки: 1 Доступ: (0644/-rw-r -r--) Uid: ( 0/ root) Gid: ( 0/ root) Доступ: 2014-08-15 04:40:25.433245271 -0400 Изменить: 2014-08-15 04:40:25.429245244 -0400 Изменение: 2014-08-15 04: 40: 25.429245244 -0400 Рождение: -
Это вывод:
root @ jarvis: / tmp / tmpmyYyN7 # которое mProjectPP /home/python_lib/Montage_v3.3/Montage//mProjectPP