def cloudy_spectrum(ax):

	from prospect.models import model_setup

	param_file = '/Users/joel/code/python/prospector_alpha/parameter_files/brownseds_np/brownseds_np_params.py'
	
	run_params = model_setup.get_run_params(param_file=param_file)
	sps = model_setup.load_sps(**run_params)
	model = model_setup.load_model(**run_params)
	model.params['dust2'] = np.array(0.0)
	obs = model_setup.load_obs(**run_params)
	spec,_,_ = model.mean_model(model.initial_theta, obs, sps=sps)
	model.params['add_neb_emission'] = np.array(False)
	model.params['add_neb_continuum'] = np.array(False)
	spec_neboff,_,_ = model.mean_model(model.initial_theta, obs, sps=sps)

	spec_neb = (spec-spec_neboff)*3e18/sps.wavelengths**2
	in_plot = (sps.wavelengths/1e4 > 6) & (sps.wavelengths/1e4 < 30)
	spec_neb_smooth = smooth_spectrum(sps.wavelengths[in_plot], spec_neb[in_plot], 3500)
	spec_neb_smooth *= 1e5 / spec_neb_smooth.max()

	'''
	neb_color = '0.7'
	alpha = 0.7
	ax.fill_between(sps.wavelengths[in_plot]/1e4, np.zeros_like(spec_neb_smooth), spec_neb_smooth, 
                    color=neb_color,
                    alpha=alpha)

	### label H2 + [ArII] (second is in cloudy but very small)
	ax.fill_between([9.55,9.85],[0,0],[1,1],color=neb_color,alpha=alpha)
	ax.fill_between([6.8,7.1],[0,0],[1,1],color=neb_color,alpha=alpha)
	'''
	lines = ['[ArII]',r'H$_2$','[SIV]','[NeIII]','[SIII]']
	lam = [6.95,9.7,10.45,15.5,18.7]
	# removed because they're too weak, just distracting
	#lines = ['[ArIII]','[NeII]']
	#lam = [9.0,12.8]

	for ii in xrange(len(lines)):
		ax.text(lam[ii]*1.008,0.14,lines[ii],
			    ha='left',fontsize=9.5)
	for ii in xrange(len(lam)): ax.plot([lam[ii],lam[ii]],[0,1e5],linestyle='--',lw=1.5,color='k')
import numpy as np
import matplotlib.pyplot as plt
import spot_utils as pread
from prospect.io.read_results import results_from
from prospect.models import model_setup

paramfile = 'ad_params.py'
clargs = {'param_file': paramfile}
run_params = model_setup.get_run_params(argv=paramfile, **clargs)
print(run_params)

obs = model_setup.load_obs(**run_params)
sps = model_setup.load_sps(**run_params)
model = model_setup.load_model(**run_params)

wspec = sps.csp.wavelengths  # *restframe* spectral wavelengths
a = 1.0 + model.params.get('zred', 0.6)  # cosmological redshifting
wphot = np.array([f.wave_effective for f in obs['filters']])

# In [21]
# grab results, powell results, and our corresponding models
#res, pr, mod = results_from("{}_mcmc.h5".format(outroot))
res, pr, mod = results_from("demo_galphot_1508433060_mcmc.h5")

# In [22]
# To see how our MCMC samples look, we can examine a few traces
choice = np.random.choice
tracefig = pread.param_evol(res,
                            figsize=(20, 10),
                            chains=choice(128, size=10, replace=False))
Example #3
0
# load sps model (default)
sps = model_setup.load_sps(**run_params)
print(sps)

# In [6]
# load noise model (none)
spec_noise, phot_noise = model_setup.load_gp(**run_params)

# In [7]
# demo model
model = model_setup.load_model(**run_params)

# In [8]
# demo data (generated from the script)
# note: the phottable=photfile line is an addiiton
obs = model_setup.load_obs(phottable=photfile, **run_params)
#obs = model_setup.load_obs(**run_params)
#print('Mock S/N={}'.format(obs['mock_snr']))
#if run_params['add_noise']:
#    print('Noise realization added to mock photometry')
#else:
#    print('No noise added to mock photometry')

