Source code for pyrfu.pyrf.match_phibe_v
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Built-in imports
import itertools
# 3rd party imports
import numpy as np
from scipy import constants
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def match_phibe_v(b_0, b_z, int_e_dt, n, v):
r"""Get propagation velocity by matching dBpar and phi. Used together with
irf_match_phibe_dir.m.Finds best match in amplitude given, B0, dB_par,
phi, propagation direction implied, for specified n and v given as
vectors.Returns a matrix of correlations and the two potentials that were
correlated.
Parameters
----------
b_0 : array_like
Average background magnetic field.
b_z : array_like
Parallel wave magnetic field.
int_e_dt : array_like
Potential.
n : array_like
Vector of densities
v : array_like
Vector of velocities.
Returns
-------
corr_mat : numpy.ndarray
Correlation matrix(nn x nv).
phi_b : numpy.ndarray
B0 * dB_par / n_e * e * mu0
phi_e : numpy.ndarray
int(E) dt * v(dl=-vdt = > -dl = vdt)
"""
# Define constants
mu0 = constants.mu_0
q_e = constants.elementary_charge
# density in #/m^3
n.data *= 1e6
# Allocate correlations matrix rows: n, cols: v
nn_, nv_ = [len(n), len(v)]
corr_mat = np.zeros((nn_, nv_))
# Setup potentials
phi_e = int_e_dt * v # depends on v
phi_b = np.transpose(b_z[:, 0] * b_0 * 1e-18 / (mu0 * q_e * n[:, None]))
# Get correlation
for k, p in itertools.product(range(nn_), range(nv_)):
corr_mat[k, p] = np.sum((np.log10(abs(phi_e[:, p]) / phi_b[:, k])))
return corr_mat, phi_b, phi_e