def pdf_for_model_mean_of_many_pdfs(sink, str_beta,mdot_low,mdot_hi, tend=20.,dt=0.1): '''returns mdot pdf of 64*(tend-tbeg)/dt points following Peter's idea Returns: array of mdots for pdf, list of non nan indices of that arraydict of models, each model is a dict of the models it was ttest compared to ''' #corr mdots end_t,end_mach= t_rms_mach_near_end(str_beta) sink.rm_mdot_systematics(end_t,end_mach) #time steady state begins from KS 2 samp stat tbeg= steady_state_begins(str_beta,units_tBH=True) #median accretion rate in 0.1 bins between t=2tBH and t=end n_intervals= get_num_intervals(sink,tbeg,dt, tend=tend) pdfs= np.empty((n_intervals,64))*np.nan for ibin in range(n_intervals): #get 64 steady mdots for this time range pdfs[ibin,:]= steady_rates(sink.mdot_vcorr,sink.tnorm(),dt,tbeg+(ibin+1)*dt,units_tBH=True,fill_nan=True) #mask the array where have nans pdfs= ma.array(pdfs) pdfs.mask= np.isfinite(pdfs) == False #can safely take log10 of rates now pdfs= np.log10(pdfs) #equal log spaced bins covering entire range of mdots bins= np.linspace(np.log10(mdot_low/2),np.log10(mdot_hi*2),num=41) # N bins = num-1 #bins= bins[::-1] #start with smallest number first (most negative) print 'bins= ',bins #bin up data hist_vals= np.empty((n_intervals,len(bins)-1))*np.nan for i in range(n_intervals): if np.any(pdfs.mask[i,:]): continue hist_vals[i,:],b,c=plt.hist(pdfs[i,:],bins=bins) plt.close() hist_vals= ma.array(hist_vals) hist_vals.mask= np.isfinite(hist_vals) == False #compute averaged histogram final_hist= np.round(np.mean(hist_vals,axis=0)).astype(int) #average each bin count over n_intervals, round to nearest count, save as integer #convert histogram into array of values bin_c= (bins[1:]+bins[:-1])/2 final_arr=[] for cnt,c in enumerate(bin_c): final_arr+= [c]*final_hist[cnt] assert(len(final_arr) == final_hist.sum()) pdf,junk1,junk2= plt.hist(final_arr,bins=bins,normed=True) cdf,j1,j2=plt.hist(final_arr,bins=bins,cumulative=True,normed=True) plt.close() try: assert( ((bins[1:]-bins[:-1])*pdf).sum() == 1. ) except AssertionError: print '---- WARNING sum not 1, what is it? ------------ ' print '((bins[1:]-bins[:-1])*pdf).sum()= ',((bins[1:]-bins[:-1])*pdf).sum() #raise AssertionError #return array of values, bins, pdf and cdf return np.array(final_arr),bins,pdf,cdf
#raw_t= master_sink.old_t[-master_sink.tnorm().size:].copy() print "%s" % args.str_beta print "mdotTime, tnorm()" for raw_t,norm in zip(master_sink.mdotTime,master_sink.tnorm()): print raw_t,norm print 'exiting early' sys.exit() #tend print 'model: %s, last t/tBH= %.5f' % (args.str_beta,master_sink.tnorm()[-1]) if False: # print machrms at end t_end= min(20.,master_sink.tnorm()[-1]) i_end= index_before_tBH(master_sink,t_end,units_tBH=True) mach_end= master_sink.f_rms_mach(master_sink.mdotTime[i_end]) print 'model= %s, tsteady/tBH= %.2f, tend/tBH= %.2f, rms Mach end= %.2f' % \ (args.str_beta, steady_state_begins(args.str_beta,True),t_end,mach_end) #corr mdots end_t,end_mach= t_rms_mach_near_end(args.str_beta) master_sink.rm_mdot_systematics(end_t,end_mach) #final PDF final_pdf= dict(arr={},bins={},pdf={},cdf={}) #PDF USING, 64 pdf, over last 2tBH low,hi= low_hi_mdot_all_models() final_pdf['arr'][args.str_beta],final_pdf['bins'][args.str_beta],final_pdf['pdf'][args.str_beta],final_pdf['cdf'][args.str_beta]= pdf_for_model_64_x_N(master_sink,args.str_beta, low,hi,nsinks=64,corr=True,last_2tBH=True,dt=2.) #make plots just_median(master_sink,args) median_and_when_equil_begins(master_sink,args) steady_pdf_cdf(master_sink,args) all_rates(master_sink,args,corr=True) bootstrap_sigma_vs_nsink(final_pdf,args.str_beta) print 'finished'