def find_voids(snapshot, ptypes, grid, MAS, do_RSD, axis, threshold, Radii,
               threads1, threads2, fout):
    
    # read snapshot header and obtain BoxSize and redshift
    head     = readgadget.header(snapshot)
    BoxSize  = head.boxsize/1e3  #Mpc/h                      
    redshift = head.redshift
    
    # compute density field
    delta = MASL.density_field_gadget(snapshot, ptypes, grid, MAS, do_RSD, axis)
    delta /= np.mean(delta, dtype=np.float64);  delta -= 1.0
    
    # identify voids
    V = VL.void_finder(delta, BoxSize, threshold, Radii, 
                       threads1, threads2, void_field=False)

    # void properties and void size function
    void_pos    = V.void_pos
    void_radius = V.void_radius
    VSF_R       = V.Rbins     # bins in radius
    VSF         = V.void_vsf  # void size function
        
    parameters = [grid, MAS, '%s'%ptypes, threshold, '%s'%Radii]

    # save the results to file
    f = h5py.File(fout, 'w')
    f.create_dataset('parameters',    data=parameters)
    f.create_dataset('pos',           data=void_pos)
    f.create_dataset('radius',        data=void_radius)
    f.create_dataset('VSF_Rbins',     data=VSF_R)
    f.create_dataset('VSF',           data=VSF)
    f.close()
Exemplo n.º 2
0
###########################################################################

fig = figure(figsize=(15, 7))
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

# create density field with random spheres
V = VL.random_spheres(BoxSize, Rmin, Rmax, Nvoids, dims)
delta = V.delta

# find voids
V2 = VL.void_finder(delta,
                    BoxSize,
                    threshold,
                    Rmax,
                    Rmin,
                    bins,
                    Omega_m,
                    threads,
                    void_field=True)
delta2 = V2.in_void

ax1.imshow(np.mean(delta[:, :, :], axis=0),
           cmap=get_cmap('nipy_spectral'),
           origin='lower',
           vmin=-1,
           vmax=0.0,
           extent=[0, BoxSize, 0, BoxSize])

ax2.imshow(np.mean(delta2[:, :, :], axis=0),
           cmap=get_cmap('nipy_spectral_r'),
Exemplo n.º 3
0
head = readsnap.snapshot_header(snapshot)
BoxSize = head.boxsize / 1e3  #Mpc/h

Radii = Radii * BoxSize / grid

# read particle positions
pos = readsnap.read_block(snapshot, "POS ", parttype=1) / 1e3  #Mpc/h

# compute density field
delta = np.zeros((grid, grid, grid), dtype=np.float32)
MASL.MA(pos, delta, BoxSize, MAS)
delta /= np.mean(delta, dtype=np.float64)
delta -= 1.0

# find the void
V = VL.void_finder(delta,
                   BoxSize,
                   threshold,
                   Radii,
                   threads1,
                   threads2,
                   void_field=void_field)

# void properties
void_pos = V.void_pos  #Mpc/h
void_radius = V.void_radius  #Mpc/h
VSF_R = V.Rbins  #VSF bins in radius
VSF = V.void_vsf  #VSF
if void_field:
    void_field = V.void_field  #array with 0. Cells belonging to voids have 1
Exemplo n.º 4
0
bins = 50      #number of radii between Rmin and Rmax to find voids

threads1 = 16 #openmp threads
threads2 = 4

f_out = 'Spheres_test.png'
###########################################################################


# create density field with random spheres
V = VL.random_spheres(BoxSize, Rmin, Rmax, Nvoids, dims)
delta = V.delta

# find voids
Radii = np.logspace(np.log10(Rmin), np.log10(Rmax), bins+1, dtype=np.float32)
V2 = VL.void_finder(delta, BoxSize, threshold, Radii, 
                    threads1, threads2, void_field=True)
delta2 = V2.in_void


# print the positions and radius of the generated voids
pos1 = V.void_pos
R1   = V.void_radius
pos2 = V2.void_pos
R2   = V2.void_radius

print '          X       Y       Z       R'
for i in xrange(Nvoids):
        dx = pos1[i,0]-pos2[:,0]
        dx[np.where(dx>BoxSize/2.0)] -= BoxSize
        dx[np.where(dx<-BoxSize/2.0)]+= BoxSize