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

上記の意味がわかりません。Google で何かを調べてみたところ、何も見つかりませんでした。このエラーは何ですか?どうすれば修正できますか?

4

3 に答える 3

1

aplpy.make_rgb_cube は、キューブを生成する途中のステップとして Montage mMakeHdr によって使用されるいくつかのファイルを作成します。
aplpy.make_rgb_cube は、mMakeHdr までのすべてのステップを通過します。
mMakeHdr は、作成された /tmp/tmpmyYyN7/images_raw.tbl という名前のファイルの 1 つを読み取ろうとします。ファイルが無効であるため、ファイルの読み取りは失敗します。無効なファイルが不適切な内容でオンになっている可能性があり、ファイルが存在しないことを意味する可能性もあります。

  1. /tmp/tmpmyYyN7/images_raw.tbl は実際に作成されましたか?
  2. 作成された場合、画像ファイル名のリストが含まれていますか?
  3. 作成日を確認し、これが作成したファイルか、上書きできない古いファイルかを確認します。
  4. /tmp および /tmp/tmpmyYyN7 に対する読み取りおよび書き込み権限があることを確認します
  5. ファイルがそこになくても、一時フォルダーへの書き込み権限がある場合は、images_raw.tbl という名前のファイルがハードドライブのどこかに書き込まれているかどうかを確認してください。
  6. システムに複数のモンタージュがインストールされているかどうかを確認します。シェル コマンド ラインから「which mProjectPP」を実行します。

    Python の場合: import os os.system('which mProjectPP') どちらも同じ答えを返すはずです。そうでない場合は、2 つのモンタージュ インストールがあり、それらが混同されています。

于 2014-08-15T15:38:03.297 に答える
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 画像についても続きます。それらの1つを選択する唯一の方法は、それらをPyFITSで開き、次のような行でそれぞれを選択することです

r1 = r[1].data

これはこれを行う適切な方法ですか?ほとんどの .fits 画像には、この複数の画像が 1 つのファイルに設定されていないと思います。他の方法で実行しようとすると、元のファイルで開きますが、それは間違いなく好きではありません。

上記の行で選択した後、.fits イメージとして個別に保存します。

ブランドン・ドイル

于 2014-08-15T19:55:37.613 に答える
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/ルート) Gid: (0/ルート) アクセス: 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# which mProjectPP /home/python_lib/Montage_v3.3/Montage//mProjectPP

于 2014-08-15T16:19:28.347 に答える