Source code for pyrfu.mms.whistler_b2e
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3rd party imports
import numpy as np
from scipy import constants
# Local imports
from ..pyrf.plasma_calc import plasma_calc
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def whistler_b2e(b2, freq, theta_k, b_mag, n_e):
r"""Computes electric field power as a function of frequency for whistler
waves using magnetic field power and cold plasma theory.
Parameters
----------
b2 : xarray.DataArray
Time series of the power of whistler magnetic field in nT^2 Hz^{-1}.
freq : ndarray
frequencies in Hz corresponding B2.
theta_k : float
wave-normal angle of whistler waves in radians.
b_mag : xarray.DataArray
Time series of the magnitude of the magnetic field in nT.
n_e : xarray.DataArray
Time series of the electron number density in cm^{-3}.
Returns
-------
e2 : xarray.DataArray
Time series of the electric field power.
Examples
--------
>>> from pyrfu import mms
>>> e_power = mms.whistler_b2e(b_power, freq, theta_k, b_mag, n_e)
"""
# Calculate plasma parameters
pparam = plasma_calc(b_mag, n_e, n_e, n_e, n_e)
fpe, fce = [pparam.Fpe, pparam.Fce]
# Check input
if len(b2) != len(freq):
raise IndexError("B2 and freq lengths do not agree!")
# Calculate cold plasma parameters
rr = 1 - fpe**2 / (freq * (freq - fce))
ll = 1 - fpe**2 / (freq * (freq + fce))
pp = 1 - fpe**2 / freq**2
dd = 0.5 * (rr - ll)
ss = 0.5 * (rr + ll)
n2 = rr * ll * np.sin(theta_k) ** 2
n2 += pp * ss * (1 + np.cos(theta_k) ** 2)
n2 -= np.sqrt(
(rr * ll - pp * ss) ** 2 * np.sin(theta_k) ** 4
+ 4 * (pp**2) * (dd**2) * np.cos(theta_k) ** 2,
)
n2 /= 2 * (ss * np.sin(theta_k) ** 2 + pp * np.cos(theta_k) ** 2)
e_temp1 = (pp - n2 * np.sin(theta_k) ** 2) ** 2.0 * ((dd / (ss - n2)) ** 2 + 1) + (
n2 * np.cos(theta_k) * np.sin(theta_k)
) ** 2
e_temp2 = (dd / (ss - n2)) ** 2 * (
pp - n2 * np.sin(theta_k) ** 2
) ** 2 + pp**2 * np.cos(theta_k) ** 2
e2 = (constants.speed_of_light**2 / n2) * e_temp1 / e_temp2 * b2.data
e2 *= 1e-12
return e2