Source code for pyrfu.mms.eis_pad_combine_sc

#!/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 eis_pad_combine_sc(pads): r"""Generate composite Pitch Angle Distributions (PAD) from the EIS sensors across the MMS spacecraft. Parameters ---------- pads : list of xarray.DataArray Pitch-angle distribution for all spacecrafts. Returns ------- allmms_pad_avg : xarray.DataArray Composite pitch angle distribution. See Also -------- pyrfu.mms.get_eis_allt, pyrfu.mms.eis_pad, pyrfu.mms.eis_spec_combine_sc """ # Determine spacecraft with smallest number of time steps to use as # reference spacecraft time_size = [len(probe.time.data) for probe in pads] ref_sc_loc = np.argmin(time_size) ref_probe = pads[ref_sc_loc] # Define common energy grid across EIS instruments n_en_chans = [len(probe.energy.data) for probe in pads] size_en = np.min(n_en_chans) energy_data = [probe.energy.data[:size_en] for probe in pads] energy_data = np.stack(energy_data) common_energy = np.nanmean(energy_data, axis=0) # create PA labels n_pabins = len(ref_probe.theta.data) size_pabin = 180 / n_pabins pa_label = 180.0 * np.arange(n_pabins) / n_pabins + size_pabin / 2.0 allmms_pad = np.zeros( ( ref_probe.shape[0], ref_probe.shape[1], ref_probe.shape[2], len(pads), ), ) for i_pad, pad_ in enumerate(pads): allmms_pad[..., i_pad] = pad_.data[: len(ref_probe.time), ...] allmms_pad_avg = np.nanmean(allmms_pad, axis=3) allmms_pad_avg = xr.DataArray( allmms_pad_avg, coords=[ref_probe.time.data, pa_label, common_energy], dims=["time", "theta", "energy"], ) return allmms_pad_avg