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