Exemplo n.º 1
0
def myloglike(cube, ndim, nparams):
    tmp_profs = Profiles(gp.pops, gp.nipol)
    off = 0

    rho_param = np.array(cube[off:off+gp.nepol])
    if gprio.check_nr(rho_param[2:-1]):
        print('dn/dr too big!')
        return gh.err(0.7)

    tmp_rho = phys.rho(gp.xepol, rho_param)
    if(gprio.check_rho(tmp_rho)):
        print('rho slope error')
        return gh.err(1.)
    tmp_profs.set_rho(tmp_rho[:gp.nipol])
    tmp_profs.set_M(rho_SUM_Mr(gp.xepol, tmp_rho)[:gp.nipol]) # [munit,3D]
    # TODO: mass is set at binmax, not rbin!
    # implement integration routine working with density function
    # based on density parametrization
    # to give mass below rbin
    # TODO: implement above function as gl_project.rho_INT_Mr()
    off += gp.nepol

    nuparstore = []
    for pop in np.arange(gp.pops)+1:
        nu_param = cube[off:off+gp.nepol]
        nuparstore.append(nu_param)
        
        tmp_nu = phys.rho(gp.xepol, nu_param) #  [1], [pc]
        # if gprio.check_nu(tmp_nu):
        #     print('nu error')
        #     return err/2.
        if gp.bprior and gprio.check_bprior(tmp_rho, tmp_nu):
             print('bprior error')
             return gh.err(1.5)
        tmp_profs.set_nu(pop, tmp_nu[:gp.nipol]) # [munit/pc^3]
        off += gp.nepol

        beta_param = np.array(cube[off:off+gp.nbeta])
        tmp_beta = phys.beta(gp.xipol, beta_param)
        if gprio.check_beta(tmp_beta):
            print('beta error')
            return gh.err(2.)
        tmp_profs.set_beta(pop, tmp_beta)
        off += gp.nbeta

        try:
            # beta_param = np.array([0.,0.])
            sig, kap = phys.sig_kap_los(gp.xepol, pop, rho_param, nu_param, beta_param)
            # sig and kap already are on data radii only, so no extension by 3 bins here
        except Exception as detail:
            return gh.err(3.)

        tmp_profs.set_sig_kap(pop, sig, kap)

    # determine log likelihood (*not* reduced chi2)
    chi2 = gc.calc_chi2(tmp_profs, nuparstore)
    # print('found log likelihood = ', -chi2/2.)
    return -chi2/2.   # from   likelihood L = exp(-\chi^2/2), want log of that
Exemplo n.º 2
0
def physical(r0, prof, pop, tmp_rho, tmp_nu, tmp_beta):
    if prof == "rho":
        tmp_prof = phys.rho(r0, tmp_rho)
    elif prof == 'nr':
        tmp_prof = tmp_rho[1:]
    elif prof == "nu":
        tmp_prof = rho_INT_Rho(r0, phys.rho(r0, tmp_nu))
    elif prof == "betastar":
        tmp_prof = phys.mapping_beta_star_poly(r0, tmp_beta)
    elif prof == "beta":
        tmp_prof = phys.beta(r0, tmp_beta)
    elif prof == "sig":
        tmp_sig, tmp_kap = phys.sig_kap_los(r0, pop, tmp_rho, tmp_nu, tmp_beta)
        tmp_prof = tmp_sig
    elif prof == "kap":
        tmp_sig, tmp_kap = phys.sig_kap_los(r0, pop, tmp_rho, tmp_nu, tmp_beta)
        tmp_prof = tmp_kap
    return tmp_prof