Example #1
0
 def fill(self):
     import xastropy.spec.abs_line as xspa
     # Data
     self.atomic = xspa.abs_line_data(self.wrest)
     #
     self.analy['VLIM'] = [0., 0.]  # km/s
     self.analy['FLG_ANLY'] = 1  # Analyze
     self.analy['FLG_EYE'] = 0
     self.analy['FLG_LIMIT'] = 0  # No limit
     self.analy['DATFIL'] = ''
     self.analy['IONNM'] = self.atomic['name']
Example #2
0
 def fill(self):
     import xastropy.spec.abs_line as xspa
     # Data
     self.atomic = xspa.abs_line_data(self.wrest)
     #
     self.analy['VLIM'] = [0., 0.] # km/s
     self.analy['FLG_ANLY'] = 1 # Analyze
     self.analy['FLG_EYE'] = 0
     self.analy['FLG_LIMIT'] = 0 # No limit
     self.analy['DATFIL'] = '' 
     self.analy['IONNM'] = self.atomic['name']
Example #3
0
    def fill(self):
        import xastropy.spec.abs_line as xspa

        # Data
        self.atomic = xspa.abs_line_data(self.wrest)
        #
        self.analy["VLIM"] = [0.0, 0.0]  # km/s
        self.analy["FLG_ANLY"] = 1  # Analyze
        self.analy["FLG_EYE"] = 0
        self.analy["FLG_LIMIT"] = 0  # No limit
        self.analy["DATFIL"] = ""
        self.analy["IONNM"] = self.atomic["name"]
Example #4
0
    def fill_data(self):
        import xastropy.spec.abs_line as xspa

        # Data
        self.atomic = xspa.abs_line_data(self.wrest)

        #
        self.analy['WVMNX'] = [0., 0.] # Wavelength interval about the line (observed)
        self.analy['VLIM'] = [0., 0.]*u.km/u.s # Velocity limit of line
        self.analy['FLG_ANLY'] = 1 # Analyze
        self.analy['FLG_EYE'] = 0
        self.analy['FLG_LIMIT'] = 0 # No limit
        self.analy['DATFIL'] = '' 
        self.analy['IONNM'] = self.atomic['name']
        self.analy['z'] = 0.  # Redshift
        # Characteristics
        self.attrib = {'N': 0., 'Nsig': 0., 'flgN': 0, # Column
                       'b': 0., 'bsig': 0.,  # Doppler
                       'EW': 0., 'EWsig': 0., 'flgEW': 0 # EW
                       }
Example #5
0
def mk_ew_lyman_spline(bval, ew_fil=None):
    """ Generate a pickle file of a Spline of EW vs NHI for the Lyman series

    Parameters:
      bval: float
        Doppler parameter (km/s)
      ew_fil: string ('EW_SPLINE_b##.p')
        Name of output pickle file
    
    """

    from astropy import constants as const
    from xastropy.spec import abs_line as xsab
    from xastropy.spec import voigt as xsv

    # Outfil
    if ew_fil == None:
        ew_fil = "EW_SPLINE_b" + str(int(bval)) + ".p"

    # Units
    if not isinstance(bval, u.quantity.Quantity):
        bval = bval * u.km / u.s  # km/s

    # NHI
    nspl = 100
    log_NHI = 11.0 + 11 * np.arange(nspl) / (nspl - 1.0)

    # Lines
    wrest = tau_eff_llist()

    # Output
    outp = {"wrest": wrest, "tck": []}

    # Setup
    nvel = 60001
    velo = (-30000.0 + np.arange(nvel, dtype="float64")) * u.km / u.s  # km/s
    dvel = 1.0 * u.km / u.s  # km/s
    uval = velo / bval

    # Loop
    for cnt, line in enumerate(wrest):

        # Get atomic data
        abl_data = xsab.abs_line_data(line.value)

        # Wave array
        dwv = dvel.to(u.cm / u.s) * line / const.c.cgs  # Ang

        # Voigt
        vd = (bval / line).to(u.Hz)  # Frequency
        a = abl_data["gamma"] / (12.56637 * vd.value)
        vgt = xsv.voigtking(uval, a)

        # tau
        tau = 0.014971475 * abl_data["fval"] * vgt / vd  # Normalized to N_HI = 1 cm^-2

        # Flux
        tau_array = np.outer(tau, 10.0 ** log_NHI)
        fx = np.exp(-1.0 * tau_array)

        # EW
        EW = np.sum(1.0 - fx, 0) * dwv
        # EW_SPLINE[qq].EW = EW

        # Spline
        # EW_SPLINE[qq].splint = spl_init(NHI, EW, /double)
        tck = interpolate.splrep(log_NHI, EW)  # , s=0)

        # Check?
        chk = False
        # if line == (1215.6701*u.AA):
        #    xdb.set_trace()
        #    chk=True
        if chk:
            from matplotlib import pyplot as plt

            plt.clf()
            plt.plot(log_NHI, EW, "o")
            # Spline
            xnew = np.linspace(np.amin(log_NHI), np.amax(log_NHI), nspl * 10)
            ynew = interpolate.splev(xnew, tck, der=0)
            plt.plot(xnew, ynew, "-")
            plt.show()

        # Output
        print("line = %g" % line.value)
        outp["tck"].append(tck)

    # Write
    print("Writing %s" % ew_fil)
    pickle.dump(outp, open(ew_fil, "wb"))
