def model(theta, R, h=1, Om=0.315, Ol=0.685): from itertools import count, izip # HMF set up parameters - fixed and not setable from config file. expansion = 100 expansion_stars = 160 n_bins = 10000 M_min = 8.5 M_max = 15.5 step = (M_max - M_min) / 100 # or n_bins k_min = -6.0 # ln!!! not log10! k_max = 9.0 # ln!!! not log10! k_step = (k_max - k_min) / n_bins k_range = np.arange(k_min, k_max, k_step) k_range_lin = np.exp(k_range) M_star_min = 8.5 # Halo mass bin range M_star_max = 15.5 step_star = (M_star_max - M_star_min) / 100 mass_range = np.arange(M_min, M_max, step) mass_range_lin = 10.0 ** (mass_range) mass_star_log = np.arange(M_star_min, M_star_max, step_star, dtype=np.longdouble) mass_star = 10.0 ** (mass_star_log) # Setting parameters from config file omegab = 0.0455 # To be replaced by theta omegac = 0.226 # To be replaced by theta omegav = 0.726 # To be replaced by theta sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2, alpha_star, beta_gas, r_t0, r_c0, z, M_bin_min1, M_bin_min2, M_bin_max1, M_bin_max2 = ( theta ) M_bin_min = [M_bin_min1, M_bin_min2] # Expanded according to number of bins! M_bin_max = [M_bin_max1, M_bin_max2] # Expanded according to number of bins! hod_mass = [ (10.0 ** (np.arange(Mi, Mx, (Mx - Mi) / 100, dtype=np.longdouble))) for Mi, Mx in izip(M_bin_min, M_bin_max) ] r_t0 = r_t0 * np.ones(100) r_c0 = r_c0 * np.ones(100) H0 = 70.4 # To be replaced by theta rho_crit = 2.7763458 * (10.0 ** 11.0) # in M_sun*h^2/Mpc^3 # To be called from nfw_utils! cosmology_params = { "sigma_8": 0.81, "H0": 70.4, "omegab": 0.0455, "omegac": 0.226, "omegav": 0.728, "n": 0.967, "lnk_min": k_min, "lnk_max": k_max, "dlnk": k_step, "transfer_fit": "CAMB", "z": z, } # Values to be read in from theta # --------------------------------------- hmf = Mass_Function( M_min, M_max, step, k_min, k_max, k_step, "Tinker10", **cosmology_params ) # Tinker10 should also be read from theta! mass_func = hmf.dndlnm # power = hmf.power rho_mean_int = rho_crit * (hmf.omegac + hmf.omegab) rho_mean = Integrate(mass_func, mass_range_lin) radius_range_lin = ht.mass_to_radius(mass_range_lin, rho_mean) / ((200) ** (1.0 / 3.0)) radius_range = np.log10(radius_range_lin) radius_range_3d = 10.0 ** np.arange(-3.0, 2.9, (2.9 - (-3.0)) / (100)) radius_range_3d_i = 10.0 ** np.arange(-2.9, 1.0, (1.0 - (-2.9)) / (50)) radius_range_2d_i = 10.0 ** np.arange(-2.5, 1.0, (1.0 - (-2.5)) / (50)) # THIS IS R! # Calculating halo model ngal = np.array( [ n_gal( z, hmf, ngm(hmf, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2), mass_range_lin, radius_range_lin, ) for i in izip(hod_mass) ] ) rho_dm = baryons.rhoDM(hmf, mass_range_lin, omegab, omegac) rho_stars = np.array( [ baryons.rhoSTARS(hmf, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2) for i in izip(hod_mass) ] ) rho_gas = np.array( [ baryons.rhoGAS( hmf, rho_crit, omegab, omegac, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2, ) for i in izip(hod_mass) ] )[:, 0] F = np.array( [ baryons.rhoGAS( hmf, rho_crit, omegab, omegac, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2, ) for i in izip(hod_mass) ] )[:, 1] norm2 = rho_mean_int / rho_mean effective_mass = np.array( [ eff_mass( z, hmf, ngm(hmf, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2), mass_range_lin, ) for i in izip(hod_mass) ] ) effective_mass_dm = np.array( [ eff_mass( z, hmf, ncm(hmf, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2), mass_range_lin, ) * baryons.f_dm(omegab, omegac) for i in izip(hod_mass) ] ) effective_mass2 = effective_mass * (omegab / (omegac + omegab)) effective_mass_bar = np.array( [ effective_mass2 * (baryons.f_stars(i[0], effective_mass2, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2)) for i in izip(hod_mass) ] ) T_dm = np.array( [ T_table_multi( expansion, rho_dm, z, mass_range_lin, radius_range_lin, i[0], "dm", omegab, omegac, 0, 0, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2, ) for i in izip(hod_mass) ] ) T_stars = np.array( [ T_table_multi( expansion_stars, rho_mean, z, mass_range_lin, radius_range_lin, i[0], "stars", omegab, omegac, alpha_star, r_t0, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2, ) for i in izip(hod_mass) ] ) T_gas = np.array( [ T_table_multi( expansion, rho_mean, z, mass_range_lin, radius_range_lin, i[0], "gas", omegab, omegac, beta_gas, r_c0, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2, ) for i in izip(hod_mass) ] ) T_tot = np.array([T_dm[i][0:1:1, :] + T_stars[i][0:1:1, :] + T_gas[i][0:1:1, :] for i in range(len(M_bin_min))]) F_k1 = f_k(k_range_lin) pop_c = np.array( [ ncm(hmf, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2) for i in izip(hod_mass) ] ) pop_s = np.array( [ nsm(hmf, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2) for i in izip(hod_mass) ] ) pop_g = np.array( [ ngm(hmf, i[0], mass_range_lin, sigma_c, alpha_s, A, M_1, gamma_1, gamma_2, b_0, b_1, b_2) for i in izip(hod_mass) ] ) # Galaxy - dark matter spectra Pg_2h = np.array( [ TwoHalo(hmf, ngal_i, pop_g_i, k_range_lin, radius_range_lin, mass_range_lin) for ngal_i, pop_g_i in izip(ngal, pop_g) ] ) Pg_c = np.array( [ F_k1 * GM_cen_spectrum( hmf, z, rho_dm, rho_mean, expansion, pop_c_i, ngal_i, k_range_lin, radius_range_lin, mass_range_lin, T_dm_i, T_tot_i, ) for pop_c_i, ngal_i, T_dm_i, T_tot_i in izip(pop_c, ngal, T_dm, T_tot) ] ) Pg_s = np.array( [ F_k1 * GM_sat_spectrum( hmf, z, rho_dm, rho_mean, expansion, pop_s_i, ngal_i, k_range_lin, radius_range_lin, mass_range_lin, T_dm_i, T_tot_i, ) for pop_s_i, ngal_i, T_dm_i, T_tot_i in izip(pop_s, ngal, T_dm, T_tot) ] ) # Galaxy - stars spectra Ps_c = np.array( [ F_k1 * baryons.GS_cen_spectrum( hmf, z, rho_stars_i, rho_mean, expansion_stars, pop_c_i, ngal_i, k_range_lin, radius_range_lin, mass_range_lin, T_stars_i, T_tot_i, ) for rho_stars_i, pop_c_i, ngal_i, T_stars_i, T_tot_i in izip(rho_stars, pop_c, ngal, T_stars, T_tot) ] ) Ps_s = np.array( [ F_k1 * baryons.GS_sat_spectrum( hmf, z, rho_stars_i, rho_mean, expansion, pop_s_i, ngal_i, k_range_lin, radius_range_lin, mass_range_lin, T_dm_i, T_stars_i, T_tot_i, ) for rho_stars_i, pop_s_i, ngal_i, T_dm_i, T_stars_i, T_tot_i in izip( rho_stars, pop_s, ngal, T_dm, T_stars, T_tot ) ] ) # Galaxy - gas spectra Pgas_c = np.array( [ F_k1 * baryons.GGas_cen_spectrum( hmf, z, F_i, rho_gas_i, rho_mean, expansion, pop_c_i, ngal_i, k_range_lin, radius_range_lin, mass_range_lin, T_gas_i, T_tot_i, ) for F_i, rho_gas_i, pop_c_i, ngal_i, T_gas_i, T_tot_i in izip(F, rho_gas, pop_c, ngal, T_gas, T_tot) ] ) Pgas_s = np.array( [ F_k1 * baryons.GGas_sat_spectrum( hmf, z, F_i, rho_gas_i, rho_mean, expansion, pop_s_i, ngal_i, k_range_lin, radius_range_lin, mass_range_lin, T_dm_i, T_gas_i, T_tot_i, ) for F_i, rho_gas_i, pop_s_i, ngal_i, T_dm_i, T_gas_i, T_tot_i in izip( F, rho_gas, pop_s, ngal, T_dm, T_gas, T_tot ) ] ) # Combined (all) by type Pg_k_dm = np.array( [ (ngal_i * rho_dm * (Pg_c_i + Pg_s_i + Pg_2h_i * rho_mean / rho_dm)) / (rho_mean * ngal_i) for ngal_i, Pg_c_i, Pg_s_i, Pg_2h_i in izip(ngal, Pg_c, Pg_s, Pg_2h) ] ) Pg_k_s = np.array( [ (ngal_i * rho_stars_i * (Ps_c_i + Ps_s_i)) / (rho_mean * ngal_i) for ngal_i, rho_stars_i, Ps_c_i, Ps_s_i in izip(ngal, rho_stars, Ps_c, Ps_s) ] ) Pg_k_g = np.array( [ (ngal_i * rho_gas_i * (Pgas_c_i + Pgas_s_i)) / (rho_mean * ngal_i) for ngal_i, rho_gas_i, Pgas_c_i, Pgas_s_i in izip(ngal, rho_gas, Pgas_c, Pgas_s) ] ) Pg_k = np.array( [ ( ngal_i * rho_dm * (Pg_c_i + Pg_s_i + Pg_2h_i * rho_mean / rho_dm) + ngal_i * rho_stars_i * (Ps_c_i + Ps_s_i) + ngal_i * rho_gas_i * (Pgas_c_i + Pgas_s_i) ) / (rho_mean * ngal_i) for ngal_i, Pg_c_i, Pg_s_i, Pg_2h_i, rho_stars_i, Ps_c_i, Ps_s_i, rho_gas_i, Pgas_c_i, Pgas_s_i in izip( ngal, Pg_c, Pg_s, Pg_2h, rho_stars, Ps_c, Ps_s, rho_gas, Pgas_c, Pgas_s ) ] ) # all components # Normalized sattelites and centrals for sigma and d_sigma Pg_c2 = np.array([(rho_dm / rho_mean) * Pg_c_i for Pg_c_i in izip(Pg_c)]) Pg_s2 = np.array([(rho_dm / rho_mean) * Pg_s_i for Pg_s_i in izip(Pg_s)]) Ps_c2 = np.array([(rho_stars_i / rho_mean) * Ps_c_i for rho_stars_i, Ps_c_i in izip(rho_stars, Ps_c)]) Ps_s2 = np.array([(rho_stars_i / rho_mean) * Ps_s_i for rho_stars_i, Ps_s_i in izip(rho_stars, Ps_s)]) Pgas_c2 = np.array([(rho_gas_i / rho_mean) * Pgas_c_i for rho_gas_i, Pgas_c_i in izip(rho_gas, Pgas_c)]) Pgas_s2 = np.array([(rho_gas_i / rho_mean) * Pgas_s_i for rho_gas_i, Pgas_s_i in izip(rho_gas, Pgas_s)]) lnPg_k = np.array([np.log(Pg_k_i) for Pg_k_i in izip(Pg_k)]) # Total P_inter2 = [scipy.interpolate.UnivariateSpline(k_range, np.nan_to_num(lnPg_k_i), s=0) for lnPg_k_i in izip(lnPg_k)] """ # Correlation functions """ xi2 = np.zeros((len(M_bin_min), len(radius_range_3d))) for i in range(len(M_bin_min)): xi2[i, :] = power_to_corr_multi(P_inter2[i], radius_range_3d) xi2[xi2 <= 0.0] = np.nan xi2[i, :] = fill_nan(xi2[i, :]) """ # Projected surface density """ sur_den2 = np.array( [np.nan_to_num(sigma(xi2_i, rho_mean, radius_range_3d, radius_range_3d_i)) for xi2_i in izip(xi2)] ) sur_den2[sur_den2 >= 10.0 ** 16.0] = np.nan sur_den2[sur_den2 <= 0.0] = np.nan for i in range(len(M_bin_min)): sur_den2[i, :] = fill_nan(sur_den2[i, :]) """ # Excess surface density """ d_sur_den2 = np.array( [np.nan_to_num(d_sigma(sur_den2_i, radius_range_3d_i, radius_range_2d_i)) for sur_den2_i in izip(sur_den2)] ) # print d_sur_den2/10**12.0 return [d_sur_den2 / 10 ** 12.0, xi2, lnPg_k] # Add other outputs as needed. Total ESD should always be first!
print ("Min, max virial radii:"), radius_range_lin[0], radius_range_lin[-1] print ("Min, max k:"), k_range_lin[0], k_range_lin[-1] # ---------- End parameters ----------- # ------------------------------------- # ---------- Begin calculations ------- nphi = phi_i(hmf, mass_star, mass_range_lin, 0, 0, 0, 0, 0, 0, 0, 0, 0) ngal = n_gal( z, hmf, ngm(hmf, hod_mass, mass_range_lin, 0, 0, 0, 0, 0, 0, 0, 0, 0), mass_range_lin, radius_range_lin ) # That is ok! rho_dm = baryons.rhoDM(hmf, mass_range_lin, omegab, omegac) rho_stars = baryons.rhoSTARS(hmf, hod_mass, mass_range_lin, 0, 0, 0, 0, 0, 0, 0, 0, 0) rho_gas, F = baryons.rhoGAS(hmf, rho_crit, omegab, omegac, hod_mass, mass_range_lin, 0, 0, 0, 0, 0, 0, 0, 0, 0) norm2 = rho_mean_int / rho_mean print ("F:"), F print ("DM density:"), rho_dm print ("Stars density:"), rho_stars print ("Gas density:"), rho_gas print ("Sum of densities:"), rho_dm + rho_stars + rho_gas print ("Mean density int:"), rho_mean_int print ("Mean density theory:"), rho_mean print ("Critical density:"), rho_crit print ("Ratio of MDI/MDT:"), norm2 print ("Ratio of MDS/MDT:"), (rho_dm + rho_stars + rho_gas) / rho_mean effective_mass = eff_mass(z, hmf, ngm(hmf, hod_mass, mass_range_lin, 0, 0, 0, 0, 0, 0, 0, 0, 0), mass_range_lin)