def plot_one(rates, plotname, *p, frac=0.05, age=13.6): brates = u.gimme_rebinned_data(rates, splits=arange(0, 1.167, 0.167).tolist()) scale_k = quad(imf.salpeter, 3, 8)[0] / quad(imf.salpeter1, 0.1, 125)[0] scale = scale_k * 0.7**2. * 1e4 ## factors of h... dt = 0.05 tt = arange(0.1, age, dt) ## forward time lbt = age - tt zz = [ct.cosmoz(x) for x in lbt] sfh = rz.sfr_behroozi_12(tt) dtd = step_dtd(tt, *p) norm_dtd = sum(step_dtd(tt, *p)) * dt dtd = dtd / norm_dtd tmp = convolve( sfh, dtd, 'full') * dt * frac * scale ## now convolved result in forward time rate_fn = tmp[:len(dtd)] clf() ax = subplot(111) ax2 = ax.twinx() ax2.plot(zz, sfh, 'r-') ax.plot(zz, rate_fn, 'k-') ax.errorbar(rates[:, 0], rates[:, 1], yerr=[rates[:, 3], rates[:, 2]], fmt='o', color='0.6') ax.errorbar(brates[:, 0], brates[:, 1], yerr=[brates[:, 3], brates[:, 2]], xerr=[brates[:, 5], brates[:, 4]], fmt='o', color='0.0', zorder=10) pwrl = (-1.0, 1.0) ax.set_xlim(0, 2.5) ax.set_xlabel('Redshift') ax.set_ylabel(r'SN Ia Rate') ax.set_ylabel(r'$10^{-4}$ SNe Ia per year per Mpc$^3$') ax2.set_ylabel(r'SF Rate') ax3 = axes([0.65, 0.6, 0.23, 0.2]) ax3.plot(tt, dtd, 'b-', label='Fit') #label='Norm = %1.1f' %(simps(dtd,x=time))) ax3.plot(tt, rz.powerdtd(tt, *pwrl), 'b:', label=r'$t^{%.1f}$' % (pwrl[0])) pn = (-20, 8.8, 11) ax3.plot(tt, rz.dtdfunc(tt, *pn), 'b--', label='Best model') ax.set_title(r' $k=%.4f$ M$_{\odot}^{-1}$, $f=%2.1f\%%$' % (scale_k, frac * 100)) ax3.set_ylabel('$\Phi$') ax3.set_xlabel('Delay Time (Gyr)') ax3.set_xlim(0, 12) ax3.set_ylim(0, 1.3) ax3.legend(frameon=False) savefig(plotname) return ()
def plot_one(rates, plotname, *p, frac=0.05, age=13.6): brates = u.gimme_rebinned_data(rates, splits=arange(0, 1.125, 0.125).tolist()) scale_k = quad(imf.salpeter, 3, 8)[0] / quad(imf.salpeter1, 0.1, 125)[0] scale = scale_k * 0.7**2. * 1e4 ## factors of h... dt = 0.05 tt = arange(dt, age, dt) lbt = age - tt zz = [ct.cosmoz(x, ho=70) for x in lbt] par_model = [0.0134, 2.55, 3.3, 6.1] sfh = rz.csfh_time(tt, *par_model) dtd = rz.dtdfunc(tt, *p) pwrl = (-1.0, 1.0) dud = rz.powerdtd(tt, *pwrl) tmp = convolve( sfh, dtd, 'full') * dt * frac * scale ## now convolved result in forward time rate_fn = tmp[:len(dtd)] jdud = convolve(sfh, dud, 'full') * dt * scale * 0.065 jdud = jdud[:len(dtd)] clf() ax = subplot(111) ax2 = ax.twinx() ax2.plot(zz, sfh, 'r-', label='CSFH') ax.plot(zz, rate_fn, 'k-', label='Fit', zorder=3) ax.plot(zz, jdud, 'k:', label=r'$t^{%.1f}$' % (pwrl[0])) ax.errorbar(rates[:, 0], rates[:, 1], yerr=[rates[:, 3], rates[:, 2]], fmt='o', color='0.6', alpha=0.4) ax.errorbar(brates[:, 0], brates[:, 1], yerr=[brates[:, 3], brates[:, 2]], xerr=[brates[:, 5], brates[:, 4]], fmt='o', color='0.0', zorder=10) pwrl = (-1.0, 1.0) ax.set_xlim(0, 2.6) ax.set_ylim(0, 1.8) ax2.set_ylim(0, 0.16) ax3 = axes([0.65, 0.62, 0.23, 0.2]) ## ax3 = axes([0.55, 0.6, 0.33, 0.25]) ax3.plot(tt, log10(dtd), 'b-', label='Fit') #label='Norm = %1.1f' %(simps(dtd,x=time))) ax3.plot(tt, log10(rz.powerdtd(tt, *pwrl)), 'b:', label=r'$t^{%.1f}$' % (pwrl[0])) ax3.set_ylabel('$\log(\Phi)$') ax3.set_xlabel('Delay Time (Gyr)') ax3.set_xlim(0, 12) ax3.set_ylim(-3, 0.5) ##ax3.set_ylim(0,1) ## ax3.legend(loc=1,ncol=1,frameon=False, fontsize=8) ax.set_xlabel('Redshift') ax.set_ylabel(r'$10^{-4}$ SNe Ia per year per Mpc$^3$') ax2.set_ylabel(r'M$_{\odot}$ per year per Mpc$^3$') ## ax.set_title(r' $k=%.4f$ M$_{\odot}^{-1}$, $f=%2.1f\%%$' %(scale_k,frac*100)) ax.set_title(r'$k=%.4f\,M_{\odot}^{-1},\,\,\varepsilon=%2.1f\%%$' % (scale_k, frac * 100)) ax.legend(loc=2, frameon=False) ax2.legend(loc=4, frameon=False) savefig(plotname) return ()
def func(x, *p): aa = p return (aa * rz.dtdfunc(x, *p0) * scale) p_t = [1.0] color = '#4BADFF' ## pwrl = (-1.0,1.0) ## ax.plot(time,rz.powerdtd(time, *pwrl, normed=False)*(1.3e-3), 'b--', label=r'$t^{%.1f}$'%(pwrl[0])) pwrl = (-1.10, 1.0) perr = (0.09, 0.0) cov = diag(array(perr)**2) ps = np.random.multivariate_normal(pwrl, cov, 100) ysample = asarray( [rz.powerdtd(time, *pi, normed=False) * (1.6e-3) for pi in ps]) lower = percentile(ysample, 15.9, axis=0) upper = percentile(ysample, 84.1, axis=0) ax.fill_between(time, upper, lower, color=color, alpha=0.2) ax.plot(time, rz.powerdtd(time, *pwrl, normed=False) * (1.6e-3), '--', color=color, label=r'Field ($\beta={%.2f}^{+0.08}_{-0.07}$)' % (pwrl[0])) color = '#F0CBC8' pwrl = (-1.39, 1.0) perr = (0.32, 0.0) cov = diag(array(perr)**2) ps = np.random.multivariate_normal(pwrl, cov, 100) ysample = asarray(
print('%d total samples' % len(temp)) samples = temp ndraws = 100 #21 is actually pretty good draws = samples[np.random.randint(0, len(samples), ndraws), :] ysample = asarray([rz.dtdfunc(tta, *pi[1:-1]) for pi in draws]) lower = percentile(ysample, 15.9, axis=0) upper = percentile(ysample, 84.1, axis=0) ax2.fill_between(tta, log10(upper), log10(lower), color='green', alpha=0.2) lower = percentile(ysample, 2.5, axis=0) upper = percentile(ysample, 97.5, axis=0) ax2.fill_between(tta, log10(upper), log10(lower), color='green', alpha=0.2) pwrl = (-1., 1.) ax2.plot(tt, log10(rz.powerdtd(tt, *pwrl)), 'b:', label=r'$t^{%.1f}$' % (pwrl[0])) frac = 0.065 rates = loadtxt('SNeIa_rates.txt') rates[:, 1:] = rates[:, 1:] #*1.0e-4 ## put on the right scale rates = rates[:, :4] brates = u.gimme_rebinned_data(rates, splits=arange(0, 1.125, 0.125).tolist()) scale_k = quad(imf.salpeter, 3, 8)[0] / quad(imf.salpeter1, 0.1, 125)[0] scale = scale_k * 0.7**2. * 1e4 ## factors of h... lbt = age - tta zz = [ct.cosmoz(x, ho=70) for x in lbt]
def plot_one(rates, plotname, *p, frac=0.05, age=13.6): brates = u.gimme_rebinned_data(rates, splits=arange(0, 1.125, 0.125).tolist()) scale_k = quad(imf.salpeter, 3, 8)[0] / quad(imf.salpeter1, 0.1, 125)[0] scale = scale_k * 0.7**2. * 1e4 ## factors of h... dt = 0.05 tt = arange(dt, age, dt) ## forward time lbt = age - tt zz = [ct.cosmoz(x) for x in lbt] par_model = [0.0134, 2.55, 3.3, 6.1] sfh = rz.csfh_time(tt, *par_model) dtd = rz.dtdfunc(tt, *p) pwrl = (-1.0, 1.0) dud = rz.powerdtd(tt, *pwrl) tmp = convolve( sfh, dtd, 'full') * dt * frac * scale ## now convolved result in forward time rate_fn = tmp[:len(dtd)] jdud = convolve(sfh, dud, 'full') * dt * scale * 0.065 jdud = jdud[:len(dtd)] clf() ax = subplot(111) ax2 = ax.twinx() ax2.plot(zz, sfh, 'r-') ax.plot(zz, rate_fn, 'k-') ax.plot(zz, jdud, 'k:') ax.errorbar(rates[:, 0], rates[:, 1], yerr=[rates[:, 3], rates[:, 2]], fmt='o', color='0.6') ax.errorbar(brates[:, 0], brates[:, 1], yerr=[brates[:, 3], brates[:, 2]], xerr=[brates[:, 5], brates[:, 4]], fmt='o', color='0.0', zorder=10) ax.set_xlim(0, 2.5) ax.set_ylim(0, 1.8) ax.set_xlabel('Redshift') ax.set_ylabel(r'SN Ia Rate') ax.set_ylabel(r'$10^{-4}$ SNe Ia per year per Mpc$^3$') ax2.set_ylabel(r'SF Rate') ax3 = axes([0.65, 0.6, 0.23, 0.2]) ax3.plot(tt, dtd, 'b-', label='Fit') #label='Norm = %1.1f' %(simps(dtd,x=time))) ax3.plot(tt, dud, 'b:', label=r'$t^{%.1f}$' % (pwrl[0])) ax3.set_ylabel('$\Phi$') ax3.set_xlabel('Delay Time (Gyr)') ax3.set_xlim(0, 12) ax3.set_ylim(0, 1.3) ax3.legend(frameon=False) savefig(plotname) return ()
pickle.dump(ysample, open(outfile,'wb')) print ('have ysample') ##idx = where((sum(ysample, axis=1)==0.)&(ysample[:,2]<=0.)) idx = where(ysample[:,2]>0.) ysample = ysample[idx] lower = percentile(ysample, 15.9, axis=0) upper = percentile(ysample, 84.1, axis=0) ax2.fill_between(tta, upper, lower, color='green', alpha=0.2) lower = percentile(ysample, 2.5, axis=0) upper = percentile(ysample, 97.5, axis=0) ax2.fill_between(tta, upper, lower, color='green', alpha=0.2) pwrl=(-1.,1.) ax2.plot(tt,rz.powerdtd(tt, *pwrl), 'b:', label=r'$t^{%.1f}$'%(pwrl[0])) ax2.set_xlim(0,12) ax2.set_ylim(0,0.8) frac = 0.062 rates = loadtxt('SNeIa_rates.txt') rates[:,1:] = rates[:,1:]#*1.0e-4 ## put on the right scale rates = rates[:,:4] brates = u.gimme_rebinned_data(rates,splits=arange(0,1.167,0.167).tolist()) scale_k = quad(imf.salpeter,3,8)[0]/quad(imf.salpeter1,0.1,125)[0] scale = scale_k * 0.7**2.*1e4## factors of h... lbt = age - tta zz = [ct.cosmoz(x, ho=70) for x in lbt]
def rate_per_galaxy( sfh, lbu=13.65, lbl=0.05, p0=None, frac_ia=0.05, plotit=True, title=None, testing=False, ): scale = quad(imf.salpeter, 3, 8)[0] / quad(imf.salpeter1, 0.1, 125)[0] scale = scale * 0.70**2. if not p0: p0 = (-1.4, 3.5, -1.0) sfh_data = loadtxt(sfh) ii = where((sfh_data[:, 0] > lbl) & (sfh_data[:, 0] <= lbu)) # cuts the data range sfh_data = sfh_data[ii] sfh_data[:, 0] = lbu - sfh_data[:, 0][::-1] sfh_data[:, 1] = sfh_data[:, 1][::-1] ## now in forward time if testing: ## reframes everything in a more continuous time. n_out = IUS(sfh_data[:, 0], sfh_data[:, 1]) time = arange(0, lbu + 0.1, 0.1) sfh_data = zeros((len(time), 2), ) sfh_data[:, 0] = time sfh_data[:, 1] = n_out( time) ## now continuous, evenly spaced, not sure that's important. if testing: ## just makes a SFH box box_ll = 4. ii = where((sfh_data[:, 0] > box_ll) & (sfh_data[:, 0] < box_ll + 2.)) sfh_data[:, 1] = 0.0 sfh_data[:, 1][ii] = 10. #warnings.simplefilter('ignore',RuntimeWarning) dtd = rz.dtdfunc(sfh_data[:, 0], *p0) if testing: ## makes the dtd function gaussian p1 = (1., 4.0, 0.01) dtd = u.gauss(sfh_data[:, 0], *p1) dt = sum(diff(sfh_data[:, 0])) / (len(sfh_data[:, 0]) - 1) rate_fn = zeros((len(sfh_data), 2), ) tmp = convolve( sfh_data[:, 1], dtd, 'full') * dt * scale * frac_ia ## now convolved result in forward time rate_fn[:, 1] = tmp[:len( dtd)] #*concatenate((array([0.]),diff(sfh_data[:,0])),) rate_fn[:, 0] = sfh_data[:, 0] rate_fn[:, 1] = rate_fn[:, 1] rate = rate_fn[-1, 1] if testing: ## a check of the shift in the effective time on each tmp1 = sum((sfh_data[:, 0]) * sfh_data[:, 1]) / sum(sfh_data[:, 1]) tmp2 = sum(rate_fn[:, 1] * (rate_fn[:, 0])) / sum(rate_fn[:, 1]) print(tmp1, tmp2, tmp2 - tmp1) if plotit: clf() ax1 = subplot(111) ax1.plot(lbu - sfh_data[:, 0], sfh_data[:, 1], '--', color='0.25') #,alpha=0.3) ax1.set_xlabel('Lookback Time (Gyr)') ax1.set_ylabel('$\psi(M_{\odot}\,yr^{-1})$') if title: ax1.set_title(title) ## ax1.axvline(x=0, color='r') ax3 = ax1.twinx() ax3.plot(lbu - rate_fn[:, 0], rate_fn[:, 1] * 1.e3, 'k-', label='$R_{Ia}(0)=%2.2f\, (1000\, yr)^{-1}$' % (rate * 1.e3), alpha=0.3) ax3.set_ylabel('$R_{Ia}[\#\,(1000\, yr)^{-1}]$') ax3.legend(frameon=False) ttt, ddd = rz.greggio() ttt = array(ttt) ddd = array(ddd) ii = where(ttt > 0) ttt = ttt[ii] ddd = ddd[ii] time = arange(0.1, 15, 0.1) dtd = rz.dtdfunc(time, *p0) pwrl = (-1.0, 1.0) ax2 = axes([0.6, 0.55, 0.25, 0.25]) ax2.plot(time, dtd, 'r-', label='Best Fit') #label='Norm = %1.1f' %(simps(dtd,x=time))) ax2.plot(time, rz.powerdtd(time, *pwrl), 'b--', label=r'$t^{%.1f}$' % (pwrl[0])) ## ax2.plot(ttt,ddd,'b--', label='Greggio') ax2.set_ylabel('$\Phi$') ax2.set_xlabel('Delay Time (Gyr)') ax2.set_xlim(0, 12) ax2.set_ylim(0, 1.3) ax2.legend(frameon=False) #tight_layout() ax4 = axes([0.6, 0.2, 0.25, 0.25]) img = mpimg.imread('107.jpg') ## Thoth ax4.imshow(img[75:135, 50:140]) #img = mpimg.imread('206.jpg') ## Borg #ax4.imshow(img[75:135,70:160]) ax4.set_yticks([]) ax4.set_xticks([]) if title: savefig(title + '.png') else: savefig('figure_sfh_demo.png') return (rate)