aboutsummaryrefslogtreecommitdiffstats
path: root/fg21sim/extragalactic
diff options
context:
space:
mode:
authorAaron LI <aaronly.me@outlook.com>2017-05-26 12:52:05 +0800
committerAaron LI <aaronly.me@outlook.com>2017-05-26 12:52:05 +0800
commitf8c20f62b7e4ac7a5510a1d40aa5266d6ab9aea4 (patch)
treee888c86e7469b5806c9c88d169ff0c528d0054b4 /fg21sim/extragalactic
parent91f224ca7bd9b8c4057cb57d2843663043e579f5 (diff)
downloadfg21sim-f8c20f62b7e4ac7a5510a1d40aa5266d6ab9aea4.tar.bz2
extragalactic/clusters: Scale input catalog to match the sky coverage
Diffstat (limited to 'fg21sim/extragalactic')
-rw-r--r--fg21sim/extragalactic/clusters.py49
1 files changed, 29 insertions, 20 deletions
diff --git a/fg21sim/extragalactic/clusters.py b/fg21sim/extragalactic/clusters.py
index 8627c34..5abbc13 100644
--- a/fg21sim/extragalactic/clusters.py
+++ b/fg21sim/extragalactic/clusters.py
@@ -1,13 +1,13 @@
-# Copyright (c) 2016 Weitian LI <liweitianux@live.com>
+# Copyright (c) 2016-2017 Weitian LI <weitian@aaronly.me>
# MIT license
"""
Simulation of the radio emissions from clusters of galaxies.
-NOTE
-----
-Currently, only radio *halos* are considered with many simplifications.
-Radio *relics* simulations need more investigations ...
+XXX/TODO
+--------
+* Only consider radio *halos*, with many simplifications!
+* Support radio *relics* simulations ...
"""
import os
@@ -21,6 +21,7 @@ from astropy.cosmology import FlatLambdaCDM
import healpy as hp
import pandas as pd
+from ..sky import get_sky
from ..utils.fits import write_fits_healpix
from ..utils.random import spherical_uniform
from ..utils.convert import Fnu_to_Tb_fast
@@ -93,6 +94,7 @@ class GalaxyClusters:
def __init__(self, configs):
self.configs = configs
+ self.sky = get_sky(configs)
self._set_configs()
def _set_configs(self):
@@ -194,29 +196,36 @@ class GalaxyClusters:
logger.info("Catalog: dropped unnecessary columns: {0}".format(
", ".join(columns_drop)))
- def _expand_catalog_fullsky(self):
- """Expand the catalog to be full sky, by assuming that clusters are
- uniformly distributed. Also, the radio halo fraction is also
- considered to determine the final number of clusters on the full sky.
+ def _scale_catalog_coverage(self):
"""
- fullsky = 4*np.pi * au.sr
- factor = float(fullsky / self.catalog_prop["coverage"])
+ Scale the catalog to match the coverage of the simulation sky
+ (patch or all sky), by assuming that clusters are uniformly
+ distributed. Also, the radio halo fraction is also considered
+ to determine the final number of clusters within the simulation
+ sky.
+ """
+ skyarea = self.sky.area # [ deg^2 ]
+ logger.info("Simulation sky coverage: %s [deg^2]" % skyarea)
+ logger.info("Cluster catalog sky coverage: %s [deg^2]" %
+ self.catalog_prop["coverage"])
+ factor = float(skyarea / self.catalog_prop["coverage"])
n0_cluster = len(self.catalog)
logger.info("Radio halo fraction in clusters: {0}".format(
self.halo_fraction))
- # Total number of clusters on the full sky
- N_cluster = int(n0_cluster * factor * self.halo_fraction)
- logger.info("Total number of clusters on the full sky: {0:,}".format(
- N_cluster))
- logger.info("Expanding the catalog to be full sky ...")
+ # Total number of radio halos within the simulation sky
+ N_halo = int(n0_cluster * factor * self.halo_fraction)
+ logger.info("Total number of radio halos within the " +
+ "simulation sky: {0:,}".format(N_halo))
+ logger.info("Scale the catalog to match the simulation sky ...")
idx = np.round(np.random.uniform(low=0, high=n0_cluster-1,
- size=N_cluster)).astype(np.int)
+ size=N_halo)).astype(np.int)
self.catalog = self.catalog.iloc[idx, :]
self.catalog.reset_index(inplace=True)
- logger.info("Done expand the catalog to be full sky")
+ logger.info("DONE scale the catalog to match the simulation sky")
def _add_random_position(self):
- """Add random positions for each cluster as columns "glon" and
+ """
+ Add random positions for each cluster as columns "glon" and
"glat" to the catalog data.
Column "glon" is the Galactic longitudes, [0, 360) (degree).
@@ -623,7 +632,7 @@ class GalaxyClusters:
self._load_catalog()
self._process_catalog()
#
- self._expand_catalog_fullsky()
+ self._scale_catalog_coverage()
self._add_random_position()
self._add_random_eccentricity()
self._add_random_rotation()