Smoothing
Pylians provides routines to smooth fields with several filters. The ingredients needed are:
field
. This is a 3D float numpy array that contains the input field to be smoothed.BoxSize
. This is the size of the box with the input density field.R
. This is the smoothing scale. This argument only matter for filters operating in configuration space:Top-Hat
andGaussian
. For other filters, set this value to0
.grid
. This is the grid size of the input field, i.e.field.shape[0]
.threads
. Number of openmp threads to be used.Filter
. Filter to use.'Top-Hat'
,'Gaussian'
or'Top-Hat-k'
.kmin
. The minimum value of the wavenumber when using theTop-Hat-k
filter. This argument only need to be specified when using this filter.kmax
. The maximum value of the wavenumber when using theTop-Hat-k
filter. This argument only need to be specified when using this filter.W_k
. This is a 3D complex64 numpy array containing the Fourier-transform of the filter. Notice that when smoothing a discrete field, like the one stored on a regular grid, the Fourier-transform of the filter need to be computed in the same way as the for the field, i.e. through DFT instead of FT.
An example is this
import smoothing_library as SL
BoxSize = 75.0 #Mpc/h
R = 5.0 #Mpc.h
grid = field.shape[0]
Filter = 'Top-Hat'
threads = 28
# compute FFT of the filter
W_k = SL.FT_filter(BoxSize, R, grid, Filter, threads)
# smooth the field
field_smoothed = SL.field_smoothing(field, W_k, threads)
Pylians can also smooth 2D maps by adding _2D
to the smoothing routines:
import smoothing_library as SL
import numpy as np
# we take as field a temperature image from the CAMELS Multifield Dataset
f_map = 'CMD/2D_maps/data/Maps_T_IllustrisTNG_CV_z=0.00.npy'
field = np.load(f_map)[0] #only take the first image
BoxSize = 25.0 #Mpc/h
grid = field.shape[0]
R = 0.0 #only matter for configuration space filters
Filter = 'Top-Hat-k'
threads = 1
kmin = 0 #h/Mpc
kmax = 10 #h/Mpc
# compute the filter in Fourier space
W_k = SL.FT_filter_2D(BoxSize, R, grid, Filter, threads, kmin, kmax)
# smooth the field
field_smoothed = SL.field_smoothing_2D(field, W_k, threads)
