Source code for pyrfu.mms.eis_skymap

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

# 3rd party imports
import numpy as np

from ..pyrf.ts_skymap import ts_skymap

# Local imports
from .dpf2psd import dpf2psd

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


[docs]def eis_skymap(inp_ang_ang, to_psd: bool = True): r"""Construct skymap distribution from angle-angle distribution. Parameters ---------- inp_ang_ang : xarray.DataArray EIS angle-angle distribution. to_psd : bool, Optional Flag to convert differential particle flux to phase space density. Returns ------- out : xarray.Dataset EIS skymap distribution. See Also -------- pyrfu.mms.eis_ang_ang """ time_data = inp_ang_ang.time.data energy = np.tile(inp_ang_ang.energy.data, (len(time_data), 1)) phi = np.tile(inp_ang_ang.phi.data, (len(time_data), 1)) theta = inp_ang_ang.theta.data a = inp_ang_ang.attrs a = list( filter( lambda k: k not in ["delta_energy_plus", "delta_energy_minus"], a, ), ) attrs = {k: inp_ang_ang.attrs[k] for k in a} coords_attrs = {k: inp_ang_ang[k].attrs for k in ["time", "energy", "phi", "theta"]} glob_attrs = inp_ang_ang.attrs["GLOBAL"] glob_attrs = { "delta_energy_plus": inp_ang_ang.attrs["delta_energy_plus"], "delta_energy_minus": inp_ang_ang.attrs["delta_energy_minus"], "species": inp_ang_ang.attrs["species"], **glob_attrs, } energy0, energy1 = [energy[i, :] for i in range(2)] e_step_table = np.zeros(len(time_data)) out = ts_skymap( time_data, inp_ang_ang.data, energy, phi, theta, energy0=energy0, energy1=energy1, esteptable=e_step_table, attrs=attrs, coords_attrs=coords_attrs, glob_attrs=glob_attrs, ) # out.attrs["species"] = "ions" # out.attrs["UNITS"] = "1/(cm^2 s sr keV)" out.energy.data *= 1e3 if to_psd: out = dpf2psd(out) return out