1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
|
#
# Configurations for "fg21sim"
# Syntax: `ConfigObj`, https://github.com/DiffSK/configobj
#
# Foreground components to be simulated
[foregrounds]
# Diffuse Galactic synchrotron emission (unpolarized)
galactic/synchrotron = boolean(default=False)
# Diffuse Galactic free-free emission
galactic/freefree = boolean(default=False)
# Galactic supernova remnants emission
galactic/snr = boolean(default=False)
# Extragalactic clusters of galaxies emission
extragalactic/clusters = boolean(default=False)
# Simulation sky/region configurations
[sky]
# Type of the input/output simulation sky
# + patch:
# Input/output sky template is only a (square) patch of the sky.
# The simulated output maps have the same coverage/field as the
# input template, as well as the coordinate projection.
# + healpix:
# Input/output sky template covers (almost) all sky, and stored
# in HEALPix format. The simulated output maps will also be
# all-sky using the HEALPix projection.
type = option("patch", "healpix", default="patch")
# Configurations for input/output sky patch
[[patch]]
# The (R.A., Dec.) coordinate of the sky patch center
# Unit: [deg]
# (MWA EoR0 field center: (0, -27))
xcenter = float(default=0, min=0, max=360)
ycenter = float(default=-27, min=-90, max=90)
# The image dimensions (i.e., number of pixels) of the sky patch,
# along the X (R.A./longitude) and Y (Dec./latitude) axes.
# Default: 1800x1800 => 10x10 [deg^2] (20 arcsec/pixel)
xsize = integer(default=1800, min=1)
ysize = integer(default=1800, min=1)
# Pixel size [arcsec]
pixelsize = float(default=20, min=0)
# Configurations for input/output HEALPix sky
[[healpix]]
# HEALPix Nside value, i.e., pixel resolution
nside = integer(default=1024, min=128)
# Frequencies specification of the simulation products
[frequency]
# How to specify the frequencies
# + custom:
# directly specify the frequency values using the "frequencies" config
# + calc:
# calculate the frequency values by "start", "stop", and "step"
type = option("custom", "calc", default="custom")
# The frequency values to be simulated if above "type" is "custom".
# Unit: [MHz]
frequencies = float_list(default=list())
# Parameters to calculate the frequencies
# NOTE: "start" and "stop" frequencies are both inclusive.
# Unit: [MHz]
start = float(default=None)
stop = float(default=None)
step = float(default=None)
# Configuration for output products
[output]
# Filename pattern for the output products, which will be finally
# formatted using `str.format()`.
filename_pattern = string(default="{prefix}_{frequency:06.2f}.fits")
# Use single-precision float instead of double (to save spaces)
float32 = boolean(default=True)
# Whether to calculate the checksum for the output FITS file?
# NOTE: May cost significantly more time on writing FITS file.
checksum = boolean(default=False)
# Whether to overwrite existing files (e.g., maps, catalogs, manifest, ...)
clobber = boolean(default=False)
# Filename of the simulation products manifest (JSON format), which
# records all output products together with their sizes and MD5 hashes.
# Do not create such a manifest if this option is not specified.
manifest = string(default=None)
# Cosmological parameters
# References: Komatsu et al. 2011, ApJS, 192, 18; Tab.(1)
[cosmology]
# Hubble constant at z=0; [km/s/Mpc]
H0 = float(default=71.0, min=0.0)
# Density of non-relativistic matter in units of the critical density at z=0
OmegaM0 = float(default=0.27, min=0.0, max=1.0)
# Density of the baryon at present day
Omegab0 = float(default=0.046, min=0.0, max=1.0)
# Present-day CMB temperature; [K]
Tcmb0 = float(default=2.725)
# Present-day rms density fluctuations on a scale of 8 h^-1 [Mpc]
sigma8 = float(default=0.81, min=0.0)
# Scalar spectral index
ns = float(default=0.96, min=0.0)
# Configurations for initialization/reconfiguration of the `logging` module
[logging]
# debug: Detailed information, typically of interest only when diagnosing
# problems.
# info: Confirmation that things are working as expected.
# warning: An indication that something unexpected happended, or indicative
# of some problem in the near future (e.g., "disk space low").
# The software is still working as expected.
# error: Due to a more serious problem, the software has not been able to
# perform some function.
# critical: A serious error, indicating that the program itself may be unable
# to continue running.
level = option("debug", "info", "warning", "error", "critical", default="info")
# Set the format of displayed messages
format = string(default="%(asctime)s [%(levelname)s] <%(name)s:%(lineno)d> %(message)s")
# Set the date/time format in messages
datefmt = string(default="%H:%M:%S")
# Set the logging filename (will create a `FileHandler`)
# If set to "" (empty string), then the `FileHandler` will be disabled.
filename = string(default="")
# Set the stream used to initialize the `StreamHandler`
# If set to "" (empty string), then the `StreamHandler` will be disabled.
stream = option("stderr", "stdout", "", default="stderr")
#
# Galactic emission components
#
[galactic]
# Synchrotron emission component (unpolarized)
[[synchrotron]]
# The template map for the simulation, e.g., Haslam 408 MHz survey.
# Unit: [K] (Kelvin)
template = string(default=None)
# The frequency of the template map.
# Unit: [MHz]
template_freq = float(default=None, min=0)
# Spectral index map
indexmap = string(default=None)
# Whether add fluctuations on the small scales according the angular
# power spectrum prediction?
add_smallscales = boolean(default=False)
# Range of multipole moments (l) of the angular power spectrum.
# The power spectrum will be cut off to a constant for multipole l < lmin.
# NOTE: Update the ``lmax`` accordingly w.r.t. ``sky/healpix/nside``.
# Generally, lmax = 3 * nside - 1
lmin = integer(min=0, default=10)
lmax = integer(min=1, default=3071)
# Filename prefix for this component
prefix = string(default="gsync")
# Output directory to save the simulated results
output_dir = string(default=None)
# Free-free bremsstrahlung emission component
[[freefree]]
# The Hα map from which to derive the free-free emission
# Unit: [Rayleigh]
halphamap = string(default=None)
# The 100-μm dust map used to correct Hα dust absorption
# Unit: [MJy/sr]
dustmap = string(default=None)
# Effective dust fraction in the LoS actually absorbing Halpha
dust_fraction = float(default=0.33, min=0.1, max=1)
# Halpha absorption threshold:
# When the dust absorption goes rather large, the true Halpha
# absorption can not well determined. This configuration sets the
# threshold below which the dust absorption can be well determined,
# while the sky regions with higher absorption are masked out due
# to unreliable absorption correction.
# Unit: [mag]
halpha_abs_th = float(default=1)
# The electron temperature assumed for the ionized interstellar medium
# that generating Hα emission.
# Unit: [K]
electron_temperature = float(default=7000, min=1000)
# Filename prefix for this component
prefix = string(default="gfree")
# Output directory to save the simulated results
output_dir = string(default=None)
# Supernova remnants emission
[[snr]]
# The Galactic SNRs catalog data (CSV file)
catalog = string(default=None)
# Output the effective/inuse SNRs catalog data (CSV file)
catalog_outfile = string(default=None)
# Resolution for simulating each SNR template, which are finally
# mapped to the all-sky HEALPix map if used.
# Unit: [arcsec]
resolution = float(default=30, min=5)
# Filename prefix for this component
prefix = string(default="gsnr")
# Output directory to save the simulated results
output_dir = string(default=None)
#
# Extragalactic emission components
#
[extragalactic]
#
# Press-Schechter formalism to determine the cluster distributions
# with respect to mass and redshift, from which to further determine
# the total number of clusters within a sky patch and to sample the
# masses and redshifts for each cluster.
#
[[psformalism]]
# The model of the fitting function for halo/cluster mass distribution
# For all models and more details:
# https://hmf.readthedocs.io/en/latest/_autosummary/hmf.fitting_functions.html
model = option("smt", "jenkins", "ps", default="ps")
# The minimum (inclusive) and maximum (exclusive!) cluster mass
# within which to calculate the halo mass distribution.
# Unit: [Msun]
M_min = float(default=1e12, min=1e10, max=1e14)
M_max = float(default=1e16, min=1e14, max=1e18)
# The logarithmic (base 10) step size for the halo masses; therefore
# the number of intervals is: (log10(M_max) - log10(M_min)) / M_step
M_step = float(default=0.01, min=0.001, max=0.1)
# The minimum and maximum redshift within which to calculate the
# halo mass distribution; as well as the step size.
z_min = float(default=0.01, min=0.001, max=1)
z_max = float(default=4, min=1, max=100)
z_step = float(default=0.01, min=0.001, max=1)
# Output file (NumPy ".npz" format) to save the calculated halo mass
# distributions at every redshift.
#
# This file packs the following 3 NumPy arrays:
# * ``z``:
# Redshifts where the halo mass distribution is calculated.
# * ``mass``:
# (Logarithmic-distributed) mass points.
# Unit: [Msun] (the little "h" is folded into the values)
# * ``dndlnm``:
# Shape: (len(z), len(mass))
# Differential mass function in terms of natural log of M.
# Unit: [Mpc^-3] (the little "h" is folded into the values)
dndlnm_outfile = string(default=None)
#
# Extended emissions from the clusters of galaxies
# The configurations in this ``[[clusters]]`` section may also be
# used by the following ``[[halos]]`` section.
#
[[clusters]]
# Output CSV file of the cluster catalog containing the simulated
# mass, redshift, position, shape, recent merger info, etc.
catalog_outfile = string(default=None)
# Whether to dump the raw data of the simulated cluster catalog in
# Python native pickle format (i.e., ".pkl") to a file with the same
# basename as the above ``catalog_outfile``?
# The dumped data can be easily loaded back for reuse.
dump_catalog_data = boolean(default=True)
# Whether to directly use the (previously simulated) catalog data as
# specified by the above "catalog_outfile" and ``dump_catalog_data``
# options?
#
# NOTE:
# By using an existing catalog, the steps to derive these data are
# simply skipped.
# Due to the small number density of the galaxy clusters, the simulated
# results within a small patch of sky (e.g., 100 [deg^2]) show
# significant fluctuations (several or even several tens of times
# of differences between simulations). Therefore, one may run many
# tests and only create images at some frequencies necessary for
# testing, then select the satisfying one to continue the simulation
# to generate images at all frequencies.
use_dump_catalog_data = boolean(default=False)
# Output CSV file of the halos catalog containing the calculated
# properties of the simulated halos.
halos_catalog_outfile = string(default=None)
# Whether to dump the whole data of the simulated halos in Python
# native pickle format (i.e., ".pkl") to a file with the same basename
# as the above ``halos_catalog_outfile``?
# The dumped data also includes the derived electron spectrum for
# each halo, therefore this file can be reloaded back in order to
# calculate the emissions at other frequencies.
dump_halos_data = boolean(default=True)
# Whether to directly use the (previously dumped) halos data (".pkl")
# as specified by the above ``halos_catalog_outfile`` and
# ``dump_halos_data`` options?
# In this way, the radio emissions at additional frequencies can be
# easily (and consistently) calculated.
use_dump_halos_data = boolean(default=False)
# The minimum mass for clusters when to determine the galaxy clusters
# total counts and their distributions.
# Unit: [Msun]
mass_min = float(default=1e14, min=1e13)
# Boost the number of expected cluster number within the sky coverage
# by the specified times.
# NOTE: for testing usage.
boost = float(default=1)
# Minimal elongated fraction for creating the images of radio halos
# The ``felong`` is defined as ``felong = b/a``, similar to the Hubble
# classification for the elliptical galaxies. ``felong_min = 1.0``
# means no elongation, and ``felong_min = 0.6`` is a good choice as
# the observed radio halos are generally regular.
felong_min = float(default=1, min=0.1, max=1)
# Number of most powerful halos to be dropped out.
halo_dropout = integer(default=0, min=0)
# Minimum mass change of the main cluster to be regarded as a merger
# event instead of an accretion event.
# Unit: [Msun]
merger_mass_min = float(default=1e13, min=1e11, max=1e14)
# The trace back time when to stop tracing the merging history of
# clusters. ~2-3 Gyr should be enough since the turbulence acceleration
# effective time ~<1 Gyr and the halo lifetime is also short compared
# to mergers.
# Unit: [Gyr]
time_traceback = float(default=3, min=1, max=5)
# The temperature of the outer gas surrounding the cluster. Accretion
# shocks form near the cluster virial radius during the cluster formation,
# which can heat the cluster ICM to have a higher temperature than the
# virial temperature:
# kT_icm ~ kT_vir + 1.5 * kT_out,
# with: kT_out ~ 0.5 [keV]
# Reference: Fujita et al. 2003, ApJ, 584, 190; Eq.(49)
# Unit: [keV]
kT_out = float(default=0, min=0)
# Filename prefix for this component
prefix = string(default="cluster")
# Output directory to save the simulated results
output_dir = string(default=None)
#
# Giant radio halos
#
[[halos]]
# A custom factor to tune the turbulent acceleration efficiency.
# NOTE: This parameter incorporates the efficiency factor describing
# the effectiveness of the ICM plasma instabilities.
f_acc = float(default=1, min=0.1, max=10)
# The factor that is multiplied to the turbulence injection radius
# to derive the radio halo radius.
f_radius = float(default=1, min=0.1, max=10)
# The fraction of merger energy transferred into the turbulence.
eta_turb = float(default=0.1, min=0.1, max=0.5)
# The fraction of the thermal energy injected into the cosmic-ray
# electrons during the cluster life time.
eta_e = float(default=0.003, min=0.001, max=0.1)
# The energy density ratio of cosmic ray to the thermal ICM.
# NOTE: Equipartition between the magnetic field and cosmic ray is
# assumed, i.e., eta_b == x_cr.
x_cr = float(default=0.015, min=0.001, max=0.1)
# The scaling index of the diffusion coefficient (D_γγ) w.r.t. the
# mass of the main cluster.
mass_index = float(default=0, min=0, max=2)
# The spectral index of the injected primary electrons.
injection_index = float(default=2.3, min=2.1, max=3.0)
# Minimum and maximum Lorentz factor (i.e., energy) of the relativistic
# electron spectrum.
gamma_min = float(default=1)
gamma_max = float(default=1e6)
# Number of cells on the logarithmic momentum grid used to solve the
# Fokker-Planck equation.
gamma_np = integer(default=256)
# Number of cells used as the buffer regions near both the lower
# and upper boundaries, within which the values will be replaced by
# extrapolating from the inner-region data, in order to avoid the
# unphysical particle pile-ups.
#
# NOTE: To disable the boundary fix, set this to 0, otherwise, set to
# a number >= 2. It is suggested to be about 5%-10% of the
# ``gamma_np``.
buffer_np = integer(default=10, min=0)
# Time step for solving the Fokker-Planck equation
# Unit: [Gyr]
time_step = float(default=0.02, min=1e-4, max=0.1)
# How long the period before the merger begins, which is used to derive
# an approximately steady initial electron spectrum. During this period,
# the acceleration is turned off and only leaves energy loss mechanisms.
# Unit: [Gyr]
time_init = float(default=1, min=0)
# Parameters of the beta-model that is used to describe the gas density
# profile of the cluster.
# The fraction of the core radius to cluster's virial radius.
f_rc = float(default=0.1)
# The slope parameter (i.e., beta).
beta = float(default=0.8)
# The minimum and maximum frequencies as well as the number of frequency
# points for calculating the total radio emissivity, which is used to
# approximate the bolometric emissivity.
# Unit: [MHz]
bolo_freq_min = float(default=10)
bolo_freq_max = float(default=1e5)
bolo_freq_num = integer(default=256)
# The threshold for the bolometric emissivity acceleration factor to
# determine whether the halo is genuine/formed.
genuine_threshold = float(default=10)
|