Question Regarding SubLink Merger Tree Consistency Across Snapshots

Jaewon Choi

Hello,

I am working with the TNG simulation and had a question regarding the consistency of the SubLink merger trees across snapshots.

Specifically, I am following the main progenitor branch (MPB) of a subhalo using the 2D array SubfindID[snapshot][subhalo_index], which traces a given subhalo back in time. For example, starting from snapshot 99 and tracing subhalo 1579 backward along the MPB, I find a corresponding subhalo at snapshot 16 via:

SubfindID[16][1579]

This subhalo at snapshot 16 should match with the one obtained by loading the tree starting from snapshot 99 using:

il.sublink.loadTree(basePath, 99, SubfindID[99][1579], onlyMPB=True)

Meanwhile, I’ve noticed that when I instead load the tree starting from snapshot 16:

il.sublink.loadTree(basePath, 16, SubfindID[16][1579], onlyMPB=True)

the resulting MPB is not always consistent with the one obtained from snapshot 99. In particular, while the SubfindID at snapshot 16 is consistent within both trees, the trees begin to diverge for earlier snapshots (e.g., 15, 14, ...), yielding different subhalo IDs.

Additionally, when I compared the center of mass (SubhaloCM) for the subhalo at snapshot 16 obtained via these two trees, I found they differ. The SubhaloCM from the tree loaded at snapshot 16 matches the actual subhalo data, whereas the one from the snapshot-99 tree does not.

In this case, SubhaloCM at snapshot 16 found by
il.sublink.loadTree(basePath, 99, SubfindID[99][1579], fields=['SubhaloCM'], onlyMPB=True)

is inconsistent with that found by

il.sublink.loadTree(basePath, 16, SubfindID[16][1579], fields=['SubhaloCM'], onlyMPB=True)

... and I have no Idea, how two of them can differ even they have same SubfindID at that snapshot.

I found out with
il.snapshot.loadSubhalo(basePath, 16, SubfindID[16][1579], 'dm', fields=['Coordinates'])

that the latter one(SubhaloCM found by Tree from snapshot=16) corresponds to real dm particle distribution.

Could you kindly clarify how this divergence is possible, even when following what is expected to be the same MPB?

  • For most of the subhalos, I think this does not happens frequently. However for some subhalos this happens.

Thank you

Best regards,
Jaewon Choi

Dylan Nelson
  • 9 Apr

Trees are not necessarily continuous, they can have gaps (missing snapshots).

So you cannot use the snapshot number as an index, into any tree array.

Instead, you should search first for where the tree (MPB) is at the snapshot you are interested in, e.g.

mpb = il.sublink.loadTree(basePath, 99, subhaloID, onlyMPB=True)

w = np.where(mpb['SnapNum'] == 50)[0] # z=1
subhaloID_z1 = mpb['SubfindID'][w]
  • Page 1 of 1