diff --git a/galaxy.py b/galaxy.py index 037004b..49268c5 100644 --- a/galaxy.py +++ b/galaxy.py @@ -108,7 +108,7 @@ def sector_analysis(pp, r=4, dr=0.5, phi=0, dphi=0.125, z=0, dz=0.5): return result -def ring_analysis(pp, r=4, dr=0.5, dphi=0.125, z=0, dz=0.5, do_mean=True): +def ring_analysis(pp, r=4, dr=0.5, dphi=0.125, z=0, dz=0.5): """ Compute the average at a given of quantities computed in polar sectors. """ @@ -163,32 +163,62 @@ def get_last_sfr(pp, r=4, dr=0.5, z=0, dz=0.5): return sfr -def colmean4kpc(pp): +def colmean_ring(pp, r=4, dr=0.5): pp.coldens("z") pp.rr("z") col = pp.get_value("/maps/coldens_z", unit=U.coldens) rr = pp.get_value("/maps/rr_z", unit=U.kpc) - colmean = np.mean(col[np.abs(rr - 4) < 0.5]) + colmean = np.mean(col[np.abs(rr - r) < dr]) return colmean -def allinone(pp): +def analyse_ring(pp, r=4): + res = {} + res["run"] = pp.run + res["num"] = pp.num + res["coldens"] = colmean_ring(pp, r) + res["sfr"] = get_last_sfr(pp, r) + res["time"] = get_time_from_relax(pp) + ring = ring_analysis(pp, r, dphi=1.0 / (2 * r))[0] + for key in ring: + for i, fluid in enumerate(["gas", "dm", "stars"]): + res[f"{key}_{fluid}"] = ring[key][i] + return res + +def analyse_disk(pp, rmax=6.0, zmax=1.0): get_gas_dm_stars(pp) res = {} res["run"] = pp.run res["num"] = pp.num - res["coldens"] = colmean4kpc(pp) - res["sfr"] = get_last_sfr(pp) - res["time"] = get_time_from_relax(pp) - ring = ring_analysis(pp)[0] - for key in ring: - for i, fluid in enumerate(["gas", "dm", "stars"]): - res[f"{key}_{fluid}"] = ring[key][i] + res["coldens"] = colmean_ring(pp, rmax / 2.0, rmax / 2.0) + res["sfr"] = get_last_sfr(pp, rmax / 2.0, rmax / 2.0, 0, zmax) + res["time"] = get_time_from_relax(pp) + + for dset, fluid in zip([pp.gas, pp.dm, pp.stars], ["gas", "dm", "stars"]): + res[f"ek_{fluid}"] = np.sum(dset["ek"]) # J + res[f"mass_{fluid}"] = np.sum(dset["mass_kg"]) # kg + res[f"ek_spe_{fluid}"] = res[f"ek_{fluid}"] / res[f"mass_{fluid}"] # J.kg^-1 + return res + + +def load_wrapper(pp, fun): + """ + Wrapper to load_unload data and map function + """ + get_gas_dm_stars(pp) + res = fun(pp) pp.unload_cells() pp.unload_parts() del pp.dm del pp.gas del pp.stars return res + + +def allinone(pp): + def fun(pp): + return analyse_disk(pp), analyse_ring(pp, 4), analyse_ring(pp, 6) + + return load_wrapper(pp, fun)