Files
pipeline/utils/extract_velcube.py
T
2023-02-02 15:40:19 +01:00

51 lines
1.5 KiB
Python

from snapshotprocessor import SnapshotProcessor, U
def get_velocity_cubes(pp, unit=None):
velcubes = [None, None, None]
for i in range(3):
velcubes[i] = pp.datacube(getter=lambda dset: dset["vel"][..., i])
if unit is not None:
velcubes[i] *= pp.info["unit_velocity"].express(unit)
return velcubes
def get_density_cube(pp, unit=None):
dens_cube = pp.datacube(getter=lambda dset: dset["rho"])
if unit is not None:
dens_cube *= pp.info["unit_density"].express(unit)
return dens_cube
def write_data(filename, vel, dens):
# write fields to ramses frig readable ascii file
f = open(filename, "w")
dummy = 1
size = vel[0].shape[0]
f.write(
"{:8}{:13.5f}{:13.5f}{:13.5f}{:13.5f}\n".format(
size, dummy, dummy, dummy, dummy
)
)
vx, vy, vz = vel
# This strange order matches the one in the galbox condinit
for z in range(size):
for y in range(size):
for x in range(size):
f.write(
"{:13.5f}{:13.5f}{:13.5f}{:13.5f}\n".format(
vx[x, y, z], vy[x, y, z], vz[x, y, z], dens[x, y, z]
)
)
def extract_from_pp(pp):
vel = get_velocity_cubes(pp, unit=U.km_s)
dens = get_density_cube(pp, unit=U.H_cc)
write_data(f"{pp.path_out}/{pp.run}_{pp.num}_velrho.data", vel, dens)
def extract(path, snap_number, params=None):
pp = SnapshotProcessor(path, snap_number, params=params)
extract_from_pp(pp)