Skip to content

Commit 106118d

Browse files
committed
add sc status
1 parent 8681161 commit 106118d

File tree

3 files changed

+134
-0
lines changed

3 files changed

+134
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
"""Functions to support status processing."""
2+
3+
import logging
4+
5+
import xarray as xr
6+
7+
from imap_processing.ialirt.utils.grouping import (
8+
_populate_instrument_header_items,
9+
)
10+
from imap_processing.ialirt.utils.time import calculate_time
11+
from imap_processing.spice.time import met_to_ttj2000ns
12+
13+
logger = logging.getLogger(__name__)
14+
15+
16+
def process_status(xarray_data: xr.Dataset) -> list[dict]:
17+
"""
18+
Create L1 data dictionary.
19+
20+
Parameters
21+
----------
22+
xarray_data : xr.Dataset
23+
Parsed data.
24+
25+
Returns
26+
-------
27+
status_data : list[dict]
28+
Dictionary final data product.
29+
"""
30+
status_data = []
31+
32+
# Subsecond time conversion specified in 7516-9054 GSW-FSW ICD.
33+
# Value of SCLK subseconds, unsigned, (LSB = 1/256 sec)
34+
met = calculate_time(
35+
xarray_data["sc_sclk_sec"], xarray_data["sc_sclk_sub_sec"], 256
36+
)
37+
38+
# Add required parameters.
39+
xarray_data["met"] = met
40+
41+
sc_swapi_status = xarray_data["sc_swapi_status"]
42+
sc_mag_status = xarray_data["sc_mag_status"]
43+
sc_hit_status = xarray_data["sc_hit_status"]
44+
sc_codice_status = xarray_data["sc_codice_status"]
45+
sc_lo_status = xarray_data["sc_lo_status"]
46+
sc_hi_45_status = xarray_data["sc_hi_45_status"]
47+
sc_hi_90_status = xarray_data["sc_hi_90_status"]
48+
sc_ultra_45_status = xarray_data["sc_ultra_45_status"]
49+
sc_ultra_90_status = xarray_data["sc_ultra_90_status"]
50+
sc_swe_status = xarray_data["sc_swe_status"]
51+
sc_idex_status = xarray_data["sc_idex_status"]
52+
sc_glows_status = xarray_data["sc_glows_status"]
53+
sc_autonomy_status = xarray_data["sc_autonomy"]
54+
55+
for i in range(len(xarray_data["met"])):
56+
status_data.append(
57+
_populate_instrument_header_items(met)
58+
| {
59+
"instrument": "spacecraft_status",
60+
"status_epoch": int(met_to_ttj2000ns(met[i])),
61+
"sc_swapi_status": int(sc_swapi_status[i]),
62+
"sc_mag_status": int(sc_mag_status[i]),
63+
"sc_hit_status": int(sc_hit_status[i]),
64+
"sc_codice_status": int(sc_codice_status[i]),
65+
"sc_lo_status": int(sc_lo_status[i]),
66+
"sc_hi_45_status": int(sc_hi_45_status[i]),
67+
"sc_hi_90_status": int(sc_hi_90_status[i]),
68+
"sc_ultra_45_status": int(sc_ultra_45_status[i]),
69+
"sc_ultra_90_status": int(sc_ultra_90_status[i]),
70+
"sc_swe_status": int(sc_swe_status[i]),
71+
"sc_idex_status": int(sc_idex_status[i]),
72+
"sc_glows_status": int(sc_glows_status[i]),
73+
"sc_autonomy_status": int(sc_autonomy_status[i]),
74+
}
75+
)
76+
77+
return status_data

imap_processing/tests/external_test_data_config.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@
130130
("iois_1_packets_2025_284_05_54_39", "ialirt/data/l0/"),
131131
("iois_1_packets_2025_344_05_57_56", "ialirt/data/l0/"),
132132
("iois_1_packets_2025_344_05_59_58", "ialirt/data/l0/"),
133+
("iois_1_packets_2026_090_05_03_05", "ialirt/data/l0/"),
134+
("iois_1_packets_2026_090_05_04_06", "ialirt/data/l0/"),
135+
("iois_1_packets_2026_090_05_05_07", "ialirt/data/l0/"),
136+
("iois_1_packets_2026_090_05_06_08", "ialirt/data/l0/"),
137+
("iois_1_packets_2026_090_05_07_09", "ialirt/data/l0/"),
133138
("imap_recon_od005_20250925_20251014_v01.bsp", "spice/test_data/"),
134139
("imap_2025_283_2025_284_001.ah.bc", "spice/test_data/"),
135140

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""Tests for the process_status module."""
2+
3+
import pytest
4+
import xarray as xr
5+
6+
from imap_processing import imap_module_directory
7+
from imap_processing.ialirt.l0.process_status import process_status
8+
from imap_processing.utils import packet_file_to_datasets
9+
10+
11+
@pytest.fixture(scope="session")
12+
def postlaunch_packet_path():
13+
"""Returns the paths to the binary packets."""
14+
directory = imap_module_directory / "tests" / "ialirt" / "data" / "l0"
15+
filenames = [
16+
"iois_1_packets_2026_090_05_03_05",
17+
"iois_1_packets_2026_090_05_04_06",
18+
"iois_1_packets_2026_090_05_05_07",
19+
"iois_1_packets_2026_090_05_06_08",
20+
"iois_1_packets_2026_090_05_07_09",
21+
]
22+
return tuple(directory / fname for fname in filenames)
23+
24+
25+
@pytest.fixture
26+
def postlaunch_xarray_data(postlaunch_packet_path, sc_packet_path):
27+
"""Create xarray data for multiple packets."""
28+
apid = 478
29+
_, xtce_ialirt_path = sc_packet_path
30+
31+
xarray_data = tuple(
32+
packet_file_to_datasets(packet, xtce_ialirt_path, use_derived_value=False)[apid]
33+
for packet in postlaunch_packet_path
34+
)
35+
36+
merged_xarray_data = xr.concat(xarray_data, dim="epoch")
37+
return merged_xarray_data
38+
39+
40+
@pytest.mark.external_test_data
41+
def test_process_status(postlaunch_xarray_data):
42+
"""Test the process_status function."""
43+
44+
status_data = process_status(postlaunch_xarray_data)
45+
46+
for i in range(len(status_data)):
47+
assert status_data[i]["sc_swapi_status"] == 1
48+
assert status_data[i]["sc_mag_status"] == 1
49+
assert status_data[i]["sc_hit_status"] == 1
50+
assert status_data[i]["sc_codice_status"] == 1
51+
assert status_data[i]["sc_lo_status"] == 1
52+
assert status_data[i]["sc_autonomy_status"] == 1

0 commit comments

Comments
 (0)