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()
########################################################################### 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'),
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
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