Source code for pyrfu.pyrf.pvi_4sc

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 3rd party imports
import numpy as np

from .dot import dot
from .norm import norm

# Local imports
from .resample import resample

__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"


[docs]def pvi_4sc(b_mms): r"""Compute the Partial Variance of Increments (PVI) using the definition in [1]_ as .. math:: PVI_{ij}(t) = \sqrt{\frac{|\Delta B_{ij}(t)|^2} {\langle|\Delta B_{ij}|^2\rangle}} where :math:`\Delta B_{ij}(t) = B_i(t) - B_i(t)` is the magnetic field increments, the average :math:`\langle . \rangle` is taken over the whole interval, and :math:`i`, :math:`j` = 1,2,3,4 is the MMS spacecraft number. In addition, computes, the rotation of the magnetic field between two spacecraft, i.e., magnetic field shear angle, as : .. math:: \alpha_{ij}(t) = cos^{-1} \frac{B_i(t) . B_j(t)}{|B_i(t)| |B_j(t)|} Parameters ---------- b_mms : list of xarray.DataArray List of the time series of the background magnetic field for the 4 spacecraft. Returns ------- pvi_ij : xarray.DataArray Time series of the Partial Variance of Increments for the 6 pairs of spacecraft. alpha_ij : xarray.DataArray Time series of the magnetic field shear angle for the 6 pairs of spacecraft. References ---------- .. [1] Chasapis, A., RetinĂ³, A., Sahraoui, F., Vaivads, A., Khotyaintsev, Yu. V., Sundkvist, D., et al. (2015) Thin current sheets and associated electron heating in turbulent space plasma. Astrophys. J. Lett. 804:L1. doi: https://doi.org/10.1088/2041-8205/804/1/L1 """ b_mms = [resample(b_xyz, b_mms[0]) for b_xyz in b_mms] i_indices = [0, 0, 0, 1, 1, 2] j_indices = [1, 2, 3, 2, 3, 3] # Compute normalized partial variance of increments def pvi(b_i, b_j): return np.sqrt(norm(b_i - b_j) ** 2 / np.mean(norm(b_i - b_j) ** 2)) pvi_ij = [pvi(b_mms[i], b_mms[j]) for i, j in zip(i_indices, j_indices)] # Compute magnetic field shear angle def shear_angle(b_i, b_j): return np.arccos(dot(b_i, b_j) / (norm(b_i) * norm(b_j))) theta_ij = [] for i, j in zip(i_indices, j_indices): theta_ij.append(shear_angle(b_mms[i], b_mms[j])) return pvi_ij, theta_ij