我在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
我不知道上述意思。我已经通过它查看了谷歌中可以找到的东西,而且我已经空了。这是什么错误,如何解决?
答案 0 :(得分:1)
aplpy.make_rgb_cube会创建蒙太奇mMakeHdr使用的多个文件,作为生成多维数据集的一个步骤。
aplpy.make_rgb_cube超过了mMakeHdr的所有步骤。
mMakeHdr尝试读取名为/tmp/tmpmyYyN7/images_raw.tbl的已创建文件之一
读取文件失败,因为文件无效。无效文件可能打开,内容不正确,也可能意味着该文件不存在。
检查系统上是否安装了多个Montage: 从shell命令行运行“which mProjectPP”
在Python中: 进口口 os.system('mProjectPP') 两者都应该提供相同的答案。如果没有,你有两个蒙太奇安装,他们正在混淆。
答案 1 :(得分:1)
输入&#34; stat images_raw.tbl&#34;结果如下:
root @jarvis:/ tmp / tmpmyYyN7#stat images_raw.tbl 文件:`images_raw.tbl&#39; 大小: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 出生: -
这是输出:
root @jarvis:/ tmp / tmpmyYyN7 #mProjectPP /home/python_lib/Montage_v3.3/Montage//mProjectPP
答案 2 :(得分: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”“再次输入”时,它会发出错误:
(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图像。
布兰登道尔