In [1]:
%pylab inline
from simqso.sqgrids import *
from simqso import sqbase
from simqso.sqmodels import QLF_McGreer_2013
In [2]:
# set up a luminosity-redshift grid
M = AbsMagVar(UniformSampler(-30,-25),restWave=1450)
z = RedshiftVar(UniformSampler(1,5))
MzGrid = QsoSimGrid([M,z],(4,3),2,seed=12345)
scatter(MzGrid.z,MzGrid.absMag,)
xlabel('z')
ylabel('absolute mag');
In [3]:
# set up a flux-redshift grid with Lya EW as a third dimension
m = AppMagVar(UniformSampler(17,22),'SDSS-i')
lya = GaussianLineEqWidthVar(UniformSampler(0,2),'LyaEW',1215.67,10.)
mzlyaGrid = QsoSimGrid([m,z,lya],(4,3,2),2,seed=12345)
scatter(mzlyaGrid.z,mzlyaGrid.appMag,c=mzlyaGrid.LyaEW)
cb = colorbar()
xlabel('z')
ylabel('apparent mag')
cb.set_label('log EW(Lya)')
In [4]:
# Generate m,z points by sampling from a model QLF
cosmo = QLF_McGreer_2013.cosmo
kcorr = sqbase.ContinuumKCorr('SDSS-i',1450)
qlfGrid = generateQlfPoints(QLF_McGreer_2013,
(17,22),(4.5,5.3),kcorr,
skyArea=100,
qlfseed=12345,gridseed=67890)
In [5]:
scatter(qlfGrid.z,qlfGrid.appMag)
xlabel('z')
ylabel('apparent mag')
Out[5]:
In [6]:
# test the canonical values for power law continuum slopes in FUV/NUV
contVar = BrokenPowerLawContinuumVar([GaussianSampler(-1.5,0.3),
GaussianSampler(-0.5,0.3)],[1215.],
seed=12345)
contVals = contVar(1000)
_ = hist(contVals[:,0],alpha=0.8)
_ = hist(contVals[:,1],alpha=0.8)
In [7]:
# Add gaussian emission lines
g = GaussianSampler
lya = [g(1215.7,0.5),g(80,20),g(7,2)]
civ = [g(1550.0,1.5),g(20,10),g(10,2)]
emLinesVar = GaussianEmissionLinesTemplateVar([lya,civ],seed=12345)
emLinesVals = emLinesVar(1000)
figure(figsize=(14,4))
for k in range(3):
subplot(1,3,k+1)
for j in range(2):
hist(emLinesVals[:,j,k],alpha=0.8)
In [8]:
# add gaussian lines to the qlf grid
qlfGrid.addVar(emLinesVar)
print(qlfGrid)
In [9]:
scatter(qlfGrid.z,qlfGrid.appMag,c=qlfGrid.emLines[:,0,1])
cb = colorbar()
xlabel('z')
ylabel('apparent mag')
cb.set_label('EW(Lya)')
In [10]:
# Now use the BOSS DR9 emission line template, including the Baldwin Effect
lineTemplate = generateBEffEmissionLines(qlfGrid.absMag,seed=12345)
lines = lineTemplate()
lines.shape
Out[10]:
In [11]:
scatter(qlfGrid.z,qlfGrid.appMag,c=lines[:,13,1])
cb = colorbar()
xlabel('z')
ylabel('apparent mag')
cb.set_label('EW(CIV)')
In [12]:
vdblines = generateVdBCompositeEmLines(minEW=0)
vdblines = vdblines(qlfGrid.nObj)
In [13]:
wave = arange(3000,1e4,0.5)
z = 2.0
def quick_spec(emlines):
lineWave,eqWidth,sigma = emlines.T * (1+z)
spec = np.zeros_like(wave)
A = eqWidth/(np.sqrt(2*np.pi)*sigma)
twosig2 = 2*sigma**2
nsig = np.sqrt(-2*np.log(1e-3/A))
nsig = (nsig*np.array([[-1.],[1]])).T
for i in range(lineWave.shape[0]):
i1,i2 = np.searchsorted(wave,lineWave[i]+nsig[i]*sigma[i])
if i2 != i1:
lineprofile = A[i]*np.exp(-(wave[i1:i2]-lineWave[i])**2
/ twosig2[i])
spec[i1:i2] += lineprofile
return spec
In [14]:
figure(figsize=(12,4))
plot(wave/(1+z),quick_spec(lines[0]),label='BOSS DR9')
plot(wave/(1+z),quick_spec(vdblines[0]),label='Vanden Berk composite')
legend()
Out[14]:
In [ ]: