예제 #1
0
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
예제 #2
0
        gamma_DM    = 1 # cusp

    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))])