def run(basename, prof): read_scale() # read in half light radius, Nu0[munit/Rscale^2], Nu0[munit/pc^2], munit print(gp.files.get_scale_file(0)) A = np.loadtxt(gp.files.get_scale_file(0), unpack=False, skiprows=1) gp.rstarhalf = A[0] # halflight radius (all tracer part.s), stored first ("0") # read in radial bins radii, binmin, binmax, nudat1, nuerr1 = gh.readcol5(gp.files.nufiles[0]) gp.xipol = radii*gp.rstarhalf # [pc] maxr = max(radii) radii = np.hstack([radii, 2*maxr, 4*maxr, 8*maxr]) gp.xepol = radii*gp.rstarhalf models = read_models() # use physical representation for profiles profs = [] for i in range(len(models)): M = models[i] tmp_rho = M[0:gp.nepol] off = gp.nipol tmp_nu = M[off:off+gp.nepol] off += gp.nipol tmp_beta = M[off:off+gp.nbeta] # TODO: include handling of N populations try: tmp_prof = physical(gp.xepol, prof, pop, tmp_rho, tmp_nu, tmp_beta) profs.append(tmp_prof) except Exception as detail: print('handling error in profile', detail) continue sortedprofs = gh.sort_profiles_binwise(np.array(profs).transpose()) Mmin, M95lo, M68lo, Mmedi, \ M68hi, M95hi, Mmax = gh.get_median_1_2_sig(sortedprofs) # plot ranges if prof=='rho' or prof=='nu': gpl.startlog(); gpl.xscale('log') else: gpl.start() plot_labels(prof, pop) if prof=='nr': gpl.xscale('log') # gpl.xlim([0.,2.*gp.xipol[-1]]) gp.xipol = np.hstack([gp.xipol[0]/2., gp.xipol, gp.rinfty*gp.xipol[-1]]) if prof=='nu' or prof=='sig': plot_data(gp.xipol, prof, pop) plot_analytic(gp.xepol, prof, pop) radfill = gp.xepol if prof == 'sig': radfill = gp.xipol fill_nice(radfill, M95lo, M68lo, Mmedi, M68hi, M95hi) gpl.savefig(basename+'/prof_'+prof+'_'+str(pop)+'.png') gpl.ion(); gpl.show(); gpl.ioff() return
return r_star1, r_star2 print('input: ', basename) M = np.loadtxt(basename+'prof'+prof+str(pop),skiprows=0,unpack=False) print('len (M) = ',len(M)) radii = M[0] profs = M[1:] # all saved profiles #profs = M[-10:] #profs = M[-10000::10] # only the last 1e5 profiles, thinned by 10 Mprofbins = np.transpose(profs) newMprofbins = gh.sort_profiles_binwise(Mprofbins) Mmin, M95lo, M68lo, Mmedi, M68hi, M95hi, Mmax = gh.get_median_1_2_sig(newMprofbins) if prof == 'nu': Mmax=rho_INT_Rho(radii, Mmax) M95hi=rho_INT_Rho(radii, M95hi) M68hi=rho_INT_Rho(radii, M68hi) Mmedi=rho_INT_Rho(radii, Mmedi) M68lo=rho_INT_Rho(radii, M68lo) M95lo=rho_INT_Rho(radii, M95lo) Mmin=rho_INT_Rho(radii, Mmin) # def extralast(rad, prof): # tck = splrep(rad[:-1],np.log(prof[:-1]),k=2,s=0.1) # prof = np.hstack([prof[:-1],np.exp(splev(rad[-1],tck))]) # return prof