diff --git a/galaxy.py b/galaxy.py index 94ce663..076f4a0 100644 --- a/galaxy.py +++ b/galaxy.py @@ -129,3 +129,50 @@ def ring_analysis(pp, r=4, dr=0.5, dphi=0.125, z=0, dz=0.5, do_mean=True): data[key] = np.array([d[key] for d in data_sec]) return mwavg, phi_sectors, data + + +def get_time_from_relax(pp): + pp.load_parts() + epoch = pp.parts["epoch"].copy() + epoch *= pp.info["unit_time"].express(U.Myr) + trelax = np.min(epoch[epoch > 0]) + tfromrelax = np.max(epoch - trelax) + return tfromrelax + + +def get_last_sfr(pp): + pp.load_parts() + epoch = pp.parts["epoch"].copy() + epoch *= pp.info["unit_time"].express(U.year) + mass = pp.parts["mass"].copy() + mass *= pp.info["unit_mass"].express(U.Msun) + mask = epoch > 0 + masstot, time = np.histogram(epoch[mask], weights=mass[mask], bins=100) + dtime = np.diff(time) + sfr = masstot[-1] / dtime[-1] + return sfr + + +def colmean4kpc(pp): + 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]) + return colmean + + +def allinone(pp): + + 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] + return res