Exemplo n.º 1
0
def test_load_sngl():
    # Class
    cos_halos = COSHalos(fits_path=data_path(''),
                         cdir=data_path(''),
                         load=False)
    # Load
    cos_halos.load_single_fits(('J0950+4831', '177_27'))
Exemplo n.º 2
0
def test_getitem():
    # Class
    cos_halos = COSHalos(fits_path=data_path(''), cdir='dum', load=False)
    # Load
    cos_halos.load_single_fits(('J0950+4831', '177_27'))
    # Get item
    cgm_abs = cos_halos[('J0950+4831', '177_27')]
    assert cgm_abs.galaxy.field == 'J0950+4831'
Exemplo n.º 3
0
def fig_lya(inp=('J1555+3628', '88_11'), outfil='fig_j1555_lya.png'):
    # Init COS-Halos sightline
    cos_halos = COSHalos()
    #cos_halos.load_single( ('J0950+4831','177_27'))
    cgm_abs = cos_halos[inp]

    # ########################################
    # Finder (out of order to avoid PDF issues)
    #finder.main([cgm_abs.name, cgm_abs.galaxy.coord], imsize=2.*u.arcmin, show_circ=False)

    lclr = 'blue'
    lw = 2.

    # Start the plot
    #outfil='fig_j1555_lya.pdf'
    #pp = PdfPages(outfil)

    # Full QSO spectrum
    spec = cos_halos.load_bg_cos_spec(inp, 1215.6700 * u.AA)
    plt.figure(figsize=(5, 5))
    plt.clf()
    gs = gridspec.GridSpec(1, 1)

    # Axes
    ax = plt.subplot(gs[0])
    #ax.xaxis.set_minor_locator(plt.MultipleLocator(0.5))
    #ax.xaxis.set_major_locator(plt.MultipleLocator(1.))
    #ax.get_xaxis().get_major_formatter().set_useOffset(False)
    ax.set_xlim(1436., 1455.)
    ax.set_ylim(-0.1, 1.3)
    ax.set_ylabel('Normalized Flux')
    ax.set_xlabel(r'Wavelength ($\AA$)')
    for axis in ['top', 'bottom', 'left', 'right']:
        ax.spines[axis].set_linewidth(2.0)

    # Zero line
    ax.plot([-1e9, 1e9], (0., 0.), 'g--', lw=lw)
    wv_lya = 1215.670 * (1 + cgm_abs.zabs)
    ax.plot([wv_lya] * 2, [-1e9, 1e9], 'b--', lw=lw)

    # Data
    ax.plot(spec.wavelength, spec.flux, 'k', drawstyle='steps-mid')
    ax.plot(spec.wavelength, spec.sig, 'r:')

    #ax.fill_between( [1455., 1490.], [ymnx[0]]*2, [ymnx[1]]*2, color='blue', alpha=0.3)
    # Label
    ax.text(1437., 0.3, r'HI Ly$\alpha$', ha='left',
            fontsize=21.)  #, color=lclr)

    # Fonts
    xputils.set_fontsize(ax, 17.)

    # Write
    plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
    plt.savefig(outfil)
    plt.close()
    print("Wrote {:s}".format(outfil))
Exemplo n.º 4
0
def test_load_survey():
    # Class
    cos_halos = COSHalos()  #debug=True)
    assert len(cos_halos.cgm_abs) == 44
    # Metallicity
    cos_halos.load_mtl_pdfs()
    # Confirm  J0943+0531_227_19 is out for metallicity
    cgm_j0943 = cos_halos[('J0943+0531', '227_19')]
    assert cgm_j0943.igm_sys.metallicity is None
Exemplo n.º 5
0
def test_write_sngl():
    import io, json
    from linetools import utils as ltu
    # Class
    cos_halos = COSHalos(fits_path=data_path(''),
                         cdir=data_path(''),
                         load=False)
    # Load
    cos_halos.load_single_fits(('J0950+4831', '177_27'))
    # Write to JSON
    cdict = cos_halos.cgm_abs[0].to_dict()
    ltu.savejson('tmp.json', cdict, overwrite=True)
Exemplo n.º 6
0
def test_PDF():
    cos_halos = COSHalos()
    cos_halos.load_mtl_pdfs()
    all_NHI = []
    all_mtl = []
    for sl, sightline in enumerate(cos_halos.cgm_abs):
        if sightline.igm_sys.NHIPDF is not None:
            this_nhi = sightline.igm_sys.NHIPDF.median
            all_NHI.append(this_nhi)
            all_mtl.append(sightline.igm_sys.metallicity.median)
    # Test
    assert len(all_NHI) == 31
