Пример #1
0
def shang_sed():

    import matplotlib.pyplot as plt
    import numpy as np
    from scipy.constants import c
    
    rltab = np.genfromtxt('/home/lc585/thesis/code/chapter01/rlmsedMR.txt')
    
    fig = plt.figure(figsize=figsize(1, 0.8))
    ax = fig.add_subplot(111)
    
    ax.plot( 1.0e10 * c / (10**rltab[:,0]), 10**rltab[:,1], color='black', label='Radio-loud' )
       
    ax.set_xlabel(r'Wavelength [${\rm \AA}$]')
    ax.set_ylabel( r'log ${\lambda}f_{\lambda}$ [Arbitrary Units]')
    
    ax.set_xscale('log')
    ax.set_yscale('log')
    
    ax.set_ylim(1e-2,12)
    ax.set_xlim(10,10**8)

    
    plt.tight_layout()
    
    plt.savefig('/home/lc585/thesis/figures/chapter05/shangsed.pdf')

    plt.show() 
    
    return None 
Пример #2
0
def zhist_elscal():

    tab = Table.read('/data/lc585/QSOSED/Results/Red_Obj_Cat/RedObjCatExt_MCMC.fits')
       
    fig = plt.figure(figsize=figsize(0.7))
    ax = fig.add_subplot(1,1,1)
    
    npbins = np.arange(2,4.1,0.1)
    
    bins, edges = np.histogram( tab['Z'][ tab['ELSCAL_FIT'] < 0.01 ], bins=npbins)
    bins_all, edges_all = np.histogram( tab['Z'], bins=npbins)
    
    bins = np.array(bins,dtype='float') / np.array(bins_all,dtype='float')
    
    left,right = edges[:-1],edges[1:]
    
    X = np.array([left,right]).T.flatten()
    Y = np.array([bins,bins]).T.flatten()
    
    ax.plot(X,Y,color='black')
  
    ax.set_xlabel(r'$z$')
    ax.set_ylabel('Fraction of weak emission line objects')
    ax.set_xlim(2,4)
    ax.set_ylim(0,0.7)
    plt.tick_params(axis='both',which='major')

    plt.tight_layout()
    plt.savefig('/home/lc585/thesis/figures/chapter06/zhist_elscal.pdf') 
    
    plt.show() 

    return None 
Пример #3
0
def red_spectra():


    set_plot_properties() # change style 
    
    from SpectraTools.get_spectra import read_boss_dr12_spec

    fig, ax = plt.subplots(figsize=figsize(0.7))

    wav, dw, flux, err = read_boss_dr12_spec('spec-4240-55455-0626.fits')
    ax.plot(wav, flux, color=cs[-1], label='SDSSJ0240+0103')

    wav, dw, flux, err = read_boss_dr12_spec('spec-5481-55983-0346.fits')
    ax.plot(wav, flux + 10, color=cs[0], label='SDSSJ1500+0826')

    plt.legend(frameon=False)

    ax.set_xlim(4000, 9000)
    ax.set_ylim(-5, 20)

    ax.set_xlabel(r'Wavelength $\lambda$ [\AA]')
    ax.set_ylabel('Flux F$_{\lambda}$ [Arbitary Units]')

    fig.tight_layout() 

    fig.savefig('/home/lc585/thesis/figures/chapter06/red_spectra.pdf')

    plt.show() 


    return None 
Пример #4
0
def lum_z():

    fig, ax = plt.subplots(figsize=figsize(1, 0.8)) 

    from qsosed.get_data import get_data 
    df = get_data() 

    lims = (1, 3, 45.5, 48)


    kde_contours(df.z_HW, 
                 df.LOGLBOL, 
                 ax,
                 lims=lims,
                 color='black',
                 filled=True)

    ax.set_ylim(45.5, None)

    ax.set_xlabel(r'Redshift $z$')
    ax.set_ylabel(r'Log L$_{\rm Bol}$ [erg~$\rm{s}^{-1}$]')

    plt.tight_layout()
    
    plt.savefig('/home/lc585/thesis/figures/chapter05/lum_z.pdf')

    plt.show()
Пример #5
0
def plot():

    from PlottingTools.plot_setup_thesis import figsize, set_plot_properties
    from astropy.table import Table, join
    import numpy as np
    import matplotlib.pyplot as plt

    set_plot_properties()  # change style

    tab = Table.read('/data/lc585/QSOSED/Results/141209/sample1/out_add.fits')

    tab = tab[~np.isnan(tab['BBT_STDERR'])]
    tab = tab[tab['BBT_STDERR'] < 500.]
    tab = tab[tab['BBT_STDERR'] > 5.0]
    tab = tab[(tab['LUM_IR_SIGMA'] * tab['RATIO_IR_UV']) < 1.]

    tab1 = Table.read('/data/lc585/QSOSED/Results/141124/sample2/out.fits'
                      )  # 9000 - 23500 fit
    tab1['BBPLSLP'] = tab1['BBPLSLP'] - 1.0

    goodnames = Table()
    goodnames['NAME'] = tab['NAME']

    tab1 = join(tab1, goodnames, join_type='right', keys='NAME')

    fig, ax = plt.subplots(figsize=figsize(1, 0.7))

    im = ax.hexbin(
        tab['BBT'],
        tab['RATIO_IR_UV'],
        C=tab1['BBPLSLP'],
        gridsize=80,
    )

    cb = plt.colorbar(im)
    cb.set_label(r'$\beta_{\rm NIR}$')

    # Digitize beta
    nbins = 20
    bins = np.linspace(-1.5, 1.5, nbins + 1)
    ind = np.digitize(tab1['BBPLSLP'], bins)
    bbt_locus = [np.median(tab['BBT'][ind == j]) for j in range(1, nbins)]
    ratio_locus = [
        np.median(tab['RATIO_IR_UV'][ind == j]) for j in range(1, nbins)
    ]
    ax.plot(bbt_locus[7:-2], ratio_locus[7:-2], color='black', linewidth=2.0)

    ax.set_ylabel(r'$R_{{\rm NIR}/{\rm UV}}$')
    ax.set_xlabel(r'$T_{\rm BB}$')
    ax.set_ylim(0, 2)

    plt.tight_layout()

    fig.savefig('/home/lc585/thesis/figures/chapter06/ratio_tbb_beta.pdf')

    plt.show()

    return None
Пример #6
0
def ratio_tbb_contours(): 


    tab = Table.read('/data/lc585/QSOSED/Results/150309/sample4/out_add.fits')
    
    tab = tab[ ~np.isnan(tab['BBT_STDERR'])]
    tab = tab[ tab['BBT_STDERR'] < 500. ]
    tab = tab[ tab['BBT_STDERR'] > 5.0 ]
    tab = tab[ (tab['LUM_IR_SIGMA']*tab['RATIO_IR_UV']) < 1.]
    
    tab = tab[ (tab['RATIO_IR_UV'] < 2.0) & (tab['RATIO_IR_UV'] > 0.0)]
    tab = tab[ (tab['BBT'] > 600.0) & (tab['BBT'] < 2000.0)]
    
    m1, m2 = tab['BBT'], tab['RATIO_IR_UV']
    
    xmin = m1.min()
    xmax = m1.max()
    ymin = m2.min()
    ymax = m2.max()
    
    X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
    positions = np.vstack([X.ravel(), Y.ravel()])
    values = np.vstack([m1, m2])
    kernel = stats.gaussian_kde(values)
    Z = np.reshape(kernel(positions).T, X.shape)
    
    # Sample from single (T,Norm) with gaussian errors on photometry. 
    # Mock magnitude file made in model.py and then fit in runsingleobjfit.py.
    
    tab2 = Table.read('/data/lc585/QSOSED/Results/150309/sample5/out_add.fits')
    
    fig, ax = plt.subplots(figsize=figsize(1.0))
    
    CS = ax.contour(X,Y,Z, colors='grey', levels=[0.0015,0.003,0.0045,0.006,0.0075,0.009,0.0105])
    
    ax.scatter(tab2['BBT'],
               tab2['RATIO_IR_UV'],
               edgecolor='None',
               color='black', 
               s=8)
    
    ax.set_ylim(0,0.8)
    ax.set_xlim(600,2000)
    
    ax.set_xlabel(r'$T_{BB}$')
    ax.set_ylabel('$R_{NIR/UV}$')

    fig.tight_layout() 

    fig.savefig('/home/lc585/thesis/figures/chapter05/ratio_tbb_contours.pdf')
    
    plt.show() 

    return None 
Пример #7
0
def civ_hot_dust_beta():

    tab = Table.read('/data/lc585/QSOSED/Results/140905/fit2/out_add.fits')
    
    
    tab = tab[ tab['W3SNR'] > 3.0]
    
    tab = tab[ tab['BAL_FLAG'] == 0]
    tab = tab[ tab['CIV_BLUESHIFT_PAUL'] < 10000.0]
    tab = tab[ ~np.isnan(tab['CIV_EW_PAUL'])]
    tab = tab[ tab['CIV_EW_PAUL'] > 10**1.2]
    
    
    xdat = tab['CIV_BLUESHIFT_PAUL']
    ydat = np.log10(tab['CIV_EW_PAUL'])
    C = tab['BBPLSLP']
    
    fig, ax = plt.subplots(figsize=figsize(1, vscale=0.9))
    
    from LiamUtils import colormaps as cmaps
    plt.register_cmap(name='inferno_r', cmap=cmaps.inferno_r)
    plt.set_cmap(cmaps.inferno_r)

    im = plt.hexbin(xdat,
                    ydat,
                    C=C,
                    gridsize=(50, 15),
                    mincnt=3,
                    reduce_C_function=np.median,
                    vmin=0.1,
                    vmax=0.7,
                    cmap='RdBu_r',
                    edgecolor='black',
                    linewidth=0.5)
    
    cb = fig.colorbar(im,ax=ax)
    cb.set_label(r'$R_{NIR/UV}$')
    cb.set_ticks(np.linspace(0.1, 0.7, 5))
    cb.set_ticklabels(np.linspace(0.1, 0.5, 5))

    ax.set_xlabel(r'C\,{\sc iv} Blueshift [km~$\rm{s}^{-1}$]')
    ax.set_ylabel(r'Log C\,{\sc iv} EQW [\AA]')
    
    plt.xlim(-1000,4000)
    plt.ylim(1, 2.2)
    plt.tick_params(axis='both',which='major')
    plt.tight_layout()

    fig.savefig('/home/lc585/thesis/figures/chapter05/hot_dust_beta.pdf')
    plt.show()

    return None 
Пример #8
0
def kishimoto_model():

    set_plot_properties() # change style

    fig, axs = plt.subplots(2, 2, figsize=figsize(0.9, 1.0))
    plt.subplots_adjust(hspace=0.0, wspace=0.0)

    for ax in axs.flatten():
        ax.axes.get_xaxis().set_ticks([])
        ax.axes.get_yaxis().set_ticks([])

    axs[0, 0].set_title('Strong outflows', fontsize=10)
    axs[0, 1].set_title('Weak outflows', fontsize=10)
    axs[0, 0].set_ylabel('Face-on')
    axs[1, 0].set_ylabel('Edge-on')

    fig.savefig('../../figures/chapter05/kishimoto.jpg', dpi=1000)




    plt.show()
