I'm writting because i found something odd, at least to me, in the GroupFirstSub array in the Illustris-3 Simulation. I get that this is the array that contains the indices of the most massive substructure of each FOF Halo. But i found that a number of this indeces in the array are the same number: 4294967295. Exactly, 33874 elements out of 131727 elements of this array are equal to this number.
if i write this array :
GroupFirstSub [ 0 608 1030 ..., 121206 121207 121208]
for example: GroupFirstSub = 4294967295 (first apearence)
for i in range(0,len(GroupFirstSub)):
if(GroupFirstSub[i] == 4294967295):
print "count = ", count
What does this mean? I am trying to walk all the trees and find pairs of haloes with the same descendent (only two progenitors), and this "GroupFirstSub's" are making me wonder if i get the whole thing right.
When i do: tree2= il.sublink.loadTree(basePath,135,GroupFirstSub,fields=fields, onlyMPB=False) , an error ocurrs.
error : Index (4294906691) out of range (0-60604)
Many thanks in advance!
This large number is the result of int32(-1) being typecast into a uint32. Indeed GroupFirstSub should be interpreted as a signed integer field, and a value of -1 indicates there is no such first subhalo. I've updated the documentation to clarify this. I have something like the following in my load helper function:
# override HDF5 datatypes if needed (GroupFirstSub unsigned -> signed for -1 entries)
if 'GroupFirstSub' in r['halos']:
r['halos']['GroupFirstSub'] = r['halos']['GroupFirstSub'].astype('int32')