Example #1
0
def timeline(input_path, halo_ID):

    redshift, place = ot.z(input_path)
    redshift = redshift[::-1]

    z_1 = []
    position = []
    ID = []
    mstar = []
    mhalo = []
    z_2 = []
    descendant = []

    filename = input_path + '/halo_' + str(halo_ID) + '.txt'
    file_halo = open(filename, 'r')
    for line in file_halo.readlines():
        data = map(float, np.array(line.split()))
        z_1.append(data[0])
        position.append(redshift.tolist().index(data[0]))
        ID.append(int(data[1]))
        mstar.append(data[2])
        mhalo.append(data[3])
        z_2.append(data[4])
        descendant.append(int(data[5]))
    file_halo.close()

    timeline_file = input_path + '/timeline_' + str(halo_ID) + '.txt'
    write_data = open(timeline_file, 'w')

    ID_filter = halo_ID
    for i in range(len(redshift)):

        data = [[a, b, c, d, e]
                for a, b, c, d, e in zip(z_1, ID, mstar, mhalo, descendant)
                if a == redshift[i] if b == ID_filter]

        if data:
            if data[0] != -1:
                write_data.write(
                    '%-6.3f %-5i %-10.3e %-10.3e \n' %
                    (data[0][0], data[0][1], data[0][2], data[0][3]))
                #print '%-6.3f %-5i %-10.3e %-10.3e' %(data[0][0],data[0][1],data[0][2],data[0][3])
                ID_filter = data[0][4]
            else:
                break

    write_data.close()
def tree(halo_path, output_path, snapshot_path, input_path, dummy, halo_ID,
         start, finish, ncpu, rvir_per):

    list_order = [halo_ID]
    redshift_list = []
    iHalo_list = []

    fname = input_path + '/halo_' + str(halo_ID) + '.txt'
    redshift_list, iHalo_list = np.genfromtxt(fname,
                                              delimiter='',
                                              usecols=(0, 1),
                                              skip_header=0,
                                              unpack=True)
    iHalo_list = iHalo_list.astype(int)
    redshift = np.round(list(OrderedDict.fromkeys(redshift_list)), 3)
    z, position = ot.z(input_path)

    i = []
    iHalo_new = []

    for j in range(len(redshift)):
        pos = z.tolist().index(redshift[j])
        i.append(pos)
        sel = (redshift_list == redshift[j])
        iHalo_new.append(iHalo_list[sel])

    new_array = zip(i, iHalo_new)

    comoving = 1
    halodir = halo_path + '/'
    snap_dir = snapshot_path + '/snapdir_'
    savepath = output_path + '/'

    new_input = new_array[start:finish]
    Parallel(n_jobs=ncpu)(delayed(filter_Rvir)(
        halodir, snap_dir, savepath, i, comoving, iHalo_list, rvir_per, dummy)
                          for i, iHalo_list in new_input)
