astropy / astroquery

Functions and classes to access online data resources. Maintainers: @keflavich and @bsipocz and @ceb8
http://astroquery.readthedocs.org/en/latest/
BSD 3-Clause "New" or "Revised" License
706 stars 399 forks source link

Unexpected behavior when passing `obj_names` to `SDSS.query_region()` #3054

Open zvanderbosch opened 4 months ago

zvanderbosch commented 4 months ago

When using SDSS.query_region(), passing a list of names with the obj_names parameter does not perform as described in the documentation. The documentation says the names passed in will be repeated in the query result, but the names are not included in the resulting tables. A minimum working example is shown below:

from astroquery.sdss import SDSS
from astropy.coordinates import SkyCoord

# Define Source names and coordinates
names = ['Source1','Source2','Source3']
ra = [154.051772, 154.129982, 154.001069]
dec = [1.939617, 1.974458, 2.194234]
coord = SkyCoord(
    ra=ra, dec=dec, unit=['deg','deg']
)

# Perform Cross match
xids = SDSS.query_region(
    coord, 
    obj_names = names,
    radius = '2.0 arcsec', 
    spectro = True
)

This query results in the following table, which does not contain a column that indicates the matching input source name:

ra dec objid run rerun camcol field z plate mjd fiberID specobjid run2d
0 154.052 1.93962 1.23765e+18 1907 301 3 210 0.0706007 502 51957 636 5.65377e+17 26
1 154.13 1.97446 1.23765e+18 1907 301 3 210 1.62504 502 51957 635 5.65376e+17 26
2 154.001 2.19423 1.23765e+18 1462 301 4 191 0.101115 502 51957 632 5.65376e+17 26

Having the capability to return the object names associated with each query is a very useful feature as it helps cut down on additional cross-matching that would be needed to associate each returned object with objects in the input coordinate list. I tried digging into the source code to identify a fix, but it was unclear to me how the obj_names parameter is being passed to the requests.request() function.

I am using python 3.11.9, astroquery v0.4.7 , astropy v6.1.0, and requests v2.32.2

keflavich commented 2 months ago

This does seem like a useful feature that is missing. It seems like this may have been a feature supported upstream previously?

The documentation string was added in https://github.com/astropy/astroquery/commit/bd466c3ef797f98de2ae477abe3f195ccc8c5265#diff-21730ab789d1dfbe23a79790bf6afa2d13630a7232c3bcd4cfe24e486a57e5beR178 This PR doesn't say how this repeat was achieved, but the queries at the time were structured differently. Now, the data including the names & coordinates is sent as the 'upload' keyword, but previously it was sent as the 'paste' keyword. Presumably the upstream service handles these cases differently.