Source code for frb.surveys.twomass

"""
Slurp data from 2MASS catalog.

"""

import numpy as np

from astropy import units as u
from ..galaxies.defs import MASS_bands
from astroquery.ipac.irsa import Irsa

from frb.surveys import surveycoord,catalog_utils


# Define the data model for 2MASS data
photom = {}
photom['2MASS'] = {}
for band in MASS_bands:
    photom["2MASS"]["2MASS"+'_{:s}'.format(band)] = '{:s}_m'.format(band.lower()) # Many options for apertures, tbd
    photom["2MASS"]["2MASS"+'_{:s}_err'.format(band)] = '{:s}_msig'.format(band.lower())
    photom["2MASS"]["2MASS_ID"] = 'designation'
photom["2MASS"]['ra'] = 'ra'
photom["2MASS"]['dec'] = 'dec'

# Define the default set of query fields
# http://tdc-www.harvard.edu/catalogs/tmpsc.format.html For PSC
# https://www.ipac.caltech.edu/2mass/releases/second/doc/ancillary/xscformat.html For XSC
_DEFAULT_query_fields = ['designation','survey','ra','dec']
_DEFAULT_query_fields +=['{:s}_m'.format(band) for band in MASS_bands]
_DEFAULT_query_fields +=['{:s}_msig'.format(band) for band in MASS_bands]

[docs] class TwoMASS_Survey(surveycoord.SurveyCoord): """ A class to access all the catalogs hosted on the IRSA database. Inherits from SurveyCoord. This is a super class not meant for use by itself and instead meant to instantiate specific children classes like TwoMASS_Survey """
[docs] def __init__(self,coord,radius,**kwargs): surveycoord.SurveyCoord.__init__(self,coord,radius,**kwargs) self.Survey = "2MASS"
[docs] def get_catalog(self,query_fields=None): """ Query a catalog in the IRSA 2MASS survey for photometry. Args: query_fields: list, optional A list of query fields to get in addition to the default fields. Returns: catalog: astropy.table.Table Contains all query results """ if query_fields is None: query_fields = _DEFAULT_query_fields else: query_fields = _DEFAULT_query_fields+query_fields data = {} data['ra'] = self.coord.ra.value data['dec'] = self.coord.dec.value data['radius'] = self.radius.to(u.deg).value data['columns'] = query_fields data['format'] = 'csv' # First query the extended source catalog # Fields described here: http://tdc-www.harvard.edu/catalogs/tmx.format.html ret = Irsa.query_region(self.coord, radius=self.radius, spatial='Cone', catalog="fp_xsc") isempty = len(ret) == 0 if isempty: # If fp_xsc is empty, query the psc catalog ret = Irsa.query_region(self.coord, radius=self.radius, spatial='Cone', catalog="fp_psc") for band in MASS_bands: # Rename columns for mags for PSC photom["2MASS"]["2MASS"+'_{:s}'.format(band)] = '{:s}_m'.format(band.lower()) photom["2MASS"]["2MASS"+'_{:s}_err'.format(band)] = '{:s}_msigcom'.format(band.lower()) else: # if XSC is not empty, rename columns for mags for XSC # Instead of _m and _msig, it's _m_fe and _msig_fe for fiducial elliptical Kron for band in MASS_bands: photom["2MASS"]["2MASS"+'_{:s}'.format(band)] = '{:s}_m_fe'.format(band.lower()) photom["2MASS"]["2MASS"+'_{:s}_err'.format(band)] = '{:s}_msig_fe'.format(band.lower()) pdict = photom['2MASS'].copy() photom_catalog = catalog_utils.clean_cat(ret,pdict) # rename columns photom_catalog.keep_columns(list(pdict.keys())) # Keep only the columns we care about # Remove duplicate entries. photom_catalog = catalog_utils.remove_duplicates(photom_catalog, "2MASS_ID") self.catalog = catalog_utils.sort_by_separation(photom_catalog, self.coord, radec=('ra','dec'), add_sep=True) self.convert_to_AB() # Meta self.catalog.meta['radius'] = self.radius self.catalog.meta['survey'] = self.survey #Validate self.validate_catalog() #Return return self.catalog.copy()
[docs] def convert_to_AB(self): """Convert from 2MASS internal to AB magnitudes in the catalog.""" # Convert to AB mag fnu0 = {'2MASS_j':1594, '2MASS_h':1024, '2MASS_k':666.7} for band in MASS_bands: filt = '2MASS_{:s}'.format(band.lower()) if filt in self.catalog.columns: self.catalog[filt] -= 2.5*np.log10(fnu0[filt]/3630.7805) else: raise ValueError(f"Column {filt} not found in catalog.") return self.catalog