Beispiel #1
0
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
Beispiel #2
0
                                        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),