Example #6
0
def mk_ew_lyman_spline(bval, ew_fil=None):
    """ Generate a pickle file of a Spline of EW vs NHI for the Lyman series

    Parameters:
      bval: float
        Doppler parameter (km/s)
      ew_fil: string ('EW_SPLINE_b##.p')
        Name of output pickle file
    
    """

    from astropy import constants as const
    from xastropy.spec import abs_line as xsab
    from xastropy.spec import voigt as xsv

    # Outfil
    if ew_fil == None:
        ew_fil = 'EW_SPLINE_b' + str(int(bval)) + '.p'

    # Units
    if not isinstance(bval, u.quantity.Quantity):
        bval = bval * u.km / u.s  # km/s

    # NHI
    nspl = 100
    log_NHI = 11.0 + 11 * np.arange(nspl) / (nspl - 1.)

    # Lines
    wrest = tau_eff_llist()

    # Output
    outp = {'wrest': wrest, 'tck': []}

    # Setup
    nvel = 60001
    velo = (-30000. + np.arange(nvel, dtype='float64')) * u.km / u.s  # km/s
    dvel = 1. * u.km / u.s  # km/s
    uval = velo / bval

    # Loop
    for cnt, line in enumerate(wrest):

        # Get atomic data
        abl_data = xsab.abs_line_data(line.value)

        # Wave array
        dwv = dvel.to(u.cm / u.s) * line / const.c.cgs  # Ang

        # Voigt
        vd = (bval / line).to(u.Hz)  # Frequency
        a = abl_data['gamma'] / (12.56637 * vd.value)
        vgt = xsv.voigtking(uval, a)

        # tau
        tau = 0.014971475 * abl_data[
            'fval'] * vgt / vd  # Normalized to N_HI = 1 cm^-2

        # Flux
        tau_array = np.outer(tau, 10.**log_NHI)
        fx = np.exp(-1. * tau_array)

        # EW
        EW = np.sum(1. - fx, 0) * dwv
        #EW_SPLINE[qq].EW = EW

        # Spline
        #EW_SPLINE[qq].splint = spl_init(NHI, EW, /double)
        tck = interpolate.splrep(log_NHI, EW)  #, s=0)

        # Check?
        chk = False
        #if line == (1215.6701*u.AA):
        #    xdb.set_trace()
        #    chk=True
        if chk:
            from matplotlib import pyplot as plt
            plt.clf()
            plt.plot(log_NHI, EW, 'o')
            # Spline
            xnew = np.linspace(np.amin(log_NHI), np.amax(log_NHI), nspl * 10)
            ynew = interpolate.splev(xnew, tck, der=0)
            plt.plot(xnew, ynew, '-')
            plt.show()

        # Output
        print('line = %g' % line.value)
        outp['tck'].append(tck)

    # Write
    print('Writing %s' % ew_fil)
    pickle.dump(outp, open(ew_fil, "wb"))