Source code for tools21cm.conv
'''
Various values and functions to deal with unit conversions regarding file types
'''
from . import const
import numpy as np
from . import helper_functions as hf
#Conversion factors and other stuff relating to C2Ray simulations
boxsize=244.0
LB=boxsize/const.h
nbox_fine=8000
M_box = const.rho_matter*(LB*const.Mpc)**3 # mass in box (g, not M0)
M_grid = M_box/(float(nbox_fine)**3)
#conversion factor for the velocity (sim units to km/s)
lscale = (LB)/float(nbox_fine)*const.Mpc # size of a cell in cm, comoving
tscale = 2.0/(3.0*np.sqrt(const.Omega0)*const.H0/const.Mpc*1.e5) # time scale, when divided by (1+z)2
velconvert = lambda z: lscale/tscale*(1.0+z)/1.e5
[docs]
def set_sim_constants(boxsize_cMpc):
'''This method will set the values of relevant constants depending on the
simulation
Parameters:
boxsize_cMpc (float): the box size in cMpc/h. Valid values are 37, 47, 64, 114, 200, 244, 425 or 500
Returns:
Nothing.
'''
global boxsize, LB, nbox_fine, M_box, M_grid, lscale, tscale, velconvert
boxsize = boxsize_cMpc
LB = boxsize/const.h
if hf.flt_comp(boxsize, 425.):
hf.print_msg('Setting conversion factors for 425/h Mpc box')
nbox_fine = 10976
elif hf.flt_comp(boxsize, 114.):
hf.print_msg('Setting conversion factors for 114/h Mpc box')
nbox_fine = 6144
elif hf.flt_comp(boxsize, 64.):
hf.print_msg('Setting conversion factors for 64/h Mpc box')
nbox_fine = 3456
elif hf.flt_comp(boxsize, 37.):
hf.print_msg('Setting conversion factors for 37/h Mpc box')
nbox_fine = 2048
elif hf.flt_comp(boxsize, 500.):
hf.print_msg('Setting_conversion_factors for 500/h Mpc box')
nbox_fine = 13824
elif hf.flt_comp(boxsize, 244.):
hf.print_msg('Setting_conversion_factors for 244/h Mpc box')
nbox_fine = 8000
elif hf.flt_comp(boxsize, 47.):
hf.print_msg('Setting_conversion_factors for 47/h Mpc box')
nbox_fine = 3456
elif hf.flt_comp(boxsize, 200.):
hf.print_msg('Setting_conversion_factors for 200/h Mpc box')
nbox_fine = 3456
else:
raise Exception('Invalid boxsize (%.3f cMpc)' % boxsize_cMpc)
M_box = const.rho_matter*(LB*const.Mpc)**3 # mass in box (g, not M0)
M_grid = M_box/(float(nbox_fine)**3)
lscale = (LB)/float(nbox_fine)*const.Mpc # size of a cell in cm, comoving
tscale = 2.0/(3.0*np.sqrt(const.Omega0)*const.H0/const.Mpc*1.e5) # time scale, when divided by (1+z)2
velconvert = lambda z: lscale/tscale*(1.0+z)/1.e5
[docs]
def gridpos_to_mpc(gridpos):
'''
Convert a position or length in simulation grid units to Mpc
Parameters:
gridpos (float or numpy array): the position in simulation grid units
Returns:
The position converted to Mpc with the origin unchanged
'''
return gridpos*lscale/const.Mpc
[docs]
def gridvel_to_kms(gridvel, z):
'''
Convert a velocity in simulation grid units to km/s
Parameters:
gridvel (float or numpy array): the velocity in simulation grid units
z (float or numpy array): the redshift
Returns:
The velocity in km/s
'''
return gridvel*velconvert(z)
[docs]
def gridmass_to_msol(grid_mass):
'''
Convert a halo mass from simulation grid units to solar masses
Parameters:
gridmass (float or numpy array): the mass in grid mass units
Returns:
The mass in log10(Msol)
'''
return np.log10(grid_mass*M_grid*const.solar_masses_per_gram)