Example #3
0
def run(read_path, halo_path, save_path, sim_suite, sim_name, merger, halo_ID,
        filter_value, filter_flag):

    # starts from z=12 to z=0
    z_path = read_path

    regime_list = ['cold', 'total']
    radius_list = [0.1, 0.2, 0.5, 1.0, 10.0]
    radius_name_list = ['0.1', '0.2', '0.5', '1.0', 'rvir']
    mass_retention_list = [0.05, 0.1, 0.25, 0.5, 1.0]
    seed_mass_list = [1e1, 1e2, 1e3, 1e4, 1e5]
    seed_mass_name_list = ['1e1', '1e2', '1e3', '1e4', '1e5']

    if merger == 1:
        if filter_flag == 0:
            filename = read_path + '/' + sim_name + '_merger.hdf5'
        if filter_flag == 1:
            filename = read_path + '/' + sim_name + '_all.hdf5'

    if merger == 0:
        filename = read_path + '/' + sim_name + '_nomerger.hdf5'

    f = h5py.File(filename, 'a')

    # Timeline file data
    # starts from z=0 to z=12
    filename_timeline = read_path + '/timeline_' + str(halo_ID) + '.txt'
    z_1_timeline, ID_timeline, mhalo_timeline = np.genfromtxt(
        filename_timeline,
        delimiter='',
        usecols=(0, 1, 3),
        skip_header=0,
        unpack=True)
    ID_timeline = ID_timeline.astype(int)
    # reverse data now it is from 12 to 0, timeline data is REVERSE
    z_1_timeline = z_1_timeline[::-1]
    ID_timeline = ID_timeline[::-1]
    mhalo_timeline = mhalo_timeline[::-1]

    # Bulge data read
    # starts from z=12 to z=0
    bdd_data = h5py.File(save_path + '/BDD_data.hdf5', 'r')
    data = {}

    for regime in regime_list:
        for radius_name in radius_name_list:

            prefix = 'halo_' + str(
                halo_ID
            ) + '/' + regime + '/' + sim_suite + '/' + sim_name + '/' + radius_name

            if radius_name == 'rvir':
                data[regime + '/' + radius_name +
                     '/radius'] = bdd_data[prefix + '/radius'].value
                data[regime + '/' + radius_name +
                     '/rvir_hgm'] = bdd_data[prefix + '/rvir_hgm'].value
                data[regime + '/' + radius_name +
                     '/rvir_hsm'] = bdd_data[prefix + '/rvir_hsm'].value
                data[regime + '/' + radius_name +
                     '/rvir_hsf'] = bdd_data[prefix + '/rvir_hsf'].value

            data[regime + '/' + radius_name + '/z_1'] = bdd_data[prefix +
                                                                 '/z_1'].value
            data[regime + '/' + radius_name + '/ID'] = bdd_data[prefix +
                                                                '/ID'].value
            data[regime + '/' + radius_name +
                 '/mgas'] = bdd_data[prefix + '/mgas'].value
            data[regime + '/' + radius_name +
                 '/mstar'] = bdd_data[prefix + '/mstar'].value
            data[regime + '/' + radius_name +
                 '/mhalo'] = bdd_data[prefix + '/mhalo'].value
            data[regime + '/' + radius_name +
                 '/mbulge'] = bdd_data[prefix + '/mbulge'].value
            data[regime + '/' + radius_name +
                 '/mdisk'] = bdd_data[prefix + '/mdisk'].value
            data[regime + '/' + radius_name +
                 '/fbulge'] = bdd_data[prefix + '/fbulge'].value
            data[regime + '/' + radius_name +
                 '/fdisk'] = bdd_data[prefix + '/fdisk'].value
            data[regime + '/' + radius_name +
                 '/inflow'] = bdd_data[prefix + '/inflow'].value
            data[regime + '/' + radius_name +
                 '/outflow'] = bdd_data[prefix + '/outflow'].value
            data[regime + '/' + radius_name +
                 '/bh_vel'] = bdd_data[prefix + '/bh_vel'].value
            data[regime + '/' + radius_name +
                 '/vel_disp'] = bdd_data[prefix + '/vel_disp'].value
            data[regime + '/' + radius_name +
                 '/num_new_stars'] = bdd_data[prefix + '/num_new_stars'].value
            data[regime + '/' + radius_name + '/sfr'] = bdd_data[prefix +
                                                                 '/sfr'].value
            data[regime + '/' + radius_name +
                 '/ssfr'] = bdd_data[prefix + '/ssfr'].value
            data[regime + '/' + radius_name +
                 '/mean_temp'] = bdd_data[prefix + '/mean_temp'].value
            data[regime + '/' + radius_name +
                 '/mean_rho'] = bdd_data[prefix + '/mean_rho'].value
            data[regime + '/' + radius_name +
                 '/mean_gas_surf_density'] = bdd_data[
                     prefix + '/mean_gas_surf_density'].value
            data[regime + '/' + radius_name +
                 '/mean_star_surf_density'] = bdd_data[
                     prefix + '/mean_star_surf_density'].value
            data[regime + '/' + radius_name +
                 '/mean_cs'] = bdd_data[prefix + '/mean_cs'].value
            #data[regime + '/' + radius_name + '/mean_nh'] = bdd_data[prefix + '/mean_nh'].value
            data[regime + '/' + radius_name +
                 '/mean_vel'] = bdd_data[prefix + '/mean_vel'].value
            data[regime + '/' + radius_name +
                 '/mean_vel_phi'] = bdd_data[prefix + '/mean_vel_phi'].value

    redshift, place = ot.z(z_path)
    # WITH MERGERS
    if merger == 1:
        # Halo file data
        # starts from z=0 to z=12
        filename_halo = read_path + '/halo_' + str(halo_ID) + '.txt'

        z_1 = []
        z_2 = []
        position = []
        ID = []
        descendant = []
        mhalo = []

        # but we read it in reverse order, now data starts from z=12 to z=0
        file_halo = open(filename_halo, 'r')
        for line in reversed(file_halo.readlines()):
            data_halo = map(float, np.array(line.split()))
            z_1.append(data_halo[0])
            position.append(redshift.tolist().index(data_halo[0]))
            ID.append(int(data_halo[1]))
            mhalo.append(data_halo[3])
            z_2.append(data_halo[4])
            descendant.append([int(ii) for ii in data_halo[5:]])
        file_halo.close()

    # WITHOUT MERGERS
    if merger == 0:

        z_1, ID, mhalo = np.genfromtxt(filename_timeline,
                                       delimiter='',
                                       usecols=(0, 1, 3),
                                       skip_header=0,
                                       unpack=True)
        ID = ID.astype(int)
        z_1 = z_1[::-1]
        ID = ID[::-1]
        mhalo = mhalo[::-1]
        position = [place[redshift.tolist().index(xxx)] for xxx in z_1]
        z_2 = np.insert(z_1[:-1], 0,
                        redshift[redshift.tolist().index(z_1[0]) - 1])
        descendant = np.insert(ID[:-1], 0, -1)
        descendant = [[xxx] for xxx in descendant]

        z_1 = z_1.tolist()
        ID = ID.tolist()
        mhalo = mhalo.tolist()
        z_2 = z_2.tolist()

    for regime in regime_list:
        for radius, radius_name in zip(radius_list, radius_name_list):

            xx0 = data[regime + '/' + radius_name + '/z_1']
            xx1 = data[regime + '/' + radius_name + '/ID']
            xx2 = data[regime + '/' + radius_name + '/mgas']
            xx3 = data[regime + '/' + radius_name + '/mstar']
            xx4 = data[regime + '/' + radius_name + '/mhalo']
            xx5 = data[regime + '/' + radius_name + '/mbulge']
            xx6 = data[regime + '/' + radius_name + '/mdisk']
            xx7 = data[regime + '/' + radius_name + '/fbulge']
            xx8 = data[regime + '/' + radius_name + '/fdisk']
            xx9 = data[regime + '/' + radius_name + '/inflow']
            xx10 = data[regime + '/' + radius_name + '/outflow']
            xx11 = data[regime + '/' + radius_name + '/bh_vel']
            xx12 = data[regime + '/' + radius_name + '/vel_disp']
            xx13 = data[regime + '/' + radius_name + '/num_new_stars']
            xx14 = data[regime + '/' + radius_name + '/sfr']
            xx15 = data[regime + '/' + radius_name + '/ssfr']
            xx16 = data[regime + '/' + radius_name + '/mean_temp']
            xx17 = data[regime + '/' + radius_name + '/mean_rho']
            xx18 = data[regime + '/' + radius_name + '/mean_gas_surf_density']
            xx19 = data[regime + '/' + radius_name + '/mean_star_surf_density']
            xx20 = data[regime + '/' + radius_name + '/mean_cs']
            #xx20 = data[regime + '/' + radius_name + '/mean_nh']
            xx21 = data[regime + '/' + radius_name + '/mean_vel']
            xx22 = data[regime + '/' + radius_name + '/mean_vel_phi']
            # Filter timeline from halo data
            if radius_name == 'rvir':
                xx23 = data[regime + '/' + radius_name + '/radius']
                xx24 = data[regime + '/' + radius_name + '/rvir_hgm']
                xx25 = data[regime + '/' + radius_name + '/rvir_hsm']
                xx26 = data[regime + '/' + radius_name + '/rvir_hsf']

            Z_ID = zip(xx0, xx1)
            Z_ID_timeline = zip(z_1_timeline, ID_timeline)

            if radius_name != 'rvir':
                zeytin_store = zip(Z_ID, xx0, xx1, xx2, xx3, xx4, xx5, xx6,
                                   xx7, xx8, xx9, xx10, xx11, xx12, xx13, xx14,
                                   xx15, xx16, xx17, xx18, xx19, xx20, xx21,
                                   xx22)
                zeytin = [[
                    a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13,
                    a14, a15, a16, a17, a18, a19, a20, a21, a22, a23
                ] for a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
                          a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23
                          in zeytin_store if a0 in Z_ID_timeline]
            else:
                zeytin_store = zip(Z_ID, xx0, xx1, xx2, xx3, xx4, xx5, xx6,
                                   xx7, xx8, xx9, xx10, xx11, xx12, xx13, xx14,
                                   xx15, xx16, xx17, xx18, xx19, xx20, xx21,
                                   xx22, xx23, xx24, xx25, xx26)
                zeytin = [[
                    a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13,
                    a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25,
                    a26, a27
                ] for a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
                          a13, a14, a15, a16, a17, a18, a19, a20, a21, a22,
                          a23, a24, a25, a26, a27 in zeytin_store
                          if a0 in Z_ID_timeline]

            x_z1 = np.array(zip(*zeytin)[0])
            x_ID = np.array(zip(*zeytin)[1])
            x_mgas = np.array(zip(*zeytin)[2])
            x_mstar = np.array(zip(*zeytin)[3])
            x_mhalo = np.array(zip(*zeytin)[4])
            x_mbulge = np.array(zip(*zeytin)[5])
            x_mdisk = np.array(zip(*zeytin)[6])
            x_fbulge = np.array(zip(*zeytin)[7])
            x_fdisk = np.array(zip(*zeytin)[8])
            x_inflow = np.array(zip(*zeytin)[9])
            x_outflow = np.array(zip(*zeytin)[10])
            x_bh_vel = np.array(zip(*zeytin)[11])
            x_vel_disp = np.array(zip(*zeytin)[12])
            x_numns = np.array(zip(*zeytin)[13])
            x_sfr = np.array(zip(*zeytin)[14])
            x_ssfr = np.array(zip(*zeytin)[15])
            x_temp = np.array(zip(*zeytin)[16])
            x_rho = np.array(zip(*zeytin)[17])
            x_gas_sd = np.array(zip(*zeytin)[18])
            x_star_sd = np.array(zip(*zeytin)[19])
            x_cs = np.array(zip(*zeytin)[20])
            #x_nh = np.array(zip(*zeytin)[20])
            x_vel = np.array(zip(*zeytin)[21])
            x_vel_phi = np.array(zip(*zeytin)[22])

            if radius_name == 'rvir':
                x_r = np.array(zip(*zeytin)[23])
                x_rhgm = np.array(zip(*zeytin)[24])
                x_rhsm = np.array(zip(*zeytin)[25])
                x_rhsf = np.array(zip(*zeytin)[26])

            ext = 'halo_' + str(halo_ID) + '/' + regime + '/' + radius_name

            f[ext + '/z_1'] = x_z1
            f[ext + '/ID'] = x_ID
            f[ext + '/mgas'] = x_mgas
            f[ext + '/mstar'] = x_mstar
            f[ext + '/mhalo'] = x_mhalo
            f[ext + '/mbulge'] = x_mbulge
            f[ext + '/mdisk'] = x_mdisk
            f[ext + '/fbulge'] = x_fbulge
            f[ext + '/fdisk'] = x_fdisk
            f[ext + '/inflow'] = x_inflow
            f[ext + '/outflow'] = x_outflow
            f[ext + '/bh_vel'] = x_bh_vel
            f[ext + '/vel_disp'] = x_vel_disp
            f[ext + '/num_new_stars'] = x_numns
            f[ext + '/sfr'] = x_sfr
            f[ext + '/ssfr'] = x_ssfr
            f[ext + '/mean_temp'] = x_temp
            f[ext + '/mean_rho'] = x_rho
            f[ext + '/mean_gas_surf_density'] = x_gas_sd
            f[ext + '/mean_star_surf_density'] = x_star_sd
            f[ext + '/mean_cs'] = x_cs
            #f[ext + '/mean_nh'] = x_nh
            f[ext + '/mean_vel'] = x_vel
            f[ext + '/mean_vel_phi'] = x_vel_phi

            if radius_name == 'rvir':
                f[ext + '/mhalo_rvir'] = mhalo_timeline
                f[ext + '/radius'] = x_r
                f[ext + '/rvir_hgm'] = x_rhgm
                f[ext + '/rvir_hsm'] = x_rhsm
                f[ext + '/rvir_hsf'] = x_rhsf

            if merger == 1:
                fdisk = data[regime + '/' + radius_name + '/fdisk']
                mgas = data[regime + '/' + radius_name + '/mgas']
                mstar = data[regime + '/' + radius_name + '/mstar']
                mhalo = data[regime + '/' + radius_name + '/mhalo']
                mean_cs = data[regime + '/' + radius_name + '/mean_cs']
                #mean_nh = data[regime + '/' + radius_name + '/mean_nh']
                mean_vel = data[regime + '/' + radius_name + '/mean_vel']
                mean_vel_phi = data[regime + '/' + radius_name +
                                    '/mean_vel_phi']
                mean_rho = data[regime + '/' + radius_name + '/mean_rho']
                sfr = data[regime + '/' + radius_name + '/sfr']

            if merger == 0:
                fdisk = x_fdisk
                mgas = x_mgas
                mstar = x_mstar
                mhalo = x_mhalo
                mean_cs = x_cs
                #mean_nh = x_nh
                mean_vel = x_vel
                mean_vel_phi = x_vel_phi
                mean_rho = x_rho
                sfr = x_sfr

            for mass_retention in mass_retention_list:
                for seed_mass, seed_mass_name in zip(seed_mass_list,
                                                     seed_mass_name_list):

                    mdot_torque, mdot_bondi, mdot_tremmel, mdot_hobbs, mdot_dyn, mdot_sfr, f_torque_edd, f_bondi_edd, f_tremmel_edd, f_hobbs_edd, f_dyn_edd, f_sfr_edd, m_bh_torque, m_bh_bondi, m_bh_tremmel, m_bh_hobbs, m_bh_dyn, m_bh_sfr, mass_seed = ot.MERGER(
                        z_1,
                        ID,
                        z_2,
                        descendant,
                        halo_path,
                        redshift,
                        place,
                        z_1_timeline,
                        ID_timeline,
                        fdisk,
                        mhalo,
                        mstar,
                        mgas,
                        radius,
                        mean_cs,
                        mean_vel,
                        mean_vel_phi,
                        mean_rho,
                        sfr,
                        mass_retention,
                        seed_mass,
                        merger,
                        supp=0,
                        filter_for_timeline=filter_value)

                    mdot_torque_supp, mdot_bondi_supp, mdot_tremmel_supp, mdot_hobbs_supp, mdot_dyn_supp, mdot_sfr_supp, f_torque_edd_supp, f_bondi_edd_supp, f_tremmel_edd_supp, f_hobbs_edd_supp, f_dyn_edd_supp, f_sfr_edd_supp, m_bh_torque_supp, m_bh_bondi_supp, m_bh_tremmel_supp, m_bh_hobbs_supp, m_bh_dyn_supp, m_bh_sfr_supp, mass_seed_supp = ot.MERGER(
                        z_1,
                        ID,
                        z_2,
                        descendant,
                        halo_path,
                        redshift,
                        place,
                        z_1_timeline,
                        ID_timeline,
                        fdisk,
                        mhalo,
                        mstar,
                        mgas,
                        radius,
                        mean_cs,
                        mean_vel,
                        mean_vel_phi,
                        mean_rho,
                        sfr,
                        mass_retention,
                        seed_mass,
                        merger,
                        supp=1,
                        filter_for_timeline=filter_value)

                    prefix = 'halo_' + str(
                        halo_ID
                    ) + '/' + regime + '/r_' + radius_name + '/mass_ret_' + str(
                        mass_retention) + '/seed_' + seed_mass_name

                    f[prefix + '/mdot_torque'] = mdot_torque
                    f[prefix + '/mdot_bondi'] = mdot_bondi
                    f[prefix + '/mdot_tremmel'] = mdot_tremmel
                    f[prefix + '/mdot_hobbs'] = mdot_hobbs
                    f[prefix + '/mdot_dyn'] = mdot_dyn
                    f[prefix + '/mdot_sfr'] = mdot_sfr
                    f[prefix + '/f_torque_edd'] = f_torque_edd
                    f[prefix + '/f_bondi_edd'] = f_bondi_edd
                    f[prefix + '/f_tremmel_edd'] = f_tremmel_edd
                    f[prefix + '/f_hobbs_edd'] = f_hobbs_edd
                    f[prefix + '/f_dyn_edd'] = f_dyn_edd
                    f[prefix + '/f_sfr_edd'] = f_sfr_edd
                    f[prefix + '/m_bh_torque'] = m_bh_torque
                    f[prefix + '/m_bh_bondi'] = m_bh_bondi
                    f[prefix + '/m_bh_tremmel'] = m_bh_tremmel
                    f[prefix + '/m_bh_hobbs'] = m_bh_hobbs
                    f[prefix + '/m_bh_dyn'] = m_bh_dyn
                    f[prefix + '/m_bh_sfr'] = m_bh_sfr
                    f[prefix + '/mass_seed'] = mass_seed
                    f[prefix + '/mdot_torque_supp'] = mdot_torque_supp
                    f[prefix + '/mdot_bondi_supp'] = mdot_bondi_supp
                    f[prefix + '/mdot_tremmel_supp'] = mdot_tremmel_supp
                    f[prefix + '/mdot_hobbs_supp'] = mdot_hobbs_supp
                    f[prefix + '/mdot_dyn_supp'] = mdot_dyn_supp
                    f[prefix + '/mdot_sfr_supp'] = mdot_sfr_supp
                    f[prefix + '/f_torque_edd_supp'] = f_torque_edd_supp
                    f[prefix + '/f_bondi_edd_supp'] = f_bondi_edd_supp
                    f[prefix + '/f_tremmel_edd_supp'] = f_tremmel_edd_supp
                    f[prefix + '/f_hobbs_edd_supp'] = f_hobbs_edd_supp
                    f[prefix + '/f_dyn_edd_supp'] = f_dyn_edd_supp
                    f[prefix + '/f_sfr_edd_supp'] = f_sfr_edd
                    f[prefix + '/m_bh_torque_supp'] = m_bh_torque_supp
                    f[prefix + '/m_bh_bondi_supp'] = m_bh_bondi_supp
                    f[prefix + '/m_bh_tremmel_supp'] = m_bh_tremmel_supp
                    f[prefix + '/m_bh_hobbs_supp'] = m_bh_hobbs_supp
                    f[prefix + '/m_bh_dyn_supp'] = m_bh_dyn_supp
                    f[prefix + '/m_bh_sfr_supp'] = m_bh_sfr_supp
                    f[prefix + '/mass_seed_supp'] = mass_seed_supp

    f.close()
