[galaxy] add other undocumented useful routines
This commit is contained in:
@@ -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])
|
data[key] = np.array([d[key] for d in data_sec])
|
||||||
|
|
||||||
return mwavg, phi_sectors, data
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user