""" Parent class for surveying at a given coordinate"""
from abc import ABCMeta
import os
from frb.surveys import images
from frb.surveys import survey_io
[docs]
class SurveyCoord(object):
"""
Parent class of surveying around an input coordinate
See the children for specific methods
Args:
coord (SkyCoord): Coordiante for surveying around
radius (Angle): Search radius around the coordinate
"""
__metaclass__ = ABCMeta
[docs]
def __init__(self, coord, radius, verbose=False):
# Load up
self.coord = coord
self.radius = radius
self.verbose = verbose
# Typically set items
self.survey = None
# Standard products
self.catalog = None
self.cutout = None
self.cutout_size = None
[docs]
def get_catalog(self):
"""
Returns:
self.catalog
"""
pass
[docs]
def get_cutout(self, imsize):
return None
[docs]
def get_image(self, imsize, filter):
pass
[docs]
def validate_catalog(self):
if len(self.catalog) > 0:
# Columns
assert 'ra' in self.catalog.keys()
assert 'dec' in self.catalog.keys()
# Meta
assert 'radius' in self.catalog.meta.keys()
assert 'survey' in self.catalog.meta.keys()
[docs]
def write_catalog(self, out_dir, ftype='ecsv', verbose=None, create_dirs=False,
overwrite=True):
"""
Write an input astropy Table to disk
Args:
tbl: astropy.table.Table
out_dir: str
Folder for output
root: str
Root name of the output file
ftype: str, optional
File type, e.g. ecsv
create_dirs: bool, optional
Create the folders to the output dir (if needed)?
overwrite: bool, optional
Overwrite the existing file?
verbose: bool, optional
Returns:
"""
if verbose is None:
verbose = self.verbose
# Check
if ftype not in ['ecsv']:
raise IOError("Unallowed file type: {:s}".format(ftype))
#
root = self.survey
# Generate output folder?
if create_dirs:
if not os.path.exists(out_dir):
os.makedirs(out_dir)
# Outfile
basename = root+'.{:s}'.format(ftype)
outfile = os.path.join(out_dir, basename)
if (not overwrite) and (os.path.isfile(outfile)):
print("Output catalog file already exists. Use overwrite=True as desired")
return
# Write
self.catalog.write(outfile, overwrite=overwrite)
if verbose:
print("Wrote: {:s}".format(outfile))
[docs]
def write_cutout(self, output_dir='./', root=None, verbose=None):
"""
Write the cutout image to disk
Args:
output_dir: str
root: str, optional
verbose: bool, optional
Returns:
"""
if root is None:
root = self.survey+'_cutout'
if verbose is None:
verbose = self.verbose
if self.cutout is None:
print("Need to get the cutout image first! Use get_cutout()")
# Prep plot
plt = images.gen_snapshot_plt(self.cutout, self.cutout_size)
survey_io.save_plt(plt, output_dir, root, verbose=verbose)