def mass_at_200_solar_masses( self, redshift_object, redshift_source, redshift_of_cosmic_average_density="profile", cosmology=cosmo.Planck15, ): if redshift_of_cosmic_average_density == "profile": redshift_calc = redshift_object elif redshift_of_cosmic_average_density == "local": redshift_calc = 0.0 else: raise exc.UnitsException( "The redshift of the cosmic average density haas been specified as an invalid " "string. Must be {local, profile}") cosmic_average_density = cosmology_util.cosmic_average_density_solar_mass_per_kpc3_from( redshift=redshift_calc, cosmology=cosmology) radius_at_200 = self.radius_at_200( redshift_object=redshift_object, redshift_source=redshift_source, redshift_of_cosmic_average_density= redshift_of_cosmic_average_density, cosmology=cosmology, ) kpc_per_arcsec = cosmology_util.kpc_per_arcsec_from( redshift=redshift_object, cosmology=cosmology) radius_at_200_kpc = radius_at_200 * kpc_per_arcsec return (200.0 * ((4.0 / 3.0) * np.pi) * cosmic_average_density * (radius_at_200_kpc**3.0))
def kappa_s_and_scale_radius_for_duffy(mass_at_200, redshift_object, redshift_source): cosmology = cosmo.Planck15 cosmic_average_density = (cosmology.critical_density(redshift_object).to( units.solMass / units.kpc**3)).value critical_surface_density = cosmology_util.critical_surface_density_between_redshifts_solar_mass_per_kpc2_from( redshift_0=redshift_object, redshift_1=redshift_source, cosmology=cosmology) kpc_per_arcsec = cosmology_util.kpc_per_arcsec_from( redshift=redshift_object, cosmology=cosmology) radius_at_200 = (mass_at_200 / (200.0 * cosmic_average_density * (4.0 * np.pi / 3.0)))**(1.0 / 3.0) # r200 coefficient = 5.71 * (1.0 + redshift_object)**( -0.47) # The coefficient of Duffy mass-concentration (Duffy+2008) concentration = coefficient * (mass_at_200 / 2.952465309e12)**( -0.084) # mass-concentration relation. (Duffy+2008) de_c = (200.0 / 3.0 * (concentration**3 / (np.log(1.0 + concentration) - concentration / (1.0 + concentration)))) # rho_c scale_radius_kpc = radius_at_200 / concentration # scale radius in kpc rho_s = cosmic_average_density * de_c # rho_s kappa_s = rho_s * scale_radius_kpc / critical_surface_density # kappa_s scale_radius = scale_radius_kpc / kpc_per_arcsec # scale radius in arcsec return kappa_s, scale_radius, radius_at_200
def rho_at_scale_radius_solar_mass_per_kpc3(self, redshift_object, redshift_source, cosmology=cosmo.Planck15): """The Cosmic average density is defined at the redshift of the profile.""" critical_surface_density = cosmology_util.critical_surface_density_between_redshifts_solar_mass_per_kpc2_from( redshift_0=redshift_object, redshift_1=redshift_source, cosmology=cosmology) kpc_per_arcsec = cosmology_util.kpc_per_arcsec_from( redshift=redshift_object, cosmology=cosmology) return (self.kappa_s * critical_surface_density / (self.scale_radius * kpc_per_arcsec))
def kappa_s_and_scale_radius_for_ludlow(mass_at_200, redshift_object, redshift_source): warnings.filterwarnings("ignore") cosmology = cosmo.Planck15 col_cosmo = col_cosmology.setCosmology("planck15") m_input = mass_at_200 * col_cosmo.h concentration = col_concentration(m_input, "200c", redshift_object, model="ludlow16") cosmic_average_density = (cosmology.critical_density(redshift_object).to( units.solMass / units.kpc**3)).value critical_surface_density = cosmology_util.critical_surface_density_between_redshifts_solar_mass_per_kpc2_from( redshift_0=redshift_object, redshift_1=redshift_source, cosmology=cosmology) kpc_per_arcsec = cosmology_util.kpc_per_arcsec_from( redshift=redshift_object, cosmology=cosmology) radius_at_200 = (mass_at_200 / (200.0 * cosmic_average_density * (4.0 * np.pi / 3.0)))**(1.0 / 3.0) # r200 de_c = (200.0 / 3.0 * (concentration**3 / (np.log(1.0 + concentration) - concentration / (1.0 + concentration)))) # rho_c scale_radius_kpc = radius_at_200 / concentration # scale radius in kpc rho_s = cosmic_average_density * de_c # rho_s kappa_s = rho_s * scale_radius_kpc / critical_surface_density # kappa_s scale_radius = scale_radius_kpc / kpc_per_arcsec # scale radius in arcsec return kappa_s, scale_radius, radius_at_200