mirror of
https://github.com/Richard-Sti/csiborgtools_public.git
synced 2025-05-24 03:21:10 +00:00
Box units conversion (#3)
* linting * fix long line * rename nb * rename import * add group catalog * move imports out of functions * add array_to_structured * add references * fix subsampling * fix coord bug * add 2M++ dists * save nb * fix comment * add snapshot path * add snapshot path * add read_info * Move transforms * add import radec * expand docs * Move flipcols * update nb * add flip_cols * create file * add blank line * Move units transfs * add blank line * add units import * rm imports * add import * add box_units * add comments
This commit is contained in:
parent
c7665b8136
commit
942c36b142
18 changed files with 6730 additions and 1574 deletions
|
@ -13,8 +13,8 @@
|
|||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from .readsim import (get_csiborg_ids, get_sim_path, open_particle,
|
||||
open_unbinding, read_particle, read_clumpid, read_clumps,
|
||||
read_mmain,
|
||||
convert_mass_cols, convert_position_cols, flip_cols)
|
||||
from .readobs import (read_planck2015, read_2mpp)
|
||||
from .readsim import (get_csiborg_ids, get_sim_path, get_snapshot_path, # noqa
|
||||
read_info, # noqa
|
||||
open_particle, open_unbinding, read_particle, # noqa
|
||||
read_clumpid, read_clumps, read_mmain) # noqa
|
||||
from .readobs import (read_planck2015, read_2mpp) # noqa
|
||||
|
|
|
@ -69,7 +69,7 @@ def read_planck2015(fpath, dist_cosmo, max_comdist=None):
|
|||
return out
|
||||
|
||||
|
||||
def read_2mpp(fpath):
|
||||
def read_2mpp(fpath, dist_cosmo):
|
||||
"""
|
||||
Read in the 2M++ galaxy redshift catalogue [1], with the catalogue at [2].
|
||||
Removes fake galaxies used to fill the zone of avoidance.
|
||||
|
@ -83,16 +83,24 @@ def read_2mpp(fpath):
|
|||
-------
|
||||
out : structured array
|
||||
The catalogue.
|
||||
|
||||
References
|
||||
----------
|
||||
[1] The 2M++ galaxy redshift catalogue; Lavaux, Guilhem, Hudson, Michael J.
|
||||
[2] https://cdsarc.cds.unistra.fr/viz-bin/cat/J/MNRAS/416/2840#/article
|
||||
"""
|
||||
from scipy.constants import c
|
||||
# Read the catalogue and select non-fake galaxies
|
||||
cat = numpy.genfromtxt(fpath, delimiter="|", )
|
||||
cat = cat[cat[:, 12] == 0, :]
|
||||
|
||||
F64 = numpy.float64
|
||||
cols = [("RA", F64), ("DEC", F64), ("Ksmag", F64)]
|
||||
cols = [("RA", F64), ("DEC", F64), ("Ksmag", F64), ("ZCMB", F64),
|
||||
("CDIST_CMB", F64)]
|
||||
out = cols_to_structured(cat.shape[0], cols)
|
||||
out["RA"] = cat[:, 1] - 180
|
||||
out["RA"] = cat[:, 1]
|
||||
out["DEC"] = cat[:, 2]
|
||||
out["Ksmag"] = cat[:, 5]
|
||||
|
||||
out["ZCMB"] = cat[:, 7] / (c * 1e-3)
|
||||
out["CDIST_CMB"] = dist_cosmo.comoving_distance(out["ZCMB"]).value
|
||||
return out
|
||||
|
|
|
@ -30,9 +30,6 @@ F32 = numpy.float32
|
|||
F64 = numpy.float64
|
||||
I32 = numpy.int32
|
||||
I64 = numpy.int64
|
||||
little_h = 0.705
|
||||
BOXSIZE = 677.7 / little_h # Mpc. Otherwise positions in [0, 1].
|
||||
BOXMASS = 3.749e19 # Msun
|
||||
|
||||
|
||||
def get_csiborg_ids(srcdir):
|
||||
|
@ -82,11 +79,62 @@ def get_sim_path(n, fname="ramses_out_{}", srcdir="/mnt/extraspace/hdesmond"):
|
|||
Returns
|
||||
-------
|
||||
path : str
|
||||
The complete path to the `n`th CSiBORG simulation.
|
||||
Path to the `n`th CSiBORG simulation.
|
||||
"""
|
||||
return join(srcdir, fname.format(n))
|
||||
|
||||
|
||||
def get_snapshot_path(Nsnap, simpath):
|
||||
"""
|
||||
Get a path to a CSiBORG IC realisation snapshot.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
Nsnap : int
|
||||
Snapshot index.
|
||||
simpath : str
|
||||
Path to the CSiBORG IC realisation.
|
||||
|
||||
Returns
|
||||
-------
|
||||
snappath : str
|
||||
Path to the CSiBORG IC realisation snapshot.
|
||||
"""
|
||||
return join(simpath, "output_{}".format(str(Nsnap).zfill(5)))
|
||||
|
||||
|
||||
def read_info(Nsnap, simpath):
|
||||
"""
|
||||
Read CSiBORG simulation snapshot info.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
Nsnap : int
|
||||
Snapshot index.
|
||||
simpath : str
|
||||
Path to the CSiBORG IC realisation.
|
||||
|
||||
Returns
|
||||
-------
|
||||
info : dict
|
||||
Dictionary of info paramaters. Note that both keys and values are
|
||||
strings.
|
||||
"""
|
||||
# Open the info file
|
||||
snappath = get_snapshot_path(Nsnap, simpath)
|
||||
filename = join(snappath, "info_{}.txt".format(str(Nsnap).zfill(5)))
|
||||
with open(filename, "r") as f:
|
||||
info = f.read().split()
|
||||
# Throw anything below ordering line out
|
||||
info = numpy.asarray(info[:info.index("ordering")])
|
||||
# Get indexes of lines with `=`. Indxs before/after be keys/vals
|
||||
eqindxs = numpy.asarray([i for i in range(info.size) if info[i] == '='])
|
||||
|
||||
keys = info[eqindxs - 1]
|
||||
vals = info[eqindxs + 1]
|
||||
return {key: val for key, val in zip(keys, vals)}
|
||||
|
||||
|
||||
def open_particle(n, simpath, verbose=True):
|
||||
"""
|
||||
Open particle files to a given CSiBORG simulation.
|
||||
|
@ -109,11 +157,9 @@ def open_particle(n, simpath, verbose=True):
|
|||
"""
|
||||
# Zeros filled snapshot number and the snapshot path
|
||||
nout = str(n).zfill(5)
|
||||
snappath = join(simpath, "output_{}".format(nout))
|
||||
infopath = join(snappath, "info_{}.txt".format(nout))
|
||||
snappath = get_snapshot_path(n, simpath)
|
||||
ncpu = int(read_info(n, simpath)["ncpu"])
|
||||
|
||||
with open(infopath, "r") as f:
|
||||
ncpu = int(f.readline().split()[-1])
|
||||
if verbose:
|
||||
print("Reading in output `{}` with ncpu = `{}`.".format(nout, ncpu))
|
||||
|
||||
|
@ -136,6 +182,7 @@ def open_particle(n, simpath, verbose=True):
|
|||
# Read in this order
|
||||
ncpuloc = f.read_ints()
|
||||
if ncpuloc != ncpu:
|
||||
infopath = join(snappath, "info_{}.txt".format(nout))
|
||||
raise ValueError("`ncpu = {}` of `{}` disagrees with `ncpu = {}` "
|
||||
"of `{}`.".format(ncpu, infopath, ncpuloc, fpath))
|
||||
ndim = f.read_ints()
|
||||
|
@ -382,74 +429,3 @@ def read_mmain(n, srcdir, fname="Mmain_{}.npy"):
|
|||
out[name] = arr[:, i]
|
||||
|
||||
return out
|
||||
|
||||
|
||||
def convert_mass_cols(arr, cols):
|
||||
r"""
|
||||
Convert mass columns from box units to :math:`M_{\odot}`. `arr` is passed
|
||||
by reference and is not explicitly returned back.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
arr : structured array
|
||||
The array whose columns are to be converted.
|
||||
cols : str or list of str
|
||||
The mass columns to be converted.
|
||||
|
||||
Returns
|
||||
-------
|
||||
None
|
||||
"""
|
||||
cols = [cols] if isinstance(cols, str) else cols
|
||||
for col in cols:
|
||||
arr[col] *= BOXMASS
|
||||
|
||||
|
||||
def convert_position_cols(arr, cols, zero_centered=True):
|
||||
r"""
|
||||
Convert position columns from box units to :math:`\mathrm{Mpc}`. `arr` is
|
||||
passed by reference and is not explicitly returned back.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
arr : structured array
|
||||
The array whose columns are to be converted.
|
||||
cols : str or list of str
|
||||
The mass columns to be converted.
|
||||
zero_centered : bool, optional
|
||||
Whether to translate the well-resolved origin in the centre of the
|
||||
simulation to the :math:`(0, 0 , 0)` point. By default `True`.
|
||||
|
||||
Returns
|
||||
-------
|
||||
None
|
||||
"""
|
||||
cols = [cols] if isinstance(cols, str) else cols
|
||||
for col in cols:
|
||||
arr[col] *= BOXSIZE
|
||||
if zero_centered:
|
||||
arr[col] -= BOXSIZE / 2
|
||||
|
||||
|
||||
def flip_cols(arr, col1, col2):
|
||||
"""
|
||||
Flip values in columns `col1` and `col2`. `arr` is passed by reference and
|
||||
is not explicitly returned back.
|
||||
|
||||
|
||||
Parameters
|
||||
----------
|
||||
arr : structured array
|
||||
The array whose columns are to be converted.
|
||||
col1 : str
|
||||
The first column name.
|
||||
col2 : str
|
||||
The second column name.
|
||||
|
||||
Returns
|
||||
-------
|
||||
nothing
|
||||
"""
|
||||
dum = numpy.copy(arr[col1])
|
||||
arr[col1] = arr[col2]
|
||||
arr[col2] = dum
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue