Searching a list using astroquery

258 views Asked by At

I have the following code below that I got from https://astroquery.readthedocs.io/en/latest/gaia/gaia.html. I get the br when ra and dec is a number. However, I have not just one number, but a list of ra and dec. When I tried putting a list in for ra and dec in the code below, I got an error saying Error 500: null. Is there a way to find br using a list of ra and 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)

I am new to astroquery, so any help will be apreciated.

1

There are 1 answers

2
Iguananaut On

Hi and congrats on your first StackOverflow question. As I understand it, Astroquery is a community effort, and the modules for querying individual online catalogues are in many cases being developed and maintained side-by-side with the online query systems, often by their same developers. So different modules within Astroquery are being worked on sometimes by different teams, and have some varying degree of feature-completeness and consistency in interfaces (something I'd like to see improved but it's very difficult to coordinate).

In the case of Gaia.query_object_async the docs are not completely clear, but it's not obvious that it even supports array SkyCoord. It should, or at least if it doesn't it should give a better error.

To double check, I dug into the code and found what I kind of suspected: It does not at all allow this. It is building a SQL query using string replacement (generally considered a bad idea) and passing that SQL query to a web-based service. Because the ra and dec values are arrays, it just blindly passes those array representations into the template for the SQL query, resulting in an invalid query:

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

The server, rather than return an error message suggesting that the query is malformed, instead just returns a general server error. Basically it crashes.

Long story short, you should probably open a bug report about this against astroquery, and see if it's on the Gaia maintainers' radar to deal with: https://github.com/astropy/astroquery/issues/new

In the meantime it sounds like your best bet is to make multiple queries in a loop and join their results together. Since it returns a Table, you can use 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)