Source code for assignment

import numpy as np

from yt.funcs import mylog

[docs]def assign_galaxies_to_halos(obj): """Assign galaxies to halos. This function compares galaxy_glist + galaxy_slist with halo_glist + halo_slist to determine which halo the majority of particles within each galaxy lie. Finally we assign the .galaxies list to each halo. Parameters ---------- obj : :class:`main.CAESAR` Object containing the galaxies and halos lists. """ if not obj._has_galaxies: return mylog.info('Assigning galaxies to halos') h_glist = obj.global_particle_lists.halo_glist h_slist = obj.global_particle_lists.halo_slist for galaxy in obj.galaxies: glist = h_glist[galaxy.glist] slist = h_slist[galaxy.slist] combined = np.hstack((glist,slist)) valid = np.where(combined > -1)[0] combined = combined[valid] galaxy.parent_halo_index = -1 if len(combined) > 0: galaxy.parent_halo_index = np.bincount(combined).argmax() for halo in obj.halos: halo.galaxy_index_list = [] for i in range(0,obj.ngalaxies): galaxy = obj.galaxies[i] if galaxy.parent_halo_index > -1: obj.halos[galaxy.parent_halo_index].galaxy_index_list.append(i)
[docs]def assign_clouds_to_galaxies(obj): """Assign clouds to galaxies. This function compares cloud_glist with galaxy_glist to determine which galaxy the majority of particles within each cloud lies. Finally we assign the .clouds list to each galaxy. Parameters ---------- obj : :class:`main.CAESAR` Object containing the galaxies and halos lists. """ #NOTES FROM BOBBY: USE HASATTR() INSTEAD OF THIS _HAS_CLOUDS if not obj._has_clouds: return mylog.info('Assigning clouds to galaxies') g_glist = obj.global_particle_lists.galaxy_glist for cloud in obj.clouds: glist = g_glist[cloud.glist] combined = glist valid = np.where(combined > -1)[0] combined = combined[valid] cloud.parent_galaxy_index = -1 if len(combined) > 0: cloud.parent_galaxy_index = np.bincount(combined).argmax() for galaxy in obj.galaxies: galaxy.cloud_index_list = [] for i in range(0,obj.nclouds): cloud = obj.clouds[i] if cloud.parent_galaxy_index > -1: obj.galaxies[cloud.parent_galaxy_index].cloud_index_list.append(i)
[docs]def assign_central_galaxies(obj,central_mass_definition='total'): """Assign central galaxies. Iterate through halos and consider the most massive galaxy within a central and all other satellites. Parameters ---------- obj : :class:`main.CAESAR` Object containing the galaxies to assign centrals. Halos must already be assigned via `assign_galaxies_to_halos`. """ if not obj._has_galaxies: return mylog.info('Assigning central galaxies') obj.central_galaxies = [] obj.satellite_galaxies = [] for halo in obj.halos: if len(halo.galaxy_index_list) == 0: continue galaxy_masses = np.array([s.masses[central_mass_definition] for s in halo.galaxies]) central_index = np.argmax(galaxy_masses) obj.galaxies[halo.galaxy_index_list[central_index]].central = True