Source code for astroquery.image_cutouts.first.core
# Licensed under a 3-clause BSD style license - see LICENSE.rst
from io import BytesIO
import astropy.units as u
import astropy.coordinates as coord
from astropy.io import fits
from ...query import BaseQuery
from ...utils import commons, prepend_docstr_nosections
from . import conf
from ...exceptions import InvalidQueryError
__all__ = ['First', 'FirstClass']
[docs]class FirstClass(BaseQuery):
URL = conf.server
TIMEOUT = conf.timeout
maximsize = 1024
def _args_to_payload(self, coordinates, image_size=1 * u.arcmin,
*, maximsize=None):
"""
Fetches image cutouts from FIRST survey.
Parameters
----------
coordinates : str or `astropy.coordinates` object
The target around which to search. It may be specified as a
string in which case it is resolved using online services or as
the appropriate `astropy.coordinates` object. ICRS coordinates
may also be entered as strings as specified in the
`astropy.coordinates` module.
image_size : str or `~astropy.units.Quantity` object, optional
The string must be parsable by `astropy.coordinates.Angle`. The
appropriate `~astropy.units.Quantity` object from `astropy.units`
may also be used. Specifies the symmetric size of the
image. Defaults to 1 arcmin.
maximsize : int, optional
Specify the maximum image size (in pixels on each dimension) that
will be returned. Max is 2048.
"""
request_payload = {}
c = commons.parse_coordinates(coordinates).transform_to('icrs')
ra_dec_str = str(c.ra.hour) + ' ' + str(c.dec.degree)
request_payload["RA"] = ra_dec_str
request_payload["Equinox"] = "J2000"
request_payload["ImageSize"] = coord.Angle(image_size).arcmin
request_payload["ImageType"] = "FITS File"
request_payload["MaxImSize"] = self.maximsize if maximsize is None else maximsize
return request_payload
[docs] @prepend_docstr_nosections("\n" + _args_to_payload.__doc__)
def get_images(self, coordinates, image_size=1 * u.arcmin,
*, get_query_payload=False):
"""
get_query_payload : bool, optional
if set to `True` then returns the dictionary sent as the HTTP
request. Defaults to `False`
Returns
-------
A list of `~astropy.io.fits.HDUList` objects
"""
response = self.get_images_async(coordinates, image_size=image_size,
get_query_payload=get_query_payload)
if get_query_payload:
return response
S = BytesIO(response.content)
try:
return fits.open(S, ignore_missing_end=True)
except IOError:
raise InvalidQueryError(response.content)
[docs] @prepend_docstr_nosections("\n" + _args_to_payload.__doc__)
def get_images_async(self, coordinates, image_size=1 * u.arcmin,
*, get_query_payload=False):
"""
get_query_payload : bool, optional
if set to `True` then returns the dictionary sent as the HTTP
request. Defaults to `False`
Returns
-------
response : `requests.Response`
The HTTP response returned from the service
"""
request_payload = self._args_to_payload(
coordinates, image_size=image_size)
if get_query_payload:
return request_payload
response = self._request("POST", url=self.URL, data=request_payload,
timeout=self.TIMEOUT, verify=False)
return response
First = FirstClass()