Code for producing fast simulations of the SZ effect for galaxy halos of varying redshift and mass, based on average thermal pressure profile fits from Battaglia et al. 2012. Simulated submaps can include tSZ signal from these halos, simulated CMB, instrument beam convolution and white noise.
The code is structured as depicted here:
The CMB simulations are handled by DeepCMBSim, based on CAMB, and further by pixell. The SZ cluster simluations are done in make_sz_cluster.py
and instrumental effects are added in filters.py
and noise.py
.
We provide an environment specification file for conda
or mamba
users at environment.yml
, which will produce a new virtual environment called szsims
with appropriate versions of major python packages. With conda
, this environment is created by conda env create -f environment.yml
. With micromamba
the env
is omitted and a new environment is instead created with micromamba create -f environment.yml
.
The simulated CMB signal relies on camb
and pixell
, cosmology relies on colossus
, and utilities for saving rely on h5py
. These are specified in the pyproject.toml
file.
From the top-level directory, you can do pip install .
to install the package.
The usage of this code is documented in notebooks/demo_simulation.ipynb
. A detailed walkthrough of the functions available in this code is in notebooks/demo_full_pipeline.ipynb
.
A full list of potential inputs is documented in settings/config.yaml
and you can edit settings/inputdata.yaml
to reflect your desired simulation settings.
dm_halo_dist.py
generates an array of mass and redshift. The functions in make_sz_cluster.py
create pressure profiles, Compton-y, and SZ signal maps for a halo of a given mass and redshift, and produces the final simulated submaps. These submaps contain simulated CMB and simple instrument beam convolution from simtools.py
and white noise from noise.py
. Plotting tools are provided in visualization.py
. Simulations of a large suite of clusters can be achieved easily with simclusters.py
.
Let's say you wanted to produce 100 mock halos distributed across the redshift range 0.2<z<0.4 and with masses in the range 1e14<M200<1e15. To generate these halos and produce their simulated maps with SZ signal (along with CMB signal and noise parameters as specified in Settings/inputdata.yaml
) you would call
import deepszsim as dsz
tc0 = dsz.simulate_clusters(halo_params_dict={
'zmin':0.2, 'zmax':0.5,
'm200min_SM':1e14, 'm200max_SM':1e15
},
num_halos=100)
tc0.get_T_maps()
The clusters and their maps are now in a dictionary which is in a clusters
attribute of the class instance tc0
.
To access the clusters in this set, you can refer to the cluster ID, which itself is obtained from the first five digits of the cluster mass and two digits of the cluster redshift, followed by six random digits. For example, to access a dictionary of the maps and the parameters describing the eleventh cluster, you would do tc0.clusters[tc0.id_list[11]]
. Alternately, to get the ''final'' temperature map (with noise) for the eleventh cluster, we also provide a convenience function: tc0.ith_T_map(11)
is the same as tc0.clusters[tc0.id_list[11]]['maps']['final_map']
.
If you use this code in your research, please cite this GitHub repo and our JOSS paper. Please also make use of the citation instructions for camb
provided here.
If you would like to contribute, please open a new issue, and/or be in touch with the authors
The code was developed by Eve M. Vavagiakis, Samuel D. McDermott, Humna Awan, Elaine Ran, Kush Banker, Samantha Usman, Camille Avestruz, and Brian Nord. This was done in collaboration with Hanzhi Tan, Brian Zhang, and Ioana Cristescu, and the code is maintained by the DeepSkies lab