diff --git a/imap_processing/ialirt/l0/process_swe.py b/imap_processing/ialirt/l0/process_swe.py index 6b9d2944f..763b731e4 100644 --- a/imap_processing/ialirt/l0/process_swe.py +++ b/imap_processing/ialirt/l0/process_swe.py @@ -473,9 +473,17 @@ def process_swe(accumulated_data: xr.Dataset, in_flight_cal_files: list) -> list # Add required parameters. accumulated_data["met"] = met + # Drop any off-nominal SWE groups + nominal_data = accumulated_data.where( + accumulated_data["swe_nom_flag"] != 0, + drop=True, + ) + # Get total full cycle data available for processing. # There are 60 packets in a set so (0, 59) is the range. - grouped_data = find_groups(accumulated_data, (0, 59), "swe_seq", "time_seconds") + grouped_data = find_groups( + nominal_data, (0, 59), "swe_seq", "met", check_src_seq_ctr=False + ) unique_groups = np.unique(grouped_data["group"]) swe_data: list[dict] = [] incomplete_groups = [] diff --git a/imap_processing/ialirt/utils/grouping.py b/imap_processing/ialirt/utils/grouping.py index 27bf3fcbc..ca0ae6ac2 100644 --- a/imap_processing/ialirt/utils/grouping.py +++ b/imap_processing/ialirt/utils/grouping.py @@ -50,6 +50,7 @@ def find_groups( sequence_range: tuple, sequence_name: str, time_name: str, + check_src_seq_ctr: bool = True, ) -> xr.Dataset: """ Group data based on time and sequence number values. @@ -64,6 +65,8 @@ def find_groups( Name of the sequence variable. time_name : str Name of the time variable. + check_src_seq_ctr : bool | True + Check for incrementing src_seq_ctr. Returns ------- @@ -114,7 +117,10 @@ def find_groups( # group (epoch) int64 7kB 1 1 1 1 1 1 1 1 1 ... 15 15 15 15 15 15 15 15 15 grouped_data = grouped_data.assign_coords(group=("epoch", group_labels)) - # Filter out groups with non-sequential src_seq_ctr values. - filtered_data = filter_valid_groups(grouped_data) + if check_src_seq_ctr: + # Filter out groups with non-sequential src_seq_ctr values. + filtered_data = filter_valid_groups(grouped_data) + else: + filtered_data = grouped_data return filtered_data diff --git a/imap_processing/tests/ialirt/unit/test_grouping.py b/imap_processing/tests/ialirt/unit/test_grouping.py index c792adf9e..a578713d6 100644 --- a/imap_processing/tests/ialirt/unit/test_grouping.py +++ b/imap_processing/tests/ialirt/unit/test_grouping.py @@ -79,3 +79,20 @@ def test_find_groups(test_data): grouped_data = find_groups(test_data, (0, 3), "sequence", "time_seconds") assert np.all(np.unique(grouped_data["group"]) == np.array([1, 3])) + + +def test_find_groups_no_valid(test_data): + """Tests the find_groups function when no valid groups are found.""" + + flag = np.ones(np.size(test_data["src_seq_ctr"]), dtype=int) + flag[-1] = 0 + + test_data["swe_nom_flag"] = ("epoch", flag) + + nominal_data = test_data.where( + test_data["swe_nom_flag"] != 0, + drop=True, + ) + grouped_data = find_groups(nominal_data, (0, 3), "sequence", "time_seconds") + + assert np.all(np.unique(grouped_data["group"]) == np.array([1])) diff --git a/imap_processing/tests/ialirt/unit/test_process_swe.py b/imap_processing/tests/ialirt/unit/test_process_swe.py index a9946deff..1df92c3fb 100644 --- a/imap_processing/tests/ialirt/unit/test_process_swe.py +++ b/imap_processing/tests/ialirt/unit/test_process_swe.py @@ -168,6 +168,7 @@ def test_process_spacecraft_packet( np.arange(462466219, 462466219 + n, dtype=np.uint32), ) sc_xarray_data["swe_seq"] = ("epoch", np.arange(n) % 60) + sc_xarray_data["swe_nom_flag"] = xr.ones_like(sc_xarray_data["swe_nom_flag"]) in_flight_cal_file = ( imap_module_directory