Пример #9
0
def plot():

    set_plot_properties() # change style 

    cs = palettable.colorbrewer.qualitative.Set1_8.mpl_colors

    with open('/home/lc585/qsosed/input.yml', 'r') as f:
        parfile = yaml.load(f)

    fittingobj = load(parfile)
    wavlen = fittingobj.get_wavlen()
    lin = fittingobj.get_lin()
    galspc = fittingobj.get_galspc()
    ext = fittingobj.get_ext()
    galcnt = fittingobj.get_galcnt()
    ignmin = fittingobj.get_ignmin()
    ignmax = fittingobj.get_ignmax()
    ztran = fittingobj.get_ztran()
    lyatmp = fittingobj.get_lyatmp()
    lybtmp = fittingobj.get_lybtmp()
    lyctmp = fittingobj.get_lyctmp()
    whmin = fittingobj.get_whmin()
    whmax = fittingobj.get_whmax()
    qsomag = fittingobj.get_qsomag()
    flxcorr = fittingobj.get_flxcorr()
    cosmo = fittingobj.get_cosmo() 

    params = Parameters()
    params.add('plslp1', value = -0.478)
    params.add('plslp2', value = -0.199)
    params.add('plbrk', value = 2.40250)
    params.add('bbt', value = 1.30626)
    params.add('bbflxnrm', value = 2.673)
    params.add('elscal', value = 1.240)
    params.add('scahal',value = 0.713)
    params.add('galfra',value = 0.0)
    params.add('bcnrm',value = 0.135)
    params.add('ebv',value = 0.0)
    params.add('imod',value = 18.0)
    
    # Load median magnitudes 
    with open('/home/lc585/qsosed/sdss_ukidss_wise_medmag_ext.dat') as f:
        datz = np.loadtxt(f, usecols=(0,))

    datz = datz[:-5]

    # Load filters
    ftrlst = fittingobj.get_ftrlst()[2:-2] 
    lameff = fittingobj.get_lameff()[2:-2]
    bp = fittingobj.get_bp()[2:-2] # these are in ab and data is in vega 
    dlam = fittingobj.get_bp()[2:-2]
    zromag = fittingobj.get_zromag()[2:-2]

    with open('ftgd_dr7.dat') as f:
        ftgd = np.loadtxt(f, skiprows=1, usecols=(1,2,3,4,5,6,7,8,9))

    modarr = residual(params,
                      parfile,
                      wavlen,
                      datz,
                      lin,
                      bp,
                      dlam,
                      zromag,
                      galspc,
                      ext,
                      galcnt,
                      ignmin,
                      ignmax,
                      ztran,
                      lyatmp,
                      lybtmp,
                      lyctmp,
                      ftrlst,
                      whmin,
                      whmax,
                      cosmo,
                      flxcorr,
                      qsomag,
                      ftgd)
    
    fname = '/home/lc585/qsosed/sdss_ukidss_wise_medmag_ext.dat'
    datarr = np.genfromtxt(fname, usecols=(5,7,9,11,13,15,17,19,21)) 
    datarr[datarr < 0.0] = np.nan 

    datarr = datarr[:-5, :]




    # remove less than lyman break

    col1 = np.arange(8)
    col2 = col1 + 1 
    
    col_label = ['$r$ - $i$',
                 '$i$ - $z$',
                 '$z$ - $Y$',
                 '$Y$ - $J$',
                 '$J$ - $H$',
                 '$H$ - $K$',
                 '$K$ - $W1$',
                 '$W1$ - $W2$']

    df = get_data() 
    df = df[(df.z_HW > 1) & (df.z_HW < 3)]

    colstr1 = ['rVEGA',
               'iVEGA',
               'zVEGA',
               'YVEGA',
               'JVEGA',
               'HVEGA',
               'KVEGA',
               'W1VEGA']
    
    colstr2 = ['iVEGA',
               'zVEGA',
               'YVEGA',
               'JVEGA',
               'HVEGA',
               'KVEGA',
               'W1VEGA',
               'W2VEGA']

    ylims = [[0, 0.6], 
             [-0.1, 0.5], 
             [-0.1, 0.5],
             [-0.1, 0.5],
             [0.2, 0.9],
             [0.2, 0.9],
             [0.5, 1.6],
             [0.8, 1.5]]


    fig, axs = plt.subplots(4, 2, figsize=figsize(1, vscale=2), sharex=True) 
    
    for i, ax in enumerate(axs.flatten()):

        #data definition
        ydat = datarr[:, col1[i]] - datarr[:, col2[i]]

        ax.scatter(datz, 
                   ydat, 
                   color='black', 
                   s=5,
                   label='Data')

        ax.plot(datz,
                modarr[:,col1[i]] - modarr[:, col2[i]],
                color=cs[1], 
                label='Model')

        # ax.scatter(df.z_HW, df[colstr1[i]] - df[colstr2[i]], s=1, alpha=0.1) 


        ax.set_title(col_label[i], size=10)
    
        ax.set_ylim(ylims[i])
        ax.set_xlim(0.75, 3.25)

    

    axs[0, 0].legend(bbox_to_anchor=(0.7, 0.99), 
                     bbox_transform=plt.gcf().transFigure,
                     fancybox=True, 
                     shadow=True,
                     scatterpoints=1,
                     ncol=2) 



    axs[3, 0].set_xlabel(r'Redshift $z$')
    axs[3, 1].set_xlabel(r'Redshift $z$')

    fig.tight_layout()

    fig.subplots_adjust(wspace=0.2, hspace=0.15, top=0.93)

    fig.savefig('/home/lc585/thesis/figures/chapter05/sed_color_plot.pdf')


    plt.show() 

    return None
Пример #10
0
def plot():

    from PlottingTools.plot_setup_thesis import figsize, set_plot_properties    
    from astropy.table import Table
    import matplotlib.pyplot as plt
    from scipy import histogram2d
    import numpy as np
    from matplotlib import cm
    from PlottingTools.truncate_colormap import truncate_colormap
    import brewer2mpl
    from PlottingTools import running
    import collections

    mycm = cm.get_cmap('YlOrRd_r')
    mycm.set_under('w')
    mycm = truncate_colormap(mycm, 0.0, 0.8)
    cset = brewer2mpl.get_map('YlOrRd', 'sequential', 9).mpl_colors

    set_plot_properties() # change style 

    tab = Table.read('/data/lc585/QSOSED/Results/150309/sample3/out_add.fits')
    
    # tab = tab[ tab['Z'] > 0.5 ]
    tab = tab[ tab['BBT_STDERR'] < 1000.]
    tab = tab[ tab['BBFLXNRM_STDERR'] < 1.]
    
    tab = tab[ tab['CHI2_RED'] < 2.0]
    
    fig, ax = plt.subplots(figsize=figsize(1, vscale=0.9))
    
    #histogram definition
    xyrange = [[1,4],[0,3]] # data range
    bins = [120,80] # number of bins
    thresh = 3  #density threshold
    
    #data definition
    xdat, ydat = tab['Z'],tab['RATIO_IR_UV']
    
    # histogram the data
    hh, locx, locy = histogram2d(xdat, ydat, range=xyrange, bins=bins)
    posx = np.digitize(xdat, locx)
    posy = np.digitize(ydat, locy)
    
    #select points within the histogram
    ind = (posx > 0) & (posx <= bins[0]) & (posy > 0) & (posy <= bins[1])
    hhsub = hh[posx[ind] - 1, posy[ind] - 1] # values of the histogram where the points are
    xdat1 = xdat[ind][hhsub < thresh] # low density points
    ydat1 = ydat[ind][hhsub < thresh]
    hh[hh < thresh] = np.nan # fill the areas with low density by NaNs
    
    im = ax.imshow(np.flipud(hh.T),
                   cmap=mycm,
                   extent=np.array(xyrange).flatten(), 
                   interpolation='none',
                   aspect='auto', 
                   )
    ax.scatter(xdat1, ydat1,color=cset[-1],s=8)
    
    #axcb = fig.add_axes([0.13,0.01,0.6,0.02]) 
    clb = fig.colorbar(im,orientation='horizontal') 
    clb.set_label('Number of Objects')
    
    ax.set_xlabel(r'Redshift $z$')
    ax.set_ylabel(r'$R_{\mathrm{NIR/UV}}$')
    
    ax.set_ylim(0,1.5)
    ax.set_xlim(1.5,3.2)
    
    tabtmp = tab
    tabtmp.sort('Z')
    xdat = running.RunningMedian(np.array(tabtmp['Z']),101)
    ydat = running.RunningMedian(np.array(tabtmp['RATIO_IR_UV']),101)
    ax.plot(xdat[::100],ydat[::100],color='black',linewidth=2.0)
    
    plt.tick_params(axis='both',which='major')
    
    # Generate magnitude file in model.py
    # Fit in runsingleobjfit.py (comment out load dat section)
    
    modtab = Table.read('/data/lc585/QSOSED/Results/150107/sample2/out_lumcalc.fits')
    
    ax.plot(modtab['Z'],modtab['RATIO_IR_UV'],color='black',linestyle='--', linewidth=2.0)
    
    ax.grid(which='major',c='k')
    
    #histogram definition
    x_range = [0.5,3.1] # data range
    bins = [13] # number of bins
    dat = np.vstack([tab['Z'],tab['LUM_IR_SIGMA']*tab['RATIO_IR_UV']])
    
    # histogram the data
    h, locx = np.histogram(dat[0,:], range=x_range, bins=bins[0])
    posx = np.digitize(dat[0,:], locx)
    
    xindices = collections.defaultdict(set)
    for index, bin in enumerate(posx):
        xindices[bin].add(index)
    
    ys = []
    for i in range(bins[0]):
        ys.append(np.mean(dat[1,list(xindices[i+1])]))
            
    ax.errorbar(locx[:-1] + 0.1,np.repeat(1,13),yerr=ys,linestyle='',color='black')
    
    ax.axvline(2.0, color='black')
    ax.axvline(2.7, color='black')

    fig.tight_layout() 

    fig.savefig('/home/lc585/thesis/figures/chapter06/ratio_z_errors_highz.pdf')

    plt.show() 

    return None 
Пример #11
0
def shang_sed():

    import matplotlib.pyplot as plt
    import numpy as np
    from scipy.constants import c
    from PlottingTools.plot_setup_thesis import figsize, set_plot_properties

    set_plot_properties()  # change style

    rltab = np.genfromtxt('rlmsedMR.txt')

    fig, ax = plt.subplots(figsize=figsize(1.0, vscale=0.8))

    ax.plot(1.0e10 * c / (10**rltab[:, 0]),
            10**rltab[:, 1],
            color='black',
            lw=1)

    ax.set_xlabel(r'Wavelength [\AA]')
    ax.set_ylabel(r'${\lambda}f_{\lambda}$ [Arbitrary Units]')

    ax.set_xscale('log')
    ax.set_yscale('log')

    ax.set_ylim(1e-2, 10)
    ax.set_xlim(10, 10**8)

    ax.text(0.22,
            0.3,
            'Accretion \n disc',
            transform=ax.transAxes,
            multialignment='center')
    ax.text(0.52,
            0.8,
            'Torus',
            transform=ax.transAxes,
            multialignment='center')
    ax.text(0.1,
            0.85,
            'BLR \& \n NLR',
            transform=ax.transAxes,
            multialignment='center')

    ax.arrow(0.30,
             0.4,
             0.0,
             0.2,
             color='black',
             transform=ax.transAxes,
             head_width=0.015)
    ax.arrow(0.22,
             0.88,
             0.04,
             0.0,
             color='black',
             transform=ax.transAxes,
             head_width=0.015)
    ax.arrow(0.57,
             0.78,
             0.0,
             -0.06,
             color='black',
             transform=ax.transAxes,
             head_width=0.015)

    plt.tight_layout()

    plt.savefig('../../figures/chapter01/shangsed.pdf')

    plt.show()

    return None
Пример #12
0
def plot():

    import yaml
    from qsosed.load import load
    import numpy as np
    from qsosed.sedmodel import model
    import matplotlib.pyplot as plt
    from qsosed.pl import pl
    from qsosed.bb import bb
    import cosmolopy.distance as cd
    from PlottingTools.plot_setup_thesis import figsize, set_plot_properties
    import palettable
    from lmfit import Parameters
    from qsosed.qsrmod import qsrmod
    from qsosed.flx2mag import flx2mag

    set_plot_properties()  # change style
    cs = palettable.colorbrewer.qualitative.Set1_9.mpl_colors

    plslp1 = 0.508
    plslp2 = 0.068
    plbrk = 2944.99
    bbt = 1174.0
    bbflxnrm = 0.208
    galfra = 0.313
    elscal = 0.624
    imod = 18.0
    ebv = 0.0
    redshift = 2.0
    scahal = 0.8

    with open('/home/lc585/qsosed/input.yml', 'r') as f:
        parfile = yaml.load(f)

    fittingobj = load(parfile)
    wavlen = fittingobj.get_wavlen()
    flxcorr = np.array([1.0] * len(wavlen))

    params = Parameters()
    params.add('plslp1', value=-0.478)
    params.add('plslp2', value=-0.199)
    params.add('plbrk', value=2.40250)
    params.add('bbt', value=1.30626)
    params.add('bbflxnrm', value=2.673)
    params.add('elscal', value=1.240)
    params.add('scahal', value=0.713)
    params.add('galfra', value=0.0)
    params.add('bcnrm', value=0.135)
    params.add('ebv', value=0.0)
    params.add('imod', value=18.0)

    lin = fittingobj.get_lin()
    galspc = fittingobj.get_galspc()
    ext = fittingobj.get_ext()
    galcnt = fittingobj.get_galcnt()
    ignmin = fittingobj.get_ignmin()
    ignmax = fittingobj.get_ignmax()
    bp = fittingobj.get_bp()
    dlam = fittingobj.get_dlam()
    zromag = fittingobj.get_zromag()
    ftrlst = fittingobj.get_ftrlst()
    ztran = fittingobj.get_ztran()
    lyatmp = fittingobj.get_lyatmp()
    lybtmp = fittingobj.get_lybtmp()
    lyctmp = fittingobj.get_lyctmp()
    whmin = fittingobj.get_whmin()
    whmax = fittingobj.get_whmax()
    qsomag = fittingobj.get_qsomag()
    cosmo = fittingobj.get_cosmo()

    nftr = len(bp)

    redshift = 0.5

    wavlentmp, fluxtmp = qsrmod(params, parfile, wavlen, redshift, lin, galspc,
                                ext, galcnt, ignmin, ignmax, ztran, lyatmp,
                                lybtmp, lyctmp, whmin, whmax, cosmo, flxcorr,
                                qsomag)

    magtmp = flx2mag(params, wavlentmp, fluxtmp, bp, dlam, zromag, ftrlst)

    fig = plt.figure(figsize=figsize(1, vscale=0.8))
    ax1 = fig.add_subplot(111)
    ax1.loglog(wavlentmp, 0.5 * fluxtmp, color='black', label=r'$z=0.5$')

    redshift = 2.0
    wavlentmp, fluxtmp = qsrmod(params, parfile, wavlen, redshift, lin, galspc,
                                ext, galcnt, ignmin, ignmax, ztran, lyatmp,
                                lybtmp, lyctmp, whmin, whmax, cosmo, flxcorr,
                                qsomag)

    magtmp = flx2mag(params, wavlentmp, fluxtmp, bp, dlam, zromag, ftrlst)
    ax1.loglog(wavlentmp, 5 * fluxtmp, color='black', label=r'$z=2.0$')

    redshift = 3.5
    wavlentmp, fluxtmp = qsrmod(params, parfile, wavlen, redshift, lin, galspc,
                                ext, galcnt, ignmin, ignmax, ztran, lyatmp,
                                lybtmp, lyctmp, whmin, whmax, cosmo, flxcorr,
                                qsomag)

    magtmp = flx2mag(params, wavlentmp, fluxtmp, bp, dlam, zromag, ftrlst)
    ax1.loglog(wavlentmp, 50 * fluxtmp, color='black', label=r'$z=3.5$')

    ax1.set_xlabel(r'log $\lambda$ [${\rm \AA}$]')
    ax1.set_ylabel(r'log $F_{\lambda}$ [Arbitary Units]')
    # ax1.loglog(wavlentmp,1.e10/wavlentmp**2,linestyle='--')
    ax2 = ax1.twinx()
    ax2.set_yticks([])
    labs = ['u', 'g', 'r', 'i', 'z', 'Y', 'J', 'H', 'K', 'W1', 'W2', 'W3']

    xpos = fittingobj.get_lameff()
    xpos[:5] = xpos[:5] - 200.0
    xpos[5] = 10405
    xpos[6] = 12505
    xpos[7] = 16411
    xpos[8] = 21942
    xpos[9] = 33500
    xpos[10] = 46027
    xpos[11] = 112684

    ax2.text(19225, 3.923, r'$z=3.5$', ha='right')
    ax2.text(11674, 3.099, r'$z=2.0$', ha='right')
    ax2.text(6000, 2.135, r'$z=0.5$', ha='right')

    color_idx = np.linspace(0, 1, 12)

    from palettable.colorbrewer.diverging import Spectral_11_r

    for i in range(len(bp[:-1])):
        wavtmp = (bp[i][0, :])
        flxtmp = bp[i][1, :] / np.max(bp[i][1, :])
        ax2.plot(wavtmp,
                 flxtmp,
                 color=Spectral_11_r.mpl_colormap(color_idx[i]))
        # ax2.fill_between(wavtmp, flxtmp, alpha=0.2, facecolor=Spectral_11.mpl_colormap(color_idx[i]))
        ax2.text(xpos[i], 0.2, r'${}$'.format(labs[i]), ha='center')

    ax2.set_ylim(0, 5)
    ax1.set_ylim(1e-3, 200)
    ax1.set_xlim(2800, 190000)
    ax2.set_xlim(ax1.get_xlim())
    plt.tight_layout()

    fig.savefig('/home/lc585/thesis/figures/chapter05/throughput.pdf')
    plt.show()

    return None
