Closed kenj19 closed 2 years ago
Hi @kenj19, I do not think this is the correct way to identify haloes across redshift snapshots. What I think you are finding are haloes that have moved into neighbouring cells between the two redshift snapshots.
The halo finder is applied on the density field at the specific redshift. This is the evolved density field (using 2LPT) thus across the two snapshots the density field will have evolved. Thus, the locations of the halos will also evolve.
This movement of the halos could then cause two things to happen. Either: (i) it moves to a voxel that previously did not have a halo or (ii) it moves into a voxel which already contains a halo. In the former case, you'll just have the halo with a position offset, in the latter it will be the mass of the most massive halo in the cell. Thus, if it is smaller that the existing halo it will not be identifiable.
I suspect this is what you are finding.
Hi @BradGreig, thank you for the response - this resolves my misunderstanding. Thanks!
Describe the bug:
Halos stochastically popping in and out of existence from one redshift to the next, despite setting global_params.N_POISSON to a negative integer.
To Reproduce: Run determine_halo_list at z=7.0, 8.0 and populate box (of DIM^3) with halo counts. Found that some halos present at z=8.0 are no longer present at z=7.0.
Now, populate boxes with number of halos (Nh).
Difference low_z and high_z boxes. If any voxels < 0, halos at higher redshift pop out of existence at lower redshift.
The following outputs are produced:
Expected behavior:
I expected that there would be no voxels with negative values for N_POISSON < 0, as halos present at higher redshift should also be present at lower redshift.
Details: OS: macOS Monterey (v12.4) Python: v3.9.13 21cmFAST: v3.1.5