# In [9]
from prospect.likelihood import lnlike_spec, lnlike_phot, write_log


# In [10]
def lnprobfn(theta):
    """Given a parameter vector, a dictionary of observational data 
    and a model object, return the ln of the posterior. 
Example #4
0
def compute_specmags(runname=None, outfolder=None):

    '''
    step 1: load observed spectra, model spectra, photometry
    step 2: normalize model spectra to observed spectra (at red end, + blue if using u-band)
    step 3: meld them together
    step 4: calculate u, g, r mags from spectra
    step 5: plot spectral u, g, r versus photometric u, g, r

    dump into pickle file, call perform_wavelength_cal() to apply

    future steps: don't use super low-res spectra
    '''


    print 'THIS FUNCTION IS BROKEN, UNTIL YOU LET THREED_DUTILS USE LUMDIST'
    from bsfh import model_setup

    if runname == None:
        runname = 'brownseds'

    #### load up prospector results
    filebase, parm_basename, ancilname=prosp_dutils.generate_basenames(runname)
    outname = os.getenv('APPS')+'/prospector_alpha/plots/'+runname+'/pcomp/sfrcomp.png'
    alldata = prospector_io.load_alldata(runname=runname)
    sps = prosp_dutils.setup_sps(custom_filter_key=None)

    optphot = np.zeros(shape=(3,len(alldata)))
    obsphot = np.zeros(shape=(3,len(alldata)))
    for ii,dat in enumerate(alldata):

        #### load up model spec
        z = dat['residuals']['phot']['z']
        mod_spec = dat['bfit']['spec']
        mod_wav = sps.wavelengths

        #### load up observed spec
        # arrives in maggies * Hz
        # change to maggies
        spec_dict = prospector_io.load_spectra(dat['objname'])
        opt_idx = spec_dict['source'] == 1
        obs_wav = spec_dict['obs_lam'][opt_idx]
        obs_spec = spec_dict['flux'][opt_idx] / (3e18 / obs_wav)

        #### find adjoining sections in model
        minwav = np.min(obs_wav)
        maxwav = np.max(obs_wav)

        lamlim = (2800,7500)
        lower_join = (mod_wav > lamlim[0]) & (mod_wav < minwav)
        upper_join = (mod_wav < lamlim[1]) & (mod_wav > maxwav)

        #### normalize and combine
        # take 300 angstrom slices on either side
        dellam = 300
        low_obs = obs_wav < minwav+dellam
        low_mod = (mod_wav < minwav + dellam) & (mod_wav > minwav)
        up_obs = obs_wav > maxwav-dellam
        up_mod = (mod_wav > maxwav - dellam) & (mod_wav < maxwav)

        # avoid known emission lines: [OII], [NII], Halpha, [SII]
        elines = np.array([3727,6549,6563,6583,6717,6731])
        lambuff = 22
        for line in elines:
            low_obs[(obs_wav > line - lambuff) & (obs_wav < line + lambuff)] = False
            low_mod[(mod_wav > line - lambuff) & (mod_wav < line + lambuff)] = False
            up_obs[(obs_wav > line - lambuff) & (obs_wav < line + lambuff)] = False
            up_mod[(mod_wav > line - lambuff) & (mod_wav < line + lambuff)] = False

        # calculate mean
        lownorm = np.mean(obs_spec[low_obs]) / np.mean(mod_spec[low_mod])
        upnorm = np.mean(obs_spec[up_obs]) / np.mean(mod_spec[up_mod])

        # combine
        comblam = np.concatenate((mod_wav[lower_join],obs_wav,mod_wav[upper_join]))
        combspec = np.concatenate((mod_spec[lower_join]*lownorm,obs_spec,mod_spec[upper_join]*upnorm))

        # plot conjoined spectra
        if True:
            # observed spectra
            plt.plot(obs_wav,np.log10(obs_spec),color='black')
            #plt.plot(obs_wav[up_obs],np.log10(obs_spec[up_obs]),color='purple')
            #plt.plot(mod_wav[up_mod],np.log10(mod_spec[up_mod]),color='green')

            # post-break model
            plt.plot(mod_wav[lower_join],np.log10(mod_spec[lower_join]*lownorm),color='red')
            plt.plot(mod_wav[upper_join],np.log10(mod_spec[upper_join]*upnorm),color='red')
            plt.plot(mod_wav[lower_join],np.log10(mod_spec[lower_join]),color='grey')
            plt.plot(mod_wav[upper_join],np.log10(mod_spec[upper_join]),color='grey')

            # limits, save
            plt.xlim(2800,7200)
            plt.savefig('/Users/joel/code/python/prospector_alpha/plots/'+runname+'/pcomp/specnorm/'+dat['objname']+'.png',dpi=100)
            plt.close()

        #### convert combspec from maggies to Lsun/Hz
        pc2cm =  3.08568E18
        dfactor = (1+z) / ( 4.0 * np.pi * (dat['residuals']['phot']['lumdist']*1e6*pc2cm)**2)
        combspec *= 3631*1e-23 / constants.L_sun.cgs.value / dfactor # to Jy, to erg/s/cm^2/Hz, to Lsun/cm^2/Hz, to Lsun/Hz

        #### integrate spectra, save mags
        optphot[0,ii],_ = prosp_dutils.integrate_mag(comblam,combspec,'SDSS Camera u',alt_file='/Users/joel/code/fsps/data/allfilters.dat',z=z)
        optphot[1,ii],_ = prosp_dutils.integrate_mag(comblam,combspec,'SDSS Camera g',alt_file='/Users/joel/code/fsps/data/allfilters.dat',z=z)
        optphot[2,ii],_ = prosp_dutils.integrate_mag(comblam,combspec,'SDSS Camera r',alt_file='/Users/joel/code/fsps/data/allfilters.dat',z=z)
        optphot[:,ii] =  10**(-0.4*optphot[:,ii])

        #### save observed mags
        run_params = model_setup.get_run_params(param_file=parm_basename[ii])
        obs = model_setup.load_obs(**run_params)
        obsphot[0,ii] = obs['maggies'][obs['filters'] == 'SDSS_u']
        obsphot[1,ii] = obs['maggies'][obs['filters'] == 'SDSS_g']
        obsphot[2,ii] = obs['maggies'][obs['filters'] == 'SDSS_r']

    ##### plot
    kwargs = {'color':'0.5','alpha':0.8,'histtype':'bar','lw':2,'normed':1,'range':(0.5,2.0)}
    nbins = 80

    x = obsphot / optphot
    t**s = [r'(photometric flux / spectral flux) [u-band]',
            r'(photometric flux / spectral flux) [g-band]',
            r'(photometric flux / spectral flux) [r-band]']

    #### ALL GALAXIES
    fig, axes = plt.subplots(1, 3, figsize = (18.75,6))
    for ii, ax in enumerate(axes):
        num, b, p = ax.hist(x[ii,:],nbins,**kwargs)
        save_xlim = ax.get_xlim()
        b = (b[:-1] + b[1:])/2.
        ax.set_ylabel('N')
        ax.set_xlabel(t**s[ii])
        ax.set_xlim(save_xlim)
        ax.xaxis.set_major_locator(MaxNLocator(5))
    plt.savefig('/Users/joel/code/python/prospector_alpha/plots/'+runname+'/pcomp/spectral_integration.png',dpi=dpi)
    plt.close()

    out = {'obs_phot':obsphot,'spec_phot':optphot}
    prospector_io.save_spec_cal(out,runname=runname)
Example #5
0
def compare_sed():

	### custom parameter file
	### where mass is a six-parameter thing
	param_file = 'brownseds_np_params.py'

	run_params = model_setup.get_run_params(param_file=param_file)
	sps = model_setup.load_sps(**run_params)
	model = model_setup.load_model(**run_params)
	obs = model_setup.load_obs(**run_params)
	thetas = model.initial_theta

	### create star formation history and metallicity history
	mformed = 1e10
	m_constant = return_declining_sfh(model,mformed, tau=1e12)
	met = return_zt(model)
	#met = np.ones_like(met)
	thetas[model.theta_labels().index('logzsol')] = 0.0

	### simple
	i1, i2 = model.theta_index['mass']
	thetas[i1:i2] = m_constant
	nsamp = 21
	met_comp = np.linspace(-1,0,nsamp)
	spec, phot = [], []
	for m in met_comp:
		thetas[model.theta_labels().index('logzsol')] = m
		specx, photx, x = model.mean_model(thetas, obs, sps=sps)
		spec.append(specx)
		phot.append(photx)

	### complex
	for i in xrange(met.shape[0]):

		# zero out all masses
		thetas[i1:i2] = np.zeros_like(m_constant)

		# fill in masses and metallicities
		thetas[model.theta_labels().index('logzsol')] = np.log10(met[i])
		thetas[i1+i] = m_constant[i]

		# generate spectrum, add to existing spectrum
		sps.ssp.params.dirtiness = 1
		specx, photx, x = model.mean_model(thetas, obs, sps=sps)

		if i == 0:
			spec_agez, phot_agez = specx, photx
		else:
			spec_agez += specx
			phot_agez += photx

	### plot
	fig, ax = plt.subplots(1,1, figsize=(8, 7))
	cmap = get_cmap(nsamp)
	for i in xrange(0,nsamp,4): ax.plot(sps.wavelengths/1e4, np.log10(spec[i] / spec_agez),color=cmap(i), label=met_comp[i])
	ax.axhline(0, linestyle='--', color='0.1')
	ax.legend(loc=4,prop={'size':20},title=r'log(Z/Z$_{\odot}$) [fixed]')

	ax.set_xlim(0.1,10)
	ax.set_xscale('log',nonposx='clip',subsx=(2,5))
	ax.xaxis.set_minor_formatter(minorFormatter)
	ax.xaxis.set_major_formatter(majorFormatter)

	ax.set_ylabel(r'log(f$_{\mathrm{Z}_{\mathrm{fixed}}}$ / f$_{\mathrm{Z(t)}}$)')
	ax.set_xlabel('wavelength [microns]')
	ax.set_ylim(-0.4,0.4)
	plt.tight_layout()
	plt.show()
	print 1/0
Example #6
0
mpl.rc('text', usetex=True)
mpl.rcParams['text.latex.preamble']=[r"\usepackage{bm}"]
mpl.rcParams.update({'font.size': 30})
sfhsize = 40

#### parameter plot style
colors = ['blue', 'black', 'red']
alpha = 0.8
lw = 3

#### define model
param_file='/Users/joel/code/python/prospector_alpha/parameter_files/brownseds_np/brownseds_np_params.py'
run_params = model_setup.get_run_params(param_file=param_file)
sps = model_setup.load_sps(**run_params)
model = model_setup.load_model(**run_params)
obs = model_setup.load_obs(**run_params)

#### output locations
out1 = '/Users/joel/code/python/prospector_alpha/plots/brownseds_np/pcomp/model_diagram1.png'
out2 = '/Users/joel/code/python/prospector_alpha/plots/brownseds_np/pcomp/model_diagram2.png'

#### set initial theta
# 'logmass','sfr_fraction_1', sfr_fraction_2,
# sfr_fraction_3, sfr_fraction_4, 'sfr_fraction_5',
#  dust2', 'logzsol', 'dust_index', 
# 'dust1', 'duste_qpah', 'duste_gamma', 
# 'duste_umin'

labels = model.theta_labels()
itheta = np.array([10, 0.02, 0.1,
                   0.15, 0.2, 0.25,