Поиск в списке с помощью Astroquery
У меня есть следующий код, который я получил с https://astroquery.readthedocs.io/en/latest/gaia/gaia.html . Я понимаю, когда и является числом. Однако у меня есть не одно число, а список ра и дек. Когда я попытался вставить список для и в приведенный ниже код, я получил сообщение об ошибке
Error 500: null
. Есть ли способ найти
br
используя список
ra
а также
dec
?
coord = SkyCoord(ra=, dec=, unit=(u.degree, u.degree), frame='icrs')
width = u.Quantity(0.0005, u.deg)
height = u.Quantity(0.0005, u.deg)
r = Gaia.query_object_async(coordinate=coord, width=width, height=height)
r.pprint()
r.columns
br=[r["phot_bp_rp_excess_factor"]]
print (br)
Я новичок в astroquery, поэтому любая помощь будет оценена.
1 ответ
Привет и поздравляю с первым вопросом о StackOverflow. Насколько я понимаю, Astroquery - это усилие сообщества, и модули для запросов к отдельным онлайн-каталогам во многих случаях разрабатываются и поддерживаются вместе с системами онлайн-запросов, часто их теми же разработчиками. Таким образом, над разными модулями в Astroquery иногда работают разные команды, и они имеют разную степень полноты функций и согласованности интерфейсов (что-то, что я хотел бы улучшить, но это очень сложно координировать).
В случае Gaia.query_object_async
документы не совсем понятны, но не очевидно, что он даже поддерживает массив
SkyCoord
. Он должен , или, по крайней мере, если нет, он должен дать лучшую ошибку.
Чтобы дважды проверить, я покопался в коде и обнаружил то, о чем подозревал: он вообще не позволяет этого. Он создает SQL-запрос с использованием замены строки (что обычно считается плохой идеей) и передает этот SQL-запрос в веб-службу. Поскольку
ra
а также
dec
значения являются массивами, он просто слепо передает эти представления массива в шаблон для запроса SQL, что приводит к недопустимому запросу:
SELECT
TOP 50
DISTANCE(
POINT('ICRS', ra, dec),
POINT('ICRS', [99.00000712 87.00000767], [24.99999414 24.99999461])
) as dist,
*
FROM
gaiadr2.gaia_source
WHERE
1 = CONTAINS(
POINT('ICRS', ra, dec),
BOX(
'ICRS',
[99.00000712 87.00000767],
[24.99999414 24.99999461],
0.005,
0.005
)
)
ORDER BY
dist ASC
Сервер вместо того, чтобы возвращать сообщение об ошибке, предполагающее, что запрос неверен, вместо этого просто возвращает общую ошибку сервера. В основном вылетает.
Короче говоря, вам, вероятно, следует открыть отчет об этой ошибке в отношении astroquery и посмотреть, находится ли он на радаре разработчиков Gaia: https://github.com/astropy/astroquery/issues/new
А пока похоже, что лучше всего сделать несколько запросов в цикле и объединить их результаты. Поскольку он возвращает
Table
, ты можешь использовать
astropy.table.vstack
:
from astropy.table import vstack
results = []
for coord in coords:
results.append(Gaia.query_object_async(coord, width=width, height=height))
results = vstack(results)