2

pyds9 を使用して、フィット画像を自動的に読み込みます (天文学関連の目的で)。

スケール、色、ズームレベルなど、他のすべての設定を構成できます。画像ごとに、特定の場所にその領域を強調する小さな円を描きたいと思います。デフォルトでは、この色は緑です。この色を変更するにはどうすればよいですか?

また、この円の太さを変更する方法はありますか? 視認性に問題があります。緑色は、すべての cmap とスケールの組み合わせではっきりと見えるわけではありません。赤などのものがよいでしょう。

XPAset コマンドを確認しました。それを行う方法があります。しかし、pyds9でそれを行う方法がわかりません。すべての XPAset コマンドのリンクは次のとおりです: http://ds9.si.edu/ref/xpa.html#regions

xpaset コマンドは次のとおりです。

*$xpaset -p ds9 regions command '{circle 100 100 20 # color=red}'*

この xpaset コマンドを pyds9 のメソッドに変換するにはどうすればよいですd.set()か??

私は次のようなことを意味します:d.set('regions','fk5; circle(100,100,20") # color=red')

以下は私が使用しているコードです:

import ds9

# x is the RA and y is the DEC 
# for describing the location of astronomical objects
x = 200.1324
y = 20.3441

# the four FITS images to be loaded
image_list = ['img1.fits.gz','img2.fits.gz','img3.fits.gz','img4.fits.gz']

#initializing a ds9 window
d = ds9.ds9(target='DS9:*', start=True, verify=True)

for i in range(len(image_list)):
    d.set('frame ' + str(i+1))
    d.set('file ' + image_list[i])
    d.set('cmap bb')
    d.set('cmap invert')
    d.set('scale zscale')
    d.set('scale linear')
    d.set('regions','fk5; circle('+str(x)+','+str(y)+',20")')
    # This previous line draws a green circle with center at (x,y) 
    # and radius of 20 arc-sec. But the color is by default green. 
    # I want to change this to lets say red. How do I do it ???


# arranging the 4 images in tile format
d.set('tile') 
for i in range(len(image_list)):
    d.set('frame ' + str(i+1))
    d.set('zoom to fit')

d.set('saveimage png myimagename.png')

# time to remove all the images from the frames
# so that the some new set of images could be loaded
for i in range(len(image_list)):
    d.set('frame delete')
4

2 に答える 2

2

[どうやら、前の回答にコメントを追加することは許可されていないため、上記に関連する別の回答を次に示します]。

これを調査したところ、リージョンの「コマンド」構文にバグがあるようです。代わりに、正規の xpa 構文を使用する必要があります。この構文では、文字列 "regions" を paramlist に渡し、実際の領域文字列をデータ バッファーに渡します。UNIX シェルでは、これは次のように行われます。

echo 'fk5; circle 23:23:22.176 +58:50:01.23 9.838" # color=red' | xpaset ds9 regions

データは xpaset の stdin に送信され、paramlist はコマンド ラインのターゲットの後に配置されます。

Python では、これは次のように行われます。

d.set('regions', 'fk5; circle 23:23:22.176 +58:50:01.23 9.838" # color=red')

ここで、最初の引数は paramlist ("regions") で、2 番目の引数は DS9 に送信するデータ バッファーで、この場合は地域文字列が含まれています。

上記のように、アーク秒を指定するために二重引用符を使用して、アーク秒サイズの単位でリージョンを送信できます。詳しい構文情報については、リージョンの仕様を参照してください。

https://www.cfa.harvard.edu/~john/funtools/regions.html

最後に、申し訳ありませんが、シェルまたは pyds9 からリージョンを編集することはできません。

于 2014-06-11T19:49:32.343 に答える
1

この pyds9 コマンドは動作します:

d.set("regions command {circle 512 512 20 # color=red}")

xpaset コマンド構文から一重引用符を削除しただけであることに注意してください。引用符を正しく取得するのは少し混乱します。xpaset シェル コマンドでは、開いた "{" ブラケットを保護するために単一引用符が必要ですが、これは Python では必要ありません。また、すべてが 1 つの文字列に含まれていることにも注意してください (技術的には、リージョンのパラメーター リストの一部です。xpa のドキュメントを参照してください)。

よろしく、

エリック

PS次のxpaコマンドが、最初に上で使用したものと同様に機能することを考慮すると、物事がより明確になる場合があります。

xpaset -p ds9 'regions command {circle 512 512 20 # color=red}'

ここでは、文字列全体を一重引用符で囲んで、単一の文字列としての paramlist の性質を強調しながら、UNIX シェルから開き括弧を保護します。

于 2014-06-07T18:31:16.970 に答える