Could you tell me how to compute the r_200 and the r_500 of the subhalo? In general, are there formulas to compute those radii which the snapshot do not provide?
Dylan Nelson
17 Dec '20
Hi Qin,
These are provided only for (FoF) halos, i.e. "groups", and not for subhalos.
In general, if you want these values for a central subhalo, then you just look up the value of its parent group (SubhaloGrNr).
If you want these values for a satellite subhalo, it is less clear that this makes physical sense, and these values are not in the catalog, but you could compute them yourself. Then I would suggest to make a cumulative enclosed mass radial profile, going outwards until the enclosed density equals the chosen overdensity, i.e. just follow the definition exactly.
Qin PENG
19 May '21
Hi Dylan,
When you calculate the r200 of a halo, you consider all the particles within the sphere or only the particles belong to the FoF?
Thank you.
Dylan Nelson
19 May '21
The values in the catalog (such as Group_R_Crit200) are the usual "spherical overdensity" definitions, i.e. they are computed considering all particles/cells in the simulation.
I compared the cirtical density and the values calculated from Group_R_Crit200 and Group_M_Crit200. They are not consistent. So, what happen? The following is my code.
import illustris_python as il
import numpy as np
import astropy
import h5py
from astropy.cosmology import FlatLambdaCDM
from astropy import units as u
from astropy.constants import k_B, m_p, M_sun, G
def cal(snapNum,haloID):
with h5py.File(il.snapshot.snapPath(basePath, snapNum), 'r') as f:
header = dict(list(f['Header'].attrs.items()))
h = header['HubbleParam']
Om0 = header['Omega0']
Ob0 = header['OmegaBaryon']
OmL = header['OmegaLambda']
z = header['Redshift']
BoxSize = header['BoxSize']
H = h*100.
H0 = 100.*h*u.km/(u.s*u.Mpc)
cosmo = FlatLambdaCDM(H0=H,Om0=Om0,Ob0=Ob0)
group_fields = il.groupcat.loadSingle(basePath=basePath,snapNum=snapNum,haloID=haloID)
R_Crit200 = group_fields['Group_R_Crit200']
Group_M_Crit200 = group_fields['Group_M_Crit200']
R_200 = R_Crit200/h
M_200 = Group_M_Crit200*1.e10/h
rho_c = (3.*((cosmo.H(z))**2.)/(8.*np.pi*G)).to_value('g/cm3')
print('rho_c: '+str(rho_c))
Rho = M_200*M_sun.to_value('g')/(4/3*np.pi*((R_200*u.kpc.to('cm'))**3))/200
print('Calculate: '+str(Rho))
cal(98,100)
cal(96,100)
cal(94,100)
cal(85,100)
cal(79,100)
Because it seems correct at z=0 but not at high redshift, the issue is usually a missing scalefactor a to account for comoving units.
In this case, Group_R_Crit200 is comoving (as all all lengths).
Qi Guo
28 Jul '23
Hi Dylan,
I come across the same question.
"In general, if you want these values for a central subhalo, then you just look up the value of its parent group (SubhaloGrNr)."
Do you mean that you ragard the r_200 of the parent group as the radius of the central halo? Is it an approximation and how do I know the accuracy?
Thank you!
Dylan Nelson
28 Jul '23
Yes that is right. By definition the central subhalo contains the "central galaxy" associated with a given dark matter halo. If you want to assign a R200 value to that galaxy, the R200 of its parent dark matter halo is the only quantity which makes sense.
Hi Dylan,
Could you tell me how to compute the r_200 and the r_500 of the subhalo? In general, are there formulas to compute those radii which the snapshot do not provide?
Hi Qin,
These are provided only for (FoF) halos, i.e. "groups", and not for subhalos.
In general, if you want these values for a central subhalo, then you just look up the value of its parent group (
SubhaloGrNr
).If you want these values for a satellite subhalo, it is less clear that this makes physical sense, and these values are not in the catalog, but you could compute them yourself. Then I would suggest to make a cumulative enclosed mass radial profile, going outwards until the enclosed density equals the chosen overdensity, i.e. just follow the definition exactly.
Hi Dylan,
When you calculate the r200 of a halo, you consider all the particles within the sphere or only the particles belong to the FoF?
Thank you.
The values in the catalog (such as
Group_R_Crit200
) are the usual "spherical overdensity" definitions, i.e. they are computed considering all particles/cells in the simulation.Thank you. I think I can have a good sleep.
Hi Dylan,
I compared the cirtical density and the values calculated from Group_R_Crit200 and Group_M_Crit200. They are not consistent. So, what happen? The following is my code.
The output is
Hello,
Because it seems correct at
z=0
but not at high redshift, the issue is usually a missing scalefactora
to account for comoving units.In this case,
Group_R_Crit200
is comoving (as all all lengths).Hi Dylan,
I come across the same question.
"In general, if you want these values for a central subhalo, then you just look up the value of its parent group (SubhaloGrNr)."
Do you mean that you ragard the r_200 of the parent group as the radius of the central halo? Is it an approximation and how do I know the accuracy?
Thank you!
Yes that is right. By definition the central subhalo contains the "central galaxy" associated with a given dark matter halo. If you want to assign a R200 value to that galaxy, the R200 of its parent dark matter halo is the only quantity which makes sense.