Source code for frb.surveys.heasarc

""" Surveys to be accessed through the HEASARC interface (via astroquery"""

from astropy.table import Table
from astropy import units, wcs

try:
    from astroquery.heasarc import Heasarc
    from astroquery.skyview import SkyView
except ImportError:
    print("Warning:  You need astroquery installed to use the surveys from HEASARC and SkyView")

from frb.surveys import surveycoord
from frb.surveys import catalog_utils


[docs] class HEASARC_Survey(surveycoord.SurveyCoord): """ Class to handle queries on the HEASARC survey. Uses `astroquery` for searching the Heasarc SQL database. Args: coord (SkyCoord): Coordiante for surveying around radius (Angle): Search radius around the coordinate mission (str): Mission served by HEASAR for the data searches """
[docs] def __init__(self, coord, radius, mission, **kwargs): surveycoord.SurveyCoord.__init__(self, coord, radius, **kwargs) # self.survey = None self.mission = mission # Instantiate astroquery object self.heasarc = Heasarc()
[docs] def get_catalog(self): """ Grab a catalog of sources around the input coordinate to the search radius Returns: astropy.table.Table: Catalog of sources returned """ try: catalog = self.heasarc.query_region(self.coord, mission=self.mission, radius=self.radius) except (ValueError, TypeError): # No table found self.catalog = Table() else: # Clean if len(catalog)!=0: catalog.rename_column("RA", "ra") catalog.rename_column("DEC", "dec") for key in ['ra', 'dec']: catalog[key].unit = units.deg # Sort self.catalog = catalog_utils.sort_by_separation(catalog, self.coord, radec=('ra', 'dec')) else: self.catalog = catalog # Add meta, etc. self.catalog.meta['radius'] = self.radius self.catalog.meta['survey'] = self.survey # Validate self.validate_catalog() # Return return self.catalog
[docs] class SkyView_Survey(surveycoord.SurveyCoord): """ Class to handle queries to the SkyView service of `astroquery`. Args: coord (SkyCoord): Coordiante for surveying around radius (Angle): Search radius around the coordinate mission (str): Mission served by HEASAR for the data searches """
[docs] def __init__(self, coord, radius, mission, **kwargs): surveycoord.SurveyCoord.__init__(self, coord, radius, **kwargs) # self.survey = None self.mission = mission # Instantiate astroquery object self.skyview = SkyView()
[docs] def get_cutout(self, radius=None): radius = radius if radius is not None else self.radius self.cutout_size = 2*radius if self.mission.lower() == 'first': img_hdu = self.get_first(radius) elif self.mission.lower() == 'nvss': img_hdu = self.get_nvss(radius) elif self.mission.lower() == 'wenss': img_hdu = self.get_wenss(radius) elif self.mission.lower() == 'gleam': img_hdu = self.get_gleam(radius) elif self.mission.lower() == 'tgss': img_hdu = self.get_tgss(radius) self.cutout = img_hdu.data self.cutout_hdr = img_hdu.header mywcs = wcs.WCS(self.cutout_hdr) ypix, xpix = self.cutout.shape (ra0, dec0), (ra1, dec1), = mywcs.wcs_pix2world([[0, 0], [xpix, ypix]], 0) print("Got image spanning (RA, Dec) = ({0} - {1}, {2} - {3})" .format(ra0, ra1, dec0, dec1)) return self.cutout
[docs] def get_first(self, radius): return SkyView.get_images(position=self.coord, survey='VLA FIRST (1.4 GHz)', radius=radius)[0][0]
[docs] def get_nvss(self, radius): return SkyView.get_images(position=self.coord, survey='NVSS', radius=radius)[0][0]
[docs] def get_wenss(self, radius): return SkyView.get_images(position=self.coord, survey='WENSS', radius=radius)[0][0]
[docs] def get_gleam(self, radius, band="170-231 MHz"): return SkyView.get_images(position=self.coord, survey='GLEAM {0}'.format(band), radius=radius)[0][0]
[docs] def get_tgss(self, radius): return SkyView.get_images(position=self.coord, survey='TGSS ADR1', radius=radius)[0][0]
[docs] class NVSS_Survey(HEASARC_Survey, SkyView_Survey): """ Uses SkyView an HEASARC to get both images and catalogs for the VLA NVSS survey at 1.4 GHz. """
[docs] def __init__(self, coord, radius, **kwargs): HEASARC_Survey.__init__(self, coord, radius, 'nvss', **kwargs) SkyView_Survey.__init__(self, coord, radius, 'nvss', **kwargs) self.survey = 'NVSS'
[docs] class FIRST_Survey(HEASARC_Survey, SkyView_Survey): """ Uses SkyView an HEASARC to get both images and catalogs for the VLA FIRST survey at 1.4 GHz. """
[docs] def __init__(self, coord, radius, **kwargs): HEASARC_Survey.__init__(self, coord, radius, 'first', **kwargs) SkyView_Survey.__init__(self, coord, radius, 'first', **kwargs) self.survey = 'FIRST'
[docs] class WENSS_Survey(HEASARC_Survey, SkyView_Survey): """ Uses SkyView an HEASARC to get both images and catalogs for the WSRT northern sky survey at 325 MHz. """
[docs] def __init__(self, coord, radius, **kwargs): HEASARC_Survey.__init__(self, coord, radius, 'wenss', **kwargs) SkyView_Survey.__init__(self, coord, radius, 'wenss', **kwargs) self.survey = 'WENSS'