Как изменить цвет круглой области с зеленого на красный в ds9 через python, используя pyds9

Я использую pyds9 для автоматической загрузки подходящих изображений (для астрономических целей).

Я могу настроить все остальные параметры, такие как масштаб, цвет и уровень масштабирования. Для каждого изображения я хочу нарисовать небольшой кружок в определенном месте, который выделяет эту область. По умолчанию этот цвет зеленый. Как мне изменить этот цвет?

Также есть ли способ изменить толщину этого круга? У меня проблемы с видимостью. Зеленый цвет не очень хорошо виден для всех комбинаций cmap и scale. Что-то вроде красного было бы лучше.

Я посмотрел на команды XPAset. Есть способ сделать это. Но я не могу понять, как это сделать в pyds9. Вот ссылка для всех команд XPAset: http://ds9.si.edu/ref/xpa.html

Команда 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')

2 ответа

Решение

[По-видимому, мне не разрешено добавлять комментарии к предыдущему ответу, поэтому вот еще один ответ, который согласуется с вышеизложенным].

Мы изучили это, и в синтаксисе команды "регион", похоже, есть ошибка. Вместо этого вы должны использовать канонический синтаксис xpa, в котором вы передаете строку "регионов" в список параметров и фактическую строку региона в буфере данных. В оболочке unix это будет сделано следующим образом:

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

Данные отправляются на стандартный вывод xpaset, а список параметров помещается в командную строку после цели.

В Python это делается следующим образом:

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

Здесь первый аргумент - это список параметров ("регионов"), а второй аргумент - буфер данных для отправки в DS9, в данном случае содержащий строку региона.

Как вы видите выше, вы можете отправить регион с единицами измерения угловых секунд, используя двойные кавычки для указания угловых секунд. Вы можете посмотреть спецификацию регионов для получения дополнительной синтаксической информации:

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

Наконец, и извините, но невозможно редактировать регион из оболочки или pyds9.

Эта команда pyds9 будет работать:

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

Обратите внимание, что я просто удалил одинарные кавычки из вашего синтаксиса команды xpaset. Правильный вывод кавычек немного сбивает с толку: в команде оболочки xpaset вам нужны одинарные кавычки для защиты открытой скобки "{", но это не требуется в python. Также обратите внимание, что все это в одной строке (что технически является частью paramlist регионов - см. Документацию xpa).

С Уважением,

Эрик

PS Может показаться более понятным, если учесть, что следующая команда xpa работает так же, как та, которую вы изначально использовали выше:

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

Здесь использование одинарных кавычек вокруг всей строки защищает открытую скобку от оболочки unix, подчеркивая при этом характер списка параметров как единой строки.

Другие вопросы по тегам