Skip to content

Commit 9cb771a

Browse files
authored
I-ALiRT - Codice-lo l1b test (IMAP-Science-Operations-Center#2359)
1 parent 332247b commit 9cb771a

3 files changed

Lines changed: 101 additions & 5 deletions

File tree

imap_processing/codice/codice_l1b.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ def convert_to_rates(dataset: xr.Dataset, descriptor: str) -> np.ndarray:
7171
"lo-sw-angular",
7272
"lo-nsw-priority",
7373
"lo-sw-priority",
74-
"lo-ialirt",
7574
]:
7675
# Denominator to convert counts to rates
7776
denominator = (
@@ -93,6 +92,7 @@ def convert_to_rates(dataset: xr.Dataset, descriptor: str) -> np.ndarray:
9392
elif descriptor in [
9493
"lo-nsw-species",
9594
"lo-sw-species",
95+
"lo-ialirt",
9696
]:
9797
# Create n_sector with 'esa_step' dimension. This is done by xr.full_like
9898
# with input dataset.acquisition_time_per_step. This ensures that the resulting

imap_processing/tests/external_test_data_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
("imap_codice_l1a_lo-counters-aggregated_20250814211100_v0.0.5.cdf", "codice/data/l1a_validation"),
4545
("imap_codice_l1a_lo-counters-singles_20250814211100_v0.0.5.cdf", "codice/data/l1a_validation"),
4646
("imap_codice_l1a_lo-direct-events_20250814211100_v0.0.5.cdf", "codice/data/l1a_validation"),
47-
("imap_codice_l1a_lo-ialirt_20250814211100_v0.0.5.cdf", "codice/data/l1a_validation"),
47+
("imap_codice_l1a_lo-ialirt_20250814_v007.cdf", "codice/data/l1a_validation"),
4848
("imap_codice_l1a_lo-nsw-priority_20250814211100_v0.0.5.cdf", "codice/data/l1a_validation"),
4949
("imap_codice_l1a_lo-nsw-angular_20250814_v007.cdf", "codice/data/l1a_validation"),
5050
("imap_codice_l1a_lo-sw-angular_20250814_v007.cdf", "codice/data/l1a_validation"),
@@ -62,7 +62,7 @@
6262
("imap_codice_l1b_hi-sectored_20250814_v007.cdf", "codice/data/l1b_validation"),
6363
("imap_codice_l1b_lo-counters-aggregated_20250814211100_v0.0.5.cdf", "codice/data/l1b_validation"),
6464
("imap_codice_l1b_lo-counters-singles_20250814211100_v0.0.5.cdf", "codice/data/l1b_validation"),
65-
("imap_codice_l1b_lo-ialirt_20250814211100_v0.0.5.cdf", "codice/data/l1b_validation"),
65+
("imap_codice_l1b_lo-ialirt_20250814_v007.cdf", "codice/data/l1b_validation"),
6666
("imap_codice_l1b_lo-nsw-angular_20250814_v007.cdf", "codice/data/l1b_validation"),
6767
("imap_codice_l1b_lo-nsw-priority_20250814211100_v0.0.5.cdf", "codice/data/l1b_validation"),
6868
("imap_codice_l1b_lo-sw-angular_20250814_v007.cdf", "codice/data/l1b_validation"),

imap_processing/tests/ialirt/unit/test_process_codice.py

Lines changed: 98 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
"""
66

77
from pathlib import Path
8+
from unittest.mock import patch
89

910
import numpy as np
1011
import pytest
12+
import xarray as xr
1113

1214
from imap_processing import imap_module_directory
15+
from imap_processing.cdf.utils import load_cdf
16+
from imap_processing.codice import constants
17+
from imap_processing.codice.codice_l1b import convert_to_rates
1318
from imap_processing.ialirt.l0.process_codice import (
1419
COD_HI_COUNTER,
1520
COD_HI_RANGE,
@@ -51,7 +56,7 @@ def cod_lo_test_file():
5156
/ "codice"
5257
/ "data"
5358
/ "l1a_input"
54-
/ "imap_codice_lo-ialirt_20250814_v001.pkts"
59+
/ "imap_codice_l0_lo-ialirt_20250814_v001.pkts"
5560
)
5661

5762

@@ -76,7 +81,7 @@ def cod_hi_test_file():
7681
/ "codice"
7782
/ "data"
7883
/ "l1a_input"
79-
/ "imap_codice_hi-ialirt_20250814_v001.pkts"
84+
/ "imap_codice_l0_hi-ialirt_20250814_v001.pkts"
8085
)
8186

8287

@@ -98,6 +103,97 @@ def codice_test_data(test_datasets):
98103
return test_datasets[478]
99104

100105

106+
@pytest.fixture(scope="session")
107+
def cod_lo_l1a_test_data():
108+
"""Returns the test data directory."""
109+
data_path = (
110+
imap_module_directory
111+
/ "tests"
112+
/ "codice"
113+
/ "data"
114+
/ "l1a_validation"
115+
/ "imap_codice_l1a_lo-ialirt_20250814_v007.cdf"
116+
)
117+
118+
data = load_cdf(data_path)
119+
120+
return data
121+
122+
123+
@pytest.fixture(scope="session")
124+
def cod_lo_l1b_test_data():
125+
"""Returns the test data directory."""
126+
data_path = (
127+
imap_module_directory
128+
/ "tests"
129+
/ "codice"
130+
/ "data"
131+
/ "l1b_validation"
132+
/ "imap_codice_l1b_lo-ialirt_20250814_v007.cdf"
133+
)
134+
135+
data = load_cdf(data_path)
136+
137+
return data
138+
139+
140+
def make_codice_lo_ialirt_dataset(cod_lo_l1a_test_data, descriptor):
141+
coords = {
142+
"epoch": cod_lo_l1a_test_data["epoch"],
143+
"esa_step": cod_lo_l1a_test_data["esa_step"],
144+
"spin_sector": cod_lo_l1a_test_data["spin_sector"],
145+
}
146+
147+
data_vars = {
148+
"k_factor": ("dim0", cod_lo_l1a_test_data["k_factor"].data),
149+
"voltage_table": ("esa_step", cod_lo_l1a_test_data["voltage_table"].data),
150+
"data_quality": ("epoch", cod_lo_l1a_test_data["data_quality"].data),
151+
"acquisition_time_per_step": (
152+
"esa_step",
153+
cod_lo_l1a_test_data["acquisition_time_per_step"].data,
154+
),
155+
"epoch_delta_minus": ("epoch", cod_lo_l1a_test_data["epoch_delta_minus"].data),
156+
"epoch_delta_plus": ("epoch", cod_lo_l1a_test_data["epoch_delta_plus"].data),
157+
}
158+
159+
variables_to_convert = getattr(
160+
constants, f"{descriptor.upper().replace('-', '_')}_VARIABLE_NAMES"
161+
)
162+
163+
for variable in variables_to_convert:
164+
data_vars[variable] = (
165+
("epoch", "esa_step", "spin_sector"),
166+
cod_lo_l1a_test_data[variable].data,
167+
)
168+
data_vars[f"unc_{variable}"] = (
169+
("epoch", "esa_step", "spin_sector"),
170+
cod_lo_l1a_test_data[f"unc_{variable}"].data,
171+
)
172+
173+
ds = xr.Dataset(data_vars=data_vars, coords=coords)
174+
return ds
175+
176+
177+
@patch("xarray.Dataset.drop_vars", new=lambda self, *args, **kwargs: self)
178+
@pytest.mark.external_test_data
179+
def test_l1b_ialirt_cod_lo(cod_lo_l1a_test_data, cod_lo_l1b_test_data):
180+
"Test I-ALiRT CoDICE-Lo l1b data."
181+
descriptor = "lo-ialirt"
182+
dataset = make_codice_lo_ialirt_dataset(cod_lo_l1a_test_data, descriptor)
183+
l1b = convert_to_rates(
184+
dataset,
185+
descriptor,
186+
)
187+
variables_to_convert = getattr(
188+
constants, f"{descriptor.upper().replace('-', '_')}_VARIABLE_NAMES"
189+
)
190+
for variable in variables_to_convert:
191+
actual = l1b[variable].data
192+
expected = cod_lo_l1b_test_data[variable].data
193+
194+
np.testing.assert_allclose(actual, expected, rtol=1e-5)
195+
196+
101197
@pytest.mark.external_test_data
102198
def test_group_and_decompress_ialirt_cod_lo(cod_lo_test_dataset):
103199
"Test that I-ALiRT CoDICE-Lo data can be grouped properly."

0 commit comments

Comments
 (0)