Использование Python - после запроса координат в Simbad, как мне извлечь изображение, созданное Aladin (открытое с помощью кнопки графика Simbad на веб-сайте)?

Основная цель: учитывая набор небесных координат (ra, dec), эта функция Python должна возвращать FITS-изображение неба с центром в этих координатах.

Подробная цель: функция будет выполнять запрос координат с использованием astroquery и simbad. В идеале он сможет получить доступ к базе данных объектов в данной области с центром в (ra, dec). Следовательно, также будет введен некоторый параметр размера (поле зрения или радиус). Но в основном, когда запрос выполняется на simbad через браузер, есть возможность построить звездную область с центром во входных координатах, сделанных AladinLite, и функция должна вернуть это изображение (надеюсь, как изображение FITS).

Что я пробовал: все, что я пытался здесь получить, - это открытие использования astroquery и simbad. Но я не могу найти в документации ничего о том, как получить изображение из AladinLite с помощью astroquery. Также не представляется возможным найти способ получить изображение прямо из Aladin с помощью Python.

Вопрос: Можно ли получить это изображение, сгенерированное AladinLite, в браузерной версии запроса координат simbad с использованием Python и astroquery? Если да, то как я могу это сделать?

Я приложил скриншот веб-браузера, показывающий изображение, созданное AladinLite. Для ясности - я хочу изображение звездного поля, а не изображение с обведенными объектами и так далее.

Какой-то псевдокод:

def generate_starfield(ra, dec, FoV):

    # define the sky coords
    coords = SkyCoord(ra=ra, dec=dec)

    # do an astroquery.simbad query using above coords
    query = perform_query(coords)

    # extract the image from the query generated by AladinLite
    image = get_aladinlite_image(query, FoV)

    return image

1 ответ

Решение

Предостережение: я не исследователь в области астрономии, и хотя я разработчик Astropy, на самом деле я не являюсь пользователем, поэтому могут быть несколько более эффективных способов сделать это, если кто-то с большим опытом / пониманием проблемы захочет прийти.

Но AladinLite - это не каталог изображений. Это просто веб-интерфейс для просмотра изображений и построения графиков. Тем не менее, служба образцов AladinLite, размещенная в Страсбурге, берет данные из своих служб HiPS Survey. Они предоставляют эти данные через веб-API hips2fits. Я не думаю, что AladinLite предоставляет интерфейс для сбора всех отображаемых плиток в изображение FITS для загрузки. Вот для чего нужен сервис hips2fits. Кстати, на сайте отмечается:

Развернем доступ к hips2fits из astroquery.cds. А пока этот блокнот должен помочь вам начать делать запросы к hips2fits из скриптов Python.

Итак, у вас есть первая часть рабочего процесса: вы должны использовать astroqueryспросить Симбада. Но тогда вам нужно запросить данные изображения. Для этого пока нет специфичного для Python API, но веб-API хорошо документирован, так что в основном это вопрос создания правильного URL. Вот пример рабочего процесса, который я придумал, используя те же координаты, что и на приведенном вами скриншоте:

>>> from astroquery.simbad import Simbad                                                            
>>> from astropy.coordinates import SkyCoord
>>> coord = SkyCoord('16 14 20.30000000 -19 06 48.1000000', unit=(u.hourangle, u.deg), frame='fk5') 
>>> query_results = Simbad.query_region(coord)                                                      
>>> query_results                                                                                   
<Table length=3>
        MAIN_ID               RA           DEC      ... COO_QUAL COO_WAVELENGTH     COO_BIBCODE    
                           "h:m:s"       "d:m:s"    ...                                            
         object             str13         str13     ...   str1        str1             object      
----------------------- ------------- ------------- ... -------- -------------- -------------------
               [T64]  7 16 14 20.2881 -19 06 48.062 ...        A              O 2018yCat.1345....0G
        IRAS 16114-1858    16 14 22.1     -19 06 14 ...        E              M 1988IRASP.C......0J
2MASS J16142091-1906051 16 14 20.9018 -19 06 05.195 ...        A              O 2018A&A...616A...1G

Теперь предположим, что я хочу, чтобы изображение было сосредоточено на первом объекте в результатах (аналогично предварительному просмотру AladinLite, отображаемому в веб-интерфейсе):

