def all_models_cdfs_pdfs2(cdf, pdf, bin_c, args, nsinks=64):
    """bins -- linear spaced 10^val not val"""
    sns.set_style("whitegrid")  # ,{"axes.facecolor": ".97"})
    sns.set_palette("colorblind")
    # kwargs
    laba = dict(fontweight="bold", fontsize=dFS)
    # str_beta map
    addtext = {}
    addtext["hydro_both"] = r"$\mathbf{ \beta_0 = \infty \, (1+2) }$"
    addtext["b100"] = r"$\mathbf{ \beta_0 = 100 }$"
    addtext["b10"] = r"$\mathbf{ \beta_0 = 10 }$"
    addtext["b1"] = r"$\mathbf{ \beta_0 = 1 }$"
    addtext["b1e-1"] = r"$\mathbf{ \beta_0 = 0.1 }$"
    addtext["b1e-2"] = r"$\mathbf{ \beta_0 = 0.01 }$"
    # plot
    fig, axes = plt.subplots(2, 1, sharex=True)
    ax = axes.flatten()
    plt.subplots_adjust(hspace=0.1)
    colors = sns.color_palette()  # color blind colors b/c set_palette() called above
    cnt = 0
    for mod in cdf.keys():
        if mod == "bInf" or mod == "bInfsd3":
            continue
        ax[1].plot(bin_c[mod] / mdotB(), cdf[mod], c=colors[cnt], label=addtext[mod])
        ax[0].plot(bin_c[mod] / mdotB(), pdf[mod], c=colors[cnt], label=addtext[mod])
        cnt += 1
        # ax[1].legend(loc=4,fontsize=FS,frameon=True,fancybox=True)
        # reorganize legend
    handles, labels = ax[1].get_legend_handles_labels()
    handles = handles[:2] + [handles[-1], handles[-2], handles[-3], handles[2]]
    labels = labels[:2] + [labels[-1], labels[-2], labels[-3], labels[2]]
    ax[1].legend(handles, labels, loc=(0.76, 0.01), ncol=1, fontsize=FS - 5, frameon=True, fancybox=True)
    #
    ylab = ax[1].set_ylabel("CDF", **laba)
    ylab = ax[0].set_ylabel("PDF", **laba)
    xlab = ax[1].set_xlabel(r"$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$", **laba)
    # ax[1].set_xlim(-7,-2.5)
    for i in range(2):
        ax[i].set_xlim(1e-5, 1e-1)
    ax[1].set_ylim(-0.1, 1.1)
    ax[0].set_ylim([-0.1, ax[0].get_ylim()[-1]])
    for i in range(2):
        ax[i].set_xscale("log")
        ax[i].tick_params(axis="both", labelsize=FS)
    plt.savefig(
        os.path.join(args.outdir, "all-models-cdfs-pdfs-nsinks-%d-2.png" % nsinks),
        bbox_extra_artists=[xlab, ylab],
        bbox_inches="tight",
        dpi=150,
    )
    plt.close()
Example #2
0
def mvp_for_peter(master_sink,args):	
	#write MVP data to file for Peter
	rate=master_sink.mdot/mdotB()
	time=(master_sink.mdotTime-master_sink.mdotTime[0])/get_tBH()
	fout=open(os.path.join(os.path.dirname(args.master_sink),'%s.pickle' % args.str_beta),'w')
	master_sink=dump((rate,time),fout)
	fout.close()
Example #3
0
def median_rate(ax,sink,args,raw=True,corr=True,clip=True,times=[],c_ls=[]): #tsteady):
	laba=dict(fontweight='bold',fontsize='xx-large')
	if raw: ax.plot(sink.tnorm(),np.median(sink.mdot,axis=0)/mdotB(),c='k',label='raw')
	if corr: ax.plot(sink.tnorm(),np.median(sink.mdot_vcorr,axis=0)/mdotB(),c='b',label='corr')
	if clip: ax.plot(sink.tnorm(),np.median(sink.mdot_vcorr_clip,axis=0)/mdotB(),c='r',label='corr, clip')
	for time,cls in zip(times,c_ls): 
		ax.plot([time]*2,ax.get_ylim(),cls,lw=2.)
	ax.set_xlabel(r'$\mathbf{ t/t_{\rm{BH}} }$',**laba)
	#2nd axis
	ax2 = ax.twiny()
	ax2.set_xlabel(r'$\mathbf{ t/t_{\rm{ABH}} }$',fontweight='bold',fontsize='xx-large')
	ax2.plot(tBH_to_tBHA(sink.tnorm(),args.str_beta),np.median(sink.mdot_vcorr,axis=0)/mdotB(),visible=False)
	#ax.plot([t_steady]*2,ax[0].get_ylim(),'r--',label='Steady State')
	ax.text(ax.get_xlim()[1]*0.01,ax.get_ylim()[1]*0.9,'Median',fontweight='bold',fontsize='large',va='center',ha='left')
	ax.set_yscale('log')
	if args.ylim: ax.set_ylim(args.ylim[0],args.ylim[1]) 
	ax.legend(loc=4,fontsize='small')
	ax.set_ylabel(r'Log $\mathbf{ \dot{M}/\dot{M}_{\rm{B}} }$',**laba)
