Defined Types
Abstract Types
The highest level type defined in this package is the abstract type AbstractMassProfile
, which all other profiles are subtyped from. Below these are AbstractDensity
and AbstractSurfaceDensity
; the latter is defined only as a surface density and will have no 3D quantities defined (e.g., ρ
), while the former represents 3D density profiles.
GalaxyProfiles.AbstractMassProfile
— TypeAbstractMassProfile{T <: Real}
: abstract supertype for all mass profiles.
GalaxyProfiles.AbstractDensity
— TypeAbstractDensity{T} <: AbstractMassProfile{T}
: abstract supertype for all 3D density profiles.
GalaxyProfiles.AbstractSurfaceDensity
— TypeAbstract type (<:AbstractMassProfile)
for surface density profiles for which 3D quantities are not defined. Radii for instances of AbstractSurfaceDensity
are always 2D.
Densities
The following concrete types, representing specific density profiles, are currently implemented:
GalaxyProfiles.CoreNFW
— TypeCoreNFW(ρ0::Real, rs::Real, rc::Real, n::Real)
Type implementing the CoreNFW density profile of Read et al. 2016. This is a modified NFW
profile with lower central densities calibrated to reproduce the density profiles observed in their simulations. The parameters ρ0
and rs
are identical to those for the NFW profile. However, the CoreNFW profile makes the following alteration to the enclosed mass,
\[\begin{aligned} M_\text{c,NFW}(<R) &= M_\text{NFW}(<R) \times f^n \newline f^n &= \left[ \text{tanh} \left( \frac{r}{r_c} \right) \right]^n \end{aligned}\]
where the core radius $r_c$ and $n$, which controls how shallow the core is (no core with n==0
and complete core with n==1
), are new free parameters.
See also
- Constructor that uses galaxy properties,
CoreNFWGalaxy
.
GalaxyProfiles.GeneralIsothermal
— TypeGeneralIsothermal(ρ0::Real, rs::Real, α::Real)
GeneralIsothermal(ρ0::Unitful.Density, rs::Unitful.Length, α::Real)
GeneralIsothermal(rs::Real, α::Real, M::Real, Rmax::Real)
GeneralIsothermal(rs::Unitful.Length, α::Real, M::Unitful.Mass, Rmax::Unitful.Length)
Type describing general isothermal density profiles with scale radius rs
, power-law index α
, and density at rs
of ρ0
. The density profile is
\[\rho(r) = \rho_0 \times \left( \frac{r}{R_s} \right)^{-\alpha}\]
The fields of GeneralIsothermal
are ρ0, rs, α
. The default units of GeneralIsothermal
are [ρ0] = [Msun/kpc^3], [r, rs] = [kpc], [M] = [Msun]
when you construct GeneralIsothermal
with Real
s, like Float64
. This is important for quantities like Vcirc
, Vesc
, Φ
, ∇Φ
, and ∇∇Φ
which involve G
; these will give incorrect results if the fields of GeneralIsothermal
or the provided r
are in different units. If you construct GeneralIsothermal
with Unitful
quantities, they will be internally converted.
Since the total mass of the GeneralIsothermal
profile is undefined when $\alpha \geq 3$, we define the the potential Φ
to be 0 at rs
for all instances of GeneralIsothermal
.
The following methods are specialized on this type:
See also
GalaxyProfiles.NFW
— TypeNFW(ρ0::Real, rs::Real)
NFW(ρ0::Unitful.Density, rs::Unitful.Length)
Type describing the Navarro-Frenk-White 1996 (NFW) density profile with scale radius rs
and characteristic density ρ0
. The density profile is
\[\rho(r) = \frac{\rho_0}{(r/R_s) \, (1+r/R_s)^2}\]
The fields of NFW
are ρ0, rs
. The default units of NFW
are [ρ0] = [Msun/kpc^3], [r, rs] = [kpc], [M] = [Msun]
. This is important for quantities like Vcirc
, Vesc
, Φ
, ∇Φ
, and ∇∇Φ
which involve the gravitational constant G
; these will give incorrect results if the fields of NFW
or the provided r
are in different units.
The following public methods are defined on this type:
GalaxyProfiles.Plummer
— TypePlummer(M::Real, a::Real)
Plummer(M::Unitful.Mass, a::Unitful.Length)
Type implementing the density profile first proposed by Plummer 1911 (see also Dejonghe 1987); this density profile is defined by the potential
\[\Phi(r) = -\frac{G \, M}{\sqrt{ r^2 + a^2 } }\]
which corresponds to a density profile of
\[\rho(r) = \frac{3 \, M}{4 \pi a^3} \, \left( 1 + \frac{r^2}{a^2} \right)^{-5/2}\]
where M
is the total mass of the system and a
is the characteristic scale radius of the system. Following this, the fields of Plummer
are M, a
. This scale radius can be converted to the 3D half-light (or half-mass) radius via
\[r_h = \frac{a}{\sqrt{ 0.5^{-2/3} - 1} }\]
the method GalaxyProfiles.plummer_a_to_rh
is provided to perform this conversion. In projection (i.e., along a line-of-sight) the half-light radius is equal to the Plummer scale radius a
, verifiable by quantile2D(d::Plummer, 0.5) == scale_radius(d)
.
The default units of Plummer
are [M] = [Msun], [a, r] = [kpc]
. This is important for quantities like Vcirc
, Vesc
, Φ
, ∇Φ
, and ∇∇Φ
which involve the gravitational constant G
; these will give incorrect results if the fields of Plummer
or the provided r
are in different units.
The following public methods are defined on this type:
Surface Densities
The following concrete types, representing specific surface density profiles, are currently implemented:
GalaxyProfiles.ExponentialDisk
— TypeExponentialDisk(Σ0::Real,rs::Real)
ExponentialDisk(rs::Real;Σ0=nothing,M=nothing)
Type describing projected isotropic exponential surface density profiles with central surface density Σ0
and scale radius rs
. The surface density profile is
\[\Sigma(r) = \rho_0 \times \exp \left( \frac{-r}{R_s} \right)\]
The fields of ExponentialDisk
are Σ0, rs
. There are no methods defined for ExponentialDisk
which use physical constants with units (e.g., G
), so as long as ExponentialDisk.rs
and the radius r
you provide to methods are in the same units, and Σ0
is in units of [M/[r,rs]^2]
everything will work out. Generally just want to make sure the length units are uniform.
The following public methods are defined on this type:
See also
- Convenience constructor
ExponentialDiskDHI
.
GalaxyProfiles.Sersic
— TypeSersic(Σ0, r_e, n, q)
Type describing Sersic surface density profile, typically used to model the surface brightness profile of galaxies in images.
Arguments
Σ0
: surface density at radiusr = r_e
r_e
: Sersic scale radiusn
: Sersic index controlling how steep/shallow the profile isq
: minor-to-major axis ratio
\[\Sigma(r) = \Sigma_0 \times \exp \left( -b_n \left[ \left(\frac{r}{r_e} \right)^{1/n} - 1 \right] \right)\]
where b_n
is derived from the Sersic index n
(see equations 3, 4 of Graham & Driver 2005).
The fields of Sersic
are Σ0, r_e, n, q
. There are no methods defined for Sersic
which use physical constants with units (e.g., G
), so as long as Sersic.r_e
and the radius r
you provide to methods are in the same units, and Σ0
is in units of [M/[r,r_e]^2]
everything will work out. Generally just want to make sure the length units are uniform.
The following public methods are defined on this type:
Retrieving Parameters
The parameters that define these types can be retrieved with params
and scale_radius
GalaxyProfiles.params
— Methodparams(d::AbstractMassProfile)
Get the fields of the struct as expected by its defined methods.
GalaxyProfiles.scale_radius
— Methodscale_radius(d::AbstractMassProfile)
scale_radius(uu::Unitful.LengthUnits, d::AbstractMassProfile)
Returns the characteristic scale radius of the profile; used for some default methods. An example is rs
for the ExponentialDisk
model.
Convenience Constructors
We also provide some convenience constructors for other types such as the singular isothermal sphere
, which returns an instance of GeneralIsothermal
with α=2
.
GalaxyProfiles.CoreNFWGalaxy
— FunctionCoreNFWGalaxy(ρ0::Real, rs::Real, t_sf::Real, rhalf::Real;
κ::Real=4//100, η::Real=175//100)
An alternative parameterization for the CoreNFW
profile based on galaxy properties.
The standard CoreNFW
type uses $n$ and $r_c$ to parameterize the Read et al. 2016 density model, but the authors relate these halo-level parameters to galaxy-level parameters in the following ways. They find $n$ to be related to the total star formation time,
\[\begin{aligned} n &= \text{tanh} \left( q \right) \newline q &= \kappa \, \frac{t_\text{SF}}{t_\text{dyn}} \end{aligned}\]
where $t_\text{dyn}$ is the circular orbit time at the NFW
profile scale radius $r_s$. This is the orbital circumference divided by the speed; for profile p
, this is 2π * p.rs / GalaxyProfiles.Vcirc(p, p.rs)
.
They also find the core radius $r_c$ to be related to the projected stellar half-mass radius as
\[r_c = \eta \, R_{h}\]
Thus if the total star formation time and projected stellar half-mass radius are known for a galaxy, one can calculate $n$ and $r_c$ given the alternative parameters $\eta$ and $\kappa$. In their simulations, Read et al. find $\kappa=0.04$ and $\eta=1.75$, so these are the default values for this alternate parameterization.
GalaxyProfiles.SIS
— FunctionSIS(ρ0::Real, rs::Real)
SIS(ρ0::Unitful.Density, rs::Unitful.Length)
SIS(rs::Real, M::Real, Rmax::Real)
SIS(rs::Unitful.Length, M::Unitful.Mass, Rmax::Unitful.Length)
Convenience function to construct a singular isothermal sphere; i.e., a GeneralIsothermal
with α=2
.
GalaxyProfiles.ExponentialDiskDHI
— FunctionExponentialDiskDHI(DHI::Real, MHI::Real, ΣDHI::Real=10^6)
ExponentialDiskDHI(DHI::Unitful.Length, MHI::Unitful.Mass,
ΣDHI::GalaxyProfiles.SurfaceDensity=1*UnitfulAstro.Msun/UnitfulAstro.pc^2)
Convenience constructor for the ExponentialDisk
surface density profile. This will take a diameter for the disk DHI
(e.g., the diameter of a neutral hydrogen disk), its total mass MHI
, and ΣDHI
, the surface density at DHI
, and return an ExponentialDisk
object with the correct central density and scale radius.
By default, ΣDHI
is 10^6 solar masses per square kiloparsec (equivalent to one solar mass per square parsec), such that you should provide DHI
in kpc if you are using Real
inputs.
Notes
At high masses (e.g., $10^{10} \ \text{M}_\odot < \text{M}_{\text{HI}}$) the numerical inversion is impossible; in this case, the exponential disk scale radius is set to DHI/4
.