Exemplo n.º 7
0
def fig_experiment(outfil=None):

    # Init COS-Halos sightline
    cos_halos = COSHalos()
    cos_halos.load_single(('J0950+4831', '177_27'))
    cgm_abs = cos_halos.cgm_abs[0]
    print('zem = {:g}'.format(cgm_abs.abs_sys.zem))

    # ########################################
    # Finder (out of order to avoid PDF issues)
    #finder.main([cgm_abs.name, cgm_abs.galaxy.coord], imsize=2.*u.arcmin, show_circ=False)

    lclr = 'blue'

    # Start the plot
    if outfil is None:
        outfil = 'fig_experiment.pdf'
    pp = PdfPages(outfil)

    # Full QSO spectrum
    spec_fil = os.getenv(
        'DROPBOX_DIR'
    ) + '/COS-Halos/Targets/J0950+4831/Data/J0950+4831_nbin6_coadd.fits'
    spec = lsio.readspec(spec_fil)
    xmnx = (1135., 1750.)
    ymnx = (-0.0002, 0.0106)
    for ss in range(2):
        plt.figure(figsize=(8, 5))
        plt.clf()
        gs = gridspec.GridSpec(1, 1)

        # Axes
        ax = plt.subplot(gs[0, 0])
        #ax.xaxis.set_minor_locator(plt.MultipleLocator(0.5))
        #ax.xaxis.set_major_locator(plt.MultipleLocator(1.))
        #ax.get_xaxis().get_major_formatter().set_useOffset(False)
        ax.set_xlim(1135., 1750.)
        ax.set_ylim(-0.0002, 0.0106)
        ax.set_ylabel('Relative Flux')
        ax.set_xlabel(r'Wavelength ($\AA$)')

        # Zero line
        ax.plot(xmnx, (0., 0.), 'g--')

        # Data
        ax.plot(spec.dispersion, spec.flux, 'k')
        ax.plot(spec.dispersion, spec.sig, 'r:')

        if ss > 0:
            ax.fill_between([1455., 1490.], [ymnx[0]] * 2, [ymnx[1]] * 2,
                            color='blue',
                            alpha=0.3)
        # Label
        ax.text(1500.,
                0.008,
                cgm_abs.field,
                ha='left',
                fontsize=21.,
                color=lclr)

        # Fonts
        xputils.set_fontsize(ax, 17.)

        # Write
        plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
        pp.savefig()
        plt.close()

    # Lya spec
    for ss in range(3):

        plt.figure(figsize=(8, 5))
        plt.clf()
        gs = gridspec.GridSpec(1, 1)

        # Axes
        if ss == 0:
            spec = cos_halos.load_bg_cos_spec(0, 1215.6700 * u.AA)
            wvmnx = np.array([1455., 1490.]) * u.AA
            scl_wv = 1.
        elif ss == 1:
            scl_wv = (1 + cgm_abs.galaxy.z)
        elif ss == 2:
            spec = cos_halos.load_bg_cos_spec(0, 1025.7222 * u.AA)
            scl_wv = (1 + cgm_abs.galaxy.z)
            wvmnx = np.array([1015., 1037.]) * u.AA * scl_wv  # convoluted, yes

        ax = plt.subplot(gs[0, 0])
        #ax.xaxis.set_minor_locator(plt.MultipleLocator(0.5))
        #ax.xaxis.set_major_locator(plt.MultipleLocator(1.))
        #ax.get_xaxis().get_major_formatter().set_useOffset(False)
        ax.set_xlim(wvmnx.value / scl_wv)
        ax.set_ylim(-0.1, 1.3)
        ax.set_ylabel('Normalized Flux')

        # Zero line
        ax.plot(wvmnx.value / scl_wv, (0., 0.), 'g--')

        # Data
        ax.plot(spec.dispersion / scl_wv, spec.flux, 'k')
        ax.plot(spec.dispersion / scl_wv, spec.sig, 'r:')

        # Label
        if ss == 0:
            ax.set_xlabel(r'Wavelength ($\AA$)')
            ax.text(1480.,
                    0.4,
                    cgm_abs.field,
                    ha='left',
                    fontsize=21.,
                    color=lclr)
        elif ss == 1:
            ax.set_xlabel(r'Rest Wavelength ($\AA$)')
            ax.text(1220.,
                    0.4,
                    r'HI Ly$\alpha$' + ' \n ' +
                    r'$z=${:0.4f}'.format(cgm_abs.galaxy.z),
                    ha='left',
                    fontsize=21.,
                    multialignment='center',
                    color=lclr)
        elif ss == 2:
            ax.set_xlabel(r'Rest Wavelength ($\AA$)')
            ax.text(1017.,
                    0.4,
                    r'HI Ly$\beta$' + ' \n ' +
                    r'$z=${:0.4f}'.format(cgm_abs.galaxy.z),
                    ha='left',
                    fontsize=21.,
                    multialignment='center',
                    color=lclr)

        # Fonts
        xputils.set_fontsize(ax, 17.)

        # Write
        plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
        pp.savefig()
        plt.close()

    # ########################################
    # Galaxy spectrum
    plt.figure(figsize=(8, 5))
    plt.clf()
    gs = gridspec.GridSpec(1, 1)

    # Load
    spec = cos_halos.load_gal_spec(0)
    # Axes
    ax = plt.subplot(gs[0, 0])
    ax.set_xlim(4000., 8000.)
    ax.set_ylim(-0.1, 25.)
    ax.set_xlabel(r'Wavelength ($\AA$)')
    ax.set_ylabel('Relative Flux')
    # Velo
    ax.plot(spec.dispersion, spec.flux, 'k')  #, lw=1.3)
    ax.plot(spec.dispersion, spec.sig, 'r:')  #, lw=1.3)
    # Label
    #ax.text(-800., 0.2, lbl, ha='left', fontsize=21., color=lclr)
    # Fonts
    xputils.set_fontsize(ax, 17.)
    # Write
    plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
    pp.savefig()
    plt.close()

    # ########################################
    # Simple HI stack plot
    trans = np.array([1215.6701, 1025.7223]) * u.AA
    lbls = [r'HI Ly$\alpha$', r'HI Ly$\beta$']

    plt.figure(figsize=(8, 5))
    plt.clf()
    gs = gridspec.GridSpec(2, 1)

    for qq, itran, lbl in zip(range(len(trans)), trans, lbls):
        # Load
        spec = cos_halos.load_bg_cos_spec(0, itran)
        # Axes
        ax = plt.subplot(gs[qq, 0])
        ax.set_xlim(-1000., 1000.)
        ax.set_ylim(-0.1, 1.3)
        ax.set_ylabel('Normalized Flux')
        if qq == 0:
            ax.xaxis.set_ticklabels([])
        else:
            ax.set_xlabel('Relative Velocity (km/s)')
        # Velo
        velo = spec.relative_vel(itran * (cgm_abs.galaxy.z + 1))
        ax.plot(velo, spec.flux, 'k', drawstyle='steps', lw=1.3)
        # Label
        ax.text(-800., 0.2, lbl, ha='left', fontsize=21., color=lclr)
        # Fonts
        xputils.set_fontsize(ax, 17.)
    # Write
    plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
    pp.savefig()
    plt.close()

    # ########################################
    # Greater stack plot
    trans = np.array([
        1215.6701, 1025.7223, 2852.9642, 2803.5315, 1083.9937, 1206.5,
        1393.755, 1037.6167
    ]) * u.AA
    lbls = [
        r'HI Ly$\alpha$', r'HI Ly$\beta$', 'MgI 2852', 'MgII 2796', 'NII 1083',
        'SiIII 1206', 'SiIV 1393', 'OVI 1037'
    ]

    plt.figure(figsize=(8, 5))
    plt.clf()
    gs = gridspec.GridSpec(2, 4)
    xmnx = (-500., 500.)
    ymnx = (-0.1, 1.3)

    wbox = {'facecolor': 'white', 'edgecolor': 'white'}
    for qq, itran, lbl in zip(range(len(trans)), trans, lbls):
        # Load
        spec = cos_halos.load_bg_cos_spec(0, itran)
        # Axes
        ax = plt.subplot(gs[qq % 2, qq // 2])
        ax.set_xlim(xmnx)
        ax.xaxis.set_major_locator(plt.MultipleLocator(300.))
        ax.set_ylim(ymnx)
        if qq % 2 == 0:
            ax.xaxis.set_ticklabels([])
        if qq < 2:
            ax.set_ylabel('Normalized Flux')
        else:
            ax.yaxis.set_ticklabels([])
        #if qq == 3:
        #    ax.set_xlabel('Relative Velocity (km/s)')
        # Velo
        velo = spec.relative_vel(itran * (cgm_abs.galaxy.z + 1))
        ax.plot(velo, spec.flux, 'k', drawstyle='steps', lw=1.3)
        ax.plot([0., 0.], ymnx, 'g:')
        # Label
        ax.text(10., 1.15, lbl, ha='left', fontsize=15., color=lclr, bbox=wbox)
        # Fonts
        xputils.set_fontsize(ax, 17.)
    # Write
    plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
    pp.savefig()
    plt.close()

    # Finish
    print('tlk_coshalos: Wrote {:s}'.format(outfil))
    pp.close()
Exemplo n.º 8
0
def fig_abs_gallery(wrest=None,
                    lbl=None,
                    outfil=None,
                    cos_halos=None,
                    passback=False,
                    axes_flg=0):
    # import tlk_coshalos as tch
    # reload(tch)
    # cos_halos = tch.fig_abs_gallery(passback=True)
    '''Gallery of absorption lines
    Default is M* vs. sSFR
      But you can do rho vs. M* too
    axes_flg: int, optional
      0: M* vs. sSFR
      1: rho vs. M*
    '''
    # Linelist
    llist = lll.LineList('Strong')
    if wrest is None:
        wrest = 1215.670 * u.AA
    Zion = (llist[wrest]['Z'], llist[wrest]['ion'])
    if lbl is None:
        lbl = r'HI Ly$\alpha$'
    if outfil is None:
        outfil = 'fig_HI_gallery.pdf'
    # Init COS-Halos (slow)
    if cos_halos is None:
        cos_halos = COSHalos()
        cos_halos.load_mega()  #skip_ions=True)
        if passback:
            return cos_halos

    if axes_flg == 0:
        xmnx = (9.4, 11.7)
        ymnx = (-13., -9.)
    elif axes_flg == 1:
        ymnx = (9.4, 11.7)  # log Msun
        xmnx = (15., 163)  # kpc
    vmnx = (-600., 600.)  # km/s
    wbox = {'facecolor': 'white', 'edgecolor': 'white'}
    lclr = 'blue'

    # To help with looping
    def sngl_abs(ax,
                 field_gal,
                 wbox=wbox,
                 lclr=lclr,
                 vmnx=vmnx,
                 xmnx=xmnx,
                 ymnx=ymnx,
                 cos_halos=cos_halos,
                 show_xylbl=True,
                 srect=0.2,
                 show_ewlbl=True,
                 lw=1.3,
                 axes_flg=axes_flg):
        #
        cgm_abs = cos_halos[field_gal]
        if axes_flg == 0:
            xplt = cgm_abs.galaxy.stellar_mass
            yplt = np.log10(
                cgm_abs.galaxy.sfr[1]) - cgm_abs.galaxy.stellar_mass
        elif axes_flg == 1:
            yplt = cgm_abs.galaxy.stellar_mass
            xplt = cgm_abs.rho.value
        # Spec
        spec = cos_halos.load_bg_cos_spec(field_gal, wrest)
        velo = spec.relative_vel(wrest * (cgm_abs.galaxy.z + 1))
        # EW
        data = cgm_abs.abs_sys.ions[Zion]
        itrans = np.where(np.abs(data['LAMBDA'] - wrest.value) < 1e-3)[0]
        if len(itrans) == 0:
            print('No measurement of {:g} for {:s} {:s}'.format(
                wrest, field_gal[0], field_gal[1]))
            return
        EW = data['WREST'][itrans][0] * u.AA / 1e3
        sigEW = data['SIGWREST'][itrans][0] * u.AA / 1e3
        if sigEW <= 0.:  # Something must be wrong
            return
        if EW > 3 * sigEW:
            sclr = 'k'
        else:
            sclr = 'r'
        #
        xrect = (xplt - xmnx[0]) / (xmnx[1] - xmnx[0])
        yrect = (yplt - ymnx[0]) / (ymnx[1] - ymnx[0])
        rect = [xrect, yrect, srect, srect]
        axsp = xpsimp.add_subplot_axes(ax, rect)  #,axisbg=axisbg)
        axsp.set_xlim(vmnx)
        axsp.set_ylim(-0.1, 1.3)
        if show_xylbl:
            axsp.set_xlabel('Relative Velocity (km/s)', fontsize=9.)
            axsp.set_ylabel('Normalized Flux', fontsize=9.)
        # Plot
        axsp.plot(velo, spec.flux, sclr, drawstyle='steps', lw=lw)
        # Label
        #llbl = (r'$W_\lambda = $'+'{:0.2f} A \n'.format(EW.value)+
        #    '$z=${:.3f}\n'.format(cgm_abs.galaxy.z)+
        #    r'$\rho=$'+'{:d}kpc'.format(int(np.round(cgm_abs.rho.to('kpc').value))))
        if show_ewlbl:
            llbl = r'$W_\lambda = $' + '{:0.2f} A'.format(EW.value)
            axsp.text(-300.,
                      1.1,
                      llbl,
                      ha='left',
                      fontsize=7.,
                      color=lclr,
                      bbox=wbox)  #multialignment='left')

    # Start the plot
    pp = PdfPages(outfil)

    if axes_flg == 0:
        loop = range(4)
    else:
        loop = range(3, 4)

    for ss in loop:
        plt.figure(figsize=(8, 5))
        plt.clf()
        gs = gridspec.GridSpec(1, 1)

        # Axes
        ax = plt.subplot(gs[0, 0])
        ax.set_xlim(xmnx)
        ax.set_ylim(ymnx)
        if axes_flg == 0:
            ax.set_ylabel('sSFR')
            ax.set_xlabel('log M*')
            ax.text(9.75, -12., lbl, color=lclr, fontsize=21.)
        elif axes_flg == 1:
            ax.set_ylabel('log M*')
            ax.set_xlabel('Impact Parameter (kpc)')
            ax.text(40., 11.5, lbl, color=lclr, fontsize=21.)
        #ax.xaxis.set_major_locator(plt.MultipleLocator(300.))

        #
        if ss == 0:  # Single system
            field_gal = ('J0950+4831', '177_27')
            sngl_abs(ax, field_gal)
        elif ss == 1:  # Two systems
            cgm_list = [('J0950+4831', '177_27'), ('J1245+3356', '236_36')]
            for field_gal in cgm_list:
                sngl_abs(ax, field_gal)
        elif ss > 1:  # Half systems
            if ss == 2:
                iend = 20
            else:
                iend = -1
            for cgm_abs in cos_halos.cgm_abs[0:iend]:
                field_gal = (cgm_abs.field, cgm_abs.gal_id)
                sngl_abs(ax,
                         field_gal,
                         show_xylbl=False,
                         srect=0.1,
                         show_ewlbl=False,
                         lw=0.5)
        else:
            pass

        xputils.set_fontsize(ax, 17.)
        # Write
        plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
        pp.savefig()
        plt.close()

    # Finish
    print('tlk_coshalos: Wrote {:s}'.format(outfil))
    pp.close()
Exemplo n.º 9
0
def fig_images(outfil=None):

    from xastropy.obs import x_getsdssimg as xgs

    # Init COS-Halos sightline
    cos_halos = COSHalos()
    cos_halos.load_mega(skip_ions=True)
    #xdb.set_trace()

    # Start the plot
    if outfil is None:
        outfil = 'fig_coshalo_images.pdf'
    pp = PdfPages(outfil)

    dx = 0.2
    dy = 0.55
    imsize = 1.2

    for ss in range(5):
        fig = plt.figure(figsize=(8, 5))
        fig.clf()
        # Setup for dark
        xpsimp.dark_bkgd(plt)
        gs = gridspec.GridSpec(1, 1)

        # Axes
        ax = plt.subplot(gs[0, 0])
        ax.set_xlim(9.4, 11.7)
        #ax.xaxis.set_major_locator(plt.MultipleLocator(300.))
        ax.set_ylim(-13, -9)
        ax.set_ylabel('sSFR')
        ax.set_xlabel('log M*')

        # Plot
        if ss == 0:
            mstar = [
                cgm_abs.galaxy.stellar_mass for cgm_abs in cos_halos.cgm_abs
            ]
            sSFR = [
                np.log10(cgm_abs.galaxy.sfr[1]) - cgm_abs.galaxy.stellar_mass
                for cgm_abs in cos_halos.cgm_abs
            ]
            ax.scatter(mstar, sSFR)
        elif ss == 1:  # Show our first one
            cgm_abs = cos_halos[('J0950+4831', '177_27')]
            img, oBW = xgs.getimg(cgm_abs.galaxy.coord.ra.deg,
                                  cgm_abs.galaxy.coord.dec.deg,
                                  imsize=imsize)
            # Figure out placement
            ximg = cgm_abs.galaxy.stellar_mass
            yimg = np.log10(
                cgm_abs.galaxy.sfr[1]) - cgm_abs.galaxy.stellar_mass
            # Show
            ax.imshow(img,
                      extent=(ximg - dx, ximg + dx, yimg - dy, yimg + dy),
                      aspect=dx / dy)
        elif ss == 2:  # Show two
            cgm_list = [('J0950+4831', '177_27'), ('J1245+3356', '236_36')]
            for icgm in cgm_list:
                cgm_abs = cos_halos[icgm]
                img, oBW = xgs.getimg(cgm_abs.galaxy.coord.ra.deg,
                                      cgm_abs.galaxy.coord.dec.deg,
                                      imsize=imsize)
                # Figure out placement
                ximg = cgm_abs.galaxy.stellar_mass
                yimg = np.log10(
                    cgm_abs.galaxy.sfr[1]) - cgm_abs.galaxy.stellar_mass
                # Show
                ax.imshow(img,
                          extent=(ximg - dx, ximg + dx, yimg - dy, yimg + dy),
                          aspect=dx / dy)
        elif ss >= 3:  # Show half
            if ss == 3:
                iend = 20
            else:
                iend = -1
            for cgm_abs in cos_halos.cgm_abs[0:iend]:
                img, oBW = xgs.getimg(cgm_abs.galaxy.coord.ra.deg,
                                      cgm_abs.galaxy.coord.dec.deg,
                                      imsize=1.2)
                # Figure out placement
                ximg = cgm_abs.galaxy.stellar_mass
                yimg = np.log10(
                    cgm_abs.galaxy.sfr[1]) - cgm_abs.galaxy.stellar_mass
                # Show
                scl = 2.
                ax.imshow(img,
                          extent=(ximg - dx / scl, ximg + dx / scl,
                                  yimg - dy / scl, yimg + dy / scl),
                          aspect=dx / dy)

        xputils.set_fontsize(ax, 17.)
        # Write
        fig.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
        pp.savefig()
        plt.close()

    # Finish
    print('tlk_coshalos: Wrote {:s}'.format(outfil))
    pp.close()
Exemplo n.º 10
0
def fig_sngl_metPDF(system):
    """ Shows a single metallicity PDF
    """
    from matplotlib import transforms

    # Read Metallicity input
    mfile = '../Analysis/COS_Halos_MTL.ascii'
    data = Table.read(mfile, format='ascii')
    mtl_inps = np.where(data['name'] == system[0]+'_'+system[1])[0]

    ion_lst = []
    clrs = []
    cdict = {0:'black', -1:'red', -2:'green'}
    for inp in mtl_inps:
        ion_lst.append(data[inp]['ion'])
        clrs.append(cdict[data[inp]['flag']])

    # Read COS-Halos
    cos_halos = COSHalos()
    cos_halos.load_single_fits(system, skip_ions=True)
    orig_NHI = cos_halos.NHI
    orig_fNHI = cos_halos.flag_NHI

    # Read PDF
    mtlfil = '../Analysis/COS_Halos_MTL.hdf5'
    fh5 = h5py.File(mtlfil,'r')
    mPDF = MetallicityPDF(fh5['met']['left_edge_bins']+
                                     fh5['met']['left_edge_bins'].attrs['BINSIZE']/2.,
                                     fh5['met'][system[0]+'_'+system[1]])

    # KLUDGE
    print("BIG KLUDGE HERE")
    bad = np.where(mPDF.ZH < -2)[0]
    mPDF.pdf_ZH[bad] = 0.
    mPDF.normalize()

    # Init
    NHI_mnx = (14.8, 19.1)

    # Start the plot
    outfil = 'fig_metPDF_'+system[0]+'_'+system[1]+'.pdf'
    pp = PdfPages(outfil)

    fig = plt.figure(figsize=(7, 4))
    plt.clf()
    ax = plt.gca()

    # Axes
    #wvmnx = awvmnx[iuvq['instr']]
    #ax.xaxis.set_minor_locator(plt.MultipleLocator(500.))
    #ax.yaxis.set_major_locator(plt.MultipleLocator(1.))
    #plt.ylim(0, nsys+1)
    ax.set_xlim(-2,1)

    # Labels
    lsz = 19.

    # Giddy up
    ax.bar(mPDF.ZH-mPDF.dZH/2., mPDF.pdf_ZH, width=mPDF.dZH)
    ax.set_xlabel("[Z/H]", size=lsz)
    ax.set_ylabel("PDF", size=lsz)

    # Label system
    csz = 18.
    lbl = '{:s}_{:s}'.format(system[0], system[1])
    ax.text(0.1, 0.87, lbl, transform=ax.transAxes, color='black',
            size=csz, ha='left')

    # Ions
    x = -1.8
    ymnx = ax.get_ylim()
    y = 0.75 * ymnx[1]
    isz = 14.
    t = plt.gca().transData
    for s,c in zip(ion_lst,clrs):
        text = plt.text(x,y," "+s+" ",color=c, transform=t, size=isz)
        text.draw(fig.canvas.get_renderer())
        ex = text.get_window_extent()
        t = transforms.offset_copy(text._transform, x=ex.width*0.9, units='dots')

    # End
    xputils.set_fontsize(ax, 16.)
    print('Writing {:s}'.format(outfil))
    plt.tight_layout(pad=0.2,h_pad=0.,w_pad=0.1)
    pp.savefig()
    pp.close()
    plt.close()
Exemplo n.º 11
0
def fig_diff_NHI(cos_halos=None, outfil='fig_diff_NHI.pdf'):
    """ Compares original NHI with new
    """
    # Read LLS
    jfile = '../Analysis/COS_Halos_LLS.json'
    with open(jfile) as json_file:
        fdict = json.load(json_file)

    # Read COS-Halos
    if cos_halos is None:
        cos_halos = COSHalos()
        cos_halos.load_mega(skip_ions=True)
    orig_NHI = cos_halos.NHI
    orig_fNHI = cos_halos.flag_NHI

    # Init
    NHI_mnx = (14., 21.)

    # Start the plot
    if outfil is not None:
        pp = PdfPages(outfil)

    plt.figure(figsize=(5, 5))
    plt.clf()
    gs = gridspec.GridSpec(1, 1)

    ax = plt.subplot(gs[0])

    # Axes
    #wvmnx = awvmnx[iuvq['instr']]
    #ax.xaxis.set_minor_locator(plt.MultipleLocator(500.))
    #ax.yaxis.set_major_locator(plt.MultipleLocator(1.))
    ax.minorticks_on()
    ax.set_xlim(NHI_mnx)
    ax.set_ylim(NHI_mnx)

    # Labels
    ax.set_xlabel(r'Original: $\log_{10} \, N_{\rm HI}$')
    ax.set_ylabel(r'New: $\log_{10} \, N_{\rm HI}$')

    # Loop on Systems
    for key in fdict.keys():
        # Original
        mt = np.where((cos_halos.field==fdict[key]['quasar']) &
                      (cos_halos.gal_id==fdict[key]['galaxy']))[0]
        if len(mt) != 1:
            raise ValueError("Not a proper match")
        # Plot
        if orig_fNHI[mt] == 1:
            warnings.warn("Assuming the value for {:s}_{:s} is a lower limit".format(
                fdict[key]['quasar'],fdict[key]['galaxy']))
            #ax.quiver(orig_NHI[mt], fdict[key]['fit_NHI'][0], 1, 0,
            #          units='x', width=0.03, headwidth=2., headlength=5.)
        elif orig_fNHI[mt] == 2:
            pass
            #ax.quiver(orig_NHI[mt], fdict[key]['fit_NHI'][0], 1, 0,
            #          units='x', width=0.03, headwidth=2., headlength=5.)
        elif orig_fNHI[mt] == 3:
            raise ValueError("Very Unlikely")
        else:
            raise ValueError("Nope")
        # New
        #xdb.set_trace()
        yerr=[[fdict[key]['fit_NHI'][0]-fdict[key]['fit_NHI'][1]],
              [fdict[key]['fit_NHI'][2]-fdict[key]['fit_NHI'][0]]]
        ax.errorbar([orig_NHI[mt]], [fdict[key]['fit_NHI'][0]], yerr=yerr,
                    capthick=2, fmt='o')

    # 1-1 line
    ax.plot(NHI_mnx, NHI_mnx, ':', color='gray')

    # End
    print('Writing {:s}'.format(outfil))
    plt.tight_layout(pad=0.2,h_pad=0.,w_pad=0.1)
    pp.savefig()
    pp.close()
    plt.close()
Exemplo n.º 12
0
def test_data_for_survey():
    cos_halos = COSHalos()
    assert isinstance(cos_halos._data, Table)
    # Add an ion
    cos_halos.add_ion_to_data('OVI')
    assert 'flag_N_OVI' in cos_halos._data.keys()
Exemplo n.º 13
0
def test_write_to_json():
    cos_halos = COSHalos()
    cos_halos.to_json(data_path('cos_halos.json'))
Exemplo n.º 14
0
def fig_sngl_metPDF(system):
    """ Shows a single metallicity PDF
    """
    from matplotlib import transforms

    # Read Metallicity input
    mfile = '../Analysis/COS_Halos_MTL.ascii'
    data = Table.read(mfile, format='ascii')
    mtl_inps = np.where(data['name'] == system[0] + '_' + system[1])[0]

    ion_lst = []
    clrs = []
    cdict = {0: 'black', -1: 'red', -2: 'green'}
    for inp in mtl_inps:
        ion_lst.append(data[inp]['ion'])
        clrs.append(cdict[data[inp]['flag']])

    # Read COS-Halos
    cos_halos = COSHalos()
    cos_halos.load_single_fits(system, skip_ions=True)
    orig_NHI = cos_halos.NHI
    orig_fNHI = cos_halos.flag_NHI

    # Read PDF
    mtlfil = '../Analysis/COS_Halos_MTL.hdf5'
    fh5 = h5py.File(mtlfil, 'r')
    mPDF = MetallicityPDF(
        fh5['met']['left_edge_bins'] +
        fh5['met']['left_edge_bins'].attrs['BINSIZE'] / 2.,
        fh5['met'][system[0] + '_' + system[1]])

    # KLUDGE
    print("BIG KLUDGE HERE")
    bad = np.where(mPDF.ZH < -2)[0]
    mPDF.pdf_ZH[bad] = 0.
    mPDF.normalize()

    # Init
    NHI_mnx = (14.8, 19.1)

    # Start the plot
    outfil = 'fig_metPDF_' + system[0] + '_' + system[1] + '.pdf'
    pp = PdfPages(outfil)

    fig = plt.figure(figsize=(7, 4))
    plt.clf()
    ax = plt.gca()

    # Axes
    #wvmnx = awvmnx[iuvq['instr']]
    #ax.xaxis.set_minor_locator(plt.MultipleLocator(500.))
    #ax.yaxis.set_major_locator(plt.MultipleLocator(1.))
    #plt.ylim(0, nsys+1)
    ax.set_xlim(-2, 1)

    # Labels
    lsz = 19.

    # Giddy up
    ax.bar(mPDF.ZH - mPDF.dZH / 2., mPDF.pdf_ZH, width=mPDF.dZH)
    ax.set_xlabel("[Z/H]", size=lsz)
    ax.set_ylabel("PDF", size=lsz)

    # Label system
    csz = 18.
    lbl = '{:s}_{:s}'.format(system[0], system[1])
    ax.text(0.1,
            0.87,
            lbl,
            transform=ax.transAxes,
            color='black',
            size=csz,
            ha='left')

    # Ions
    x = -1.8
    ymnx = ax.get_ylim()
    y = 0.75 * ymnx[1]
    isz = 14.
    t = plt.gca().transData
    for s, c in zip(ion_lst, clrs):
        text = plt.text(x, y, " " + s + " ", color=c, transform=t, size=isz)
        text.draw(fig.canvas.get_renderer())
        ex = text.get_window_extent()
        t = transforms.offset_copy(text._transform,
                                   x=ex.width * 0.9,
                                   units='dots')

    # End
    xputils.set_fontsize(ax, 16.)
    print('Writing {:s}'.format(outfil))
    plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
    pp.savefig()
    pp.close()
    plt.close()
Exemplo n.º 15
0
def fig_diff_NHI(cos_halos=None, outfil='fig_diff_NHI.pdf'):
    """ Compares original NHI with new
    """
    # Read LLS
    jfile = '../Analysis/COS_Halos_LLS.json'
    with open(jfile) as json_file:
        fdict = json.load(json_file)

    # Read COS-Halos
    if cos_halos is None:
        cos_halos = COSHalos()
        cos_halos.load_mega(skip_ions=True)
    orig_NHI = cos_halos.NHI
    orig_fNHI = cos_halos.flag_NHI

    # Init
    NHI_mnx = (14., 21.)

    # Start the plot
    if outfil is not None:
        pp = PdfPages(outfil)

    plt.figure(figsize=(5, 5))
    plt.clf()
    gs = gridspec.GridSpec(1, 1)

    ax = plt.subplot(gs[0])

    # Axes
    #wvmnx = awvmnx[iuvq['instr']]
    #ax.xaxis.set_minor_locator(plt.MultipleLocator(500.))
    #ax.yaxis.set_major_locator(plt.MultipleLocator(1.))
    ax.minorticks_on()
    ax.set_xlim(NHI_mnx)
    ax.set_ylim(NHI_mnx)

    # Labels
    ax.set_xlabel(r'Original: $\log_{10} \, N_{\rm HI}$')
    ax.set_ylabel(r'New: $\log_{10} \, N_{\rm HI}$')

    # Loop on Systems
    for key in fdict.keys():
        # Original
        mt = np.where((cos_halos.field == fdict[key]['quasar'])
                      & (cos_halos.gal_id == fdict[key]['galaxy']))[0]
        if len(mt) != 1:
            raise ValueError("Not a proper match")
        # Plot
        if orig_fNHI[mt] == 1:
            warnings.warn(
                "Assuming the value for {:s}_{:s} is a lower limit".format(
                    fdict[key]['quasar'], fdict[key]['galaxy']))
            #ax.quiver(orig_NHI[mt], fdict[key]['fit_NHI'][0], 1, 0,
            #          units='x', width=0.03, headwidth=2., headlength=5.)
        elif orig_fNHI[mt] == 2:
            pass
            #ax.quiver(orig_NHI[mt], fdict[key]['fit_NHI'][0], 1, 0,
            #          units='x', width=0.03, headwidth=2., headlength=5.)
        elif orig_fNHI[mt] == 3:
            raise ValueError("Very Unlikely")
        else:
            raise ValueError("Nope")
        # New
        #xdb.set_trace()
        yerr = [[fdict[key]['fit_NHI'][0] - fdict[key]['fit_NHI'][1]],
                [fdict[key]['fit_NHI'][2] - fdict[key]['fit_NHI'][0]]]
        ax.errorbar([orig_NHI[mt]], [fdict[key]['fit_NHI'][0]],
                    yerr=yerr,
                    capthick=2,
                    fmt='o')

    # 1-1 line
    ax.plot(NHI_mnx, NHI_mnx, ':', color='gray')

    # End
    print('Writing {:s}'.format(outfil))
    plt.tight_layout(pad=0.2, h_pad=0., w_pad=0.1)
    pp.savefig()
    pp.close()
    plt.close()