Example #4
0
def all_rates(sink, args, corr=True):
	fig,ax=plt.subplots()
	for i in range(sink.mdot.shape[0]):
		if corr: ax.plot(sink.tnorm(),sink.mdot_vcorr[i,:]/mdotB()) #,label='ID: %d' % i)		
		else: ax.plot(sink.tnorm(),sink.mdot[i,:]/mdotB()) #,label='ID: %d' % i)		
	ax.set_xlabel(r'$\mathbf{ t/t_{\rm{BH}} }$',fontweight='bold',fontsize='xx-large')
	#second x axis
	ax2 = ax.twiny()
	ax2.set_xlabel(r'$\mathbf{ t/t_{\rm{ABH}} }$',fontweight='bold',fontsize='xx-large')
	ax2.plot(tBH_to_tBHA(sink.tnorm(),args.str_beta),sink.mdot_vcorr[i,:]/mdotB(),visible=False)		
	#y label, left vertical panels
	ax.set_ylabel(r'Log $\mathbf{ \dot{M}/\dot{M}_B }$',fontweight='bold',fontsize='xx-large')
	ax.set_yscale('log')
	if corr: lab= 'Model: %s, corrected' % args.str_beta
	else: lab= 'Model: %s' % args.str_beta
	ax.text(ax.get_xlim()[1]*0.01,ax.get_ylim()[1]*0.9,lab,fontweight='bold',fontsize='large',ha='left',va='top')
	#ax.legend(loc=(1.01,0),ncol=4) #,fontsize='small'
	if corr: name='all-rates-corrected-%s.png' % args.str_beta
	else: name='all-rates-%s.png' % args.str_beta
	#ax.set_xlim(0,20) 
	plt.savefig(os.path.join(os.path.dirname(args.master_sink),name))
	plt.close()
Example #5
0
def plot_nmad(master,label):
	kwargs= dict(labargs=dict(fontsize=16,fontweight='bold'),\
					xtickargs=dict(fontsize=13),\
					ytickargs=dict(fontsize=16),\
					legargs=dict(fontsize=12))
	matplotlib.rcParams['xtick.labelsize'] = kwargs['xtickargs']['fontsize']
	matplotlib.rcParams['ytick.labelsize'] = kwargs['ytickargs']['fontsize']
	#fig,axes=plt.subplots(1,3,sharey=True)
	fig,ax= plt.subplots()
	x,y= master.med/mdotB(), master.nmad/mdotB()
	ax.scatter(x,y,s=50,c='b') #master.med/master.med.max())
	ax.set_yscale('log')
	ax.set_xscale('log')
	ax.set_xlim(x.min()/2,x.max()*2)
	ax.set_ylim(y.min()/2,y.max()*2)
	if args.xlim and args.ylim:
		ax.set_xlim(args.xlim[0],args.xlim[1])
		ax.set_ylim(args.ylim[0],args.ylim[1])
	ax.set_xlabel(r'Median($\dot{M}/\dot{M}_B$)',**kwargs['labargs'])
	ax.set_ylabel(r'Med[|$\dot{M}$ - Med($\dot{M}$)|]/$\dot{M}_B$',**kwargs['labargs'])
	ax.set_title(r'NMAD, $\beta_0$ = ' + label,**kwargs['labargs'])
	plt.savefig('nmad_beta%s.png' % label)
	plt.close()
