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=0the Gaussian field will not have cosmic variance. SetRayleigh_sampling=1for 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)