def radius_at_200_for_units(
        self,
        redshift_object,
        redshift_source,
        unit_length="arcsec",
        unit_mass="solMass",
        redshift_of_cosmic_average_density="profile",
        cosmology=cosmo.Planck15,
    ):

        kpc_per_arcsec = cosmology_util.kpc_per_arcsec_from_redshift_and_cosmology(
            redshift=redshift_object, cosmology=cosmology)

        concentration = self.concentration_for_units(
            redshift_profile=redshift_object,
            redshift_source=redshift_source,
            unit_length=unit_length,
            unit_mass=unit_mass,
            redshift_of_cosmic_average_density=
            redshift_of_cosmic_average_density,
            cosmology=cosmology,
        )

        radius_at_200 = dim.Length(value=concentration * self.scale_radius,
                                   unit_length=self.unit_length)

        return radius_at_200.convert(unit_length=unit_length,
                                     kpc_per_arcsec=kpc_per_arcsec)
示例#2
0
    def __init__(
        self,
        centre: dim.Position = (0.0, 0.0),
        axis_ratio: float = 1.0,
        phi: float = 0.0,
        einstein_radius: dim.Length = 1.0,
        slope: float = 2.0,
    ):
        """
        Represents an elliptical power-law density distribution.

        Parameters
        ----------
        centre: (float, float)
            The (y,x) arc-second coordinates of the profile centre.
        axis_ratio : float
            The elliptical mass profile's minor-to-major axis ratio (b/a).
        phi : float
            Rotation angle of mass profile's ellipse counter-clockwise from positive x-axis.
        einstein_radius : float
            The arc-second Einstein radius.
        slope : float
            The density slope of the power-law (lower value -> shallower profile, higher value -> steeper profile).
        """

        super(EllipticalPowerLaw, self).__init__(
            centre=centre,
            axis_ratio=axis_ratio,
            phi=phi,
            einstein_radius=einstein_radius,
            slope=slope,
            core_radius=dim.Length(0.0),
        )
def angular_diameter_distance_to_earth_from_redshift_and_cosmology(
        redshift, cosmology, unit_length="kpc"):

    angular_diameter_distance_kpc = cosmology.angular_diameter_distance(
        z=redshift).to("kpc")

    if unit_length is not "arcsec":
        angular_diameter_distance = angular_diameter_distance_kpc.to(
            unit_length)
    else:
        arcsec_per_kpc = arcsec_per_kpc_from_redshift_and_cosmology(
            redshift=redshift, cosmology=cosmology)
        angular_diameter_distance = arcsec_per_kpc * angular_diameter_distance_kpc

    return dim.Length(angular_diameter_distance.value, unit_length)
def angular_diameter_distance_between_redshifts_from_redshifts_and_cosmlology(
        redshift_0, redshift_1, cosmology, unit_length="kpc"):

    if unit_length is "arcsec":
        raise exc.UnitsException(
            "The angular diameter distance between redshifts cannot have unit_label of length"
        )

    angular_diameter_distance_between_redshifts_kpc = cosmology.angular_diameter_distance_z1z2(
        redshift_0, redshift_1).to("kpc")

    if unit_length is not "arcsec":
        angular_diameter_distance = angular_diameter_distance_between_redshifts_kpc.to(
            unit_length)

    return dim.Length(angular_diameter_distance.value, unit_length)
    def luminosity_within_circle_in_units(self,
                                          radius: dim.Length,
                                          unit_luminosity="eps",
                                          exposure_time=None,
                                          redshift_object=None,
                                          cosmology=cosmo.Planck15,
                                          **kwargs):
        """Integrate the light profile to compute the total luminosity within a circle of specified radius. This is \
        centred on the light profile's centre.

        The following unit_label for mass can be specified and output:

        - Electrons per second (default) - 'eps'.
        - Counts - 'counts' (multiplies the luminosity in electrons per second by the exposure time).

        Parameters
        ----------
        radius : float
            The radius of the circle to compute the dimensionless mass within.
        unit_luminosity : str
            The unit_label the luminosity is returned in (eps | counts).
        exposure_time : float or None
            The exposure time of the observation, which converts luminosity from electrons per second unit_label to counts.
        """

        if not hasattr(radius, "unit_length"):
            radius = dim.Length(value=radius, unit_length="arcsec")

        if self.unit_length is not radius.unit_length:

            kpc_per_arcsec = cosmology_util.kpc_per_arcsec_from_redshift_and_cosmology(
                redshift=redshift_object, cosmology=cosmology)

            radius = radius.convert(unit_length=self.unit_length,
                                    kpc_per_arcsec=kpc_per_arcsec)

        luminosity = dim.Luminosity(
            value=quad(self.luminosity_integral, a=0.0, b=radius)[0],
            unit_luminosity=self.unit_luminosity,
        )
        return luminosity.convert(unit_luminosity=unit_luminosity,
                                  exposure_time=exposure_time)
示例#6
0
    def einstein_radius_in_units(self,
                                 unit_length="arcsec",
                                 redshift_object=None,
                                 cosmology=cosmo.Planck15):

        einstein_radius = dim.Length(
            value=np.sqrt(self.area_within_tangential_critical_curve / np.pi),
            unit_length=self.unit_length,
        )

        if unit_length is "kpc":

            kpc_per_arcsec = cosmology_util.kpc_per_arcsec_from_redshift_and_cosmology(
                redshift=redshift_object, cosmology=cosmology)

        else:

            kpc_per_arcsec = None

        return einstein_radius.convert(unit_length=unit_length,
                                       kpc_per_arcsec=kpc_per_arcsec)