Example #6
0
def steady_rates(mdotData,timeData,steady_wid,steady_end,units_tBH=True,fill_nan=True,str_beta=None,median=True):
	'''returns 64 length array of time averaged mdots for each sink
	if data does not exist in steady_wid fills with np.nan'''
	assert(units_tBH)
	assert(mdotData.shape[0] == 64)
	imin=np.where(timeData >= steady_end-steady_wid)[0].min()
	imax=np.where(timeData <= steady_end)[0].max()
	ind=range(imin,imax+1)
	try:
		if str_beta is not None:
			# plot median and mean mdot on same panel
			plt.plot(timeData,np.median(mdotData,axis=0)/mdotB(),'b-',label='median')
			plt.plot(timeData,np.mean(mdotData,axis=0)/mdotB(),'g-',label='mean')
			# Get bootstraps using mdot over sinks at each time pt
			med= bootstrap2(mdotData[:,ind]/mdotB(),str_beta, on_median=True)
			mean= bootstrap2(mdotData[:,ind]/mdotB(),str_beta, on_median=False)
			xvals=[timeData[ind].min(),timeData[ind].max()]
			plt.fill_between(xvals,med['low'],med['hi'],color='b',alpha=0.4)
			plt.fill_between(xvals,mean['low'],mean['hi'],color='g',alpha=0.4)
			print 'mdotData.shape=',mdotData.shape,'np.mean(mdotData,axis=0).shape=',np.mean(mdotData,axis=0).shape
			plt.legend(loc=0)
			plt.yscale('log')
			plt.savefig('medmean_%s.png' % str_beta)
			plt.close()
			# Also store these to text file
			fin=open('bootstrap_2.txt','a')
			fin.write('#beta sample_med -booterr +booterr sample_mean -booterr +booterr\n')
			fin.write('%s %.5g %.5g %.5g %.5g %.5g %.5g\n' % \
						(str_beta,med['sample_med'],np.abs(med['med']-med['low']),np.abs(med['med']-med['hi']),\
							 mean['sample_mean'],np.abs(mean['med']-mean['low']),np.abs(mean['med']-mean['hi'])))
			fin.close()
			# indiv sink, median mean in steady state
			#for sid in [0,10,20,30,55]:
			#	plt.plot(timeData[ind],mdotData[sid,ind]/mdotB(),'k-')
			#	xvals=[timeData[ind].min(),timeData[ind].max()]
			#	plt.plot(xvals,[np.median(mdotData[sid,ind])/mdotB()]*2,'b-',label='median')
			#	plt.plot(xvals,[np.mean(mdotData[sid,ind])/mdotB()]*2,'g-',label='mean')
			#	plt.legend(loc=0)
			#	plt.yscale('log')
			#	plt.savefig('medmean_sid%d_%s.png' % (sid,str_beta))
			#	plt.close()
			# Make plots showing rms fluctuation for individual sink
			#for sid in [0,10,20,30,55]:
			#	plt.plot(timeData[ind],mdotData[sid,ind]/mdotB(),'b-')
			#	xvals=[timeData[ind].min(),timeData[ind].max()]
			#	med= np.median(mdotData[sid,ind])/mdotB()	
			#	std= np.std(mdotData[sid,ind]/mdotB() - med)
			#	plt.plot(xvals,[med]*2,'k--',label='median')
			#	plt.plot(xvals,[med+std]*2,'r--',label='+std')
			#	plt.plot(xvals,[med-std]*2,'r--',label='-std')
			#	plt.plot(xvals,[med+2*std]*2,'g--',label='+2std')
			#	plt.plot(xvals,[med-2*std]*2,'g--',label='-2std')
			#	plt.legend(loc=0)
			#	plt.yscale('log')
			#	plt.savefig('std_indivsink_sid%d_%s' % (sid,str_beta))
			#	plt.close()
			# Compute median 1-sigma fluctuation for all sinks, bootstrap the errors
			mdot= np.log10(mdotData[:,ind]/mdotB())
			med= np.percentile(mdot,q=50.,axis=1)
			sig_sink={}
			for key,q in zip(['low','hi'],[15.8,84.2]):
				sig_sink[key]= np.abs(med - np.percentile(mdot,q=q,axis=1))
				assert(len(sig_sink[key]) == 64)
				#sig_sink[key]= np.median(sig_sink[key])
			#one_sigma= 1.*np.std(mdot.T - med,axis=0)
			# take median of one_sigmas and bootstrap it for error
			#med= np.median(one_sigma)
			#d_boots,final,std_pdf= bootstrap(one_sigma,str_beta,print_results=False)
			print "INDIV SINK MEDIAN 1-SIGMA  = percentile(log10(mdot/mdotB)) then median over sinks: $median^{+q75}_{-q25}$"
			print "%s: $^{+%.8f}_{-%.8f}$" % (str_beta,np.median(sig_sink['hi']),np.median(sig_sink['low']))
			for sid in [0,4,20,42,55,63]:
				plt.plot(timeData[ind],np.log10(mdotData[sid,ind]/mdotB()),'b-')
				xvals=[timeData[ind].min(),timeData[ind].max()]
				plt.fill_between(xvals,med[sid]-sig_sink['low'][sid],med[sid]+sig_sink['hi'][sid],color='b',alpha=0.4)
				plt.savefig('onesig_sid-%d_%s.png' % (sid,str_beta))
				plt.close()
			#a,b,c=plt.hist(two_sigmas)
			#plt.plot([med]*2,[0,np.max(a)],'b--',label='median')
			#plt.plot([final['med']-final['med_low']]*2,[0,np.max(a)],'r--',label='- err median')
			#plt.plot([final['med']+final['med_hi']]*2,[0,np.max(a)],'r--',label='+ err median')
			#plt.legend(loc=0)
			#plt.savefig('twosigma_indivsink_%s' % str_beta)
			#plt.close()
		if median:
			return np.median(mdotData[:,ind],axis=1)
		else:
			print '----WARNING----: MEAN over steady state, bool_median=',median
			return np.mean(mdotData[:,ind],axis=1)
	except IndexError:
		print 'WARNING: no data between %.1f < t/tBH < %.1f' % (steady_end-steady_wid,steady_end)
		return np.empty(mdotData.shape[0])*np.nan 
