Source code for frb.scripts.galaxies

#!/usr/bin/env python
"""
Script to fuss a bit with FRB galaxies
Requres the specDB
"""
from __future__ import (print_function, absolute_import, division, unicode_literals)

from IPython import embed

[docs] def parser(options=None): import argparse # Parse parser = argparse.ArgumentParser(description='Script to fuss with FRB galaxies [v1.1]') parser.add_argument("coord", type=str, help="Coordinates, e.g. J081240.7+320809 or 122.223,-23.2322 or 07:45:00.47,34:17:31.1 or FRB name (FRB180924)") parser.add_argument("--rho", default=300., type=float, help="Maximum impact parameter in kpc [default=300.]") parser.add_argument("--ang_offset", type=float, help="Maximum offset in arcsec [over-rides --rho if set]") parser.add_argument("--cat", default=False, action="store_true", help="Only show data from the catalog (not meta)") parser.add_argument("--specdb", type=str, help="specDB file; defaults to $SPECDB/FRB_specdb.hdf5") parser.add_argument("-p","--plot", default=False, action="store_true", help="Launch a plotting GUI?") parser.add_argument("--dust", default=False, action="store_true", help="Dust correct the spectrum?") if options is None: pargs = parser.parse_args() else: pargs = parser.parse_args(options) return pargs
[docs] def plot_spec(specDB, meta, frb, dust_correct=False): import numpy as np from astropy.coordinates import SkyCoord from linetools import utils as ltu from frb.galaxies import nebular from frb.galaxies import utils as galaxy_utils """ Plot galaxy spectra """ # Grab spectra spec = specDB.spectra_from_meta(meta) # Dust? if dust_correct: EBV = nebular.get_ebv(frb.coord)['meanValue'] # AV = EBV * 3.1 # RV for kk in range(spec.nspec): spec.select = kk embed(header='plot_spec: THIS IS BROKEN') new_spec = galaxy_utils.deredden_spec(spec.select, AV) #Al = extinction.fm07(spec.wavelength.value, AV)#, 3.1) #spec.flux = spec.flux * 10 ** (Al / 2.5) #spec.sig = spec.sig * 10 ** (Al / 2.5) # Add labels lbls = ['None']*len(meta) ugroups = np.unique(meta['GROUP']) for ugroup in ugroups: rows = np.where(meta['GROUP'] == ugroup)[0] coords = SkyCoord(ra=meta['RA_GROUP'][rows], dec=meta['DEC_GROUP'][rows], unit='deg') if frb is None: for kk, row, imeta in zip(range(len(rows)), rows, meta): # JNAME jname = ltu.name_from_coord(coords[kk]) lbls[row]='{:s}_{:s}'.format(jname, meta['INSTR'][row]) else: seps = frb.coord.separation(coords).to('arcsec') pas = frb.coord.position_angle(coords).to('deg') for row, sep, pa, imeta in zip(rows, seps, pas, meta): # Separation and PA lbls[row]='{:s}_{:s}_{:d}_{:d}'.format(frb.frb_name, meta['INSTR'][row], int(pa.value), int(sep.value)) spec.labels = lbls # Add object type spec.stypes = ['Galaxy']*len(lbls) # Add redshift spec.z = meta['zem_GROUP'] # Plot spec.plot(xspec=True)#, scale=1.5)
[docs] def main(pargs): """ Run """ import warnings import numpy as np from astropy import units from frb import frb from frb.galaxies import utils as gutils from linetools.scripts.utils import coord_arg_to_coord try: from specdb import group_utils except ImportError: print("You need to first install specdb") return # Load it up specDB = gutils.load_specdb(specdb_file=pargs.specdb) if specDB is None: return if pargs.coord[0:3].upper() == 'FRB': ifrb = frb.FRB.by_name(pargs.coord.upper()) icoord = ifrb.coord.ra.value, ifrb.coord.dec.value else: icoord = coord_arg_to_coord(pargs.coord) ifrb = None # Meta? if pargs.cat: if pargs.ang_offset is not None: _, cat, _ = specDB.qcat.query_position(icoord, pargs.ang_offset*units.arcsec) else: _, cat, _ = specDB.qcat.query_position(icoord, pargs.rho*units.kpc) # Show ckeys = ['RA', 'DEC', 'zem', 'ZQ'] group_utils.show_group_meta(cat, show_all_keys=False, meta_keys=ckeys) else: # Meta if pargs.ang_offset is not None: meta = specDB.meta_from_position(icoord, pargs.ang_offset*units.arcsec) else: meta = specDB.meta_from_position(icoord, pargs.rho*units.kpc) # Keys mkeys = ['GROUP', 'RA_GROUP', 'DEC_GROUP', 'zem_GROUP', 'ZQ', 'Ref'] # Show if meta is None: print("No source found, try another location or a larger tolerance.") return else: group_utils.show_group_meta(meta, show_all_keys=False, meta_keys=mkeys)#, max_lines=10000000) # Plot if pargs.plot: if pargs.cat: print("Cannot mix --plot with --cat. Try again!") return plot_spec(specDB, meta, ifrb, dust_correct=pargs.dust)
[docs] def cli(): main(parser())