Source code for scisalt.PWFA.plasma

import os as _os
_on_rtd = _os.environ.get('READTHEDOCS', None) == 'True'
if not _on_rtd:
    import numpy as _np
    import slactrac as _sltr
    import periodictable as _pt
    import scipy.constants as _spc


[docs]class Plasma(object): """ A class for relating plasma density to plasma frequency :math:`\\omega_p` and ion focusing force. Input either: * Plasma density *n_p* in SI units * Plasma density *n_p_cgs* in CGS units """ def __init__(self, n_p=None, n_p_cgs=None, species=None): if species is None: species = _pt.H # ============================ # Reconcile n_p, n_p_cgs # ============================ if n_p is None and n_p_cgs is None: raise ValueError('Keywords n_p and n_p_cgs cannot both be None') elif n_p is not None and n_p_cgs is not None: raise ValueError('Keywords n_p and n_p_cgs cannot both be specified') elif n_p is not None: self.n_p = n_p elif n_p_cgs is not None: self.n_p_cgs = n_p_cgs if type(species) != _pt.core.Element: raise TypeError('Input species must be derived from periodictable package.') else: self._species = species @property def species(self): """ Species used in plasma. """ return self._species @property def m(self): return self._species.mass * _spc.m_u @property def E_rest(self): return self.m * _spc.c**2 @property def n_p(self): """ Plasma density in SI units """ return self._n_p @n_p.setter def n_p(self, n_p): self._n_p = n_p @property def w_p(self): """ Plasma frequency :math:`\\omega_p` for given plasma density """ return _np.sqrt(self.n_p * _np.power(_sltr.e, 2) / (_sltr.m_e * _sltr.epsilon_0))
[docs] def k_ion(self, E): """ Geometric focusing force due to ion column for given plasma density as a function of *E* """ return self.n_p * _np.power(_sltr.e, 2) / (2*_sltr.GeV2joule(E) * _sltr.epsilon_0)
@property def n_p_cgs(self): """ Plasma density in CGS units """ return self.n_p * 1e-6 @n_p_cgs.setter def n_p_cgs(self, n_p_cgs): self.n_p = n_p_cgs * 1e6