Gaussian density fields
Pylians provide a few routines to generate Gaussian density fields either in 2D or 3D. The ingredients needed are:
grid
. The generated Gaussian density field will have grid x grid pixels in 2D or grid x grid x grid voxels in 3D.k
. 1D float32 numpy array containing the k-values of the input power spectrum.Pk
. 1D float32 numpy array containing the Pk-values of the input power spectrum.Rayleigh_sampling
. Where Rayleigh sampling the modes amplitudes when generating the Gaussian field. IfRayleigh_sampling=0
the Gaussian field will not have cosmic variance. SetRayleigh_sampling=1
for standard Gaussian density fields.seed
. Integer for the random seed of the map.BoxSize
. Size of the region over which to generate the field. Units should be compatible with those ofPk
.threads
. Number of openmp threads. Only used when FFT the field from Fourier space to configuration space.verbose
. Whether output some information.
An example on how to generate these fields in 2D and 3D is this:
import numpy as np
import density_field_library as DFL
grid = 128 #grid size
BoxSize = 1000.0 #Mpc/h
seed = 1 #value of the initial random seed
Rayleigh_sampling = 0 #whether sampling the Rayleigh distribution for modes amplitudes
threads = 1 #number of openmp threads
verbose = True #whether to print some information
# read power spectrum; k and Pk have to be floats, not doubles
k, Pk = np.loadtxt('my_Pk.txt', unpack=True)
k, Pk = k.astype(np.float32), Pk.astype(np.float32)
# generate a 2D Gaussian density field
df_2D = DFL.gaussian_field_2D(grid, k, Pk, Rayleigh_sampling, seed,
BoxSize, threads, verbose)
# generate a 3D Gaussian density field
df_3D = DFL.gaussian_field_3D(grid, k, Pk, Rayleigh_sampling, seed,
BoxSize, threads, verbose)