Source code for galpy.df.isotropicPlummerdf

# Class that implements isotropic spherical Plummer DF
import numpy
from ..util import conversion
from ..potential import PlummerPotential
from .sphericaldf import isotropicsphericaldf

[docs]class isotropicPlummerdf(isotropicsphericaldf): """Class that implements isotropic spherical Plummer DF: .. math:: f(E) = {24\\sqrt{2} \\over 7\\pi^3}\\,{b^2\\over (GM)^5}\\,(-E)^{7/2} for :math:`-GM/b \leq E \leq 0` and zero otherwise. The parameter :math:`GM` is the total mass and :math:`b` the Plummer profile's scale parameter. """
[docs] def __init__(self,pot=None,ro=None,vo=None): """ NAME: __init__ PURPOSE: Initialize an isotropic Plummer distribution function INPUT: pot= (None) Plummer Potential instance ro=, vo= galpy unit parameters OUTPUT: None HISTORY: 2020-10-01 - Written - Bovy (UofT) """ assert isinstance(pot,PlummerPotential),'pot= must be potential.PlummerPotential' isotropicsphericaldf.__init__(self,pot=pot,ro=ro,vo=vo) self._Etildemax= pot._amp/pot._b # /amp^4 instead of /amp^5 to make the DF that of mass density self._fEnorm=24.*numpy.sqrt(2.)/7./numpy.pi**3.*pot._b**2./pot._amp**4.
def fE(self,E): """ NAME: fE PURPOSE Calculate the energy portion of an isotropic Plummer distribution function INPUT: E - The energy (can be Quantity) OUTPUT: fE - The value of the energy portion of the DF HISTORY: 2020-10-01 - Written - Bovy (UofT) """ Etilde= -conversion.parse_energy(E,vo=self._vo) out= numpy.zeros_like(Etilde) indx= (Etilde > 0)*(Etilde <= self._Etildemax) out[indx]= self._fEnorm*(Etilde[indx])**3.5 return out def _icmf(self,ms): '''Analytic expression for the normalized inverse cumulative mass function. The argument ms is normalized mass fraction [0,1]''' return self._pot._b/numpy.sqrt(ms**(-2./3.)-1.)