CAMELS library
The CAMELS library is a set python routines written to simplify the analysis of CAMELS data.
Installation
For the stable version do:
python -m pip install CAMELS-library
For the development version do:
git clone https://github.com/franciscovillaescusa/CAMELS
cd CAMELS
python -m pip install .
Routines
Distance to k nearest neighbors
The routine KDTree_distance
can be used to compute the distance to the k nearest neighbors of a set of particles. Note that the neighbors can be a different type of particle as the one considered. For instance, it can be used to compute the distance to the k nearest gas particles from the positions of star particles. The ingredients needed for this routine are:
pos1
. The positions of the particles over which compute its nearest neighbors. In the above example, these would be the positions of the gas particles.pos2
. The positions of the particles over which compute the distances. In the above example, these would be the positions of the start particles. Note thatpos2
can be the same aspos1
: e.g. to compute the distance to the k nearest neighborgs from a set of dark matter particles.k
. The number of neighbors to consider.BoxSize
. To account for periodic boundary conditions, set this number to the size of the simulation box. Note that this number may need to be just slightly larger than that to avoid problems with particles in the edge. E.g. set it toBoxSize*(1.0+1e-8)
.threads
. Number of openmp threads to use in the calculation. Set to-1
to use all the available threads.verbose
. Whether to print some information on the progress.
An example of how to use this routine is this
import numpy as np
import camels_library as CL
import h5py
################## INPUT ##################
# snapshot name
snapshot = '/mnt/ceph/users/camels/Sims/IllustrisTNG/LH_0/snap_033.hdf5'
# KDTree parameters
k = 32 #number of neighbors
threads = -1 #number of openmp threads
verbose = True #whether print some information on calculation progress
###########################################
# read positions of gas and star particles
f = h5py.File(snapshot, 'r')
BoxSize = f['Header'].attrs[u'BoxSize']/1e3 #Mpc/h
pos_gas = f['PartType0/Coordinates'][:]/1e3 #Mpc/h
pos_stars = f['PartType4/Coordinates'][:]/1e3 #Mpc/h
f.close()
# compute distance of each star particle to its k nearest gas particle
# d is a 1D numpy array with the distance of each star particle to its
# k nearest neighborghs
d = CL.KDTree_distance(pos_gas, pos_stars, k, BoxSize*(1.0+1e-8), threads, verbose) #Mpc/h
Gas temperature
The routine temperature
can be used to compute the temperature of the gas particles in a snapshot. One example is this:
import numpy as np
import CAMELS_library as CL
# snapshot name
snapshot = '/mnt/ceph/users/camels/Sims/SIMBA/1P_5/snap_033.hdf5'
# get gas temperature in Kelvin
T = CL.temperature(snapshot)
Gas pressure
The routine pressure
returns the gas pressure of the gas particle of a given snapshot, in units of \((M_\odot/h)({\rm km/s})^2/({\rm kpc}/h)^3\)
import numpy as np
import CAMELS_library as CL
# snapshot name
snapshot = '/mnt/ceph/users/camels/Sims/SIMBA/CV_12/snap_020.hdf5'
# compute gas pressure in unit of (Msun/h)*(km/s)^2/(kpc/h)^3
P = CL.pressure(snapshot)
Electron density
The routine electron_density
computes the electron number density of the gas particles of a snapshot. This routine assumes that star-forming particles are fully neutral and therefore their electron number density is equal to 0. The units of the output are \(h^2{\rm cm}^{-3}\). Its usage is as follows:
import numpy as np
import CAMELS_library as CL
# snapshot name
snapshot = '/mnt/ceph/users/camels/Sims/IllustrisTNG/EX_0/snap_030.hdf5'
# compute electron number density in 1e20 electrons*h^2/cm^3 units
n_e = CL.electron_density(snapshot)