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