### HaloMass

Yeimy dallana Camargo camargo
• 13 Jun '19

Hello Dylan,

I'm asking you because I have a problem, I want obtain the mass of all halos (Group_M_Crit200?), it's positions (GroupPos?) and its formation time on Illustris-3, my actual code is:

import groupcat as GC
import numpy as np
import lhalotree as LH

for i in range(start,start+5):
.
.
.
.
.

fields = ['SnapNum','Group_M_Crit200']

start = 0
n_halos = len(Halos['Group_M_Crit200'])
formation_time = []
final_mass = []
for i in range(start,start+n_halos):
formation_time.append(find_formation_time(tree))
final_mass.append(tree['Group_M_Crit200'][0])

len(Halos['Group_M_Crit200'])= 131727, then in Illustris-3 simulation have 131727 halos, but an error occurs: ValueError: Index (4294906691) out of range (0-60604).

I don't understand whats happen, can you help me please?

Dylan Nelson
• 13 Jun '19

Hi Yeimy,

I think you hit a little annoying detail, which is described under the description of `GroupFirstSub`: "Index into the Subhalo table of the first/primary/most massive Subfind group within this FoF group. Note: This value is signed (or should be interpreted as signed)! In this case, a value of -1 indicates that this FoF group has no subhalos."

This large value of `4294906691` is actually `-1`, indicating the group has no subhalos. You could load also `GroupNsubs` and do e.g. `if GroupNsubs==0: continue` before you try to load the tree.

Yeimy dallana Camargo camargo
• 13 Jun '19

Hi,
don't works,

fields = ['SubhaloMass','SnapNum','Group_M_Crit200']
start = 0
n_halos =len(Halos['Group_M_Crit200'])
formation_time = []
final_mass = []
for i in range(start,start+n_halos):
if GroupNsubs.all()==0:
formation_time.append(find_formation_time(tree))
final_mass.append(tree['Group_M_Crit200'][0])

Again, an error occurs: ValueError: Index (4294906691) out of range (0-60604).

Dylan Nelson
• 13 Jun '19

Hi,

I'm not sure about `GroupNsubs.all()==0`, I meant more like:

``````for i in range(start, start+n_halos):
if GroupNsubs[i] == 0:
continue
tree = ...
``````
Yeimy dallana Camargo camargo
• 2
• 4 Sep '19

Hi Dylan,
The problem now is:
I try obtain the mass of halos ('Group_M_Crit200' and its formation time on Illustris-3) with Sublink (the same code above)

``````import groupcat as GC
import numpy as np
import lhalotree as LH

for i in range(start,start+5):
.
.
.
.
.

fields = ['SnapNum','Group_M_Crit200']

start = 0
n_halos = len(Halos['Group_M_Crit200'])
formation_time = []
final_mass = []

for i in range(start,start+n_halos):
if GroupNsubs[i] != 0:
formation_time.append(find_formation_time(tree))
final_mass.append(tree['Group_M_Crit200'][0])   *#*****line of error*****
``````

ERROR:
TypeError: 'NoneType' object is not subscriptable

This error is with Sublink, but if I try the same code with LHalo tree (it works!).
I print the Halos with mass different off 0 (and GroupNsubs[i] == 0) and I obtain some Halos but are not same Halos with mass different 0 (and GroupNsubs[i] == 0:)
of Gropus_135_x.hdf5 files.
I don't understand whats happen with Sublink,

Dylan Nelson
• 4 Sep '19

Hello,

``````basePath = 'sims.illustris/Illustris-3/output/'
import illustris_python as il

for i in range(0,halos['Group_M_Crit200'].size):
if halos['GroupNsubs'][i] == 0:
continue
assert tree['Group_M_Crit200'][0] == halos['Group_M_Crit200'][i]
print(i,tree['Group_M_Crit200'][0])
``````

produces for halo ID 72285

``````...
Warning, empty return. Subhalo [89811] at snapNum [135] not in tree.
---------------------------------------------------------------------------

TypeError: 'NoneType' object is not subscriptable
> <ipython-input-15-c12ecdc29fd5>(5)<module>()
3         continue
----> 5     assert tree['Group_M_Crit200'][0] == halos['Group_M_Crit200'][i]
6     print(i,tree['Group_M_Crit200'][0])
``````

this is the expected behavior. Because this subhalo is not in the SubLink tree, the returned `tree` is None. You should check for this and skip, e.g.

`````` for i in range(0,halos['Group_M_Crit200'].size):
if halos['GroupNsubs'][i] == 0:
continue