def run(self): curdir = os.getcwd() tmpdir = tempfile.mkdtemp() os.chdir(tmpdir) dds = data_dir_load(self.data_ds_fn) hds = data_dir_load(self.halos_ds_fn) hc = HaloCatalog(data_ds=dds, halos_ds=hds, output_dir=os.path.join(tmpdir, str(dds))) hc.add_callback("sphere") hc.add_quantity("nstars") hc.create() fn = os.path.join(tmpdir, str(dds), "%s.0.h5" % str(dds)) ds = load(fn) ad = ds.all_data() mi, ma = ad.quantities.extrema("nstars") mean = ad.quantities.weighted_average_quantity("nstars", "particle_ones") os.chdir(curdir) shutil.rmtree(tmpdir) return np.array([mean, mi, ma])
import yt from yt.analysis_modules.halo_analysis.api import HaloCatalog from yt.analysis_modules.halo_analysis.halo_callbacks import add_callback ds = yt.load(directory + '/' + directory) halos_ds = yt.load('halo_catalogs/catalog/catalog.0.h5') hc = HaloCatalog(data_ds=ds, halos_ds=halos_ds) hc.load() def count_particles(halo): """ Creates a 30kpc sphere around a center of mass and counts the number of contained particles. """ x = halo.quantities['particle_position_x'] y = halo.quantities['particle_position_y'] z = halo.quantities['particle_position_z'] sphere = halo.halo_catalog.data_ds.sphere([x, y, z], (30, 'kpc')) n_particles = len(sphere['x']) halo.particle_count = n_particles print halo.particle_count add_callback('count_particles', count_particles) # Run the analysis. hc.add_callback('count_particles') hc.create()
'gas': ('gas', 'density'), 'stars': ('deposit', 'stars_density'), 'dark_matter': ('deposit', 'dark_matter_density') } def stars(pfilter, data): filter = data[(pfilter.filtered_type, 'particle_type')] == 2 return filter def dark_matter(pfilter, data): filter = data[(pfilter.filtered_type, 'particle_type')] == 1 return filter yt.add_particle_filter('stars', function=stars, filtered_type='all', requires=['particle_type']) yt.add_particle_filter('dark_matter', function=dark_matter, filtered_type='all', requires=['particle_type']) ds = yt.load(directory+'/'+directory) ds.add_particle_filter('stars') ds.add_particle_filter('dark_matter') halos_ds = yt.load('halo_catalogs/catalog/catalog.0.h5') hc = HaloCatalog(data_ds=ds, halos_ds=halos_ds) hc.add_callback("sphere", factor=2.0) hc.add_callback("profile", ["radius"], [("gas", "overdensity")], weight_field="cell_volume", accumulation=True, storage="virial_quantities_profiles") hc.add_callback("virial_quantities", ["radius"], profile_storage = "virial_quantities_profiles") hc.add_callback('sphere', radius_field='radius_200', factor=5, field_parameters=dict(virial_radius=('quantity', 'radius_200'))) hc.add_callback('profile', 'virial_radius_fraction', [('gas','temperature')], storage='virial_profiles', weight_field='cell_mass', accumulation=False, output_dir='profiles') hc.load()
args = parser.parse_args() directory = args.directory import yt from yt.analysis_modules.halo_analysis.api import HaloCatalog from yt.analysis_modules.halo_analysis.halo_callbacks import add_callback ds = yt.load(directory+'/'+directory) halos_ds = yt.load('halo_catalogs/catalog/catalog.0.h5') hc = HaloCatalog(data_ds=ds, halos_ds=halos_ds) hc.load() def count_particles(halo): """ Creates a 30kpc sphere around a center of mass and counts the number of contained particles. """ x = halo.quantities['particle_position_x'] y = halo.quantities['particle_position_y'] z = halo.quantities['particle_position_z'] sphere = halo.halo_catalog.data_ds.sphere([x, y, z], (30, 'kpc')) n_particles = len(sphere['x']) halo.particle_count = n_particles print halo.particle_count add_callback('count_particles', count_particles) # Run the analysis. hc.add_callback('count_particles') hc.create()
from yt.analysis_modules.halo_analysis.api import HaloCatalog # Load the data set with the full simulation information # and rockstar halos data_ds = yt.load('Enzo_64/RD0006/RedshiftOutput0006') halos_ds = yt.load('rockstar_halos/halos_0.0.bin') # Instantiate a catalog using those two paramter files hc = HaloCatalog(data_ds=data_ds, halos_ds=halos_ds) # Filter out less massive halos hc.add_filter("quantity_value", "particle_mass", ">", 1e14, "Msun") # attach a sphere object to each halo whose radius extends # to twice the radius of the halo hc.add_callback("sphere", factor=2.0) # use the sphere to calculate radial profiles of gas density # weighted by cell volume in terms of the virial radius hc.add_callback("profile", x_field="radius", y_fields=[("gas", "overdensity")], weight_field="cell_volume", accumulation=False, storage="virial_quantities_profiles") hc.add_callback("virial_quantities", ["radius"], profile_storage="virial_quantities_profiles") hc.add_callback('delete_attribute', 'virial_quantities_profiles') field_params = dict(virial_radius=('quantity', 'radius_200'))
path_man = path_manager(args.root_data_dir, args.root_output_dir, sim_num=args.sim_number, snap_name=args.time_slice, data_dir_prefix=args.data_prefix) if not dataset_finished(path_man.get_exp_path()): print("Sim number %s is not yet finished. Skipping." % args.sim_number) sys.exit(0) if yt.is_root(): path_man.ensure_directories() ds = yt.load(path_man.get_dataset_path()) halos_ds = yt.load(path_man.get_rockstar_halo_dirname() + "/halos_0.0.bin") hc = HaloCatalog(data_ds=ds, halos_ds=halos_ds, output_dir=path_man.get_rockstar_catalogue_dirname()) hc.add_callback('save_quantities', prefix='orig', fields=[ 'virial_radius', 'particle_position_x', 'particle_position_y', 'particle_position_z', 'particle_mass' ]) hc.add_callback('get_additional_halo_properties') # hc.add_callback('recenter_halo', radius_field='virial_radius', units='pc') hc.add_recipe('calculate_virial_quantities', ['radius', 'matter_mass']) hc.create()
x = halo.quantities['particle_position_x'] y = halo.quantities['particle_position_y'] z = halo.quantities['particle_position_z'] return (lower_bound < x < upper_bound) and (lower_bound < y < upper_bound) and (lower_bound < z < upper_bound) def filter_particles(halo): """ Checks to see if there are more than a certain number of particles within a sphere. """ minimum_particles = 50000 x = halo.quantities['particle_position_x'] y = halo.quantities['particle_position_y'] z = halo.quantities['particle_position_z'] sphere = halo.halo_catalog.data_ds.sphere([x, y, z], (30, 'kpc')) n_particles = len(sphere['x']) return n_particles > minimum_particles # Add to the filter registry. add_filter('position', filter_position) add_filter('particles', filter_particles) # Run the analysis. hc.add_filter('quantity_value', 'particle_mass', '<', 1e13, 'Msun') hc.add_callback('iterative_center_of_mass') hc.add_filter('position') hc.add_filter('particles') hc.create()
data_ds = yt.load('Enzo_64/RD0006/RedshiftOutput0006') halos_ds = yt.load('rockstar_halos/halos_0.0.bin') # Instantiate a catalog using those two paramter files hc = HaloCatalog(data_ds=data_ds, halos_ds=halos_ds) # Filter out less massive halos hc.add_filter("quantity_value", "particle_mass", ">", 1e14, "Msun") # This recipe creates a spherical data container, computes # radial profiles, and calculates r_200 and M_200. hc.add_recipe("calculate_virial_quantities", ["radius", "matter_mass"]) # Create a sphere container with radius 5x r_200. field_params = dict(virial_radius=('quantity', 'radius_200')) hc.add_callback('sphere', radius_field='radius_200', factor=5, field_parameters=field_params) # Compute profiles of T vs. r/r_200 hc.add_callback('profile', ['virial_radius_fraction'], [('gas', 'temperature')], storage='virial_profiles', weight_field='cell_mass', accumulation=False, output_dir='profiles') # Save the profiles hc.add_callback("save_profiles", storage="virial_profiles", output_dir="profiles") hc.create()