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)
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)
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)