import yt from yt.analysis_modules.halo_analysis.api import \ HaloCatalog, add_callback def append_profiles(halo): hc = halo.halo_catalog if not hasattr(hc, "profile_storage"): hc.profile_storage = dict((field, []) for field in halo.profiles) for field, profile in halo.profiles.items(): hc.profile_storage[field].append(profile) add_callback("append_profiles", append_profiles) if __name__ == "__main__": dds = yt.load("DD0046/DD0046") hds = yt.load("rockstar_halos/halos_0.0.bin") hc = HaloCatalog(halos_ds=hds, data_ds=dds) hc.add_filter("quantity_value", "particle_mass", ">", 1e13, "Msun") hc.add_callback("sphere") hc.add_callback("profile", ["radius"], ["density"], n_bins=16) hc.add_callback("append_profiles") hc.create() # recombine profiles into arrays for field in hc.profile_storage: hc.profile_storage[field] = dds.arr(hc.profile_storage[field]) yt.save_as_dataset(dds, "profiles.h5", hc.profile_storage) # ...later profds = yt.load("profiles.h5") print (profds.data["radius"]) print (profds.data["density"])