Source code for pyrfu.mms.hpca_spin_sum
#!/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 hpca_spin_sum(inp, saz, method: str = "mean"):
r"""Sum or average teh Hot Plasma Composition Analyser (HPCA) data over
each spin.
Parameters
----------
inp : xarray.DataArray
Ion PSD or flux; [nt, npo16, ner63], looking direction
saz : xarray.DataArray
Start azimuthal spin indices.
method : {"mean", "sum"}, Optional
Method either "sum" or "mean". Default is "mean"
Returns
-------
out : xarray.DataArray
Distribution averaged over each spin.
"""
az_times, start_az = [saz.time.data, saz.data]
spin_starts = np.squeeze(np.argwhere(start_az == 0))
out_data = []
for i, spin in enumerate(spin_starts[:-1]):
if method == "mean":
out_data.append(
inp[spin : spin_starts[i + 1]].mean(dim="time").data,
)
elif method == "sum":
out_data.append(
inp[spin : spin_starts[i + 1]].sum(dim="time").data,
)
else:
raise ValueError("Invalid method")
out_time = np.stack(az_times[spin_starts[:-1]])
out_data = np.stack(out_data)
coords = [inp.coords[k].data for k in inp.dims[1:]]
coords = [out_time, *coords]
dims = list(inp.dims)
out = xr.DataArray(out_data, coords=coords, dims=dims, attrs=inp.attrs)
return out