Skip to content

Commit 36b3859

Browse files
authored
IDEX l1b handle empty event msg datasets (#2908)
* idex l1b do not write empty datasets out * add coverage test
1 parent cbff0a3 commit 36b3859

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

imap_processing/idex/idex_l1b.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def get_mode_label(mode: int, channel: str) -> str:
117117
return f"{channel.upper()}{TriggerMode(mode).name}"
118118

119119

120-
def idex_l1b(l1a_dataset: xr.Dataset, descriptor: str) -> xr.Dataset:
120+
def idex_l1b(l1a_dataset: xr.Dataset, descriptor: str) -> xr.Dataset | None:
121121
"""
122122
Process IDEX l1a data to create l1b data products based on the descriptor.
123123
@@ -142,7 +142,7 @@ def idex_l1b(l1a_dataset: xr.Dataset, descriptor: str) -> xr.Dataset:
142142
raise ValueError(f"Unsupported descriptor: {descriptor}")
143143

144144

145-
def idex_l1b_msg(l1a_dataset: xr.Dataset) -> xr.Dataset:
145+
def idex_l1b_msg(l1a_dataset: xr.Dataset) -> xr.Dataset | None:
146146
"""
147147
Will process IDEX l1a msg data.
148148
@@ -205,6 +205,11 @@ def idex_l1b_msg(l1a_dataset: xr.Dataset) -> xr.Dataset:
205205
# (either science or pulser)
206206
null_event = (pulser_on == 255) & (science_on == 255)
207207
l1b_dataset = l1b_dataset.isel(epoch=~null_event)
208+
if len(l1b_dataset["epoch"]) == 0:
209+
logger.warning(
210+
"No science or pulser events found. No l1b dataset will be created."
211+
)
212+
return None
208213
logger.info("IDEX L1B MSG data processing completed.")
209214
return l1b_dataset
210215

imap_processing/tests/idex/test_idex_l1b.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,3 +403,19 @@ def test_l1b_msg_processing(decom_test_data_msg: xr.Dataset):
403403
expected_science_on[3] = 0
404404
np.testing.assert_array_equal(test_l1b_msg["pulser_on"].data, expected_pulser_on)
405405
np.testing.assert_array_equal(test_l1b_msg["science_on"].data, expected_science_on)
406+
407+
408+
def test_no_valid_messages(decom_test_data_msg: xr.Dataset):
409+
"""Verify that if there are no valid pulser and science events then no dataset is
410+
returned.
411+
412+
Parameters
413+
----------
414+
decom_test_data_msg : xr.Dataset
415+
A dataset containing the MSG data produced by the l1a processing.
416+
"""
417+
msg_ds = decom_test_data_msg.copy()
418+
# Set all messages to a value that is not a valid pulser on or off event
419+
msg_ds.messages[:] = "Not a science or pulser event"
420+
result = idex_l1b(msg_ds, "msg")
421+
assert result is None

0 commit comments

Comments
 (0)