Пример #1
0
def test_named():
    frb121102 = FRB('FRB121102',
                    'J053158.7+330852.5',
                    558.1 * units.pc / units.cm**3,
                    z_frb=0.19273)
    # Error ellipse
    frb121102.set_ee(0.1, 0.1, 0., 95.)
    assert isinstance(frb121102.eellipse, dict)

    # Pulse -- These are made up
    frb121102.set_pulse(1 * units.GHz,
                        time_res=0.054 * units.ms,
                        t0=0.66 * units.ms,
                        Wi=1.1 * units.ms,
                        tscatt=0.041 * units.ms,
                        tscatt_err=0.002 * units.ms,
                        scatt_index=-3.84,
                        scatt_index_err=0.77)

    assert np.isclose(frb121102.pulse['freq'].value, 1.)

    # Test writing
    frb121102.write_to_json()
    assert np.isclose(frb121102.pulse['freq'].value, 1.)

    # Test load
    tst = FRB.from_json('FRB121102.json')

    assert np.isclose(tst.pulse['freq'].value, 1.)
Пример #2
0
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(resource_filename('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(resource_filename('frb', 'data'), 'FRBs')
    ifrb.write_to_json(
        path=out_path
    )  #'/home/xavier/Projects/FRB_Software/FRB/frb/tests/files')