Source code for pyrfu.mms.hpca_calc_anodes

#!/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"

anodes_theta = np.array(
    [
        123.75000,
        101.25000,
        78.750000,
        56.250000,
        33.750000,
        11.250000,
        191.25000,
        213.75000,
        236.25000,
        258.75000,
        281.25000,
        303.75000,
        326.25000,
        348.75000,
        168.75000,
        146.25000,
    ],
)


[docs]def hpca_calc_anodes(inp, fov: list = None, method: str = "mean"): r"""Averages over anodes (or a given field of view) for HPCA ion data. Parameters ---------- inp : xarray.DataArray Ion flux; [nt, npo16, ner63], looking direction fov : list of float, Optional Field of view, in angles, from 0-360. Default is [0., 360.]. method : {"mean", "sum"}, Optional Method. Default is "mean". Returns ------- out : xarray.DataArray HPCA ion flux averaged over the anodes within the selected field of view. """ if fov is None: fov = [0.0, 360.0] assert method in ["mean", "sum"] times = inp.time.data energies = inp.ccomp.data cond_ = np.logical_and(anodes_theta >= fov[0], anodes_theta <= fov[1]) anodes_in_fov = np.where(cond_)[0] if method == "mean": updated_spectra = inp.data[:, anodes_in_fov, :].mean(axis=1) else: updated_spectra = inp.data[:, anodes_in_fov, :].sum(axis=1) out = xr.DataArray( updated_spectra, coords=[times, energies], dims=["time", "energy"], ) return out