mirror of
https://github.com/Richard-Sti/csiborgtools.git
synced 2024-12-22 23:28:03 +00:00
aaa14fc880
* Add RAMSES2HDF5 conversion * Upload changes * Clean up * More clean up * updates * Little change * pep9 * Add basic SPH calculation for a snapshot * Add submit script * Remove echo * Little changes * Send off changes * Little formatting * Little updates * Add nthreads argument * Upload chagnes * Add nthreads arguemnts * Some local changes.. * Update scripts * Add submission script * Update script * Update params * Rename CSiBORGBox to CSiBORG1box * Rename CSiBORG1 reader * Move files * Rename folder again * Add basic plotting here * Add new skeletons * Move def * Update nbs * Edit directories * Rename files * Add units to converted snapshots * Fix empty dataset bug * Delete file * Edits to submission scripts * Edit paths * Update .gitignore * Fix attrs * Update weighting * Fix RA/dec bug * Add FORNAX cluster * Little edit * Remove boxes since will no longer need * Move func back * Edit to include sort by membership * Edit paths * Purge basic things * Start removing * Bring file back * Scratch * Update the rest * Improve the entire file * Remove old things * Remove old * Delete old things * Fully updates * Rename file * Edit submit script * Little things * Add print statement * Add here cols_to_structured * Edit halo cat * Remove old import * Add comment * Update paths manager * Move file * Remove file * Add chains
77 lines
No EOL
2.9 KiB
Python
77 lines
No EOL
2.9 KiB
Python
# Copyright (C) 2023 Richard Stiskalek
|
|
# This program is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by the
|
|
# Free Software Foundation; either version 3 of the License, or (at your
|
|
# option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
# Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
|
def add_initial_snapshot(nsim, simname, halo_finder, verbose):
|
|
"""
|
|
Sort the initial snapshot particles according to their final snapshot and
|
|
add them to the final snapshot's HDF5 file.
|
|
"""
|
|
paths = csiborgtools.read.Paths(**csiborgtools.paths_glamdring)
|
|
fname = paths.processed_output(nsim, simname, halo_finder)
|
|
|
|
if simname == "csiborg":
|
|
partreader = csiborgtools.read.CSiBORGReader(paths)
|
|
else:
|
|
partreader = csiborgtools.read.QuijoteReader(paths)
|
|
|
|
fprint(f"processing simulation `{nsim}`.", verbose)
|
|
if simname == "csiborg":
|
|
nsnap0 = 1
|
|
elif simname == "quijote":
|
|
nsnap0 = -1
|
|
else:
|
|
raise ValueError(f"Unknown simulation `{simname}`.")
|
|
|
|
fprint("loading and sorting the initial PID.", verbose)
|
|
sort_indxs = numpy.argsort(partreader.read_snapshot(nsnap0, nsim, "pid"))
|
|
|
|
fprint("loading the final particles.", verbose)
|
|
with h5py.File(fname, "r") as f:
|
|
sort_indxs_final = f["snapshot_final/pid"][:]
|
|
f.close()
|
|
|
|
fprint("sorting the particles according to the final snapshot.", verbose)
|
|
sort_indxs_final = numpy.argsort(numpy.argsort(sort_indxs_final))
|
|
sort_indxs = sort_indxs[sort_indxs_final]
|
|
|
|
del sort_indxs_final
|
|
collect()
|
|
|
|
fprint("loading and sorting the initial particle position.", verbose)
|
|
pos = partreader.read_snapshot(nsnap0, nsim, "pos")[sort_indxs]
|
|
|
|
del sort_indxs
|
|
collect()
|
|
|
|
# In Quijote some particles are position precisely at the edge of the
|
|
# box. Move them to be just inside.
|
|
if simname == "quijote":
|
|
mask = pos >= 1
|
|
if numpy.any(mask):
|
|
spacing = numpy.spacing(pos[mask])
|
|
assert numpy.max(spacing) <= 1e-5
|
|
pos[mask] -= spacing
|
|
|
|
fprint(f"dumping particles for `{nsim}` to `{fname}`.", verbose)
|
|
with h5py.File(fname, "r+") as f:
|
|
if "snapshot_initial" in f.keys():
|
|
del f["snapshot_initial"]
|
|
group = f.create_group("snapshot_initial")
|
|
group.attrs["header"] = "Initial snapshot data."
|
|
dset = group.create_dataset("pos", data=pos)
|
|
dset.attrs["header"] = "DM particle positions in box units."
|
|
|
|
f.close() |