Source code for pyrfu.pyrf.dist_append
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3rd party imports
import numpy as np
import xarray as xr
# Local imports
from .ts_skymap import ts_skymap
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def dist_append(inp0, inp1):
r"""Concatenate two distribution skymaps along the time axis.
Parameters
----------
inp0 : xarray.Dataset
3D skymap distribution at early times.
inp1 : xarray.Dataset
3D skymap distribution at late times.
Returns
-------
out : xarray.Dataset
3D skymap of the concatenated 3D skymaps.
Notes
-----
The time series have to be in the correct time order.
"""
# Check input type
assert isinstance(inp1, xr.Dataset), "inp1 must be a xarray.Dataset"
if inp0 is None:
return inp1
assert isinstance(inp0, xr.Dataset), "inp0 must be a xarray.Dataset"
# Global attributes
glob_attrs = inp0.attrs
# Stack coordinates
# time
time = np.hstack([inp0.time.data, inp1.time.data])
# Azimuthal angle
# if inp0.phi.ndim == 2:
# phi = np.vstack([inp0.phi.data, inp1.phi.data])
# else:
# phi = inp0.phi.data
phi = np.vstack([inp0.phi.data, inp1.phi.data])
# Elevation angle
theta = inp0.theta.data
# Coordinates attributes
coords_attrs = {k: inp0[k].attrs for k in ["time", "energy", "phi", "theta"]}
# distribution
data = np.vstack([inp0.data, inp1.data])
data_attrs = inp0.data.attrs
if "delta_energy_plus" in glob_attrs:
delta_energy_plus = np.vstack(
[
inp0.attrs["delta_energy_plus"].data,
inp1.attrs["delta_energy_plus"].data,
],
)
glob_attrs["delta_energy_plus"] = delta_energy_plus
if "delta_energy_minus" in glob_attrs:
delta_energy_minus = np.vstack(
[
inp0.attrs["delta_energy_minus"].data,
inp1.attrs["delta_energy_minus"].data,
],
)
glob_attrs["delta_energy_minus"] = delta_energy_minus
step_table = np.hstack(
[inp0.attrs["esteptable"], inp1.attrs["esteptable"]],
)
energy = np.vstack([inp0.energy.data, inp1.energy.data])
out = ts_skymap(
time,
data,
energy,
phi,
theta,
energy0=inp0.energy0,
energy1=inp0.energy1,
esteptable=step_table,
attrs=data_attrs,
coords_attrs=coords_attrs,
glob_attrs=glob_attrs,
)
return out