Source code for pyrfu.mms.eis_pad_spinavg
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3rd party imports
import numpy as np
import xarray as xr
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def eis_pad_spinavg(inp, spin_nums):
r"""Calculates spin-averaged Pitch-Angle Distribution (PAD) for the EIS
instrument.
Parameters
----------
inp : xarray.DataArray
Pitch-Angle Distribution.
spin_nums : xarray.DataArray
Spin #s associated with each measurement.
Returns
-------
out : xarray.DataArray
Spin-averaged PAD.
See Also
--------
pyrfu.mms.get_eis_allt, pyrfu.mms.eis_pad
"""
_, spin_starts = np.unique(spin_nums.data, return_index=True)
spin_times = np.zeros(len(spin_starts), dtype="<M8[ns]")
spin_sum_flux = np.zeros(
(len(spin_starts), len(inp.theta.data), len(inp.energy.data)),
)
current_start = 0
# loop through the spins
for i, spin_start in enumerate(spin_starts):
idx_ = np.where(spin_nums.data == spin_nums.data[spin_start])[0]
spin_sum_flux[i, :, :] = np.nanmean(inp.data[idx_, :, :], axis=0)
spin_times[i] = inp.time.data[current_start]
current_start = spin_start + 1
out = xr.DataArray(
spin_sum_flux,
coords=[spin_times, inp.theta.data, inp.energy.data],
dims=["time", "theta", "energy"],
)
return out