Использование 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? Если да, то как я могу это сделать?
Какой-то псевдокод:
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')
Результат: