def return_quick_ssfr_mock(mock, rho=-0.1): #get parameters to make mock sfr_cor = rho #correlate SSFR and Vpeak bins = np.arange(np.min(mock['Mstar']),12.5,0.1) mock = correlate(mock, 'Mstar', 'Vpeak', 'SSFR', bins=bins, rho=sfr_cor) ####add some group properties######################################################### host = (mock['upid']==-1) sub = (mock['upid']!=-1) #groupID mock['group_ID'] = mock['upid'] mock['group_ID'][host] = mock['id'][host] from halotools.utils import aggregation def logsum(x): vals = 10.0**(x['Mstar']) return np.log10(np.sum(vals)) mock = aggregation.add_members_property(mock, 'group_ID', 'Mstar_all', logsum) return mock
def return_mock(sm_lim=9.5, sigma=0.2, rho=-0.1, sim='Bolshoi'): #get parameters to make mock dm_sim = sim sfr_cor = rho sm_lim = sm_lim sm_scat = sigma sm_mock_key = 'Mpeak' ssfr_mock_key = 'Vpeak' #load halo catalogue HC, Lbox = get_mock(dm_sim) box_size=Lbox vol = Lbox**3.0 #load sdss catalogue GC = get_sdss_sample() #get mock data structure mock = get_mock_array(HC) #define central moment SMHM distribution from scipy.stats import norm def sigma2_xy(y): return sm_scat def P_x(y,mu_xy,sigma2_xy=sigma2_xy): mu_x = mu_xy(y) sigma2_x = sigma2_xy(y) p = norm(loc=mu_x, scale=sigma2_x) return p #define halo mass function phi_star = 9.95231920*10**(-5) m_star = 13.9833298 alpha1 = -1.85781918 alpha2 = 0.438785492 dndm_halo = cu.schechter_function.Log_Super_Schechter(phi_star, m_star, alpha1, alpha2) #define stellar mass function #phi_1 = 7.97407978*10**(-3) #phi_2 = 1.10507295*10**(-3) #m_1 = 10.5040374 #m_2 = 10.9083632 #alpha_1 = -0.956108368 #alpha_2 = -1.48157281 phi_1 = 6.94559219e-03 phi_2 = 2.76601643e-04 m_1 = 1.05518723e+01 m_2 = 1.08818830e+01 alpha_1 = -1.20094175e+00 alpha_2 = -7.40886755e-01 dndm_gal = cu.schechter_function.Log_Double_Schechter(m_1, m_2, phi_1, phi_2, alpha_1, alpha_2) #solve for the mean SMHM relation dm_star = np.linspace(5,12.5,100) dm_halo = np.linspace(10,15.5,100) dn_star = dndm_gal(dm_star) dn_halo = dndm_halo(dm_halo) if sm_scat==0.0: SMHM = AM_nonparam_1(dn_star, dm_star, dn_halo, dm_halo,\ None, y_min = np.amin(dm_halo),\ y_max = np.amax(dm_halo), ny=30, tol=0.001) else: SMHM = AM_nonparam_1(dn_star, dm_star, dn_halo, dm_halo,\ P_x, y_min = np.amin(dm_halo),\ y_max = np.amax(dm_halo), ny=30, tol=0.001) #apply the mean SMHM relation P = lambda y: P_x(y, mu_xy=SMHM) #trim mock keep = (np.log10(mock['Mpeak'])>10.0) mock = mock[keep] #make mock mock = make_SHAM_mock(mock, P, mock_prop=sm_mock_key, gal_prop='Mstar',\ use_log_mock_prop=True) #make completeness cut keep = (mock['Mstar']>sm_lim) mock = mock[keep] #add SSFRs bins = np.arange(sm_lim,12.5,0.1) mock = add_ssfrs(mock, GC, bins) #correlate SSFR and Vpeak mock = correlate(mock, 'Mstar', ssfr_mock_key, 'SSFR', bins=bins, rho=sfr_cor) #identify host and sub haloes host = (mock['upid']==-1) sub = (mock['upid']!=-1) #star forming and quenched LHS = -11.0 blue = (mock['SSFR']>LHS) #indices of blue galaxies red = (mock['SSFR']<=LHS) #indicies of red galaxies mock['red'] = 0 mock['red'][red]=1 #identify ejected haloes if np.all(mock['First_Acc_Scale']==-99): mock['ejected']=-99 else: ejected_haloes = (mock['upid']==-1) & (mock['First_Acc_Scale']<1.0) mock['ejected'] = 0 mock['ejected'][ejected_haloes] = 1 #identify abandoned satellites and satellites with ghost central host_ids = np.unique(mock['id'][host]) has_host = np.in1d(mock['upid'], host_ids) had_host = np.in1d(mock['upid'], mock['id']) has_no_host = (has_host==False) had_no_host = (had_host==False) abandoned = (has_no_host & had_host) ghost = (has_no_host & had_no_host & sub) mock['abandoned'] = 0 mock['abandoned'][abandoned] = 1 mock['ghost'] = 0 mock['ghost'][ghost] = 1 ####add some group properties######################################################### #groupID mock['group_ID'] = mock['upid'] mock['group_ID'][host] = mock['id'][host] """ from halotools.utils import aggregation def broadcast(x): central = (x['upid']==-1) return x['mvir'][central] mock = aggregation.add_members_property(mock, 'group_ID', 'Mvir_host', broadcast) def broadcast(x): central = (x['upid']==-1) return x['SSFR'][central] mock = aggregation.add_members_property(mock, 'group_ID', 'SSFR_host', broadcast) def logsum(x): vals = 10.0**(x['Mstar']) return np.log10(np.sum(vals)) mock = aggregation.add_members_property(mock, 'group_ID', 'Mstar_all', logsum) def N(x): return len(x) mock = aggregation.add_members_property(mock, 'group_ID', 'N', N) def N(x): cen = (x['upid']==-1) return np.sum(cen) mock = aggregation.add_members_property(mock, 'group_ID', 'N_cen', N) def N(x): sats = (x['upid']!=-1) return np.sum(sats) mock = aggregation.add_members_property(mock, 'group_ID', 'N_sat', N) from scipy.stats import rankdata def rank(x): return rankdata(-1.0*x['Mstar'])-1 mock = aggregation.add_members_property(mock, 'group_ID', 'Rank', rank) ###################################################################################### """ return mock