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”,并在数据缓冲区中传递实际的区域字符串。在 unix shell 中,这将按如下方式完成:

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

数据被发送到 xpaset 的标准输入,并且 paramlist 被放置在命令行的目标之后。

在 python 中,这是按如下方式完成的:

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

这里,第一个参数是参数列表(“regions”),第二个参数是要发送到 DS9 的数据缓冲区,在本例中包含区域字符串。

正如您在上面看到的,您可以使用双引号发送一个具有弧秒大小单位的区域来指定弧秒。您可以查看区域规范以获取更多语法信息:

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

最后,很抱歉,无法从 shell 或 pyds9 编辑区域。

于 2014-06-11T19:49:32.343 回答
1

此 pyds9 命令将起作用:

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

请注意,我只是从您的 xpaset 命令语法中删除了单引号。正确使用引号有点令人困惑:在 xpaset shell 命令中,您需要单引号来保护打开的“{”括号,但这在 python 中不需要。另请注意,它都在一个字符串中(从技术上讲,它是区域参数列表的一部分——请参阅 xpa 文档)。

问候,

埃里克

PS 考虑到以下 xpa 命令与您最初在上面使用的命令一样有效,这可能会让事情变得更清楚:

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

在这里,在整个字符串周围使用单引号可以保护左括号免受 unix shell 的影响,同时强调参数列表作为单个字符串的性质。

于 2014-06-07T18:31:16.970 回答