Source code for hack.formulary.frequencies

"""Calculation of frequency plasma parameters."""

# Add the names functions in this file as strings in __all__ so that
# they will be included in the documentation and star imports

__all__ = ["plasma_frequency"]

import astropy.units as u
import numpy as np

from plasmapy.particles.decorators import particle_input
from plasmapy.particles.particle_class import ParticleLike
from plasmapy.utils.decorators import (
    validate_quantities,
)
from astropy import constants


[docs] @particle_input @validate_quantities( validations_on_return={ "units": [u.rad / u.s, u.Hz], "equivalencies": [(u.cy / u.s, u.Hz)], }, ) def plasma_frequency( n: u.Quantity[u.m**-3], particle: ParticleLike, *, mass_numb: int | None = None, Z: float | None = None, ) -> u.Quantity[u.rad / u.s]: r"""Calculate the particle plasma frequency. Parameters ---------- n : `~astropy.units.Quantity` Particle number density in units convertible to m\ :sup:`-3`. particle : `str` Representation of the particle species. Z : `int`, optional The charge number of an ion or neutral atom, if not provided in ``particle``. mass_numb : `int`, optional The mass number of an isotope, if not provided in ``particle``. Returns ------- `~astropy.units.Quantity` The particle plasma frequency in radians per second. Notes ----- The particle plasma frequency is .. math:: ω_p = \sqrt{\frac{n |q|}{ε_0 m}} where :math:`n` is the number density, :math:`q` is the particle charge, and :math:`m` is the particle mass. Examples -------- >>> import astropy.units as u >>> plasma_frequency(1e19 * u.m**-3, particle="p+") <Quantity 4.16329...e+09 rad / s> """ return np.sqrt(n * np.abs(particle.charge) / (constants.eps0 * particle.mass))