>>> from urllib.parse import urlencode
>>> from astropy.io import fits
>>> object_main_id = query_results[0]['MAIN_ID'].decode('ascii')
>>> object_coords = SkyCoord(ra=query_results['RA'], dec=query_results['DEC'], 
...                          unit=(u.hourangle, u.deg), frame='icrs')
>>> query_params = { 
...     'hips': 'DSS', 
...     'object': object_main_id, 
...     'ra': object_coords[0].ra.value, 
...     'dec': object_coords[0].dec.value, 
...     'fov': (2 * u.arcmin).to(u.deg).value, 
...     'width': 500, 
...     'height': 500 
... }                                                                                               
>>> url = f'http://alasky.u-strasbg.fr/hips-image-services/hips2fits?{urlencode(query_params)}' 
>>> hdul = fits.open(url)                                                                           
Downloading http://alasky.u-strasbg.fr/hips-image-services/hips2fits?hips=DSS&object=%5BT64%5D++7&ra=243.58457533549102&dec=-19.113364937196987&fov=0.03333333333333333&width=500&height=500
|==============================================================| 504k/504k (100.00%)         0s
>>> hdul.info()
>>> hdul.info()                                                                                     
Filename: /path/to/.astropy/cache/download/py3/ef660443b43c65e573ab96af03510e19
No.    Name      Ver    Type      Cards   Dimensions   Format
  0  PRIMARY       1 PrimaryHDU      22   (500, 500)   int16   
>>> hdul[0].header                                                                                  
SIMPLE  =                    T / conforms to FITS standard                      
BITPIX  =                   16 / array data type                                
NAXIS   =                    2 / number of array dimensions                     
NAXIS1  =                  500                                                  
NAXIS2  =                  500                                                  
WCSAXES =                    2 / Number of coordinate axes                      
CRPIX1  =                250.0 / Pixel coordinate of reference point            
CRPIX2  =                250.0 / Pixel coordinate of reference point            
CDELT1  = -6.6666668547014E-05 / [deg] Coordinate increment at reference point  
CDELT2  =  6.6666668547014E-05 / [deg] Coordinate increment at reference point  
CUNIT1  = 'deg'                / Units of coordinate increment and value        
CUNIT2  = 'deg'                / Units of coordinate increment and value        
CTYPE1  = 'RA---TAN'           / Right ascension, gnomonic projection           
CTYPE2  = 'DEC--TAN'           / Declination, gnomonic projection               
CRVAL1  =           243.584534 / [deg] Coordinate value at reference point      
CRVAL2  =         -19.11335065 / [deg] Coordinate value at reference point      
LONPOLE =                180.0 / [deg] Native longitude of celestial pole       
LATPOLE =         -19.11335065 / [deg] Native latitude of celestial pole        
RADESYS = 'ICRS'               / Equatorial coordinate system                   
HISTORY Generated by CDS hips2fits service - See http://alasky.u-strasbg.fr/hips
HISTORY -image-services/hips2fits for details                                   
HISTORY From HiPS CDS/P/DSS2/NIR (DSS2 NIR (XI+IS))

Теперь о черчении. Различные маркеры и отметки, видимые в предварительном просмотре AladinLite, генерируются самой программой просмотра AladinLite, поэтому, используя рабочий процесс на основе Python, теперь вы можете создать собственное построение. Есть много способов сделать это. Теперь вы можете сохранить изображение FITS и использовать любые инструменты для печати, которые у вас уже есть. Хотя для рабочего процесса на чистом Python, пакет aplpy разработан специально для астрономических графиков. Вот что я сделал с этим изображением в качестве примера:

>>> import aplpy
>>> gc = aplpy.FITSFigure(hdul)                                                                     
>>> gc.show_grayscale()                                                                             
INFO: Auto-setting vmin to  2.560e+03 [aplpy.core]
INFO: Auto-setting vmax to  1.513e+04 [aplpy.core]
>>> gc.show_markers(object_coords.ra, object_coords.dec, edgecolor='red',
...                 marker='s', s=50**2)         
>>> gc.save('plot.png')

Результат:

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