Astroquery SIMBAD: получение координат для всех кадров
Я пытаюсь получить координаты для всех кадров, используя Simbad
класс от astroquery
так же, как это показано на веб-странице SIMBAD(раздел "Основные данные")
У меня есть следующий код:
from astroquery.simbad import Simbad
def get():
Simbad.reset_votable_fields()
Simbad.remove_votable_fields('coordinates')
Simbad.add_votable_fields('ra(:;A;ICRS;J2000)', 'dec(:;D;ICRS;2000)')
Simbad.add_votable_fields('ra(:;A;FK5;J2000)', 'dec(:;D;FK5;2000)')
table = Simbad.query_object("Betelgeuse", wildcard=False)
но я получаю ошибку:
KeyError: 'ra (:; A; FK5; J2000): поле уже присутствует. Поля ra, dec, id, otype и bibcodelist могут быть указаны только один раз. Чтобы изменить их параметры, сначала удалите существующую запись, а затем добавьте новую.'
Все, что я мог найти в документе об управлении голосовыми полями, особенно координаты, таково:
http://astroquery.readthedocs.io/en/latest/simbad/simbad.html
Есть ли способ получить координаты для всех кадров, отправляющих один запрос в SIMBAD?
2 ответа
Вместо того, чтобы запрашивать несколько координат (что кажется невозможным с помощью Astroquery) из SIMBAD, вы можете преобразовать координаты, используя astropy.coordinates.SkyCoord
,
Например:
from astroquery.simbad import Simbad
from astropy.coordinates import SkyCoord
Simbad.reset_votable_fields()
Simbad.remove_votable_fields('coordinates')
Simbad.add_votable_fields('ra(:;A;ICRS;J2000)', 'dec(:;D;ICRS;2000)')
table = Simbad.query_object("Betelgeuse", wildcard=False)
coords = SkyCoord(ra=['{}h{}m{}s'.format(*ra.split(':')) for ra in table['RA___A_ICRS_J2000']],
dec=['{}d{}m{}s'.format(*dec.split(':')) for dec in table['DEC___D_ICRS_2000']],
frame='icrs', equinox='J2000')
Теперь это объект SkyCoord, который можно преобразовать в другие кадры:
>>> coords
<SkyCoord (ICRS): (ra, dec) in deg
( 88.79293875, 7.40706389)>
>>> coords.fk4
<SkyCoord (FK4: equinox=J2000.000, obstime=B1950.000): (ra, dec) in deg
( 88.79274075, 7.40705223)>
>>> coords.fk5
<SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
( 88.79294545, 7.40705842)>
Это можно снова преобразовать в строки, например, в hms dms
форматирование:
>>> coords.fk5.to_string('hmsdms')
['05h55m10.3069s +07d24m25.4103s']
Если вы хотите, чтобы это были дополнительные столбцы в вашей таблице, вы можете просто добавить их:
>>> table['RA FK5'] = coords.fk5.ra
>>> table['DEC FK5'] = coords.fk5.dec
>>> table['FK4'] = coords.fk4.to_string('hmsdms')
>>> table
MAIN_ID RA___A_ICRS_J2000 DEC___D_ICRS_2000 RA FK5 DEC FK5 FK4
"h:m:s" "d:m:s" deg deg
--------- ----------------- ----------------- ------------- ------------- -----------------------------
* alf Ori 05:55:10.3053 +07:24:25.430 88.7929454548 7.40705841559 05h55m10.2578s +07d24m25.388s
По причинам, которые я не могу определить, astroquery не поддерживает несколько настраиваемых добавленных опций VO. Тем не менее, это произойдет в ближайшее время. С кодом, который вы разместили, проблем не возникало, только ошибка в астроквере.