def grid_black_hole_companion_population(N_per_axis): P = np.logspace(0.5, 2, N_per_axis) M_star = salpeter_imf(N_per_axis, 2.35, 0.1, 100) M_bh = np.random.uniform(3, 5, N_per_axis) v = np.array([M_bh, M_star]) M_1 = np.max(v, axis=0) M_2 = np.min(v, axis=0) cos_i = np.random.uniform(0, 1, N_per_axis) i = np.arccos(cos_i) params = np.array(list(itertools.product(P, M_1, M_2, i))) P, M_1, M_2, i = params.T # always assume the more massive one is the bh f_1 = np.zeros(M_1.size) f_2 = np.ones(M_1.size) P = P << u.day M_1 = M_1 << u.solMass M_2 = M_2 << u.solMass i = i << u.rad args = (P, M_1, M_2, f_1, f_2, i) return (args, None)
def grid_giant_main_sequence_binary_population(N_per_axis, N_simulation): P = np.logspace(1, 7, N_per_axis) q = np.linspace(0.1, 1, N_per_axis) cos_i = np.linspace(0, 1, N_simulation) i = np.arccos(cos_i) #cos_i = np.array([1.0]) #i = np.arccos(cos_i) M_1 = salpeter_imf(N_simulation, 2.35, 0.1, 100) params = np.array(list(itertools.product(P, q, M_1, i))) P, q, M_1, i = params.T M_2 = q * M_1 # TODO: revisit this assumption? f_1 = 1000 # f_2 = 1 P = P << u.day M_1 = M_1 << u.solMass M_2 = M_2 << u.solMass i = i << u.rad args = (P, M_1, M_2, f_1, f_2, i) return (args, None)
def draw_black_hole_companion_population(N): P = 30 * np.ones(N) * u.day M_1 = salpeter_imf(N, 2.35, 0.1, 100) * u.solMass f_1 = 1.0 * np.ones(N) M_2 = np.random.uniform(3, 5, N) * u.solMass f_2 = 0.0 * np.ones(N) q = M_2 / M_1 cos_i = np.random.uniform(0, 1, N) i = np.arccos(cos_i) * u.rad args = (P, M_1, M_2, f_1, f_2, i) ylabel = r"$\textrm{detection efficiency of black hole companions}$" return (args, ylabel)
def draw_main_sequence_binary_population(N): # We are using the same Ps, qs, etc at each distance trial. P = np.random.lognormal(5.03, 2.28, N) * u.day # Raghavan et al. (2010) q = np.random.uniform(0.1, 1, N) cos_i = np.random.uniform(0, 1, N) i = np.arccos(cos_i) * u.rad M_1 = salpeter_imf(N, 2.35, 0.1, 100) * u.solMass M_2 = q * M_1 # Assume main-sequence systems. f_1 = M_1.value**3.5 f_2 = M_2.value**3.5 args = (P, M_1, M_2, f_1, f_2, i) ylabel = r"$\textrm{detection efficiency of main-sequence binary systems}$" return (args, ylabel)
def draw_hot_jupiter_host_population(N): M_1 = salpeter_imf(N, 2.35, 0.1, 100) * u.solMass f_1 = 1.0 * np.ones(N) M_2 = 10 * np.ones(N) * constants.M_jup.to(u.solMass) f_2 = 0.0 * np.ones(N) q = M_2 / M_1 cos_i = np.random.uniform(0, 1, N) i = np.arccos(cos_i) * u.rad P = np.random.uniform(5, 10, N) * u.day args = (P, M_1, M_2, f_1, f_2, i) ylabel = r"$\textrm{detection efficiency of hot jupiters}$" return (args, ylabel)