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
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
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
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()
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
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
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
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()
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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