Example #4
0
halo_path = str(sys.argv[1])
snapshot_path = str(sys.argv[2])
read_path = str(sys.argv[3])
output_path = str(sys.argv[4])
dummy = int(sys.argv[5])
ncpu = int(sys.argv[6])

remove = len(read_path) + 6
filelist = sorted(glob.glob(read_path + '/halo_*.txt'))

halo_ID_list = []
for f in filelist:
    halo_ID_list.append(f[remove:-4])

halo_ID_list = np.sort(np.array(halo_ID_list[:-1]).astype(int))[1:]

for halo_ID in halo_ID_list:

    redshift, place = ot.z(read_path)
    filename = read_path + '/halo_' + str(halo_ID) + '.txt'
    z_1, ID = np.genfromtxt(filename,
                            delimiter='',
                            usecols=(0, 1),
                            unpack=True)
    ID = ID.astype(int)
    position = np.array([redshift.tolist().index(a) + dummy for a in z_1])
    k_list = range(0, len(ID))
    Parallel(n_jobs=ncpu)(
        delayed(onur)(snapshot_path, halo_path, output_path, z_1, ID, halo_ID,
                      position, k, redshift, dummy) for k in k_list)
Example #5
0
def tree_list(snapshot_path, input_path, halo_path, halo_ID, dummy):

    redshift, position = ot.z(input_path)

    redshift = redshift[::-1]
    position = position.astype(int)[::-1]

    halo_file = input_path + '/halo_' + str(halo_ID) + '.txt'
    write_data = open(halo_file, 'w')

    for j in range(len(redshift)):

        if j == 0:

            halofile = glob.glob(halo_path + '/' + str('%03d' % position[j]) +
                                 '/*AHF_halos')[0]
            snapshot_dir = snapshot_path + '/snapdir_' + str(
                '%03d' % position[j])

            if dummy == 178:
                star = ot.readsnap_compact(snapshot_dir,
                                           snum=position[j],
                                           ptype=4,
                                           cosmological=1)
                header = ot.readsnap_compact(snapshot_dir,
                                             snum=position[j],
                                             ptype=0,
                                             header_only=1)
            else:
                star = ot.readsnap(snapshot_dir,
                                   snum=position[j],
                                   ptype=4,
                                   cosmological=1)
                header = ot.readsnap(snapshot_dir,
                                     snum=position[j],
                                     ptype=0,
                                     header_only=1)

            hinv = 1.0 / header["hubble"]
            a_scale = 1.0 / (1.0 + header["redshift"])
            constant = a_scale * hinv

            ID, mhalo, rvir, fMhires, mstar = np.genfromtxt(halofile,
                                                            delimiter='',
                                                            usecols=(0, 3, 11,
                                                                     37, 64),
                                                            skip_header=1,
                                                            unpack=True)
            data = [[a, b, c, d, e]
                    for a, b, c, d, e in zip(ID, mhalo, rvir, fMhires, mstar)
                    if a == halo_ID]
            center = np.array(ot.get_haloCenter(halofile, halo_ID)) * constant

            star["p"] -= center

            ID_new = int(data[0][0])
            mhalo_new = data[0][1] * hinv
            rvir_new = data[0][2] * constant
            fMhires_new = data[0][3]
            mstar_new = data[0][4] * hinv

            flag, m_halo, m_star = constraints(star["p"], star["m"], rvir_new,
                                               mhalo_new, fMhires_new,
                                               mstar_new)
            new_ID_list = [halo_ID]
            new_mhalo_list = [m_halo]
            new_mstar_list = [m_star]

        else:

            filename = glob.glob(halo_path + '/' + str('%03d' % position[j]) +
                                 '/*AHF_mtree_idx')[0]
            halofile = glob.glob(halo_path + '/' + str('%03d' % position[j]) +
                                 '/*AHF_halos')[0]
            snapshot_dir = snapshot_path + '/snapdir_' + str(
                '%03d' % position[j])

            # STAR AND HEADER DATA READ
            if dummy == 178:
                star = ot.readsnap_compact(snapshot_dir,
                                           snum=position[j],
                                           ptype=4,
                                           cosmological=1)
                header = ot.readsnap_compact(snapshot_dir,
                                             snum=position[j],
                                             ptype=0,
                                             header_only=1)
            else:
                star = ot.readsnap(snapshot_dir,
                                   snum=position[j],
                                   ptype=4,
                                   cosmological=1)
                header = ot.readsnap(snapshot_dir,
                                     snum=position[j],
                                     ptype=0,
                                     header_only=1)

            hinv = 1.0 / header["hubble"]
            a_scale = 1.0 / (1.0 + header["redshift"])
            constant = a_scale * hinv

            # READ IDX DATA AND FILTER
            ID_0, ID_1 = np.genfromtxt(filename,
                                       delimiter='',
                                       usecols=(0, 1),
                                       skip_header=1,
                                       unpack=True,
                                       dtype=int)

            # READ HALO INFO
            ID_halo, mhalo_halo, rvir_halo, fMhires_halo, mstar_halo = np.genfromtxt(
                halofile,
                delimiter='',
                usecols=(0, 3, 11, 37, 64),
                skip_header=1,
                unpack=True)
            zip_halo = zip(ID_halo, mhalo_halo, rvir_halo, fMhires_halo,
                           mstar_halo)

            iHalo_list = []
            mhalo_list = []
            mstar_list = []
            flag_lastline = 0

            for iHalo, mhalo, mstar in zip(new_ID_list, new_mhalo_list,
                                           new_mstar_list):

                temp_iHalo_list = [a for a, b in zip(ID_0, ID_1) if b == iHalo]
                temp_flag_list = []
                temp_mhalo_list = []
                temp_mstar_list = []

                for halo_ID in temp_iHalo_list:

                    center = np.array(ot.get_haloCenter(halofile,
                                                        halo_ID)) * constant
                    pos = star["p"] - center
                    data = [[a, b, c, d, e] for a, b, c, d, e in zip_halo
                            if a == halo_ID]

                    ID_new = int(data[0][0])
                    mhalo_new = data[0][1] * hinv
                    rvir_new = data[0][2] * constant
                    fMhires_new = data[0][3]
                    mstar_new = data[0][4] * hinv

                    flag, m_halo, m_star = constraints(pos, star["m"],
                                                       rvir_new, mhalo_new,
                                                       fMhires_new, mstar_new)
                    temp_flag_list.append(flag)
                    temp_mhalo_list.append(m_halo)
                    temp_mstar_list.append(m_star)

                # filter candidates with their flag values
                temp_iHalo_list = [
                    a for a, b in zip(temp_iHalo_list, temp_flag_list)
                    if b == 1
                ]
                temp_mhalo_list = [
                    a for a, b in zip(temp_mhalo_list, temp_flag_list)
                    if b == 1
                ]
                temp_mstar_list = [
                    a for a, b in zip(temp_mstar_list, temp_flag_list)
                    if b == 1
                ]

                if temp_iHalo_list:
                    write_data.write(
                        '%-6.3f %-5i %-10.3e %-10.3e %-6.3f %-30s \n' %
                        (redshift[j - 1], iHalo, mstar, mhalo, redshift[j],
                         ' '.join(map(str, temp_iHalo_list))))
                else:
                    write_data.write(
                        '%-6.3f %-5i %-10.3e %-10.3e %-6.3f %-30s \n' %
                        (redshift[j - 1], iHalo, mstar, mhalo, redshift[j],
                         '-1'))

                iHalo_list += temp_iHalo_list
                mhalo_list += temp_mhalo_list
                mstar_list += temp_mstar_list

                if j == len(redshift) - 1:
                    if temp_iHalo_list:
                        flag_lastline = 1
                #	for iHalo, mhalo, mstar in zip(temp_iHalo_list, temp_mhalo_list, temp_mstar_list):
                #		print '%-6.3f %-5i %-10.3e %-10.3e %-6.3f %-30s \n' %(redshift[j], iHalo, mstar, mhalo, redshift[j]+0.4, '-1')

            new_ID_list = iHalo_list
            new_mhalo_list = mhalo_list
            new_mstar_list = mstar_list

            if flag_lastline == 1:
                for iHalo, mhalo, mstar in zip(new_ID_list, new_mhalo_list,
                                               new_mstar_list):
                    write_data.write(
                        '%-6.3f %-5i %-10.3e %-10.3e %-6.3f %-30s \n' %
                        (redshift[-1], iHalo, mstar, mhalo, redshift[-1] + 0.4,
                         '-1'))

    write_data.close()