diff --git a/imap_processing/cdf/config/imap_ialirt_l1_variable_attrs.yaml b/imap_processing/cdf/config/imap_ialirt_l1_variable_attrs.yaml index 12b4ba4882..cac7af572c 100644 --- a/imap_processing/cdf/config/imap_ialirt_l1_variable_attrs.yaml +++ b/imap_processing/cdf/config/imap_ialirt_l1_variable_attrs.yaml @@ -240,6 +240,20 @@ codice_hi_spin_sector: dtype: int32 LABLAXIS: Spin sector index +codice_hi_spin_angle: + CATDESC: CoDICE-Hi spin angle for each spin sector and polar angle pair + FIELDNAM: CoDICE-Hi spin angle + FORMAT: F12.6 + VAR_TYPE: support_data + SCALETYP: linear + UNITS: degrees + VALIDMIN: 0.0 + VALIDMAX: 360.0 + FILLVAL: -1.0e31 + dtype: float32 + DEPEND_1: codice_hi_spin_sector + DEPEND_2: codice_hi_polar + codice_hi_spin_sector_labels: CATDESC: CoDICE-Hi spin sector labels FIELDNAM: CoDICE-Hi spin sector labels @@ -270,8 +284,7 @@ codice_hi_h: VALIDMIN: 0 VALIDMAX: 100000000.0 DEPEND_1: codice_hi_energy_center - DEPEND_2: codice_hi_spin_sector - DEPEND_3: codice_hi_polar + DEPEND_2: codice_hi_spin_angle DISPLAY_TYPE: no_plot FORMAT: F11.1 VAR_NOTES: Energy ranges (MeV) are 0.0200 to 0.0283, 0.0283 to 0.0400, 0.0400 to 0.0566, 0.0566 to 0.0800, 0.0800 to 0.113, 0.113 to 0.160, 0.160 to 0.226, 0.226 to 0.320, 0.320 to 0.453, 0.453 to 0.640, 0.640 to 0.905, 0.905 to 1.28, 1.28 to 1.81, 1.81 to 2.56, 2.56 to 3.62. diff --git a/imap_processing/ialirt/utils/create_xarray.py b/imap_processing/ialirt/utils/create_xarray.py index f5a2fa1e56..c13ed5e8b9 100644 --- a/imap_processing/ialirt/utils/create_xarray.py +++ b/imap_processing/ialirt/utils/create_xarray.py @@ -12,6 +12,7 @@ HI_IALIRT_ELEVATION_ANGLE, ) from imap_processing.ialirt.utils.constants import ( + HI_IALIRT_SPIN_ANGLE, IALIRT_DIMS, IALIRT_DTYPES, codice_hi_energy_center, @@ -232,6 +233,15 @@ def create_xarray_from_records(records: list[dict]) -> xr.Dataset: # noqa: PLR0 ), ) + spin_angle = xr.DataArray( + data=HI_IALIRT_SPIN_ANGLE.T.astype(np.float32), + name="codice_hi_spin_angle", + dims=["codice_hi_spin_sector", "codice_hi_polar"], + attrs=cdf_manager.get_variable_attributes( + "codice_hi_spin_angle", check_schema=False + ), + ) + spin_sector_labels = xr.DataArray( [ "0", @@ -267,6 +277,7 @@ def create_xarray_from_records(records: list[dict]) -> xr.Dataset: # noqa: PLR0 "codice_hi_polar": polar, "codice_hi_polar_labels": polar_labels, "codice_hi_spin_sector": spin_sector, + "codice_hi_spin_angle": spin_angle, "codice_hi_spin_sector_labels": spin_sector_labels, "swe_electron_energy": swe_electron_energy, } diff --git a/imap_processing/tests/ialirt/unit/test_create_xarray.py b/imap_processing/tests/ialirt/unit/test_create_xarray.py index d56c502fd3..70724d96f9 100644 --- a/imap_processing/tests/ialirt/unit/test_create_xarray.py +++ b/imap_processing/tests/ialirt/unit/test_create_xarray.py @@ -6,7 +6,7 @@ import numpy.testing as npt from imap_processing.cdf.utils import write_cdf -from imap_processing.ialirt.utils.constants import swe_energy +from imap_processing.ialirt.utils.constants import HI_IALIRT_SPIN_ANGLE, swe_energy from imap_processing.ialirt.utils.create_xarray import create_xarray_from_records @@ -166,3 +166,12 @@ def test_create_dataset(): ) assert test_data_path.exists() + + # codice_hi_spin_angle should be a 2D array of actual spin angles (degrees). + # Shape: (spin_sector=4, polar=4). + spin_angle = dataset["codice_hi_spin_angle"] + assert spin_angle.dims == ("codice_hi_spin_sector", "codice_hi_polar") + assert spin_angle.shape == (4, 4) + npt.assert_allclose( + spin_angle.values, HI_IALIRT_SPIN_ANGLE.T.astype(np.float32), rtol=1e-6 + )