Пример #13
0
def normalise_to_sdss():

    import sys
    sys.path.insert(0, '/home/lc585/Dropbox/IoA/nirspec/python_code')
    from get_nir_spec import get_nir_spec
    from get_sdss_spec import get_sdss_spec
    
    sys.path.insert(0, '/home/lc585/Dropbox/IoA/QSOSED/Model/qsofit')
    from qsrmod import qsrmod
    from load import load
    import cosmolopy.distance as cd
    from get_mono_lum import resid_mag_fit


    fig, axs = plt.subplots(2, 1, figsize=figsize(1, 1.4))

    cs = palettable.colorbrewer.qualitative.Set1_8.mpl_colors
    cs_light = palettable.colorbrewer.qualitative.Pastel1_6.mpl_colors

    df = pd.read_csv('/home/lc585/Dropbox/IoA/nirspec/tables/masterlist_liam.csv', index_col=0)  
    row = df.ix['QSO125']

    wav_nir, dw_nir, flux_nir, err_nir = get_nir_spec(row.NIR_PATH, row.INSTR)      
    
    wav_nir = wav_nir / (1.0 + row.z_IR)

    axs[0].plot(wav_nir, flux_nir*1e15, color=cs_light[0], label='Near-IR')
    

    if (row.SPEC_OPT == 'SDSS') | (row.SPEC_OPT == 'BOSS+SDSS'):
    
        wav_opt, dw_opt, flux_opt, err_opt = get_sdss_spec('SDSS', row.DR7_PATH)
    
    elif (row.SPEC_OPT == 'BOSS') :
    
        wav_opt, dw_opt, flux_opt, err_opt = get_sdss_spec('BOSS', row.DR12_PATH)
  
    wav_opt = wav_opt / (1.0 + row.z_IR)
    
    axs[0].plot(wav_opt, flux_opt*1e15, color=cs_light[1], label='SDSS')

    
    
    
    # Normalise SED model to SDSS spectra ----------------------------------------------------
    
    """
    SDSS spectra in Shen & Liu emission line free windows 
    """
    
    fit_region = [[1350,1360], [1445,1465], [1700,1705], [2155,2400], [2480,2675], [2925,3500], [4200,4230], [4435,4700], [5100,5535], [6000,6250], [6800,7000]]
    
    fit_mask = np.zeros(len(wav_opt), dtype=bool)
    
    for r in fit_region:
         fit_mask[(wav_opt > r[0]) & (wav_opt < r[1])] = True
    
    tmp = ma.array(flux_opt)
    tmp[~fit_mask] = ma.masked 

    for item in ma.extras.flatnotmasked_contiguous(tmp):
        axs[0].plot(wav_opt[item], flux_opt[item]*1e15, color=cs[1])
    
    # ax.plot(wav_opt[fit_mask], flux_opt[fit_mask], color=cs[0])

    plslp1 = 0.46
    plslp2 = 0.03
    plbrk = 2822.0
    bbt = 1216.0
    bbflxnrm = 0.24
    elscal = 0.71
    scahal = 0.86
    galfra = 0.31
    ebv = 0.0
    imod = 18.0
    
    with open('/home/lc585/Dropbox/IoA/QSOSED/Model/qsofit/input.yml', 'r') as f:
        parfile = yaml.load(f)
    
    fittingobj = load(parfile)
    
    lin = fittingobj.get_lin()
    galspc = fittingobj.get_galspc()
    ext = fittingobj.get_ext()
    galcnt = fittingobj.get_galcnt()
    ignmin = fittingobj.get_ignmin()
    ignmax = fittingobj.get_ignmax()
    wavlen_rest = fittingobj.get_wavlen()
    ztran = fittingobj.get_ztran()
    lyatmp = fittingobj.get_lyatmp()
    lybtmp = fittingobj.get_lybtmp()
    lyctmp = fittingobj.get_lyctmp()
    whmin = fittingobj.get_whmin()
    whmax = fittingobj.get_whmax()
    cosmo = {'omega_M_0':0.3, 'omega_lambda_0':0.7, 'h':0.7}
    cosmo = cd.set_omega_k_0(cosmo)
    flxcorr = np.array( [1.0] * len(wavlen_rest) )
    
    params = Parameters()
    params.add('plslp1', value = plslp1, vary=False)
    params.add('plslp2', value = plslp2, vary=False)
    params.add('plbrk', value = plbrk, vary=False)
    params.add('bbt', value = bbt, vary=False)
    params.add('bbflxnrm', value = bbflxnrm, vary=False)
    params.add('elscal', value = elscal, vary=False)
    params.add('scahal', value = scahal, vary=False)
    params.add('galfra', value = galfra, vary=False)
    params.add('ebv', value = ebv, vary=True)
    params.add('imod', value = imod, vary=False)
    params.add('norm', value = 1e-17, vary=True)
    
    def resid(params,
              wav_opt,
              flux_opt):
    
        wav_sed, flux_sed = qsrmod(params,
                                   parfile,
                                   wavlen_rest,
                                   row.z_IR,
                                   lin,
                                   galspc,
                                   ext,
                                   galcnt,
                                   ignmin,
                                   ignmax,
                                   ztran,
                                   lyatmp,
                                   lybtmp,
                                   lyctmp,
                                   whmin,
                                   whmax,
                                   cosmo,
                                   flxcorr)
    
        wav_sed = wav_sed / (1.0 + row.z_IR) 
    
        spc = interp1d(wav_sed, flux_sed, bounds_error=True, fill_value=0.0)
        flux_sed_fit = spc(wav_opt)
    
        return flux_opt - params['norm'].value * flux_sed_fit
      
    
    resid_p = partial(resid,
                      wav_opt = wav_opt[fit_mask],
                      flux_opt = flux_opt[fit_mask])
    
    
    result = minimize(resid_p, params, method='leastsq')
    
    
    # ---------------------------------------------------------------------------------------
    
    xs = np.arange(np.nanmin(wav_opt), np.nanmax(wav_nir), 1)


    wav_sed, flux_sed = qsrmod(result.params,
                               parfile,
                               wavlen_rest,
                               row.z_IR,
                               lin,
                               galspc,
                               ext,
                               galcnt,
                               ignmin,
                               ignmax,
                               ztran,
                               lyatmp,
                               lybtmp,
                               lyctmp,
                               whmin,
                               whmax,
                               cosmo,
                               flxcorr)
    
    wav_sed = wav_sed / (1.0 + row.z_IR) 
    spc = interp1d(wav_sed, flux_sed * result.params['norm'].value, bounds_error=True, fill_value=0.0)
    
    # do error weighted fit of spectra to SED model
    # Hewett et al. 1985 

    # mask out regions between bandpasses 

    wav_nir_obs = wav_nir * (1.0 + row.z_IR)
    goodinds = ((wav_nir_obs > 11800.0) & (wav_nir_obs < 13100.0))\
               | ((wav_nir_obs > 15000.0) & (wav_nir_obs < 17500.0))\
               | ((wav_nir_obs > 19500.0) & (wav_nir_obs < 23500.0))

    wav_nir = wav_nir[goodinds]
    flux_nir = flux_nir[goodinds]
    err_nir = err_nir[goodinds]

    goodinds = err_nir > 0.0 

    wav_nir = wav_nir[goodinds]
    flux_nir = flux_nir[goodinds]
    err_nir = err_nir[goodinds]

    k = np.nansum((flux_nir * spc(wav_nir)) / err_nir**2) / np.nansum((spc(wav_nir) / err_nir)**2)
    

    inds = np.argsort(np.diff(wav_nir))[-2:]
    wav_nir[inds] = np.nan
    flux_nir[inds] = np.nan

    axs[0].plot(wav_nir, flux_nir*1e15 / k, color=cs[0], alpha=1.0)


    axs[0].plot(xs, spc(xs)*1e15, color='black', lw=1, label='Model')

    axs[0].legend(loc='upper right')
        
    axs[0].set_xlim(1300,7300)
    axs[0].set_ylim(0, 1)

    # axs[0].set_xlabel(r'Rest-frame wavelength [${\mathrm \AA}$]')
    axs[0].set_ylabel(r'F$_{\lambda}$ [Arbitary units]')

    # --------------------------------------------------------------------------------

    df = pd.read_csv('/home/lc585/Dropbox/IoA/nirspec/tables/masterlist_liam.csv', index_col=0)  
    row = df.ix['QSO010']

    wav_nir, dw_nir, flux_nir, err_nir = get_nir_spec(row.NIR_PATH, row.INSTR)      
    
    wav_nir = wav_nir / (1.0 + row.z_IR)

    
    

    ftrlst, maglst, errlst, lameff = [], [], [], []  

    # 1250 condition so we don't go near the lyman break
    if (~np.isnan(row.psfMag_u)) & ((3546.0 / (1.0 + row.z_IR)) > 1250.0) & (~np.isnan(row.psfMagErr_u)):
        ftrlst.append('u.response')
        maglst.append(row.psfMag_u - 0.91) 
        errlst.append(row.psfMagErr_u)
        lameff.append(3546.0) 
    if (~np.isnan(row.psfMag_g)) & ((4670.0 / (1.0 + row.z_IR)) > 1250.0) & (~np.isnan(row.psfMagErr_g)):
        ftrlst.append('g.response')
        maglst.append(row.psfMag_g + 0.08)
        errlst.append(row.psfMagErr_g)
        lameff.append(4670.0) 
    if (~np.isnan(row.psfMag_r)) & ((6156.0 / (1.0 + row.z_IR)) > 1250.0) & (~np.isnan(row.psfMagErr_r)):
        ftrlst.append('r.response')
        maglst.append(row.psfMag_r - 0.16)
        errlst.append(row.psfMagErr_r)
        lameff.append(6156.0) 
    if (~np.isnan(row.psfMag_i)) & ((7471.0 / (1.0 + row.z_IR)) > 1250.0) & (~np.isnan(row.psfMagErr_i)):
        ftrlst.append('i.response')
        maglst.append(row.psfMag_i - 0.37)
        errlst.append(row.psfMagErr_i)
        lameff.append(7471.0) 
    if (~np.isnan(row.psfMag_z)) & ((8918.0 / (1.0 + row.z_IR)) > 1250.0) & (~np.isnan(row.psfMagErr_z)):
        ftrlst.append('z.response')
        maglst.append(row.psfMag_z - 0.54)
        errlst.append(row.psfMagErr_z)
        lameff.append(8918.0) 

    if (~np.isnan(row.VHS_YAperMag3)) & (~np.isnan(row.VHS_YAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_Y2.txt')
        maglst.append(row.VHS_YAperMag3)
        errlst.append(row.VHS_YAperMag3Err)
        lameff.append(10210.0) 
    elif (~np.isnan(row.Viking_YAperMag3)) & (~np.isnan(row.Viking_YAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_Y2.txt')
        maglst.append(row.Viking_YAperMag3)
        errlst.append(row.Viking_YAperMag3Err)
        lameff.append(10210.0) 
    elif (~np.isnan(row.UKIDSS_YAperMag3)) & (~np.isnan(row.UKIDSS_YAperMag3Err)): 
        ftrlst.append('Y.response')  
        maglst.append(row.UKIDSS_YAperMag3)
        errlst.append(row.UKIDSS_YAperMag3Err)
        lameff.append(10305.0) 

    if (~np.isnan(row.VHS_JAperMag3)) & (~np.isnan(row.VHS_JAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_J2.txt')
        maglst.append(row.VHS_JAperMag3)
        errlst.append(row.VHS_JAperMag3Err)
        lameff.append(12540.0) 
    elif (~np.isnan(row.Viking_JAperMag3)) & (~np.isnan(row.Viking_JAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_J2.txt')
        maglst.append(row.Viking_JAperMag3)
        errlst.append(row.Viking_JAperMag3Err)
        lameff.append(12540.0) 
    elif (~np.isnan(row.UKIDSS_J_1AperMag3)) & (~np.isnan(row.UKIDSS_J_1AperMag3Err)):  
        ftrlst.append('J.response')  
        maglst.append(row.UKIDSS_J_1AperMag3)
        errlst.append(row.UKIDSS_J_1AperMag3Err)
        lameff.append(12483.0) 
    elif (~np.isnan(row['2massMag_j'])) & (~np.isnan(row['2massMagErr_j'])): 
        ftrlst.append('J2MASS.response')  
        maglst.append(row['2massMag_j'])
        errlst.append(row['2massMagErr_j'])
        lameff.append(12350.0) 

    if (~np.isnan(row.VHS_HAperMag3)) & (~np.isnan(row.VHS_HAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_H2.txt') 
        maglst.append(row.VHS_HAperMag3)
        errlst.append(row.VHS_HAperMag3Err)
        lameff.append(16460.0) 
    elif (~np.isnan(row.Viking_HAperMag3)) & (~np.isnan(row.Viking_HAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_H2.txt') 
        maglst.append(row.Viking_HAperMag3)
        errlst.append(row.Viking_HAperMag3Err)
        lameff.append(16460.0) 
    elif (~np.isnan(row.UKIDSS_HAperMag3)) & (~np.isnan(row.UKIDSS_HAperMag3Err)):    
        ftrlst.append('H.response')     
        maglst.append(row.UKIDSS_HAperMag3)
        errlst.append(row.UKIDSS_HAperMag3Err)
        lameff.append(16313.0) 
    elif (~np.isnan(row['2massMag_h'])) & (~np.isnan(row['2massMagErr_h'])): 
        ftrlst.append('H2MASS.response')         
        maglst.append(row['2massMag_h'])
        errlst.append(row['2massMagErr_h'])
        lameff.append(16620.0) 

    if (~np.isnan(row.VHS_KAperMag3)) & (~np.isnan(row.VHS_KAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_Ks2.txt')
        maglst.append(row.VHS_KAperMag3)
        errlst.append(row.VHS_KAperMag3Err)
        lameff.append(21490.0) 
    elif (~np.isnan(row.Viking_KsAperMag3)) & (~np.isnan(row.Viking_KsAperMag3Err)):
        ftrlst.append('VISTA_Filters_at80K_forETC_Ks2.txt')
        maglst.append(row.Viking_KsAperMag3)
        errlst.append(row.Viking_KsAperMag3Err)
        lameff.append(21490.0) 
    elif (~np.isnan(row.UKIDSS_KAperMag3)) & (~np.isnan(row.UKIDSS_KAperMag3Err)):     
        ftrlst.append('K.response')
        maglst.append(row.UKIDSS_KAperMag3)
        errlst.append(row.UKIDSS_KAperMag3Err)
        lameff.append(22010.0) 
    elif (~np.isnan(row['2massMag_k'])) & (~np.isnan(row['2massMagErr_k'])): 
        ftrlst.append('K2MASS.response') 
        maglst.append(row['2massMag_k'])  
        errlst.append(row['2massMagErr_k'])
        lameff.append(21590.0) 

    ftrlst, maglst, errlst, lameff = np.array(ftrlst), np.array(maglst), np.array(errlst), np.array(lameff)


    
       
    #-------Filters---------------------------------------------
    nftr = len(ftrlst)
    bp = np.empty(nftr,dtype='object')
    dlam = np.zeros(nftr)
    
    for nf in range(nftr):
        with open(os.path.join('/home/lc585/Dropbox/IoA/QSOSED/Model/Filter_Response/', ftrlst[nf]), 'r') as f:
            wavtmp, rsptmp = np.loadtxt(f,unpack=True)
        dlam[nf] = (wavtmp[1] - wavtmp[0])
        bptmp = np.ndarray(shape=(2,len(wavtmp)), dtype=float)
        bptmp[0,:], bptmp[1,:] = wavtmp, rsptmp
        bp[nf] = bptmp
    
    #--------------------------------------------------------------------------------
    
    f_0 = np.zeros(nftr) # flux zero points
    fvega = '/data/vault/phewett/vista_work/vega_2007.lis' 
    vspec = np.loadtxt(fvega) 
    vf = interp1d(vspec[:,0], vspec[:,1])
    
    for nf in range(nftr):
        sum1 = np.sum( bp[nf][1] * vf(bp[nf][0]) * bp[nf][0] * dlam[nf])
        sum2 = np.sum( bp[nf][1] * bp[nf][0] * dlam[nf])
        f_0[nf] = sum1 / sum2

    flxlst = f_0 * 10.0**(-0.4 * maglst) # data fluxes in erg/cm^2/s/A
    flxerrlst = flxlst * (-0.4) * np.log(10) * errlst 

    axs[1].scatter(lameff / (1.0 + row.z_IR), flxlst*1e16, s=50, facecolor=cs[5], edgecolor='black', zorder=10, label='Photometry')
   

    plslp1 = 0.46
    plslp2 = 0.03
    plbrk = 2822.0
    bbt = 1216.0
    bbflxnrm = 0.24
    elscal = 0.71
    scahal = 0.86
    galfra = 0.31
    ebv = 0.0
    imod = 18.0
    
    with open('/home/lc585/Dropbox/IoA/QSOSED/Model/qsofit/input.yml', 'r') as f:
        parfile = yaml.load(f)
    
    fittingobj = load(parfile)
    
    lin = fittingobj.get_lin()
    galspc = fittingobj.get_galspc()
    ext = fittingobj.get_ext()
    galcnt = fittingobj.get_galcnt()
    ignmin = fittingobj.get_ignmin()
    ignmax = fittingobj.get_ignmax()
    wavlen_rest = fittingobj.get_wavlen()
    ztran = fittingobj.get_ztran()
    lyatmp = fittingobj.get_lyatmp()
    lybtmp = fittingobj.get_lybtmp()
    lyctmp = fittingobj.get_lyctmp()
    whmin = fittingobj.get_whmin()
    whmax = fittingobj.get_whmax()
    cosmo = {'omega_M_0':0.3, 'omega_lambda_0':0.7, 'h':0.7}
    cosmo = cd.set_omega_k_0(cosmo)
    flxcorr = np.array( [1.0] * len(wavlen_rest) )
    
    params = Parameters()
    params.add('plslp1', value = plslp1, vary=False)
    params.add('plslp2', value = plslp2, vary=False)
    params.add('plbrk', value = plbrk, vary=False)
    params.add('bbt', value = bbt, vary=False)
    params.add('bbflxnrm', value = bbflxnrm, vary=False)
    params.add('elscal', value = elscal, vary=False)
    params.add('scahal', value = scahal, vary=False)
    params.add('galfra', value = galfra, vary=False)
    params.add('ebv', value = ebv, vary=True)
    params.add('imod', value = imod, vary=False)
    params.add('norm', value = 1e-17, vary=True)

    resid_p = partial(resid_mag_fit,
                      flx=flxlst,
                      err=flxerrlst,
                      parfile=parfile,
                      wavlen_rest=wavlen_rest,
                      z=row.z_IR,
                      lin=lin,
                      galspc=galspc,
                      ext=ext,
                      galcnt=galcnt,
                      ignmin=ignmin,
                      ignmax=ignmax,
                      ztran=ztran,
                      lyatmp=lyatmp,
                      lybtmp=lybtmp,
                      lyctmp=lyctmp,
                      whmin=whmin,
                      whmax=whmax,
                      cosmo=cosmo,
                      flxcorr=flxcorr,
                      bp=bp,
                      dlam=dlam) 
    
    
    result = minimize(resid_p, params, method='leastsq')

    
    # ---------------------------------------------------------------------------------------
    
    wav_sed, flux_sed = qsrmod(result.params,
                               parfile,
                               wavlen_rest,
                               row.z_IR,
                               lin,
                               galspc,
                               ext,
                               galcnt,
                               ignmin,
                               ignmax,
                               ztran,
                               lyatmp,
                               lybtmp,
                               lyctmp,
                               whmin,
                               whmax,
                               cosmo,
                               flxcorr)

    spc = interp1d(wavlen_rest, flux_sed * result.params['norm'].value, bounds_error=True, fill_value=0.0)
    
    xs = np.arange(1000, 10000, 10)

    
    axs[1].plot(xs, spc(xs)*1e16, color='black', lw=1, label='Model', zorder=2)

    

    # do error weighted fit of spectra to SED model
    # Hewett et al. 1985 

    # mask out regions between bandpasses 

    wav_nir_obs = wav_nir * (1.0 + row.z_IR)
    goodinds = ((wav_nir_obs > 11800.0) & (wav_nir_obs < 13100.0))\
               | ((wav_nir_obs > 15000.0) & (wav_nir_obs < 17500.0))\
               | ((wav_nir_obs > 19500.0) & (wav_nir_obs < 23500.0))

    wav_nir = wav_nir[goodinds]
    flux_nir = flux_nir[goodinds]
    err_nir = err_nir[goodinds]

    goodinds = err_nir > 0.0 

    wav_nir = wav_nir[goodinds]
    flux_nir = flux_nir[goodinds]
    err_nir = err_nir[goodinds]

    k = np.nansum((flux_nir * spc(wav_nir)) / err_nir**2) / np.nansum((spc(wav_nir) / err_nir)**2)
    
    inds = np.argsort(np.diff(wav_nir))[-2:]
    wav_nir[inds] = np.nan
    flux_nir[inds] = np.nan

    axs[1].plot(wav_nir, flux_nir*1e16 / k, color=cs[0], zorder=1)
    
 
    # modified this so need to reload
    wav_nir, dw_nir, flux_nir, err_nir = get_nir_spec(row.NIR_PATH, row.INSTR)      
    
    wav_nir = wav_nir / (1.0 + row.z_IR)


    axs[1].plot(wav_nir[wav_nir > 2800.0], flux_nir[wav_nir > 2800.0]*1e16 / k, color=cs_light[0], label='Near-IR', zorder=0)

    axs[1].set_xlim(1250, 9000)
    axs[1].set_ylim(0, 5)

    axs[1].set_xlabel(r'Rest-frame wavelength [${\mathrm \AA}$]')
    axs[1].set_ylabel(r'F$_{\lambda}$ [Arbitary units]')

    # -------------------------------------------------

    axs[1].legend(scatterpoints=1)

    axs[0].text(0.1, 0.93, '(a) J092952+355450',
                horizontalalignment='left',
                verticalalignment='center',
                transform = axs[0].transAxes)

    axs[1].text(0.1, 0.93, '(b) J100247+002104',
                horizontalalignment='left',
                verticalalignment='center',
                transform = axs[1].transAxes)



    fig.tight_layout()

    fig.savefig('/home/lc585/thesis/figures/chapter02/normalise_to_sdss.pdf')

    plt.show()

    return None 
Пример #14
0
def luminosity_z(): 

   

    cs = palettable.colorbrewer.qualitative.Set1_9.mpl_colors 

    # definitions for the axes
    left, width = 0.13, 0.65
    bottom, height = 0.13, 0.65
    bottom_h = left_h = left + width + 0.0
        
    rect_scatter = [left, bottom, width, height]
    rect_histx = [left, bottom_h, width, 0.2]
    rect_histy = [left_h, bottom, 0.2, height]
    
    # no labels
    nullfmt = NullFormatter() 
    
    fig = plt.figure(figsize=figsize(1, vscale=1.0))

    axScatter = plt.axes(rect_scatter)
    axHistx = plt.axes(rect_histx)
    axHisty = plt.axes(rect_histy)
    
    # no labels
    axHistx.xaxis.set_major_formatter(nullfmt)
    axHistx.yaxis.set_major_formatter(nullfmt)
    axHisty.xaxis.set_major_formatter(nullfmt)
    axHisty.yaxis.set_major_formatter(nullfmt)
    
    axHistx.set_xticks([])
    axHistx.set_yticks([])
    axHisty.set_xticks([])
    axHisty.set_yticks([])
    
    t = Table.read('/data/lc585/SDSS/dr7_bh_Nov19_2013.fits')
    t = t[t['LOGLBOL'] > 0.0]
    t = t[t['Z_HW'] > 1.0]

    kde_contours(t['Z_HW'], 
                 t['LOGLBOL'], 
                 axScatter, 
                 {'levels':[0.02, 0.05, 0.13, 0.2, 0.4, 0.8, 1.2]}, 
                 {'label':'SDSS DR7'}, 
                 color=cs[-1], 
                 lims=(1.0, 5.0, 44.0, 48.0))

    
    df = pd.read_csv('/home/lc585/Dropbox/IoA/nirspec/tables/masterlist_liam.csv', index_col=0) 
    df.drop_duplicates(subset=['ID'], inplace=True)
    df = df[df.SPEC_NIR != 'None']
    df.dropna(subset=['LogL5100'], inplace=True)
    
    axScatter.scatter(df.z_IR, 
                      np.log10(9.26) + df.LogL5100, 
                      c=cs[1], 
                      edgecolor='None', 
                      label='This work', 
                      zorder=10, 
                      s=10)
    
    axScatter.set_xlabel(r'Redshift $z$')
    axScatter.set_ylabel(r'log $L_{\mathrm{Bol}}$ [erg/s]')
    
    legend = axScatter.legend(frameon=True, 
                              scatterpoints=1, 
                              numpoints=1, 
                              loc='lower right') 
    
    axHistx.hist(t['Z_HW'], 
                 bins=np.arange(0.0, 5.0, 0.25), 
                 facecolor=cs[-1], 
                 edgecolor='None', 
                 alpha=0.4, 
                 normed=True)
    
    axHisty.hist(t['LOGLBOL'], 
                 bins=np.arange(44, 49, 0.25), 
                 facecolor=cs[-1], 
                 edgecolor='None', 
                 orientation='horizontal', 
                 alpha=0.4, 
                 normed=True)
    
    axHistx.hist(df.z_IR, 
                 bins=np.arange(1, 5.0, 0.25), 
                 histtype='step', 
                 edgecolor=cs[1], 
                 normed=True, 
                 lw=2)
    
    axHisty.hist(np.log10(9.26) + np.array(df.LogL5100), 
                 bins=np.arange(44, 49, 0.25), 
                 histtype='step', 
                 edgecolor=cs[1], 
                 normed=True, 
                 lw=2, 
                 orientation='horizontal')
    
    axScatter.set_xlim(1.0, 4.5)
    axScatter.set_ylim(44, 48.5)
    
    axHistx.set_xlim(axScatter.get_xlim())
    axHisty.set_ylim(axScatter.get_ylim())
    
    axHistx.set_ylim(0, 1.5)
    axHisty.set_xlim(0, 1.2)   

    fig.savefig('/home/lc585/thesis/figures/chapter02/luminosity_z.pdf')

    plt.show() 

    return None  
Пример #15
0
def plot():

    redshift = 1

    with open('/home/lc585/qsosed/input.yml', 'r') as f:
        parfile = yaml.load(f)

    # Load stuff
    fittingobj = load(parfile)
    lin = fittingobj.get_lin()
    qsomag = fittingobj.get_qsomag()
    whmin = fittingobj.get_whmin()
    whmax = fittingobj.get_whmax()
    ignmin = fittingobj.get_ignmin()
    ignmax = fittingobj.get_ignmax()
    galcnt = fittingobj.get_galcnt()
    galspc = fittingobj.get_galspc()

    wavlen = fittingobj.get_wavlen()

    fig, ax = plt.subplots(figsize=figsize(1, vscale=0.9))

    # ax.plot(wavlen,wavlen*fluxtmp,color='black')

    # import lineid_plot

    # line_wave = [1216,
    #              1549,
    #              1909,
    #              2798,
    #              4861,
    #              6563,
    #              18744]

    # line_names = [r'Ly$\alpha$',
    #               r'C\,{\sc iv}',
    #               r'C\,{\sc iii}]',
    #               r'Mg\,{\sc ii}',
    #               r'H$\beta$',
    #               r'H$\alpha$',
    #               r'Pa$\alpha$']

    # lineid_plot.plot_line_ids(wavlen, wavlen*fluxtmp, line_wave, line_names, ax=ax, arrow_tip=10000)

    plslp1 = -0.478
    plslp2 = -0.199
    plbrk = 2402
    bbt = 1306
    bbflxnrm = 3.673
    elscal = 1.240
    scahal = 0.713
    galfra = 0.4
    bcnrm = 0.135
    ebv = 0.0

    flux = np.zeros(len(wavlen), dtype=np.float)

    flxnrm = parfile['quasar']['flxnrm']
    wavnrm = parfile['quasar']['wavnrm']

    # Define normalisation constant to ensure continuity at wavbrk
    const2 = flxnrm / (wavnrm**(-plslp2))
    const1 = const2 * ((plbrk**(-plslp2)) / (plbrk**(-plslp1)))

    wavnumbrk = wav2num(wavlen, plbrk)

    flux[:wavnumbrk] = flux[:wavnumbrk] + pl(wavlen[:wavnumbrk], plslp1,
                                             const1)
    flux[wavnumbrk:] = flux[wavnumbrk:] + pl(wavlen[wavnumbrk:], plslp2,
                                             const2)

    # Now add steeper power-law component for sub-Lyman-alpha wavelengths

    # Define normalisation constant to ensure continuity at wavbrk
    plbrk_tmp = parfile['quasar']['pl_steep']['brk']
    plslp_tmp = plslp1 + parfile['quasar']['pl_steep']['step']
    plbrknum_tmp = wav2num(wavlen, plbrk_tmp)

    const_tmp = flux[plbrknum_tmp] / (plbrk_tmp**-plslp_tmp)

    flux[:plbrknum_tmp] = pl(wavlen[:plbrknum_tmp], plslp_tmp, const_tmp)

    flux_pl = flux * 1.0

    # Hot blackbody ---------------------------------------------------

    bbwavnrm = parfile['quasar']['bb']['wavnrm']

    flux = flux + bb(
        wavlen * u.AA, bbt * u.K, bbflxnrm, bbwavnrm * u.AA, units='freq')

    flux_bb = bb(wavlen * u.AA,
                 bbt * u.K,
                 bbflxnrm,
                 bbwavnrm * u.AA,
                 units='freq')

    # Balmer continuum --------------------------------------------------

    # Add Balmer Continuum and blur to simulate effect of bulk-velocity
    # shifts comparable to those present in emission lines

    # Determine height of power-law continuum at wavelength wbcnrm to allow
    # correct scaling of Balmer continuum contribution

    wbcnrm = parfile['quasar']['balmercont']['wbcnrm']
    wbedge = parfile['quasar']['balmercont']['wbedge']
    tbc = parfile['quasar']['balmercont']['tbc']
    taube = parfile['quasar']['balmercont']['taube']
    vfwhm = parfile['quasar']['balmercont']['vfwhm']

    # mean wavelength increment
    winc = np.diff(wavlen).mean()

    cfact = flux[wav2num(wavlen, wbcnrm)]
    flux = flux / cfact

    flux_bc = bc(wavlen=wavlen * u.AA,
                 tbb=tbc * u.K,
                 fnorm=bcnrm,
                 taube=taube,
                 wavbe=wbedge * u.AA,
                 wnorm=wbcnrm * u.AA)

    vsigma = vfwhm * (u.km / u.s) / 2.35
    wsigma = wbedge * u.AA * vsigma / const.c
    wsigma = wsigma.to(u.AA)
    psigma = wsigma / (winc * u.AA)

    # Performs a simple Gaussian smooth with dispersion psigma pixels
    gauss = Gaussian1DKernel(stddev=psigma)
    flux_bc = convolve(flux_bc, gauss)

    flux = flux + flux_bc

    #-----------------------------------------------------------------

    # Now convert to flux per unit wavelength
    # Presumably the emission line spectrum and galaxy spectrum
    # are already in flux per unit wavelength.

    # c / lambda^2 conversion
    flux = flux * (u.erg / u.s / u.cm**2 / u.Hz)
    flux = flux.to(u.erg / u.s / u.cm**2 / u.AA,
                   equivalencies=u.spectral_density(wavlen * u.AA))
    scale = flux[wav2num(wavlen, wavnrm)]
    flux = flxnrm * flux / scale

    flux_pl = flux_pl * (u.erg / u.s / u.cm**2 / u.Hz)
    flux_pl = flux_pl.to(u.erg / u.s / u.cm**2 / u.AA,
                         equivalencies=u.spectral_density(wavlen * u.AA))
    flux_pl = flxnrm * flux_pl / scale

    flux_bb = flux_bb * (u.erg / u.s / u.cm**2 / u.Hz)
    flux_bb = flux_bb.to(u.erg / u.s / u.cm**2 / u.AA,
                         equivalencies=u.spectral_density(wavlen * u.AA))
    flux_bb = flxnrm * flux_bb / scale

    flux_bc = flux_bc * (u.erg / u.s / u.cm**2 / u.Hz)
    flux_bc = flux_bc.to(u.erg / u.s / u.cm**2 / u.AA,
                         equivalencies=u.spectral_density(wavlen * u.AA))
    flux_bc = flxnrm * flux_bc / scale

    # Emission lines -------------------------------------------------

    linwav, linval, conval = lin[:, 0], lin[:, 1], lin[:, 2]

    # Normalise such that continuum flux at wavnrm equal to that
    # of the reference continuum at wavnrm
    inorm = wav2num(wavlen, wavnrm)
    scale = flux[inorm]
    flux = conval[inorm] * flux / scale
    flux_pl = conval[inorm] * flux_pl / scale
    flux_bb = conval[inorm] * flux_bb / scale
    flux_bc = conval[inorm] * flux_bc / scale

    # Calculate Baldwin Effect Scaling for Halpha
    zbenrm = parfile['quasar']['el']['zbenrm']
    beslp = parfile['quasar']['el']['beslp']

    # Line added to stop enormous BE evolution at low z
    zval = np.max([redshift, zbenrm])

    # I think this is the absolute magnitude of the SDSS sample as
    # a function of redshift, which is not the same as how the
    # absolute magnitude of a object of a given flux changes
    # as a function of redshift
    qsomag_itp = interp1d(qsomag[:, 0], qsomag[:, 1])

    # Absolute magnitude at redshift z minus
    # normalisation absolute magnitude
    vallum = qsomag_itp(zval) - qsomag_itp(zbenrm)

    # Convert to luminosity
    vallum = 10.0**(-0.4 * vallum)

    scabe = vallum**(-beslp)

    flux_el = np.zeros_like(flux)
    flux_el[:whmin] = linval[:whmin] * np.abs(
        elscal) * flux[:whmin] / conval[:whmin]
    flux_el[whmax:] = linval[whmax:] * np.abs(
        elscal) * flux[whmax:] / conval[whmax:]

    flux[:whmin] = flux[:whmin] + linval[:whmin] * np.abs(
        elscal) * flux[:whmin] / conval[:whmin]
    flux[whmax:] = flux[whmax:] + linval[whmax:] * np.abs(
        elscal) * flux[whmax:] / conval[whmax:]

    # Scaling for Ha with Baldwin effect
    scatmp = elscal * scahal / scabe
    flux_el[whmin:whmax] = linval[whmin:whmax] * np.abs(
        scatmp) * flux[whmin:whmax] / conval[whmin:whmax]
    flux[whmin:whmax] = flux[whmin:whmax] + \
                        linval[whmin:whmax] * np.abs(scatmp) * flux[whmin:whmax] / conval[whmin:whmax]

    gznorm = parfile['gal']['znrm']
    gplind = parfile['gal']['plind']

    # Determine fraction of galaxy sed to add to unreddened quasar SED
    qsocnt = np.sum(flux[ignmin:ignmax])

    # Factor cscale just to bring input galaxy and quasar flux zero-points equal
    cscale = qsocnt / galcnt

    # Find absolute magnitude of quasar at redshift z
    vallum = qsomag_itp(redshift)

    # Find absolute magnitude of quasar at redshift gznorm
    galnrm = qsomag_itp(gznorm)

    # Subtract supplied normalisation absolute magnitude
    vallum = vallum - galnrm

    # Convert to a luminosity
    vallum = 10.0**(-0.4 * vallum)

    # Luminosity scaling
    scaval = vallum**(gplind - 1.0)

    scagal = (galfra / (1.0 - galfra)) * scaval

    flux_gal = cscale * scagal * galspc
    # flux = flux + cscale * scagal * galspc

    ax.plot(wavlen[:wavnumbrk],
            wavlen[:wavnumbrk] * flux_pl[:wavnumbrk],
            color=cs[1],
            label='Accretion Disc')
    # ax.fill_between(wavlen[:wavnumbrk], wavlen[:wavnumbrk]*flux_pl[:wavnumbrk], facecolor=cs[1], alpha=0.2)
    ax.plot(wavlen[wavnumbrk:],
            wavlen[wavnumbrk:] * flux_pl[wavnumbrk:],
            color=cs[0],
            label='Accretion Disc')
    # ax.fill_between(wavlen[wavnumbrk:], wavlen[wavnumbrk:]*flux_pl[wavnumbrk:], facecolor=cs[0], alpha=0.2)
    ax.plot(wavlen, wavlen * (flux_bc), color=cs[2], label='Balmer Continuum')
    # ax.fill_between(wavlen, wavlen*(flux_bc), facecolor=cs[2], alpha=0.2)
    ax.plot(wavlen, wavlen * (flux_bb), color=cs[4], label='Hot Dust')
    # ax.fill_between(wavlen, wavlen*(flux_bb), facecolor=cs[4], alpha=0.2)
    # ax.plot(wavlen, wavlen*(flux_gal), color=cs[3], label='Galaxy')
    # ax.fill_between(wavlen, wavlen*(flux_gal), facecolor=cs[3], alpha=0.2)

    ax.plot(wavlen, wavlen * flux, color='black', label='Total')

    ax.legend()

    ax.set_xlim(1216, 20000)
    ax.set_ylim(0, 10000)
    ax.set_ylabel(r'${\lambda}F_{\lambda}$ [Arbitary Units]')
    ax.set_xlabel(r'Wavelength $\lambda$ [${\rm \AA}$]')

    plt.tight_layout()
    plt.subplots_adjust(top=0.85)

    fig.savefig('/home/lc585/thesis/figures/chapter05/sed_model.pdf')

    plt.show()

    return None
Пример #16
0
def plot():

    set_plot_properties()  # change style

    fig, axs = plt.subplots(2,
                            3,
                            figsize=figsize(1, vscale=0.8),
                            sharex='col',
                            sharey='row')

    tab1 = Table.read('/data/lc585/QSOSED/Results/150224/sample1/out_add.fits')

    tab1 = tab1[~np.isnan(tab1['BBT_STDERR'])]
    tab1 = tab1[tab1['BBT_STDERR'] < 500.]
    tab1 = tab1[tab1['BBT_STDERR'] > 5.0]
    tab1 = tab1[(tab1['LUM_IR_SIGMA'] * tab1['RATIO_IR_UV']) < 0.4]

    tab2 = Table.read('/data/lc585/QSOSED/Results/150224/sample2/out_add.fits')

    tab2 = tab2[~np.isnan(tab2['BBT_STDERR'])]
    tab2 = tab2[tab2['BBT_STDERR'] < 500.]
    tab2 = tab2[tab2['BBT_STDERR'] > 5.0]
    tab2 = tab2[(tab2['LUM_IR_SIGMA'] * tab2['RATIO_IR_UV']) < 0.4]

    kde_contours(tab1['LUM_UV'], tab1['RATIO_IR_UV'], axs[0, 0])
    kde_contours(tab2['LUM_UV'], tab2['RATIO_IR_UV'], axs[0, 0], color='red')
    kde_contours(tab1['LOGBH'], tab1['RATIO_IR_UV'], axs[0, 1])
    kde_contours(tab2['LOGBH'], tab2['RATIO_IR_UV'], axs[0, 1], color='red')
    kde_contours(tab1['LOGEDD_RATIO'][tab1['LOGEDD_RATIO'] > -2.0],
                 tab1['RATIO_IR_UV'][tab1['LOGEDD_RATIO'] > -2.0], axs[0, 2])
    kde_contours(tab2['LOGEDD_RATIO'][tab2['LOGEDD_RATIO'] > -2.0],
                 tab2['RATIO_IR_UV'][tab2['LOGEDD_RATIO'] > -2.0],
                 axs[0, 2],
                 color='red')

    tab1 = Table.read('/data/lc585/QSOSED/Results/141209/sample1/out_add.fits')

    tab1 = tab1[~np.isnan(tab1['BBT_STDERR'])]
    tab1 = tab1[tab1['BBT_STDERR'] < 500.]
    tab1 = tab1[tab1['BBT_STDERR'] > 5.0]
    tab1 = tab1[(tab1['LUM_IR_SIGMA'] * tab1['RATIO_IR_UV']) < 0.4]

    tab2 = Table.read('/data/lc585/QSOSED/Results/150211/sample2/out_add.fits')

    tab2 = tab2[~np.isnan(tab2['BBT_STDERR'])]
    tab2 = tab2[tab2['BBT_STDERR'] < 500.]
    tab2 = tab2[tab2['BBT_STDERR'] > 5.0]
    tab2 = tab2[(tab2['LUM_IR_SIGMA'] * tab2['RATIO_IR_UV']) < 0.4]

    kde_contours(tab1['LUM_UV'], tab1['BBT'], axs[1, 0])
    kde_contours(tab2['LUM_UV'], tab2['BBT'], axs[1, 0], color='red')
    kde_contours(tab1['LOGBH'], tab1['BBT'], axs[1, 1])
    kde_contours(tab2['LOGBH'], tab2['BBT'], axs[1, 1], color='red')
    kde_contours(tab1['LOGEDD_RATIO'][tab1['LOGEDD_RATIO'] > -2.0],
                 tab1['BBT'][tab1['LOGEDD_RATIO'] > -2.0], axs[1, 2])
    kde_contours(tab2['LOGEDD_RATIO'][tab2['LOGEDD_RATIO'] > -2.0],
                 tab2['BBT'][tab2['LOGEDD_RATIO'] > -2.0],
                 axs[1, 2],
                 color='red')

    axs[0, 0].set_xlim(45, 47)
    axs[0, 1].set_xlim(8, 10.5)
    axs[0, 2].set_xlim(-1.5, 0.5)

    axs[1, 0].set_ylim(800, 1800)
    axs[0, 0].set_ylim(0, 0.8)

    axs[0, 0].set_ylabel(r'$R_{NIR/UV}$')
    axs[1, 0].set_ylabel(r'$T_{BB}$')
    axs[1, 0].set_xlabel('UV Luminosity')
    axs[1, 1].set_xlabel('Black Hole Mass')
    axs[1, 2].set_xlabel('Eddington Ratio')

    fig.tight_layout()
    plt.subplots_adjust(wspace=0.2, hspace=0.1)

    fig.savefig(
        '/home/lc585/thesis/figures/chapter06/correlations_contour.pdf')

    plt.show()

    return None
Пример #17
0
def dr7_completeness():

    

    # Manda matched DR7Q to ALLWISE 
    wisedat = Table.read('/data/sdss/DR7/AllWISE/DR7QSO_AllWISE_matched.fits')

    # Main DR7Q
    dr7dat = Table.read('/data/sdss/DR7/dr7qso.fit')

    imin = np.arange(18.0,21.0,0.1)

    w1frac, w2frac, w3frac, w4frac = [], [], [], [] 
    for i in range(len(imin)):
        objsall = wisedat[ (wisedat['IMAG'] < imin[i]) ]
        objs = wisedat[ (wisedat['IMAG'] < imin[i]) & (wisedat['W1SNR_ALLWISE'] > 5.0) ]
        w1frac.append(float(len(objs)) / float(len(objsall)) )
        objs = wisedat[ (wisedat['IMAG'] < imin[i]) & (wisedat['W2SNR_ALLWISE'] > 5.0) ]
        w2frac.append(float(len(objs)) / float(len(objsall)))
        objs = wisedat[ (wisedat['IMAG'] < imin[i]) & (wisedat['W3SNR_ALLWISE'] > 5.0) ]
        w3frac.append(float(len(objs)) / float(len(objsall))) 
        objs = wisedat[ (wisedat['IMAG'] < imin[i]) & (wisedat['W4SNR_ALLWISE'] > 5.0) ]
        w4frac.append(float(len(objs)) / float(len(objsall)))
    
    ulasdat = np.genfromtxt('/data/mbanerji/Projects/QSO/DR7QSO/DR7QSO_ULASDR9_ABmags.cat')
    
    YSNR = 1.0 / (ulasdat[:,18] * 0.4 * np.log(10) )
    JSNR = 1.0 / (ulasdat[:,19] * 0.4 * np.log(10) )
    HSNR =  1.0 / (ulasdat[:,20] * 0.4 * np.log(10) )
    KSNR =  1.0 / (ulasdat[:,21] * 0.4 * np.log(10) )
    
    Yfrac, Jfrac, Hfrac, Kfrac, totalnum = [], [], [], [], [] 
    for i in range(len(imin)):
        objsall = ulasdat[ (ulasdat[:,7] < imin[i]) ]
        objs = ulasdat[ (ulasdat[:,7] < imin[i]) & (YSNR > 5.0) ]
        Yfrac.append(float(len(objs)) / float(len(objsall)) )
        objs = ulasdat[ (ulasdat[:,7] < imin[i]) & (JSNR > 5.0)]
        Jfrac.append(float(len(objs)) / float(len(objsall)) )
        objs = ulasdat[ (ulasdat[:,7] < imin[i]) & (HSNR > 5.0) ]
        Hfrac.append(float(len(objs)) / float(len(objsall)) )
        objs = ulasdat[ (ulasdat[:,7] < imin[i]) & (KSNR > 5.0) ]
        Kfrac.append(float(len(objs)) / float(len(objsall)) )
    
    totalnum = []
    for i in range(len(imin)):
        objsall = dr7dat[ (dr7dat['IMAG'] < imin[i]) ]
        totalnum.append(len(objsall))
    
    fig = plt.figure(figsize=figsize(0.7))
    ax = fig.add_subplot(111)
    
    set2 = brewer2mpl.get_map('Set2', 'qualitative', 7).mpl_colors
    ax.plot(imin,Yfrac,label='Y',color=set2[0])
    ax.plot(imin,Jfrac,label='J',color=set2[1])
    ax.plot(imin,Hfrac,label='H',color=set2[2])
    ax.plot(imin,Kfrac,label='K',color=set2[3])
    ax.plot(imin,w1frac,label='W1',color=set2[4])
    ax.plot(imin,w2frac,label='W2',color=set2[5])
    ax.plot(imin,w3frac,label='W3',color=set2[6])
    
    plt.legend(loc='lower left',prop={'size':10})
    
    ax2 = ax.twinx()
    ax2.plot(imin,totalnum,color='black',linestyle='--')
    
    ax2.axvline(19.1,color='grey')
    ax.set_ylim(0.6,1.05)
    ax2.set_ylim(0,110000)
    
    ax.set_xlabel(r'$i_{\rm min}$')
    ax.set_ylabel('Completeness')
    ax2.set_ylabel('Number of Objects')
    
    plt.tight_layout()

    fig.savefig('/home/lc585/thesis/figures/chapter06/dr7completeness.pdf')
    
    plt.show() 

    return None 
Пример #18
0
def dr10_completeness():

    wisedat = Table.read('/data/lc585/SDSS/DR10QSO_AllWISE_matched.fits')
    
    dat = Table.read('/data/sdss/DR10/DR10Q_v2.fits')
    gmag_all = dat['PSFMAG'][:,1] - dat['EXTINCTION_RECAL'][:,1] + 0.03
    
    gmag_wise = wisedat['PSFMAG'][:,1] - wisedat['EXTINCTION_RECAL'][:,1] + 0.03

    
    ysnr = dat['YFLUX'] / dat['YFLUX_ERR']
    jsnr = dat['JFLUX'] / dat['JFLUX_ERR']
    hsnr = dat['HFLUX'] / dat['HFLUX_ERR']
    ksnr = dat['KFLUX'] / dat['KFLUX_ERR']
    
    gmin = np.arange(18.0,22.5,0.1)
    
    yfrac, jfrac, hfrac, kfrac, w1frac, w2frac, w3frac, w4frac, totalnum = [], [], [], [], [], [], [], [], []
    
    for i in range(len(gmin)):
        objsall = wisedat[ (gmag_wise < gmin[i]) ]
        objs = wisedat[ (gmag_wise < gmin[i]) & (wisedat['W1SNR_ALLWISE'] > 5.0) ]
        w1frac.append(float(len(objs)) / float(len(objsall)) )
        objs = wisedat[ (gmag_wise < gmin[i]) & (wisedat['W2SNR_ALLWISE'] > 5.0) ]
        w2frac.append(float(len(objs)) / float(len(objsall)))
        objs = wisedat[ (gmag_wise < gmin[i]) & (wisedat['W3SNR_ALLWISE'] > 5.0) ]
        w3frac.append(float(len(objs)) / float(len(objsall))) 
        objs = wisedat[ (gmag_wise < gmin[i]) & (wisedat['W4SNR_ALLWISE'] > 5.0) ]
        w4frac.append(float(len(objs)) / float(len(objsall)))
        objsall = dat[ (dat['UKIDSS_MATCHED'] == 1) & (gmag_all < gmin[i]) ]
        objs = dat[ (dat['UKIDSS_MATCHED'] == 1) & (gmag_all < gmin[i])  & (ysnr > 5.0) ]
        yfrac.append(float(len(objs)) / float(len(objsall)) )
        objs = dat[(dat['UKIDSS_MATCHED'] == 1) & (gmag_all < gmin[i]) & (jsnr > 5.0) ]
        jfrac.append(float(len(objs)) / float(len(objsall)) )
        objs = dat[(dat['UKIDSS_MATCHED'] == 1) & (gmag_all < gmin[i]) & (hsnr > 5.0) ]
        hfrac.append(float(len(objs)) / float(len(objsall)) )
        objs = dat[(dat['UKIDSS_MATCHED'] == 1) & (gmag_all < gmin[i]) & (ksnr > 5.0) ]
        kfrac.append(float(len(objs)) / float(len(objsall)) )
    
    for i in range(len(gmin)):
        objsall = dat[ (gmag_all < gmin[i]) ]
        totalnum.append(len(objsall))
    
    fig = plt.figure(figsize=figsize(0.7))
    ax = fig.add_subplot(111)
    
    set2 = brewer2mpl.get_map('Set2', 'qualitative', 7).mpl_colors

    ax.plot(gmin,yfrac,label='Y',color=set2[0])
    ax.plot(gmin,jfrac,label='J',color=set2[1])
    ax.plot(gmin,hfrac,label='H',color=set2[2])
    ax.plot(gmin,kfrac,label='K',color=set2[3])
    ax.plot(gmin,w1frac,label='W1',color=set2[4])
    ax.plot(gmin,w2frac,label='W2',color=set2[5])
    ax.plot(gmin,w3frac,label='W3',color=set2[6])
    # ax.plot(gmin,w4frac,label='W4')
    
    ax.axvline(22.0,color='grey')
    
    plt.legend(loc='lower left', prop={'size':10})
    
    ax2 = ax.twinx()
    ax2.plot(gmin,totalnum,color='black',linestyle='--')
    ax2.set_ylim(0,170000)
    
    ax.set_xlabel(r'$g_{\rm min}$')
    ax.set_ylabel('Completeness')
    ax2.set_ylabel('Number of Objects')

    plt.tight_layout()
    
    plt.savefig('/home/lc585/thesis/figures/chapter06/dr10completeness.pdf')

    plt.show() 

    return None 
def plot():

    set_plot_properties() # change style 

    fig, axs = plt.subplots(3, 2, figsize=figsize(1, vscale=1.5), sharey='col', sharex='row')
    


    t = Table.read('/home/lc585/qsosed/out_bbt_fixed.fits')
    t = t[['NAME', 'BBT', 'IR_UV_RATIO']]
    t.rename_column('NAME', 'SDSS_NAME')
    
    df_fit = t.to_pandas() 
    
    df_bhm = pd.read_csv('/data/lc585/SDSS/civ_bs_basesub.liam', delimiter='|')
    df_bhm.drop('Unnamed: 0', inplace=True, axis=1)
    df_bhm.drop('Unnamed: 18', inplace=True, axis=1)
    
    df = pd.merge(df_fit, df_bhm, how='inner', on='SDSS_NAME')

    Lbol = 3.81 * 10**df['LOGL1350_SDSS']
    Ledd = 3.2e4 * 10**df['CIV_LOGBH_SDSS']
    Lbol = Lbol / (3.846e33*(u.erg/u.s)) # in units of solar luminosity
    EddRatio = Lbol / Ledd
    df['EddRatio_Bias'] = EddRatio
    
    Lbol = 3.81 * 10**df['LOGL1350_SDSS']
    Ledd = 3.2e4 * 10**df['CIV_LOGBH_CORR_HW10']
    Lbol = Lbol / (3.846e33*(u.erg/u.s)) # in units of solar luminosity
    EddRatio = Lbol / Ledd
    df['EddRatio'] = EddRatio


    df = df[~np.isinf(df.EddRatio_Bias)]

    df = df[(df.LOGL1350_SDSS > 45) & (df.LOGL1350_SDSS < 47)]
    df = df[(df.CIV_LOGBH_SDSS > 8) & (df.CIV_LOGBH_SDSS < 10.5)]
    df = df[(np.log10(df.EddRatio_Bias) > -1.5) & (np.log10(df.EddRatio_Bias) < 0.5)]




    kde_contours(df.LOGL1350_SDSS, df.IR_UV_RATIO, axs[0, 0], color=cs[1])
    kde_contours(df.CIV_LOGBH_SDSS, df.IR_UV_RATIO, axs[1, 0], color=cs[1])
    kde_contours(np.log10(df.EddRatio_Bias), df.IR_UV_RATIO, axs[2, 0], color=cs[1])

    kde_contours(df.LOGL1350_SDSS, df.IR_UV_RATIO, axs[0, 1], color=cs[1])
    kde_contours(df.CIV_LOGBH_CORR_HW10, df.IR_UV_RATIO, axs[1, 1], color=cs[1])
    kde_contours(np.log10(df.EddRatio), df.IR_UV_RATIO, axs[2, 1], color=cs[1])
 

    axs[0, 0].set_xlim(45.8, 47)

    axs[0, 0].xaxis.set_major_locator(MaxNLocator(4))

    axs[1, 0].set_xlim(8.25, 10.25)
    axs[2, 0].set_xlim(-1.5, 0.5)
    axs[0, 1].set_xlim(45.8, 47)
    axs[1, 1].set_xlim(8.25, 10.25)
    axs[2, 1].set_xlim(-1.5, 0.5)

    axs[0, 0].set_ylim(0, 0.8)
    axs[0, 1].set_ylim(0, 0.8)
    axs[0, 0].yaxis.set_major_locator(MaxNLocator(4))
    axs[0, 1].yaxis.set_major_locator(MaxNLocator(4))
    
    axs[0, 0].set_ylabel(r'R$_{\rm NIR/UV}$')
    axs[1, 0].set_ylabel(r'R$_{\rm NIR/UV}$')
    axs[2, 0].set_ylabel(r'R$_{\rm NIR/UV}$')



    axs[0, 0].set_xlabel(r'Log L$_{\rm UV}$ [erg~$\rm{s}^{-1}$]')
    axs[1, 0].set_xlabel(r'Log M$_{\rm BH}$ [M$\odot$]')
    axs[2, 0].set_xlabel(r'Log $\lambda_{\rm Edd}$')

    axs[0, 1].set_xlabel(r'Log L$_{\rm UV}$ [erg~$\rm{s}^{-1}$]')
    axs[1, 1].set_xlabel(r'Log M$_{\rm BH}$ [M$\odot$]')
    axs[2, 1].set_xlabel(r'Log $\lambda_{\rm Edd}$')

    

    labels = ['(a)', '(b)', '(b)', '(d)', '(c)', '(e)']

    print len(axs.flatten())

    for i, ax in enumerate(axs.flatten()):

        ax.text(0.1, 0.93, labels[i],
                horizontalalignment='center',
                verticalalignment='center',
                transform = ax.transAxes)

    fig.delaxes(axs[0, 1])



    

    
    fig.tight_layout()
    plt.subplots_adjust(wspace=0.25, hspace=0.25)
    
    fig.savefig('/home/lc585/thesis/figures/chapter05/correlations_contour.pdf')

    plt.show() 

    return None 
Пример #20
0
def ratio_tbb_beta(density=False):

    from astropy.table import join

    tab = Table.read('/data/lc585/QSOSED/Results/141203/sample1/out_add.fits')
    
    tab = tab[ tab['BBT_STDERR'] < 200.0 ]
    tab = tab[ tab['BBFLXNRM_STDERR'] < 0.05]
    tab = tab[ tab['CHI2_RED'] < 3.0]
    
    tab1 = Table.read('/data/lc585/QSOSED/Results/141124/sample2/out.fits') # 9000 - 23500 fit
    tab2 = Table.read('/data/lc585/QSOSED/Results/141124/sample1/out.fits') # 10000 - 23500 fit
    
    tab1['BBPLSLP'] = tab1['BBPLSLP'] - 1.0
    tab2['BBPLSLP'] = tab2['BBPLSLP'] - 1.0
    
    goodnames = Table()
    goodnames['NAME'] = tab['NAME']
    
    tab1 = join( tab1, goodnames, join_type='right', keys='NAME')
    tab2 = join( tab2, goodnames, join_type='right', keys='NAME')
    
    fig, ax = plt.subplots(figsize=figsize(1, vscale=0.8))

    if not density: 

        im = ax.hexbin(tab['BBT'],
                       tab['RATIO_IR_UV'],
                       C = tab1['BBPLSLP'],
                       gridsize=(80,80))
        
        cb = plt.colorbar(im)
        cb.set_label(r'$\beta_{\rm NIR}$')
        
        # Digitize beta
        nbins = 20
        bins = np.linspace(-1.5,1.5,nbins+1)
        ind = np.digitize(tab1['BBPLSLP'],bins)
        bbt_locus = [np.median(tab['BBT'][ind == j]) for j in range(1, nbins)]
        ratio_locus = [np.median(tab['RATIO_IR_UV'][ind == j]) for j in range(1, nbins)]
        ax.plot(bbt_locus[7:-2],ratio_locus[7:-2],color='black',linewidth=2.0)
    
    
        ax.set_ylabel(r'$R_{{\rm NIR}/{\rm UV}}$')
        ax.set_xlabel(r'$T_{\rm BB}$')
    
        ax.set_ylim(0,2)
        ax.set_xlim(700,1900)
    
        fig.tight_layout()

        fig.savefig('/home/lc585/thesis/figures/chapter06/ratio_tbb_beta.pdf')
        
    else:

        from matplotlib import cm
        from PlottingTools.truncate_colormap import truncate_colormap
        mycm = cm.get_cmap('YlOrRd_r')
        mycm.set_under('w')
        cset = brewer2mpl.get_map('YlOrRd', 'sequential', 9).mpl_colors
        mycm = truncate_colormap(mycm, 0.0, 0.8)

        im = ax.hexbin(tab['BBT'],
                       tab['RATIO_IR_UV'],
                       gridsize=(80,80),
                       cmap = mycm,
                       mincnt=1)
        
        
        cb = plt.colorbar(im)
        cb.set_label(r'Number of Objects')
        
        ax.set_ylabel(r'$R_{{\rm NIR}/{\rm UV}}$')
        ax.set_xlabel(r'$T_{\rm BB}$')
    
        ax.set_ylim(0,2)
        ax.set_xlim(700,1900)
    
        fig.tight_layout()

        fig.savefig('/home/lc585/thesis/figures/chapter06/ratio_tbb_beta_density.pdf')

    plt.show() 

    return None 
Пример #21
0
def civ_hot_dust_ratio():

    """
    df = get_data()
    df = extcut(df)
    df = df[(df.z_HW >= 2.0) & (df.z_HW < 2.7)]
    df.to_csv('/home/lc585/qsosed/temp.csv')

    to make sample, and then runsingleobjfit

    temp is fixed 

    """



    t = Table.read('/home/lc585/qsosed/out_bbt_fixed.fits')

    t_ica = Table.read('/data/vault/phewett/LiamC/liam_civpar_zica_160115.dat', format='ascii') # new ICA
    t_ica.rename_column('col1', 'NAME')
    t_ica.rename_column('col2', 'CIV_BLUESHIFT_ICA')
    t_ica.rename_column('col3', 'CIV_EQW_ICA')
    
    print len(t)
    t = join(t, t_ica, join_type='inner', keys='NAME') 
    print len(t)
    
    t = t[np.log10(t['CIV_EQW_ICA']) > 1.2]
    
    
    xdat = t['CIV_BLUESHIFT_ICA']
    ydat = np.log10(t['CIV_EQW_ICA'])
    C = t['IR_UV_RATIO']
    
        
    fig, ax = plt.subplots(figsize=figsize(1, vscale=1.0))
    
    im = ax.hexbin(xdat,
                   ydat,
                   C=C,
                   gridsize=(25,18),
                   mincnt=1,
                   reduce_C_function=np.median,
                   cmap='RdBu_r',
                   edgecolor='black',
                   linewidth=0.5,
                   vmax=0.55,
                   vmin=0.15)
    
    cb = fig.colorbar(im,ax=ax)
    cb.set_label(r'$R_{NIR/UV}$')
    
    ax.set_xlabel(r'C\,{\sc iv} Blueshift [km~$\rm{s}^{-1}$]')
    ax.set_ylabel(r'log(C\,{\sc iv} EW) [\AA]')
    
    ax.set_xlim(-750,4000)
    ax.set_ylim(1.1 ,2)
    
    fig.tight_layout()

    fig.savefig('/home/lc585/thesis/figures/chapter05/hot_dust_ratio.pdf')
    plt.show()

    return None 
Пример #22
0
def plot():

    from PlottingTools.plot_setup_thesis import figsize, set_plot_properties
    from astropy.table import Table
    import matplotlib.pyplot as plt
    from scipy import histogram2d
    import numpy as np
    from matplotlib import cm
    from PlottingTools.truncate_colormap import truncate_colormap
    import brewer2mpl
    from PlottingTools import running
    import collections
    from PlottingTools.kde_contours import kde_contours
    from PlottingTools.scatter_hist import scatter_hist
    import palettable

    cs = palettable.colorbrewer.qualitative.Set1_9.mpl_colors

    fig, axScatter, axHistx, axHisty = scatter_hist(figsize=figsize(1, 1),
                                                    left=0.12,
                                                    bottom=0.12)

    set_plot_properties()  # change style

    tab = Table.read('/home/lc585/qsosed/out.fits')

    # tab = tab[ ~np.isnan(tab['BBT_STDERR'])]
    # tab = tab[ tab['BBT_STDERR'] < 500. ]
    # tab = tab[ tab['BBT_STDERR'] > 5.0 ]
    # tab = tab[ (tab['LUM_IR_SIGMA']*tab['RATIO_IR_UV']) < 1.]

    #data definition
    xdat, ydat = tab['BBT'] * 1e3, tab['IR_UV_RATIO']

    bad = np.isnan(xdat) | np.isnan(ydat)
    xdat = xdat[~bad]
    ydat = ydat[~bad]

    bad = (xdat > 2000) | (xdat < 500) | (ydat < 0) | (ydat > 1)

    xdat = xdat[~bad]
    ydat = ydat[~bad]

    kde_contours(xdat, ydat, axScatter, filled=True, lims=(600, 1800, 0, 0.8))

    axScatter.set_xlabel(r'$T_{\rm BB}$')
    axScatter.set_ylabel(r'$R_{{\rm NIR}/{\rm UV}}$')

    axScatter.set_ylim(0, 0.8)
    axScatter.set_xlim(800, 1600)

    axHisty.hist(ydat,
                 bins=np.arange(0, 0.8, 0.05),
                 facecolor=cs[1],
                 histtype='stepfilled',
                 edgecolor='black',
                 orientation='horizontal',
                 normed=True)

    axHistx.hist(xdat,
                 bins=np.arange(800, 1600, 50),
                 histtype='stepfilled',
                 edgecolor='black',
                 facecolor=cs[1],
                 normed=True)

    # Sample from single (T,Norm) with gaussian errors on photometry.
    # Mock magnitude file made in model.py and then fit in runsingleobjfit.py.

    # tab2 = Table.read('/data/lc585/QSOSED/Results/150309/sample5/out_add.fits')

    # axScatter.scatter(tab2['BBT'],
    #                   tab2['RATIO_IR_UV'],
    #                   edgecolor='None',
    #                   color=cs[0],
    #                   s=8,
    #                   zorder=10)

    axHistx.set_xlim(axScatter.get_xlim())
    axHisty.set_ylim(axScatter.get_ylim())

    axHistx.set_ylim(0, 5e-3)
    axHisty.set_xlim(0, 4)

    fig.savefig('/home/lc585/thesis/figures/chapter05/ratio_tbb_density.pdf')

    plt.show()

    return None
Пример #23
0
def plot():

    set_plot_properties()  # change style

    with open('/home/lc585/qsosed/input.yml', 'r') as f:
        parfile = yaml.load(f)

    fittingobj = load(parfile)

    df = get_data()

    zs = np.linspace(1, 3.0, 100)
    wavlen = fittingobj.get_wavlen()

    uvintmin = np.argmin(np.abs(wavlen - 2000.))
    uvintmax = np.argmin(np.abs(wavlen - 9000.))
    irintmin = np.argmin(np.abs(wavlen - 10000.))
    irintmax = np.argmin(np.abs(wavlen - 30000.))

    def ratiogoal(rg):

        ratio = 0.0
        bbflxnrm = 0.0
        z = 2.0
        bbt = 1306
        plslp1 = -0.478
        plslp2 = -0.199
        plbrk = 2402.0
        flxnrm = 1.0
        wavnrm = 5500.0
        bbwavnrm = 20000.0

        # while ratio < rg:

        #     flux = np.zeros(len(wavlen), dtype=np.float)

        #     # Define normalisation constant to ensure continuity at wavbrk
        #     const2 = flxnrm / (wavnrm**(-plslp2))
        #     const1 = const2 * ((plbrk**(-plslp2)) / (plbrk**(-plslp1)))

        #     wavnumbrk = wav2num(wavlen, plbrk)

        #     flux[:wavnumbrk] = flux[:wavnumbrk] + pl(wavlen[:wavnumbrk], plslp1, const1)
        #     flux[wavnumbrk:] = flux[wavnumbrk:] + pl(wavlen[wavnumbrk:], plslp2, const2)

        #     # Hot blackbody ---------------------------------------------------

        #     bbflux = bb(wavlen*u.AA,
        #                 bbt*u.K,
        #                 bbflxnrm,
        #                 bbwavnrm*u.AA,
        #                 units='freq')

        #     flux = flux*(u.erg / u.s / u.cm**2 / u.Hz)
        #     flux = flux.to(u.erg / u.s / u.cm**2 / u.AA,
        #                    equivalencies=u.spectral_density(wavlen * u.AA))

        #     bbflux = bbflux*(u.erg / u.s / u.cm**2 / u.Hz)
        #     bbflux = bbflux.to(u.erg / u.s / u.cm**2 / u.AA,
        #                        equivalencies=u.spectral_density(wavlen * u.AA))

        #     ratio = np.sum(bbflux[irintmin:irintmax]) / np.sum(flux[uvintmin:uvintmax])
        #     bbflxnrm = bbflxnrm + 0.01

        # print ratio, bbflxnrm
        # parfile['quasar']['bb']['flxnrm'] = bbflxnrm

        print rg
        if rg == 0.5: parfile['quasar']['bb']['flxnrm'] = 4.47
        elif rg == 0.4: parfile['quasar']['bb']['flxnrm'] = 3.58
        elif rg == 0.3: parfile['quasar']['bb']['flxnrm'] = 2.69
        elif rg == 0.2: parfile['quasar']['bb']['flxnrm'] = 1.8
        elif rg == 0.1: parfile['quasar']['bb']['flxnrm'] = 0.91
        elif rg == 0.0: parfile['quasar']['bb']['flxnrm'] = 0.0

        cols = []

        for z in zs:

            magtmp, wavlentmp, fluxtmp = model(redshift=z, parfile=parfile)

            cols.append(magtmp[9] - magtmp[10])

        return cols

    fig, ax = plt.subplots(figsize=figsize(1.0, vscale=0.7))

    mycm = cm.get_cmap('Blues_r')
    mycm.set_under('w')
    mycm = truncate_colormap(mycm, 0.0, 0.8)
    cset = brewer2mpl.get_map('Blues', 'sequential', 9).mpl_colors

    #histogram definition
    xyrange = [[1, 3], [0, 2]]  # data range
    bins = [50, 50]  # number of bins
    thresh = 4  #density threshold

    #data definition
    xdat, ydat = df.z_HW, df.W1VEGA - df.W2VEGA

    # histogram the data
    hh, locx, locy = histogram2d(xdat, ydat, range=xyrange, bins=bins)
    posx = np.digitize(xdat, locx)
    posy = np.digitize(ydat, locy)

    #select points within the histogram
    ind = (posx > 0) & (posx <= bins[0]) & (posy > 0) & (posy <= bins[1])
    hhsub = hh[posx[ind] - 1,
               posy[ind] - 1]  # values of the histogram where the points are
    xdat1 = xdat[ind][hhsub < thresh]  # low density points
    ydat1 = ydat[ind][hhsub < thresh]
    hh[hh < thresh] = np.nan  # fill the areas with low density by NaNs

    im = ax.imshow(np.flipud(hh.T),
                   cmap=mycm,
                   extent=np.array(xyrange).flatten(),
                   interpolation='none',
                   aspect='auto',
                   vmin=thresh,
                   vmax=45)

    cb = plt.colorbar(im)
    cb.set_label('Number of Objects')

    ax.scatter(xdat1, ydat1, color=cset[-1], s=3)

    cset = brewer2mpl.get_map('YlOrRd', 'sequential', 8).mpl_colors

    ax.plot(zs, ratiogoal(0.5), c=cset[7], linewidth=2.0, label=r'0.5')
    ax.plot(zs, ratiogoal(0.4), c=cset[6], linewidth=2.0, label=r'0.4')
    ax.plot(zs, ratiogoal(0.3), c=cset[5], linewidth=2.0, label=r'0.3')
    ax.plot(zs, ratiogoal(0.2), c=cset[4], linewidth=2.0, label=r'0.2')
    ax.plot(zs, ratiogoal(0.1), c=cset[3], linewidth=2.0, label=r'0.1')
    ax.plot(zs, ratiogoal(0.0), c=cset[2], linewidth=2.0, label=r'0.0')

    ax.set_xlabel(r'Redshift $z$')
    ax.set_ylabel(r'$W1-W2$')

    ax.set_xlim(1, 4)
    ax.set_ylim(0.2, 2)

    ax.text(0.72,
            0.7,
            r'${\mathrm R_{\mathrm NIR/UV}}$',
            transform=ax.transAxes)
    plt.legend(frameon=False, loc=(0.7, 0.15))

    plt.tight_layout()

    fig.savefig(
        '/home/lc585/thesis/figures/chapter05/w1w2_versus_redshift_ratio.pdf')

    plt.show()

    return None
Пример #24
0
def plot():

    cs = palettable.colorbrewer.qualitative.Set1_3.mpl_colors

    # Load parameter file
    with open('/home/lc585/qsosed/input.yml', 'r') as f:
        parfile = yaml.load(f)

    ebvmin = -0.075
    ebvmax = 0.075

    zmin = 1
    zmax = 3.0

    # Load stuff
    fittingobj = load(parfile)
    wavlen = fittingobj.get_wavlen()

    # Load data
    df = get_data()

    df = df[(df.z_HW >= zmin) & (df.z_HW <= zmax)]

    colmin, colmax = [], []

    zs = np.arange(zmin, zmax + 0.025, 0.025)

    mycm = cm.get_cmap('Blues_r')
    mycm.set_under('w')
    cset = brewer2mpl.get_map('Blues', 'sequential', 9).mpl_colors
    mycm = truncate_colormap(mycm, 0.0, 0.8)

    fig = plt.figure(figsize=(figsize(1, vscale=0.8)))
    ax = fig.add_subplot(1, 1, 1)
    plt.tight_layout()

    #histogram definition
    xyrange = [[0., 3.0], [0, 3]]  # data range
    bins = [100, 60]  # number of bins
    thresh = 7  #density threshold

    #data definition

    xdat, ydat = df.z_HW, df.iVEGA - df.KVEGA

    # histogram the data
    hh, locx, locy = histogram2d(xdat, ydat, range=xyrange, bins=bins)
    posx = np.digitize(xdat, locx)
    posy = np.digitize(ydat, locy)

    #select points within the histogram
    ind = (posx > 0) & (posx <= bins[0]) & (posy > 0) & (posy <= bins[1])
    hhsub = hh[posx[ind] - 1,
               posy[ind] - 1]  # values of the histogram where the points are
    xdat1 = xdat[ind][hhsub < thresh]  # low density points
    ydat1 = ydat[ind][hhsub < thresh]
    hh[hh < thresh] = np.nan  # fill the areas with low density by NaNs

    im = ax.imshow(np.flipud(hh.T),
                   cmap=mycm,
                   extent=np.array(xyrange).flatten(),
                   interpolation='none',
                   aspect='auto',
                   vmin=thresh,
                   vmax=45)

    clb = fig.colorbar(im)
    clb.set_label('Number of Objects')
    ax.scatter(xdat1, ydat1, color=cset[-1], s=2)

    plt.ylim(0, 3.5)

    col = []
    for z in zs:

        parfile['ext']['EBV'] = ebvmax

        magtmp, wavlentmp, fluxtmp = model(redshift=z, parfile=parfile)

        col.append(magtmp[3] - magtmp[8])

    plt.plot(zs, col, label='E(B-V) = 0.075', color=cs[0], linewidth=1.0)
    upper_bound_1 = col[np.argmin(np.abs(zs - 1.0)):np.argmin(np.abs(zs -
                                                                     1.5))]
    upper_bound_2 = col[np.argmin(np.abs(zs - 2.0)):np.argmin(np.abs(zs -
                                                                     2.7))]

    col = []
    for z in zs:

        parfile['ext']['EBV'] = ebvmin

        magtmp, wavlentmp, fluxtmp = model(redshift=z, parfile=parfile)

        col.append(magtmp[3] - magtmp[8])

    plt.plot(zs, col, label='E(B-V) = -0.075', color=cs[0], linewidth=1.0)
    lower_bound_1 = col[np.argmin(np.abs(zs - 1.0)):np.argmin(np.abs(zs -
                                                                     1.5))]
    lower_bound_2 = col[np.argmin(np.abs(zs - 2.0)):np.argmin(np.abs(zs -
                                                                     2.7))]

    plt.fill_between(zs[np.argmin(np.abs(zs - 2.0)):np.argmin(np.abs(zs -
                                                                     2.7))],
                     lower_bound_2,
                     upper_bound_2,
                     facecolor='None',
                     edgecolor=cs[0],
                     linewidth=3.0)

    col = []
    for z in zs:

        parfile['ext']['EBV'] = 0.0

        magtmp, wavlentmp, fluxtmp = model(redshift=z, parfile=parfile)

        col.append(magtmp[3] - magtmp[8])

    plt.plot(zs, col, label='E(B-V) = 0.0', color=cs[0], linewidth=1.0)

    plt.xlim(0.75, 3.5)

    plt.text(3.33821,
             2.5,
             'E(B-V)=',
             horizontalalignment='right',
             verticalalignment='center',
             color='black')

    plt.text(3.09608,
             2.2,
             '0.075',
             horizontalalignment='left',
             verticalalignment='center',
             color='black')

    plt.text(3.09608,
             1.2,
             '-0.075',
             horizontalalignment='left',
             verticalalignment='center',
             color='black')

    plt.text(3.09608,
             1.7,
             '0.0',
             horizontalalignment='left',
             verticalalignment='center',
             color='black')

    plt.xlabel(r'Redshift $z$')
    plt.ylabel(r'$i$-$K$')
    plt.tight_layout()

    fig.savefig('/home/lc585/thesis/figures/chapter05/ik_versus_z_low_ext.pdf')
    plt.show()

    return None
Пример #25
0
def plot(): 

    """
    Generates residual plot using model parameters in input.yml
    """

    set_plot_properties() # change style 

    with open('/home/lc585/qsosed/input.yml', 'r') as f:
        parfile = yaml.load(f)

    fittingobj = load(parfile)
    wavlen = fittingobj.get_wavlen()
    lin = fittingobj.get_lin()
    galspc = fittingobj.get_galspc()
    ext = fittingobj.get_ext()
    galcnt = fittingobj.get_galcnt()
    ignmin = fittingobj.get_ignmin()
    ignmax = fittingobj.get_ignmax()
    ztran = fittingobj.get_ztran()
    lyatmp = fittingobj.get_lyatmp()
    lybtmp = fittingobj.get_lybtmp()
    lyctmp = fittingobj.get_lyctmp()
    whmin = fittingobj.get_whmin()
    whmax = fittingobj.get_whmax()
    qsomag = fittingobj.get_qsomag()
    flxcorr = fittingobj.get_flxcorr()
    cosmo = fittingobj.get_cosmo() 

    # Load median magnitudes 
    with open('/home/lc585/qsosed/sdss_ukidss_wise_medmag_ext.dat') as f:
        datz = np.loadtxt(f, usecols=(0,))

    datz = datz[:-5]

    # Load filters
    ftrlst = fittingobj.get_ftrlst()[2:-2] 
    lameff = fittingobj.get_lameff()[2:-2]
    bp = fittingobj.get_bp()[2:-2] # these are in ab and data is in vega 
    dlam = fittingobj.get_bp()[2:-2]
    zromag = fittingobj.get_zromag()[2:-2]

    with open('ftgd_dr7.dat') as f:
        ftgd = np.loadtxt(f, skiprows=1, usecols=(1,2,3,4,5,6,7,8,9))

    fname = '/home/lc585/qsosed/sdss_ukidss_wise_medmag_ext.dat'
    datarr = np.genfromtxt(fname, usecols=(5,7,9,11,13,15,17,19,21)) 
    datarr[datarr < 0.0] = np.nan 

    datarr = datarr[:-5, :]


    params = Parameters()
    params.add('plslp1', value = -0.478)
    params.add('plslp2', value = -0.199)
    params.add('plbrk', value = 2.40250)
    params.add('bbt', value = 1.30626)
    params.add('bbflxnrm', value = 2.673)
    params.add('elscal', value = 1.240)
    params.add('scahal',value = 0.713)
    params.add('galfra',value = 0.0)
    params.add('bcnrm',value = 0.135)
    params.add('ebv',value = 0.0)
    params.add('imod',value = 18.0)       

    modarr = residual(params,
                      parfile,
                      wavlen,
                      datz,
                      lin,
                      bp,
                      dlam,
                      zromag,
                      galspc,
                      ext,
                      galcnt,
                      ignmin,
                      ignmax,
                      ztran,
                      lyatmp,
                      lybtmp,
                      lyctmp,
                      ftrlst,
                      whmin,
                      whmax,
                      cosmo,
                      flxcorr,
                      qsomag,
                      ftgd)
    
    lameff = lameff.reshape( len(lameff), 1)
    lameff = np.repeat(lameff,len(datz),axis=1)
    
    datz = datz.reshape(1, len(datz) )
    datz = np.repeat(datz,len(lameff),axis=0)
    lam = lameff / (1.0 + datz)
    res = np.ndarray.transpose(modarr - datarr)
    

    
    fig = plt.figure(figsize=figsize(1, 0.8))
    ax = fig.add_subplot(1,1,1)
    colormap = plt.cm.Paired
    plt.gca().set_color_cycle([colormap(i) for i in np.linspace(0, 0.8, 9)])
    labels = ['r','i','z','Y','J','H','K','W1','W2']
    for i in range(9):
        ax.plot(lam[i,:], res[i,:], label=labels[i])
    
    ax.grid() 
        
    ax.set_xlim(1000,30000)
    ax.set_ylim(-0.3,0.3)
    ax.set_xlabel(r'Rest Frame Wavelength [${\rm \AA}$]')
    ax.set_ylabel(r'$m_{\rm mod} - m_{\rm dat}$')
    plt.legend(prop={'size':10})
    plt.tick_params(axis='both',which='major')
    plt.tight_layout()

    plt.savefig('/home/lc585/thesis/figures/chapter05/model_residuals.pdf')

    plt.show() 

    return None