def errorbars_vs_beta2(final64,use_rms_beta=True,name='test.png'):
	'''all mdot quantities are in units of mdot/mdotB'''
	sns.set_style('ticks') #,{"axes.facecolor": ".97"})
	sns.set_palette('colorblind')
	c_med='k' #median
	c_mean= sns.color_palette()[0] #'b'
	c_bhline= sns.color_palette()[1] #'g'
	c_aaron=sns.color_palette()[2] #error on median box 'r'
	c_mark= sns.color_palette()[3] #'pink'
	#kwargs
	laba=dict(fontweight='bold',fontsize=dFS)
	kwargs_axtext=dict(fontweight='bold',fontsize=FS,va='top')
	# orig final measure, REPLACED BY bootstrap_PDF.txt
	#med,med_low,med_hi,std_low,std_hi,yax_val,rms_beta,med_beta,name= put_errbars_in_arrays_linear(final64)
	# MEDIAN, bootstrap PDF
	bPDF= get_measurment('boot_PDF')
	bPDF= add_to_measurement(bPDF)
	# MEAN, bootstrap 2
	b2= get_measurment('boot_2')
	b2= add_to_measurement(b2)
	# get rms_beta
	rms_beta= bPDF['rms_beta']
	#marks results
	rmdot0= 0.0166
	# Values when submitted to MNRAS
	#mark_norm_mdot0=dict(median_sim=0.35,median_pred_256=0.36,err_median_pred_256=0.1,\
	#					 mean_pred_256=1.26,err_mean_pred_256=0.1,\
	#					 mean_sim=0.9,err_mean_sim=0.1) # 0.1 is guess
	# Values for revision, after fitting marks table 1
	mark_norm_mdot0=dict(median_sim=0.35,median_pred_256=0.36,err_median_pred_256=0.106,\
						 mean_pred_256=1.26,err_mean_pred_256=0.100,\
						 mean_sim=0.9,err_mean_sim=0.1) # 0.1 is guess
	mark_norm_mdotB={}
	for key in mark_norm_mdot0.keys():
		mark_norm_mdotB[key]= mark_norm_mdot0[key]* 4/np.exp(1.5)/5.**3
	#special figure for different sized subplots
	fig = plt.figure(figsize=(10,6)) 
	gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1])
	fig.subplots_adjust(wspace=0.05)
	ax=[0,0] 
	ax[0] = plt.subplot(gs[0])
	ax[1] = plt.subplot(gs[1])
	#B != 0 points go on left side
	#ax[0].errorbar(rms_beta[:-2],med[:-2]/mdotB(),yerr=[med_low[:-2]/mdotB(),med_hi[:-2]/mdotB()], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med,label=r'This Study (Median)')
	# My Magnetic Points
	# median
	#ax[0].errorbar(rms_beta[:-2],med[:-2]/mdotB(),yerr=[med_low[:-2]/mdotB(),med_hi[:-2]/mdotB()], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)')
	ax[0].errorbar(bPDF['rms_beta'][:-2],bPDF['med'][:-2],yerr=[bPDF['med_low'][:-2],bPDF['med_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)')
	ax[0].errorbar(bPDF['rms_beta'][:-2],bPDF['med'][:-2],yerr=[bPDF['med_low'][:-2],bPDF['med_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med,label='Median')
	#ax[0].errorbar(b2['rms_beta'][:-2],b2['med'][:-2],yerr=[b2['med_low'][:-2],b2['med_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec='b',c='b',label='boot 2 median')
	# mean
	ax[0].errorbar(b2['rms_beta'][:-2],b2['mean'][:-2],yerr=[b2['mean_low'][:-2],b2['mean_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mean,c=c_mean,label='Mean')
	#just for legend, plot some junk with right colors for mine and marks
	#ax[0].plot([5,6],med[-2:],c=c_med,visible=False,label=r'This Study (Median $\mathbf{Log_{\rm{10}} \,\, \dot{M} }$)')
	#ax[0].plot([5,6],med[-2:],c=c_mark,visible=False,label='Krumholz et al. (2006)')
	#aarons
	cont_beta=np.logspace(-3,1,num=50)
	ax[0].plot(cont_beta,lee_parallel(cont_beta,b_norm=True),c=c_aaron,ls='--',lw=2,label='Lee et al. (2014)')
	#print useful number for paper
	#print 'ratio of mdot to (mdot_perp+mdot_par)/2 is: betarms,mdot,mdotpar,mdot/mdotpar'
	#for myb,mymdot,mdotpar in zip(rms_beta[:-2],med[:-2],np.log10(lee_parallel(rms_beta[:-2]))): print myb,mymdot,mdotpar,10**(mdotpar)/10**(mymdot) 
	#mdot BH
	ax[0].plot(ax[0].get_xlim(),[mdotBH()/mdotB()]*2,c=c_bhline,ls='--',lw=2)
	ax[0].text(1e-2,mdotBH()/mdotB(),r'$\mathbf{ \dot{M}_{BH} }$',verticalalignment='bottom',**text) #,transform=ax[0].transAxes)
	#ax[0].text(1e-2,np.log10(mdotBH()),r'$\mathbf{ \dot{M}_{BH} }$',color=c_bhline,**kwargs_ax[0].ext)
	#B = 0 points go on right side
	ax[1].plot(range(10),visible=False)
	#Marks prediction
	ax[1].errorbar(4,mark_norm_mdotB['median_pred_256'],yerr=mark_norm_mdotB['err_median_pred_256'],fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)')
	#ax[1].errorbar(4,mark_norm_mdotB['mean_pred_256'],yerr=mark_norm_mdotB['err_mean_pred_256'],fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)')
	ax[1].errorbar(4,mark_norm_mdotB['mean_sim'],yerr=mark_norm_mdotB['err_mean_sim'],fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)')
	#my hydro pts
	#ax[1].errorbar([5,6],med[-2:]/mdotB(),yerr=[med_low[-2:]/mdotB(),med_hi[-2:]/mdotB()], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med)
	ax[1].errorbar([5,6],bPDF['med'][-2:],yerr=[bPDF['med_low'][-2:],bPDF['med_hi'][-2:]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med)
	#ax[1].errorbar([9,10],b2['med'][-2:],yerr=[b2['med_low'][-2:],b2['med_hi'][-2:]], fmt='o',ms=6,mew=2.,mfc='none',mec='r',c='r')
	ax[1].errorbar([5,6],b2['mean'][-2:],yerr=[b2['mean_low'][-2:],b2['mean_hi'][-2:]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mean,c=c_mean)
	#mdotBH and same for hydro limit of lee14
	ax[1].plot(ax[1].get_xlim(),[mdotBH()/mdotB()]*2,c=c_bhline,ls='--',lw=2)
	ax[1].plot([0.5,8.5],[mdotBH()/mdotB()]*2,c=c_aaron,ls='--',lw=2) 
	#finish labeling
	for i in range(2): 
		ax[i].set_ylim(6e-4,1e-2)
	ax[0].set_xscale('log')
	ax[0].set_xlim(8e-3,1e1)
	#ax[1].set_xlim(2,1e1)
	ylab= ax[0].set_ylabel(r'$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$',**laba)
	xlab= fig.text(0.5, 0., r'$\mathbf{ \beta_{turb} }$', ha='center', **laba) #ax[0].set_xlabel(r'$\mathbf{ \beta_{rms} }$',**laba)
	ax[0].legend(loc=4,fontsize=FS,frameon=True,fancybox=True)
	#reorganize legend
	handles, labels = ax[0].get_legend_handles_labels()
	handles= [handles[-1],handles[-2],handles[1],handles[0]]
	labels= [labels[-1],labels[-2],labels[1],labels[0]]
	ax[0].legend(handles, labels,loc=4,frameon=True,fancybox=True,fontsize=FS)
	#remove top and right axis lines
	#sns.despine()
	#remove spines and ticks between ax and ax2
	#ax[0].spines['right'].set_visible(False)
	#ax[1].spines['left'].set_visible(False)
	for i in range(2): ax[i].tick_params(axis='both', which='major', labelsize=FS)
	ax[1].set_yticks([])
	#add slashes indicating break in axis
	d = .015 # how big to make the diagonal lines in axes coordinates
	# arguments to pass plot, just so we don't keep repeating them
	kwargs = dict(transform=ax[0].transAxes, color='k', clip_on=False)
	ax[0].plot((1-d,1+d), (-d,+d), **kwargs)
	ax[0].plot((1-d,1+d),(1-d,1+d), **kwargs)
	kwargs.update(transform=ax[1].transAxes)  # switch to the bottom axes
	ax[1].plot((-d*3,+d*3), (1-d,1+d), **kwargs)
	ax[1].plot((-d*3,+d*3), (-d,+d), **kwargs)
	#put infinity on 2nd axis
	ax[1].set_xticks([])
	ax[1].set_xlabel(r'$\mathbf{ \infty }$',**laba)
	#plt.tick_params(axis='both', which='major', labelsize='large')
	# show only some of yaxis ticks
	#ax[0].yaxis.tick_left()
	ax[1].yaxis.tick_right()
	# y log scale
	for i in range(2): ax[i].set_yscale('log')
	#SAVE IS BROKEN, save manually
	plt.tight_layout()
	#plt.show()
	#save
	name='testing.png'
	plt.savefig(name, bbox_extra_artists=[xlab,ylab], bbox_inches='tight',dpi=150)
	print 'wrote %s' % name
def errorbars_vs_beta2(final64, use_rms_beta=True):
    """all mdot quantities are in units of mdot/mdotB"""
    sns.set_style("ticks")  # ,{"axes.facecolor": ".97"})
    sns.set_palette("colorblind")
    c_med = "k"  # median
    c_bhline = sns.color_palette()[0]  #'b'
    c_aaron = sns.color_palette()[2]  # error on median box 'r'
    c_mark = sns.color_palette()[1]  #'g'
    # kwargs
    laba = dict(fontweight="bold", fontsize="xx-large")
    kwargs_axtext = dict(fontweight="bold", fontsize="x-large", va="top")
    # final measure
    med, med_low, med_hi, std_low, std_hi, yax_val, rms_beta, med_beta, name = put_errbars_in_arrays_linear(final64)
    # marks results
    rmdot0 = 0.0166
    mark_norm_mdot0 = dict(median_sim=0.35, median_pred_256=0.36, err_median_pred_256=0.1)
    mark_norm_mdotB = {}
    for key in mark_norm_mdot0.keys():
        mark_norm_mdotB[key] = mark_norm_mdot0[key] * 4 / np.exp(1.5) / 5.0 ** 3
        # special figure for different sized subplots
    fig = plt.figure()
    gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1])
    fig.subplots_adjust(wspace=0.05)
    ax = [0, 0]
    ax[0] = plt.subplot(gs[0])
    ax[1] = plt.subplot(gs[1])
    # B != 0 points go on left side
    ax[0].errorbar(
        rms_beta[:-2],
        med[:-2] / mdotB(),
        yerr=[med_low[:-2] / mdotB(), med_hi[:-2] / mdotB()],
        fmt="o",
        ms=6,
        mew=2.0,
        mfc="none",
        mec=c_mark,
        c=c_mark,
        label="Krumholz et al. (2006)",
    )
    ax[0].errorbar(
        rms_beta[:-2],
        med[:-2] / mdotB(),
        yerr=[med_low[:-2] / mdotB(), med_hi[:-2] / mdotB()],
        fmt="o",
        ms=6,
        mew=2.0,
        mfc="none",
        mec=c_med,
        c=c_med,
        label=r"This Study (Median)",
    )
    # just for legend, plot some junk with right colors for mine and marks
    # ax[0].plot([5,6],med[-2:],c=c_med,visible=False,label=r'This Study (Median $\mathbf{Log_{\rm{10}} \,\, \dot{M} }$)')
    # ax[0].plot([5,6],med[-2:],c=c_mark,visible=False,label='Krumholz et al. (2006)')
    # aarons
    cont_beta = np.logspace(-3, 1, num=50)
    ax[0].plot(cont_beta, lee_parallel(cont_beta, b_norm=True), c=c_aaron, ls="--", lw=2, label="Lee et al. (2014)")
    # print useful number for paper
    print "ratio of mdot to (mdot_perp+mdot_par)/2 is: betarms,mdot,mdotpar,mdot/mdotpar"
    for myb, mymdot, mdotpar in zip(rms_beta[:-2], med[:-2], np.log10(lee_parallel(rms_beta[:-2]))):
        print myb, mymdot, mdotpar, 10 ** (mdotpar) / 10 ** (mymdot)
    # mdot BH
    ax[0].plot(
        ax[0].get_xlim(), [mdotBH() / mdotB()] * 2, c=c_bhline, ls="--", lw=2, label=r"$\mathbf{ \dot{M}_{BH} }$"
    )
    # ax[0].text(1e-2,np.log10(mdotBH()),r'$\mathbf{ \dot{M}_{BH} }$',color=c_bhline,**kwargs_ax[0].ext)
    # B = 0 points go on right side
    ax[1].plot(range(10), visible=False)
    # Marks prediction
    ax[1].errorbar(
        4,
        mark_norm_mdotB["median_pred_256"],
        yerr=mark_norm_mdotB["err_median_pred_256"],
        fmt="o",
        ms=6,
        mew=2.0,
        mfc="none",
        mec=c_mark,
        c=c_mark,
        label="Krumholz et al. (2006)",
    )
    # my hydro pts
    ax[1].errorbar(
        [5, 6],
        med[-2:] / mdotB(),
        yerr=[med_low[-2:] / mdotB(), med_hi[-2:] / mdotB()],
        fmt="o",
        ms=6,
        mew=2.0,
        mfc="none",
        mec=c_med,
        c=c_med,
    )
    # mdotBH and same for hydro limit of lee14
    ax[1].plot(ax[1].get_xlim(), [mdotBH() / mdotB()] * 2, c=c_bhline, ls="--", lw=2)
    ax[1].plot([0.5, 8.5], [mdotBH() / mdotB()] * 2, c=c_aaron, ls="--", lw=2)
    # finish labeling
    for i in range(2):
        ax[i].set_ylim(6e-4, 1e-2)
    ax[0].set_xscale("log")
    ax[0].set_xlim(8e-3, 1e1)
    # ax[1].set_xlim(2,1e1)
    ylab = ax[0].set_ylabel(r"$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$", **laba)
    xlab = fig.text(
        0.5, 0.0, r"$\mathbf{ \beta_{rms} }$", ha="center", **laba
    )  # ax[0].set_xlabel(r'$\mathbf{ \beta_{rms} }$',**laba)
    ax[0].legend(loc=4, fontsize="medium", frameon=True, fancybox=True)
    # reorganize legend
    handles, labels = ax[0].get_legend_handles_labels()
    handles = [handles[-1], handles[-2], handles[0], handles[1]]
    labels = [labels[-1], labels[-2], labels[0], labels[1]]
    ax[0].legend(handles, labels, loc=4, fontsize="medium", frameon=True, fancybox=True)
    # remove top and right axis lines
    # sns.despine()
    # remove spines and ticks between ax and ax2
    # ax[0].spines['right'].set_visible(False)
    # ax[1].spines['left'].set_visible(False)
    for i in range(2):
        ax[i].tick_params(axis="both", which="major", labelsize="large")
    ax[1].set_yticks([])
    # add slashes indicating break in axis
    d = 0.015  # how big to make the diagonal lines in axes coordinates
    # arguments to pass plot, just so we don't keep repeating them
    kwargs = dict(transform=ax[0].transAxes, color="k", clip_on=False)
    ax[0].plot((1 - d, 1 + d), (-d, +d), **kwargs)
    ax[0].plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs)
    kwargs.update(transform=ax[1].transAxes)  # switch to the bottom axes
    ax[1].plot((-d * 3, +d * 3), (1 - d, 1 + d), **kwargs)
    ax[1].plot((-d * 3, +d * 3), (-d, +d), **kwargs)
    # put infinity on 2nd axis
    ax[1].set_xticks([])
    ax[1].set_xlabel(r"$\mathbf{ \infty }$", fontsize="large")
    # plt.tick_params(axis='both', which='major', labelsize='large')
    # show only some of yaxis ticks
    # ax[0].yaxis.tick_left()
    ax[1].yaxis.tick_right()
    # y log scale
    for i in range(2):
        ax[i].set_yscale("log")
    # save
    plt.savefig(
        os.path.join(args.outdir, "errorbars_v_brms2.png"), bbox_extra_artists=[xlab, ylab], bbox_inches="tight"
    )
def model_vs_errorbars2(final64):
    """final64 is linear mdots now
	put model names on y axis, error bars on x axis"""
    sns.set_style("ticks")  # ,{"axes.facecolor": ".97"})
    sns.set_palette("colorblind")
    c_med = "k"  # median
    c_sem = sns.color_palette()[2]  # error on median box 'r', bootstraped
    c_std = sns.color_palette()[0]  # std dev of pdf 'b', percentiled
    # kwargs
    laba = dict(fontweight="bold", fontsize="xx-large")
    kwargs_axtext = dict(fontweight="bold", fontsize="x-large", va="top", ha="left")
    # mapping
    addtext = {}
    addtext["bInf"] = r"$\mathbf{ \beta_0 = \infty }$ (1)"
    addtext["bInfsd3"] = r"$\mathbf{ \beta_0 = \infty }$ (2)"
    addtext["b100"] = r"$\mathbf{ \beta_0 = 100 }$"
    addtext["b10"] = r"$\mathbf{ \beta_0 = 10 }$"
    addtext["b1"] = r"$\mathbf{ \beta_0 = 1 }$"
    addtext["b1e-1"] = r"$\mathbf{ \beta_0 = 0.1 }$"
    addtext["b1e-2"] = r"$\mathbf{ \beta_0 = 0.01 }$"
    # plot
    fig, ax = plt.subplots()
    ax.set_ylim(0, 8)
    ax.set_xlim(1e-4, 2e-2)
    ylabels = [item.get_text() for item in ax.get_yticklabels()]  # y tick labels
    meds, med_lows, med_his, std_lows, std_his, yax_vals, rms_betas, med_betas, names = put_errbars_in_arrays_linear(
        final64
    )
    for med, med_low, med_hi, std_low, std_hi, yax_val, rms_beta, med_beta, name in zip(
        meds, med_lows, med_his, std_lows, std_his, yax_vals, rms_betas, med_betas, names
    ):
        if name == names[-1]:
            box_and_whisker(
                ax,
                med / mdotB(),
                (med_low / mdotB(), med_hi / mdotB()),
                (std_low / mdotB(), std_hi / mdotB()),
                yax_val,
                legend_lab_ea_color=True,
            )
        else:
            box_and_whisker(
                ax, med / mdotB(), (med_low / mdotB(), med_hi / mdotB()), (std_low / mdotB(), std_hi / mdotB()), yax_val
            )
        ylabels[yax_val] = addtext[name]
    ax.set_yticklabels(ylabels, fontsize="large")
    xlab = ax.set_xlabel(r"$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$", **laba)
    ylab = ax.set_ylabel("Simulation", **laba)
    ax.legend(loc=4, fontsize=10, frameon=True, fancybox=True)
    plt.tick_params(axis="x", which="major", labelsize="large")
    # turn off horizontal grid lines
    ax.yaxis.grid(False)
    ax.xaxis.grid(True)
    ax.set_xscale("log")
    ax.yaxis.tick_left()
    # ax.set_yticks([])
    # remove top and right axis lines
    # sns.despine()
    # save
    plt.savefig(
        os.path.join(args.outdir, "models-vs-errorbars2.png"), bbox_extra_artists=[xlab, ylab], bbox_inches="tight"
    )
raise ValueError
model_v_model_cdfs_pdfs(final_pdf["arr"], final_pdf["bins"], final_pdf["cdf"], final_pdf["pdf"], args, nsinks=nsinks)
# final measurement
# print 'Quantities using mdot= Log10(Mdot)'
# final_meas= stats.final_measurement(final_pdf['arr'])

# This gives correct Mdot/MdotB final measurements BUT the values CAN be computed from above log10(Mdot) like this
# q25,q50,q75 = above q25,q50,q75 / mdotB
# define: y= log10(mdot), x= mdot/mdotB
# then x = exp(y*ln10)/mdotB
# so sigma_x = sigma_y* exp(y*ln10)*ln10/mdotB)
# doing that agrees with numbers output below
final_pdf_linear, final_pdf_log = {}, {}
for key in final_pdf["arr"].keys():
    # final_pdf_linear[key]= np.log10( np.power(10,final_pdf['arr'][key])/ mdotB() )
    final_pdf_linear[key] = np.power(10, final_pdf["arr"][key]) / mdotB()
    final_pdf_log[key] = np.log10(np.power(10, final_pdf["arr"][key]) / mdotB())
print "Quantities using mdot/mdotB, where mdotB=", mdotB()
final_meas_linear = stats.final_measurement(final_pdf_linear)
print "Quantities using log10(mdot/mdotB), where mdotB=", mdotB()
final_meas_log = stats.final_measurement(final_pdf_log)

exit("exiting after print final mean measurements")

# The plots below used to work when mdot = mdot without mdotB normalization
# They don't know but can recreate by going to appropriate commmit #
for key in final_pdf_linear.keys():
    final_pdf_linear[key] = final_pdf_linear[key] * mdotB()

# plot model name vs. errobars, do for both final64 and final128
model_vs_errorbars(final_meas)
Example #11
0
master={}
for sink_dir,str_beta in zip(args.dirs,args.labels):
	fin=open(os.path.join(sink_dir,'master_sink.pickle'),'r')
	master[str_beta]=pickle.load(fin)
	master[str_beta].sink_xyz(args.init_sink)
	fin.close()
sizes=range(len(args.labels))
for i,str_beta in enumerate(args.labels):
	sizes[i]= master[str_beta].mdotTime.shape[0]
junk=args.labels[0]
x= np.empty( (master[junk].mdot.shape[0],)+(max(sizes),)+(len(args.labels),))*np.nan
y=x.copy()
for i,str_beta in enumerate(args.labels):
	time=(master[str_beta].mdotTime-master[str_beta].mdotTime[0])/get_tBH()
	x[:,:sizes[i],i]= np.transpose(np.repeat(time[:,np.newaxis], x.shape[0], axis=1)) #(npts,) array to (64,npts,)
	y[:,:sizes[i],i]= master[str_beta].mdot/mdotB()
titles= np.core.defchararray.add(np.array(['sid ']*len(master[str_beta].init.sid)),master[str_beta].init.sid.astype(str))
nrow,ncol=8,8
multi_plot(nrow,ncol,x,y,titles=titles,logy=True,ylim=args.ylim)

print 'exiting after correlated sinks'
sys.exit(0)

#nmad plot
print 'plotting nmad'
for sink_dir,label in zip(args.dirs,args.labels):
	fin=open(os.path.join(sink_dir,'master_sink.pickle'),'r')
	master=pickle.load(fin)
	fin.close()
	plot_nmad(master,label)