Version 16 (modified by sskory, 5 years ago)

A bit more clarification...

VOBOZ (VOronoi BOund Zones)

VOBOZ is a halo finding algorithm developed by Mark Neyrinck. We maintain a copy in our public repository, that has been modified to read and output in HDF5, and to enable control of the integer precision at compile time. To make maintenance simpler, this version also removes the serial version of voz1b1 and jozov, the void finder. The input datasets can be created by a new parallel particle extractor particlegen.exe, which will be released shortly after Enzo 1.5.

Executables and Arguments

Each executable should display the appropriate arguments when called incorrectly, or without any flags. The order of commands is the same as they are shown below. The minimum number of sub-zones is eight; it is impossible to run VOBOZ on the whole box at once.

voz1b1_mpi

voboz $ ./bin/voz1b1_mpi 
Wrong number of arguments.
arg1: position file
arg2: border size
arg3: box size
arg4: suffix
arg5: number of divisions
voboz $ 

Example:

$ mpirun -np 4 ~/Projects/voboz/bin/voz1b1_mpi RedshiftOutput0007.h5 0.2 1 rd7 2 >& rd7.log &

The output will be eight files, corresponding to the 2x2x2=8 subvolumes:

login3% ls *rd7*
part.rd7.00.00.00  part.rd7.00.01.00  part.rd7.01.00.00  part.rd7.01.01.00
part.rd7.00.00.01  part.rd7.00.01.01  part.rd7.01.00.01  part.rd7.01.01.01

voztie

voboz $ ./bin/voztie 
Wrong number of arguments.
arg1: number of divisions (default 2)
arg2: suffix describing this run
voboz $ 

Example:

$ ~/voboz/bin/voztie 2 rd7

This will produce two new files, adjrd7.dat and volrd7.dat:

login3% ls *rd7*
adjrd7.dat         part.rd7.00.00.01  part.rd7.00.01.01  part.rd7.01.00.01  part.rd7.01.01.01
part.rd7.00.00.00  part.rd7.00.01.00  part.rd7.01.00.00  part.rd7.01.01.00  volrd7.dat

jovoz

voboz $ ./bin/jovoz  
Wrong number of arguments.
arg1: adjacency file
arg2: volume file
arg3: output zone membership file
arg4: output text file
arg5: volume tolerance (e.g. 1)
voboz $ 

Example:

$ ~/voboz/bin/jovoz adjrd7.dat volrd7.dat zones.rd7.dat zones.rd7.txt 0.005

This will make two new files, zones.rd7.dat and zones.rd7.txt:

login3% ls *rd7*
adjrd7.dat         part.rd7.00.00.01  part.rd7.00.01.01  part.rd7.01.00.01  part.rd7.01.01.01  zones.rd7.dat
part.rd7.00.00.00  part.rd7.00.01.00  part.rd7.01.00.00  part.rd7.01.01.00  volrd7.dat         zones.rd7.txt

boz

voboz $ ./bin/boz   
Wrong number of arguments.
arg1: box size
arg2: nsim
arg3: Omega_matter
arg4: scale factor a
arg5: position and velocity file
arg6: input zone file
arg7: output bound zone file
arg8: output text file
arg9: unbinding f
voboz $ 

Examples:

$ ~/voboz/bin/boz 10 32 0.3 1.0 RedshiftOutput0007.h5 zones.rd7.dat halos.rd7.h5 halos.rd7.txt 1.2

Output

The output that contains the final haloes is in the halos.rd7.h5 file above, which is a HD5 file. Each halo is a dataset:

login3% h5ls halos.rd7.h5 | head -8
Halo00000000             Dataset {16}
Halo00000001             Dataset {42}
Halo00000002             Dataset {11}
Halo00000003             Dataset {7}
Halo00000004             Dataset {31}
Halo00000005             Dataset {18}
Halo00000006             Dataset {28}
Halo00000007             Dataset {29}

And inside each dataset is a list of the particle IDs that correspond to that halo. Particle IDs can appear in multiple groups, as VOBOZ can detect substructure. Note that this ID corresponds to the order in which that particle appears in the particle file (in this case RedshiftOutput0007.h5), not the particle_index field from enzo:

login3% h5dump -d Halo00000000 halos.rd7.h5
HDF5 "halos.rd7.h5" {
DATASET "Halo00000000" {
   DATATYPE  H5T_STD_I64LE
   DATASPACE  SIMPLE { ( 16 ) / ( 16 ) }
   DATA {
   (0): 4, 19, 32, 36, 40, 44, 46, 49, 52, 54, 60, 66, 72, 82, 98, 178054
   }
}
}

cull_subhalos

This is a python script that reads in the output of voboz, above, and outputs an identically formatted HDF5 file with the haloes sorted by size, and subhaloes removed. This is useful if you want to create a halo merger tree where uniqueness is important, or you're only interested in the large haloes, and not the substructure inside haloes.

login3% ./cull_subhalos 

cull_subhalos: Removes subhalos (not the particles, just the group)
Usage: cull_subhalos <bound halo file>
Output: <bound halo file>.culled
Exiting


login3% ./cull_subhalos halos.rd7.h5