mirror of
https://github.com/Findus23/halo_comparison.git
synced 2024-09-13 09:03:49 +02:00
158 lines
5.2 KiB
Python
158 lines
5.2 KiB
Python
from pathlib import Path
|
|
from subprocess import run
|
|
from typing import List
|
|
|
|
import numpy as np
|
|
import pynbody
|
|
from matplotlib import pyplot as plt
|
|
from matplotlib.colors import LogNorm
|
|
from pynbody.array import SimArray
|
|
from pynbody.snapshot import FamilySubSnap
|
|
from pynbody.snapshot.ramses import RamsesSnap
|
|
from scipy import constants
|
|
|
|
ramses_imager = Path("~/cosmoca/RamsesImager/build/RamsesImager").expanduser()
|
|
dir = Path("/media/ssd/cosmos_data/coxeter/richings21_ics/richings21_bary_ramses_7_10_11/")
|
|
|
|
|
|
def get_slice_argument(
|
|
extent: List[float], zcenter: float,
|
|
ramses_dir: Path, interpolation_method: str,
|
|
depth: float):
|
|
xmin, xmax, ymin, ymax = extent
|
|
# interpolate = interpolation_method == "linear"
|
|
interpolate = False
|
|
arguments = {
|
|
"x": (xmin + xmax) / 2,
|
|
"y": (ymin + ymax) / 2,
|
|
"z": zcenter,
|
|
"w": xmax - xmin,
|
|
"h": ymax - ymin,
|
|
"d": depth,
|
|
"l": 14
|
|
}
|
|
args = [str(ramses_imager)]
|
|
for k, v in arguments.items():
|
|
args.append(f"-{k} {v}")
|
|
|
|
if interpolate:
|
|
args.append("-i")
|
|
|
|
args.append(str(ramses_dir / "info_00009.txt"))
|
|
return args, ramses_imager.parent
|
|
|
|
|
|
def load_slice_data(file: Path):
|
|
with file.open("rb") as infile:
|
|
np.fromfile(file=infile, dtype=np.int32, count=1)
|
|
[nx, ny] = np.fromfile(file=infile, dtype=np.int32, count=2)
|
|
np.fromfile(file=infile, dtype=np.int32, count=1)
|
|
|
|
np.fromfile(file=infile, dtype=np.int32, count=1)
|
|
data: np.ndarray = np.fromfile(file=infile, dtype=np.float32, count=nx * ny)
|
|
np.fromfile(file=infile, dtype=np.int32, count=1)
|
|
print("NEGATIVE", (data < 0).sum())
|
|
# np.fromfile(file=infile, dtype=np.int32, count=1)
|
|
# cm_per_px = np.fromfile(file=infile, dtype=np.float64, count=1)[0]
|
|
# np.fromfile(file=infile, dtype=np.int32, count=1)
|
|
return data.reshape((nx, ny))
|
|
|
|
|
|
def main():
|
|
file = dir / "output_00009"
|
|
s: RamsesSnap = pynbody.load(str(file))
|
|
gas_data: FamilySubSnap = s.gas
|
|
h = s.properties["h"]
|
|
a = s.properties["a"]
|
|
print("RAMSES a", a)
|
|
|
|
# dm
|
|
mass_array: SimArray = s.dm["mass"]
|
|
coord_array: SimArray = s.dm["pos"]
|
|
masses = np.asarray(mass_array.in_units("1e10 Msol"))
|
|
high_res_mass = np.amin(np.unique(masses)) # get lowest mass of particles
|
|
|
|
is_high_res_particle = masses == high_res_mass
|
|
|
|
coordinates = np.asarray(coord_array.in_units("Mpc"))
|
|
hr_coordinates = coordinates[is_high_res_particle] / a
|
|
|
|
np.save(f"/home/lukas/tmp/ramses_grid_hr_coordinates", hr_coordinates)
|
|
print(high_res_mass)
|
|
|
|
# temperature_array: SimArray = gas_data["temp"]
|
|
# p_array: SimArray = gas_data["p"].in_units("1e10 Msol Mpc^-3 km^2 s^-2")
|
|
# rho_array: SimArray = gas_data["rho"].in_units("1e10 Msol Mpc^-3")
|
|
# coord_array: SimArray = gas_data["pos"].in_units("Mpc")
|
|
# mass_array = np.asarray(gas_data["mass"].in_units("1e10 Msol"))
|
|
# bary_coords = np.asarray(coord_array)
|
|
# bary_properties = {
|
|
# "Temperatures": np.asarray(temperature_array.in_units("K")),
|
|
# "Pressures": np.asarray(p_array),
|
|
# "Densities": np.asarray(rho_array),
|
|
# "Entropies": np.asarray(np.log10(p_array / rho_array ** (5 / 3))),
|
|
# }
|
|
|
|
michael_extent = np.asarray([[32.07045664, 34.13128024],
|
|
[37.562513, 39.6233366],
|
|
[34.54953566, 36.61035927]])
|
|
|
|
frac_extent = michael_extent[:2].flatten() / 100 / h
|
|
frac_center = michael_extent[2].mean() / 100 / h
|
|
# old extents:
|
|
# frac_extent=[0.46938643, 0.50738643, 0.55012166, 0.58812166]
|
|
# frac_center=0.52467408
|
|
|
|
print("frac")
|
|
|
|
print(frac_extent)
|
|
print(frac_center)
|
|
args, imager_dir = get_slice_argument(
|
|
frac_extent, frac_center,
|
|
file, interpolation_method="nearest",
|
|
depth=0.00000000001
|
|
# depth=depth
|
|
)
|
|
print(" ".join(args))
|
|
|
|
run(args, cwd=imager_dir)
|
|
property_map = {
|
|
"Densities": "rhomap",
|
|
"Entropies": "Smap",
|
|
"Temperatures": "Tmap"
|
|
}
|
|
|
|
for property in ["cic", "Densities", "Entropies", "Temperatures"]:
|
|
if property == "cic":
|
|
...
|
|
else:
|
|
|
|
fname = imager_dir / f"snapshot_{property_map[property]}_zproj_zobs-0p00.bin"
|
|
grid = load_slice_data(fname).T
|
|
if grid.sum() == 0:
|
|
raise ValueError("all 0")
|
|
if property == "Densities":
|
|
# convert g/cm^3 to 1e10 Msol Mpc^-3
|
|
solar_mass_in_gram = 1.988e33
|
|
mpc_in_cm = constants.parsec * constants.mega * 100
|
|
grid = np.asarray(grid)
|
|
grid *= (mpc_in_cm ** 3 / solar_mass_in_gram / 1e10)
|
|
print(grid.shape, "shape")
|
|
print(grid)
|
|
plt.figure()
|
|
plt.imshow(
|
|
grid,
|
|
norm=LogNorm(),
|
|
interpolation="none",
|
|
origin="lower",
|
|
extent=frac_extent * 100,
|
|
)
|
|
plt.colorbar()
|
|
plt.savefig(f"/home/lukas/tmp/ramses_grid_{property}.pdf")
|
|
|
|
np.save(f"/home/lukas/tmp/ramses_grid_{property}", grid)
|
|
plt.show()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|