1

我在我的 Debian 服务器上使用 Python 2.7.3。这是输入代码:

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

我不知道上面的意思是什么。我已经通过它在谷歌中寻找一些东西,但我已经空了。这是什么错误,我该如何解决?

4

3 回答 3

1

aplpy.make_rgb_cube 创建了几个文件,Montage mMakeHdr 使用这些文件作为生成立方体的一个步骤。
aplpy.make_rgb_cube 通过了所有步骤直到 mMakeHdr。
mMakeHdr 尝试读取名为 /tmp/tmpmyYyN7/images_raw.tbl 的已创建文件之一读取文件失败,因为该文件无效。无效文件可能存在错误内容,也可能意味着该文件不存在。

  1. /tmp/tmpmyYyN7/images_raw.tbl 真的被创建了吗?
  2. 如果创建它,它是否包含图像文件名列表?
  3. 检查创建日期,看看这是您创建的文件还是您无法覆盖的旧文件。
  4. 检查您是否具有对 /tmp 和 /tmp/tmpmyYyN7 的读写权限
  5. 如果该文件不存在,但您对临时文件夹具有写入权限,请检查并查看名为 images_raw.tbl 的文件是否已写入硬盘驱动器的任何位置。
  6. 检查您的系统上是否安装了多个蒙太奇:从 shell 命令行运行“which mProjectPP”

    在 Python 中: import os os.system('which mProjectPP') 两者都应该提供相同的答案。如果没有,你有两个蒙太奇装置,而且它们混在一起了。

于 2014-08-15T15:38:03.297 回答
1
  1. 我去了 /tmp/tmpmyYyN7/ 并且 images_raw.tbl 在那里。
  2. 如果我输入“nano images_raw.tbl”,它什么都不包含……这是否意味着它不包含任何图像文件名?
  3. 我用“chmod 777”更改了读/写权限,运行它时它仍然不起作用,只是产生了相同的输出。
  4. 键入“stat images_raw.tbl”会产生以下结果:

    root@jarvis:/tmp/tmpmyYyN7# stat images_raw.tbl 文件:`images_raw.tbl' 大小:0 块:0 IO 块:4096 常规空文件设备:801h/2049d Inode: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 出生:-

  5. 这是输出:

    root@jarvis:/tmp/tmpmyYyN7#哪个mProjectPP /home/python_lib/Montage_v3.3/Montage//mProjectPP

于 2014-08-15T16:19:28.347 回答
1

这是使用调试器的输出:

> /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”“enter”时,它会发出错误:

(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 图像。

布兰登·道尔

于 2014-08-15T19:55:37.613 回答