Source code for frb.builds.build_frbs

""" Top-level module to build or re-build the JSON files for FRBs """

from importlib import resources
import os

from IPython import embed

import numpy as np

import pandas

from astropy import units

from frb.frb import FRB, load_frb_data
from frb.galaxies import frbgalaxy, defs, offsets
from frb import utils
import pandas


            

[docs] def run(frb_input:pandas.core.series.Series, lit_refs:str=None, override:bool=False, out_path:str=None, outfile:str=None): """Main method for generating a Host JSON file Args: frb_input (pandas.core.series.Series): Row of the CVS file providing the frb items lit_refs (str, optional): File of literature references. Defaults to None. override (bool, optional): Attempt to over-ride errors. Mainly for time-outs of public data. Defaults to False. outfile (str, optional): Over-ride default outfile [not recommended; mainly for testing] out_path (str, optional): Over-ride default outfile [not recommended; mainly for testing] Raises: e: [description] ValueError: [description] """ print("--------------------------------------") print(f"Building FRB JSON file for {frb_input.Name}") # Instantiate ifrb = FRB(frb_input.Name, (frb_input.ra, frb_input.dec), frb_input.DM*units.pc/units.cm**3, z_frb=frb_input.z if np.isfinite(frb_input.z) else None, repeater=frb_input.repeater) # DM_err if np.isfinite(frb_input['DM_err']): ifrb.DM_err = frb_input.DM_err * units.pc / units.cm**3 # RM for key in ['RM', 'RM_err']: if np.isfinite(frb_input[key]): setattr(ifrb, key, frb_input[key] * units.rad / units.m**2) # Fluence for key in ['fluence', 'fluence_err']: if np.isfinite(frb_input[key]): setattr(ifrb, key, frb_input[key] * units.Jy * units.ms) # Error ellipse ifrb.set_ee(a=frb_input.ee_a, b=frb_input.ee_b, theta=frb_input.ee_theta, cl=68.) if np.isfinite(frb_input.ee_a_sys): ifrb.set_ee(a=frb_input.ee_a_sys, b=frb_input.ee_b_sys, theta=frb_input.ee_theta, cl=68., stat=False) # Add DM_ISM from NE2001 ifrb.set_DMISM() # Refs ifrb.refs = frb_input.refs.split(',') # Pulses path = os.path.join(resources.files('frb'), 'data', 'FRBs') tbl_file = os.path.join(path, 'FRB_pulses.csv') frb_pulses = pandas.read_csv(tbl_file) idx = np.where(frb_pulses.Name == frb_input.Name)[0] if len(idx) == 1: frb_pulse = frb_pulses.iloc[idx[0]] # Pulse properties pulse_dict = {} # Width and scattering for key in ['Wi', 'Wi_err', 'tscatt', 'tscatt_err']: if np.isfinite(frb_pulse[key]): pulse_dict[key] = frb_pulse[key] * units.ms ifrb.set_pulse(frb_pulse.freq*units.GHz, **pulse_dict) # References prefs = frb_pulse.refs.split(',') for pref in prefs: if pref not in ifrb.refs: ifrb.refs.append(pref) # Write if out_path is None: out_path = os.path.join(resources.files('frb'), 'data', 'FRBs') ifrb.write_to_json(path=out_path) #'/home/xavier/Projects/FRB_Software/FRB/frb/tests/files')
[docs] def main(frbs:list, options:str=None, data_file:str=None, lit_refs:str=None, override:bool=False, outfile:str=None, out_path:str=None): """ Driver of the analysis Args: frbs (list): [description] options (str, optional): [description]. Defaults to None. data_file (str, optional): Alternate table than default for building FRBs. Defaults to None. lit_refs (str, optional): [description]. Defaults to None. override (bool, optional): [description]. Defaults to False. outfile (str, optional): [description]. Defaults to None. Here for testing out_path (str, optional): [description]. Defaults to None. Here for testing """ ''' # Options build_cigale, build_ppxf = False, False if options is not None: if 'cigale' in options: build_cigale = True if 'ppxf' in options: build_ppxf = True ''' # Read public FRB table frb_tbl = load_frb_data(tbl_file=data_file) # Loop me if frbs[0] == 'all': frbs = frb_tbl.Name.values elif isinstance(frbs, list): pass for frb in frbs: # Grab the name frb_name = utils.parse_frb_name(frb, prefix='FRB') mt_idx = frb_tbl.Name == frb_name idx = np.where(mt_idx)[0].tolist() # Do it! for ii in idx: run(frb_tbl.iloc[ii], lit_refs=lit_refs, override=override, outfile=outfile, out_path=out_path) # print("All done!")
# Run em all # frb_build FRBs --frb 20121102,20171020,20180301,20180916,20180924,20181112