Esempio n. 1
0
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
Esempio n. 2
0
def return_base_mock(sm_lim=9.5, sigma=0.2, sim='Bolshoi'):
    
    #get parameters to make mock
    dm_sim = sim
    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)
    
    return mock