Source code for pyrfu.mms.vdf_to_e64
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3rd party imports
import numpy as np
from ..pyrf.ts_skymap import ts_skymap
# Local imports
from .psd_rebin import psd_rebin
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def vdf_to_e64(vdf_e32):
r"""Recompile data into 64 energy channels. Time resolution is halved.
Only applies to skymap.
Parameters
----------
vdf_e32 : xarray.Dataset
Time series of the particle distribution with 32 energy channels.
Returns
-------
vdf_e64 : xarray.Dataset
Time series of the particle distribution with 32 energy channels.
"""
time_r, vdf_r, energy_r, phi_r = psd_rebin(
vdf_e32,
vdf_e32.phi,
vdf_e32.attrs.get("energy0"),
vdf_e32.attrs.get("energy1"),
vdf_e32.attrs.get("esteptable"),
)
energy_r = np.tile(energy_r, (len(vdf_r), 1))
# Data attributes
data_attrs = vdf_e32.data.attrs
# Coordinates attributes
coords_attrs = {k: vdf_e32[k].attrs for k in ["time", "energy", "phi", "theta"]}
# Global attributes
glob_attrs = vdf_e32.attrs
# update delta_energy
if "delta_energy_plus" in glob_attrs and "delta_energy_minus" in glob_attrs:
log_energy = np.log10(energy_r[0, :])
log10_energy = np.diff(log_energy)
log10_energy_plus = log_energy + 0.5 * np.hstack(
[log10_energy, log10_energy[-1]],
)
log10_energy_minus = log_energy - 0.5 * np.hstack(
[log10_energy[0], log10_energy],
)
energy_plus = 10**log10_energy_plus
energy_minus = 10**log10_energy_minus
delta_energy_plus = energy_plus - energy_r
delta_energy_minus = abs(energy_minus - energy_r)
delta_energy_plus[-1] = np.max(vdf_e32.attrs["delta_energy_minus"][:, -1])
delta_energy_minus[0] = np.min(vdf_e32.attrs["delta_energy_minus"][:, 0])
glob_attrs["delta_energy_plus"] = delta_energy_plus
glob_attrs["delta_energy_minus"] = delta_energy_minus
vdf_e64 = ts_skymap(
time_r,
vdf_r,
energy_r,
phi_r,
vdf_e32.theta.data,
energy0=energy_r[0, :],
energy1=energy_r[0, :],
esteptable=np.zeros(len(time_r)),
attrs=data_attrs,
coords_attrs=coords_attrs,
glob_attrs=glob_attrs,
)
return vdf_e64