def fac_s_eff_s(dl,mass_Chirp,thetas=None,r0 = 1527.): ''' Purpose: Use the MC result of Theta's to evalute the selection effect factor given the specific value of dl and mass_Chrip. Parameter -------- dl: The luminosity distance mass_Chirp: The Chirp mass theta: The result of the Thetas distribution. If None, will MC by it self. Return -------- The possibility Note -------- The zs is calculated correspondingly from the dl, based on Om=0.3 and H0=70. ''' if thetas is None: thetas = random_Theta() zs = solve_z(dl) rhos = 8.*thetas * r0/dl * ((1+zs)*mass_Chirp/1.2)**(5/6.) ratio = len(rhos[rhos>8])/float(len(rhos)) return ratio
0.17, size=mass_Chirp.shape) m1_mu = np.log(m1) # 0_med np.log(mu_star) = mu m1_sigstar = np.exp( m_noise_level ) #Not useful in the generate generation, but useful in understand the upper lower level. m1_obs = np.random.lognormal(m1_mu, m_noise_level, size=m1.shape) #Generating for the mu as med, m1_sig_fake = m1_obs * m_noise_level #The fake "sigma", (m1_obs * m_noise_level) and (m1 * m_noise_level) # prior = select_effect(m1_obs) # prior_true = fac_s_eff_v(dl=dl, mass_Chirp=mass_Chirp, thetas=thetas) # prior = prior_true prior = fac_s_eff_v(dl=dl_noised, mass_Chirp=mass_Chirp_noised, thetas=thetas) prior[prior == 0] = 0.001 sf_factor = 1 / prior z_inf = solve_z(np.array(dl_noised)) sf_sigma = np.log(sf_factor) / 3 sf_factor = sf_factor / np.exp(sf_sigma**2 / 2) print "m1_obs.min(), m1_obs.max():", m1_obs.min(), m1_obs.max() #mini=fmin(posterior,para_ini,maxiter=1000, args=(m1_obs, m_noise_level, sf_factor,z_inf)) ndim, nwalkers = 4, 70 pos = [[a0, a1, mbh_max, mbh_min] + 1e-4 * np.random.randn(ndim) for i in range(nwalkers)] step_total = 500. import emcee sampler = emcee.EnsembleSampler( nwalkers, ndim, posterior, args=(m1_obs, m_noise_level, sf_factor, z_inf)) ###the input args() should change sampler.run_mcmc(pos, step_total)
invprior_true, invprior_mean, invprior_median, m1_list, m1_obs_list, dl_list, massChirp_list = [ lines[:, i] for i in range(len(lines.T)) ] #plt.plot(np.log(np.array(m1_obs_list)), np.sqrt(2*np.log(np.array(invprior_mean)/np.array(invprior))),'.') #plt.show() #plt.plot(np.log(1/np.array(dl_list)), np.sqrt(2*np.log(np.array(invprior_mean)/np.array(invprior))),'.') #plt.show() #plt.plot(np.log(np.array(massChirp_list)**(5/6.)), np.sqrt(2*np.log(np.array(invprior_mean)/np.array(invprior))),'.') #plt.show() sigma = np.sqrt(2 * np.log(np.array(invprior_mean) / np.array(invprior_median))) #plt.plot(np.log10(invprior_true), sigma,'.') #plt.show() solve_z = np.vectorize(solve_z) z = solve_z(np.array(dl_list)) plt.scatter(np.log( np.array(dl_list) * (1 / np.array(massChirp_list)**(5 / 6.)) / (1 + z)**(5 / 6.)), sigma, c=m1_obs_list) plt.colorbar() plt.show() for loop in range(1): idx = random.sample(index, 1000) m1 = m1_all[idx] dl = lumi_dis_all[idx] dl_noised = np.random.lognormal(np.log(dl), 0.35, size=dl.shape) mass_Chirp = chirp_mass_all[idx] mass_Chirp_noised = np.random.lognormal(np.log(mass_Chirp),