imap-processing 0.7.0__py3-none-any.whl → 0.9.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of imap-processing might be problematic. Click here for more details.
- imap_processing/__init__.py +1 -1
- imap_processing/_version.py +2 -2
- imap_processing/ccsds/excel_to_xtce.py +36 -2
- imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +1 -1
- imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +145 -30
- imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +36 -36
- imap_processing/cdf/config/imap_hi_variable_attrs.yaml +136 -9
- imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +14 -0
- imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +63 -1
- imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +9 -0
- imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +14 -7
- imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +577 -235
- imap_processing/cdf/config/imap_idex_l1b_variable_attrs.yaml +326 -0
- imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +33 -23
- imap_processing/cdf/config/imap_mag_l1_variable_attrs.yaml +24 -28
- imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +1 -0
- imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +137 -79
- imap_processing/cdf/config/imap_variable_schema.yaml +13 -0
- imap_processing/cdf/imap_cdf_manager.py +31 -27
- imap_processing/cdf/utils.py +3 -5
- imap_processing/cli.py +25 -14
- imap_processing/codice/codice_l1a.py +153 -63
- imap_processing/codice/constants.py +10 -10
- imap_processing/codice/decompress.py +10 -11
- imap_processing/codice/utils.py +1 -0
- imap_processing/glows/l1a/glows_l1a.py +1 -2
- imap_processing/glows/l1b/glows_l1b.py +3 -3
- imap_processing/glows/l1b/glows_l1b_data.py +59 -37
- imap_processing/glows/l2/glows_l2_data.py +123 -0
- imap_processing/hi/l1a/hi_l1a.py +4 -4
- imap_processing/hi/l1a/histogram.py +107 -109
- imap_processing/hi/l1a/science_direct_event.py +92 -225
- imap_processing/hi/l1b/hi_l1b.py +85 -11
- imap_processing/hi/l1c/hi_l1c.py +23 -1
- imap_processing/hi/packet_definitions/TLM_HI_COMBINED_SCI.xml +3994 -0
- imap_processing/hi/utils.py +1 -1
- imap_processing/hit/hit_utils.py +221 -0
- imap_processing/hit/l0/constants.py +118 -0
- imap_processing/hit/l0/decom_hit.py +100 -156
- imap_processing/hit/l1a/hit_l1a.py +170 -184
- imap_processing/hit/l1b/hit_l1b.py +33 -153
- imap_processing/ialirt/l0/process_codicelo.py +153 -0
- imap_processing/ialirt/l0/process_hit.py +5 -5
- imap_processing/ialirt/packet_definitions/ialirt_codicelo.xml +281 -0
- imap_processing/ialirt/process_ephemeris.py +212 -0
- imap_processing/idex/idex_l1a.py +65 -84
- imap_processing/idex/idex_l1b.py +192 -0
- imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +33 -0
- imap_processing/idex/packet_definitions/idex_packet_definition.xml +97 -595
- imap_processing/lo/l0/decompression_tables/decompression_tables.py +17 -1
- imap_processing/lo/l0/lo_science.py +45 -13
- imap_processing/lo/l1a/lo_l1a.py +76 -8
- imap_processing/lo/packet_definitions/lo_xtce.xml +8344 -1849
- imap_processing/mag/l0/decom_mag.py +4 -3
- imap_processing/mag/l1a/mag_l1a.py +12 -13
- imap_processing/mag/l1a/mag_l1a_data.py +1 -2
- imap_processing/mag/l1b/mag_l1b.py +90 -7
- imap_processing/spice/geometry.py +156 -16
- imap_processing/spice/time.py +144 -2
- imap_processing/swapi/l1/swapi_l1.py +4 -4
- imap_processing/swapi/l2/swapi_l2.py +1 -1
- imap_processing/swapi/packet_definitions/swapi_packet_definition.xml +1535 -446
- imap_processing/swe/l1b/swe_l1b_science.py +8 -8
- imap_processing/swe/l2/swe_l2.py +134 -17
- imap_processing/tests/ccsds/test_data/expected_output.xml +2 -1
- imap_processing/tests/ccsds/test_excel_to_xtce.py +4 -4
- imap_processing/tests/cdf/test_imap_cdf_manager.py +0 -10
- imap_processing/tests/codice/conftest.py +1 -17
- imap_processing/tests/codice/data/imap_codice_l0_raw_20241110_v001.pkts +0 -0
- imap_processing/tests/codice/test_codice_l0.py +8 -2
- imap_processing/tests/codice/test_codice_l1a.py +127 -107
- imap_processing/tests/codice/test_codice_l1b.py +1 -0
- imap_processing/tests/codice/test_decompress.py +7 -7
- imap_processing/tests/conftest.py +100 -58
- imap_processing/tests/glows/conftest.py +6 -0
- imap_processing/tests/glows/test_glows_l1b.py +9 -9
- imap_processing/tests/glows/test_glows_l1b_data.py +9 -9
- imap_processing/tests/hi/test_data/l0/H90_NHK_20241104.bin +0 -0
- imap_processing/tests/hi/test_data/l0/H90_sci_cnt_20241104.bin +0 -0
- imap_processing/tests/hi/test_data/l0/H90_sci_de_20241104.bin +0 -0
- imap_processing/tests/hi/test_data/l1a/imap_hi_l1a_45sensor-de_20250415_v000.cdf +0 -0
- imap_processing/tests/hi/test_hi_l1b.py +73 -3
- imap_processing/tests/hi/test_hi_l1c.py +10 -2
- imap_processing/tests/hi/test_l1a.py +31 -58
- imap_processing/tests/hi/test_science_direct_event.py +58 -0
- imap_processing/tests/hi/test_utils.py +4 -3
- imap_processing/tests/hit/test_data/sci_sample1.ccsds +0 -0
- imap_processing/tests/hit/{test_hit_decom.py → test_decom_hit.py} +95 -36
- imap_processing/tests/hit/test_hit_l1a.py +299 -179
- imap_processing/tests/hit/test_hit_l1b.py +231 -24
- imap_processing/tests/hit/test_hit_utils.py +218 -0
- imap_processing/tests/hit/validation_data/hskp_sample_eu.csv +89 -0
- imap_processing/tests/hit/validation_data/sci_sample_raw1.csv +29 -0
- imap_processing/tests/ialirt/test_data/l0/apid01152.tlm +0 -0
- imap_processing/tests/ialirt/test_data/l0/imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/ialirt/unit/test_process_codicelo.py +106 -0
- imap_processing/tests/ialirt/unit/test_process_ephemeris.py +109 -0
- imap_processing/tests/ialirt/unit/test_process_hit.py +9 -6
- imap_processing/tests/idex/conftest.py +2 -2
- imap_processing/tests/idex/imap_idex_l0_raw_20231214_v001.pkts +0 -0
- imap_processing/tests/idex/impact_14_tof_high_data.txt +4444 -4444
- imap_processing/tests/idex/test_idex_l0.py +4 -4
- imap_processing/tests/idex/test_idex_l1a.py +8 -2
- imap_processing/tests/idex/test_idex_l1b.py +126 -0
- imap_processing/tests/lo/test_lo_l1a.py +7 -16
- imap_processing/tests/lo/test_lo_science.py +69 -5
- imap_processing/tests/lo/test_pkts/imap_lo_l0_raw_20240803_v002.pkts +0 -0
- imap_processing/tests/lo/validation_data/Instrument_FM1_T104_R129_20240803_ILO_SCI_DE_dec_DN_with_fills.csv +1999 -0
- imap_processing/tests/mag/imap_mag_l1a_norm-magi_20251017_v001.cdf +0 -0
- imap_processing/tests/mag/test_mag_l1b.py +97 -7
- imap_processing/tests/spice/test_data/imap_ena_sim_metakernel.template +3 -1
- imap_processing/tests/spice/test_geometry.py +115 -9
- imap_processing/tests/spice/test_time.py +135 -6
- imap_processing/tests/swapi/test_swapi_decom.py +75 -69
- imap_processing/tests/swapi/test_swapi_l1.py +4 -4
- imap_processing/tests/swe/conftest.py +33 -0
- imap_processing/tests/swe/l1_validation/swe_l0_unpacked-data_20240510_v001_VALIDATION_L1B_v3.dat +4332 -0
- imap_processing/tests/swe/test_swe_l1b.py +29 -8
- imap_processing/tests/swe/test_swe_l2.py +64 -8
- imap_processing/tests/test_utils.py +2 -2
- imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultrarawimg_withFSWcalcs_FM45_40P_Phi28p5_BeamCal_LinearScan_phi2850_theta-000_20240207T102740.csv +3314 -3314
- imap_processing/tests/ultra/test_data/l1/dps_exposure_helio_45_E12.cdf +0 -0
- imap_processing/tests/ultra/test_data/l1/dps_exposure_helio_45_E24.cdf +0 -0
- imap_processing/tests/ultra/unit/test_de.py +113 -0
- imap_processing/tests/ultra/unit/test_spatial_utils.py +125 -0
- imap_processing/tests/ultra/unit/test_ultra_l1b.py +27 -3
- imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +31 -10
- imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +55 -35
- imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +10 -68
- imap_processing/ultra/constants.py +12 -3
- imap_processing/ultra/l1b/de.py +168 -30
- imap_processing/ultra/l1b/ultra_l1b_annotated.py +24 -10
- imap_processing/ultra/l1b/ultra_l1b_extended.py +46 -80
- imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +60 -144
- imap_processing/ultra/utils/spatial_utils.py +221 -0
- {imap_processing-0.7.0.dist-info → imap_processing-0.9.0.dist-info}/METADATA +15 -14
- {imap_processing-0.7.0.dist-info → imap_processing-0.9.0.dist-info}/RECORD +142 -139
- imap_processing/cdf/cdf_attribute_manager.py +0 -322
- imap_processing/cdf/config/shared/default_global_cdf_attrs_schema.yaml +0 -246
- imap_processing/cdf/config/shared/default_variable_cdf_attrs_schema.yaml +0 -466
- imap_processing/hi/l0/decom_hi.py +0 -24
- imap_processing/hi/packet_definitions/hi_packet_definition.xml +0 -482
- imap_processing/hit/l0/data_classes/housekeeping.py +0 -240
- imap_processing/hit/l0/data_classes/science_packet.py +0 -259
- imap_processing/hit/l0/utils/hit_base.py +0 -57
- imap_processing/tests/cdf/shared/default_global_cdf_attrs_schema.yaml +0 -246
- imap_processing/tests/cdf/shared/default_variable_cdf_attrs_schema.yaml +0 -466
- imap_processing/tests/cdf/test_cdf_attribute_manager.py +0 -353
- imap_processing/tests/codice/data/imap_codice_l0_hi-counters-aggregated_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-counters-singles_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-omni_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-pha_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-sectored_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hskp_20100101_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-counters-aggregated_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-counters-singles_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-angular_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-priority_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-species_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-pha_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-sw-angular_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-sw-priority_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-sw-species_20240429_v001.pkts +0 -0
- imap_processing/tests/hi/test_decom.py +0 -55
- imap_processing/tests/hi/test_l1a_sci_de.py +0 -72
- imap_processing/tests/idex/imap_idex_l0_raw_20230725_v001.pkts +0 -0
- imap_processing/tests/mag/imap_mag_l1a_burst-magi_20231025_v001.cdf +0 -0
- /imap_processing/{hi/l0/__init__.py → tests/glows/test_glows_l2_data.py} +0 -0
- /imap_processing/tests/hit/test_data/{imap_hit_l0_hk_20100105_v001.pkts → imap_hit_l0_raw_20100105_v001.pkts} +0 -0
- {imap_processing-0.7.0.dist-info → imap_processing-0.9.0.dist-info}/LICENSE +0 -0
- {imap_processing-0.7.0.dist-info → imap_processing-0.9.0.dist-info}/WHEEL +0 -0
- {imap_processing-0.7.0.dist-info → imap_processing-0.9.0.dist-info}/entry_points.txt +0 -0
|
@@ -2,36 +2,34 @@ import pandas as pd
|
|
|
2
2
|
import pytest
|
|
3
3
|
|
|
4
4
|
from imap_processing import imap_module_directory
|
|
5
|
-
from imap_processing.decom import decom_packets
|
|
6
5
|
from imap_processing.swapi.l1.swapi_l1 import (
|
|
7
6
|
SWAPIAPID,
|
|
8
7
|
)
|
|
9
|
-
from imap_processing.utils import
|
|
8
|
+
from imap_processing.utils import packet_file_to_datasets
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
@pytest.fixture(scope="session")
|
|
13
12
|
def decom_test_data(swapi_l0_test_data_path):
|
|
14
|
-
"""Read test data from file"""
|
|
13
|
+
"""Read test data from file with derived values"""
|
|
15
14
|
test_file = "imap_swapi_l0_raw_20240924_v001.pkts"
|
|
16
15
|
packet_file = imap_module_directory / swapi_l0_test_data_path / test_file
|
|
17
16
|
packet_definition = (
|
|
18
17
|
f"{imap_module_directory}/swapi/packet_definitions/swapi_packet_definition.xml"
|
|
19
18
|
)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
return packet_file_to_datasets(
|
|
20
|
+
packet_file, packet_definition, use_derived_value=False
|
|
21
|
+
)
|
|
23
22
|
|
|
24
23
|
|
|
25
24
|
def test_number_of_packets(decom_test_data):
|
|
26
25
|
"""This test and validate number of packets."""
|
|
27
|
-
|
|
28
|
-
sci_packets = grouped_data[SWAPIAPID.SWP_SCI]
|
|
26
|
+
sci_packets = decom_test_data[SWAPIAPID.SWP_SCI]
|
|
29
27
|
expected_sci_packets = 153
|
|
30
|
-
assert len(sci_packets) == expected_sci_packets
|
|
28
|
+
assert len(sci_packets["epoch"]) == expected_sci_packets
|
|
31
29
|
|
|
32
|
-
hk_packets =
|
|
30
|
+
hk_packets = decom_test_data[SWAPIAPID.SWP_HK]
|
|
33
31
|
expected_hk_packets = 17
|
|
34
|
-
assert len(hk_packets) == expected_hk_packets
|
|
32
|
+
assert len(hk_packets["epoch"]) == expected_hk_packets
|
|
35
33
|
|
|
36
34
|
|
|
37
35
|
def test_swapi_sci_data(decom_test_data, swapi_l0_validation_data_path):
|
|
@@ -42,32 +40,30 @@ def test_swapi_sci_data(decom_test_data, swapi_l0_validation_data_path):
|
|
|
42
40
|
index_col="SHCOARSE",
|
|
43
41
|
)
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
validation_data = raw_validation_data.loc[first_data["SHCOARSE"]]
|
|
43
|
+
sci_packets = decom_test_data[SWAPIAPID.SWP_SCI]
|
|
44
|
+
first_data = sci_packets.isel(epoch=0)
|
|
45
|
+
validation_data = raw_validation_data.loc[first_data["shcoarse"].values]
|
|
49
46
|
|
|
50
47
|
# compare raw values of validation data
|
|
51
|
-
for key
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
)
|
|
48
|
+
for key in raw_validation_data.columns:
|
|
49
|
+
if key in [
|
|
50
|
+
"PHAPID",
|
|
51
|
+
"timestamp",
|
|
52
|
+
"PHGROUPF",
|
|
53
|
+
"PHSHF",
|
|
54
|
+
"PHVERNO",
|
|
55
|
+
"PHSEQCNT",
|
|
56
|
+
"PHDLEN",
|
|
57
|
+
"PHTYPE",
|
|
58
|
+
]:
|
|
59
|
+
continue
|
|
60
|
+
|
|
61
|
+
# for SHCOARSE we need the name of the column.
|
|
62
|
+
# This is done because pandas removed it from the
|
|
63
|
+
# main columns to make it the index.
|
|
64
|
+
assert first_data[key.lower()].values == (
|
|
65
|
+
validation_data[key] if key != "SHCOARSE" else validation_data.name
|
|
66
|
+
)
|
|
71
67
|
|
|
72
68
|
|
|
73
69
|
def test_swapi_hk_data(decom_test_data, swapi_l0_validation_data_path):
|
|
@@ -78,39 +74,49 @@ def test_swapi_hk_data(decom_test_data, swapi_l0_validation_data_path):
|
|
|
78
74
|
index_col="SHCOARSE",
|
|
79
75
|
)
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
bad_keys = [
|
|
86
|
-
"N5_V",
|
|
87
|
-
"SCEM_I",
|
|
88
|
-
"P5_I",
|
|
89
|
-
"PHD_LLD1_V",
|
|
90
|
-
"SPARE_4",
|
|
91
|
-
"P_CEM_CMD_LVL_MON",
|
|
92
|
-
"S_CEM_CMD_LVL_MON",
|
|
93
|
-
"ESA_CMD_LVL_MON",
|
|
94
|
-
"PHD_LLD2_V",
|
|
95
|
-
"CHKSUM",
|
|
96
|
-
]
|
|
77
|
+
hk_packets = decom_test_data[SWAPIAPID.SWP_HK]
|
|
78
|
+
first_data = hk_packets.isel(epoch=0)
|
|
79
|
+
validation_data = raw_validation_data.loc[first_data["shcoarse"].values]
|
|
80
|
+
|
|
97
81
|
# compare raw values of validation data
|
|
98
|
-
for key
|
|
99
|
-
if key
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
82
|
+
for key in raw_validation_data.columns:
|
|
83
|
+
if key in [
|
|
84
|
+
"PHAPID",
|
|
85
|
+
"timestamp",
|
|
86
|
+
"PHGROUPF",
|
|
87
|
+
"PHSHF",
|
|
88
|
+
"PHVERNO",
|
|
89
|
+
"PHSEQCNT",
|
|
90
|
+
"PHDLEN",
|
|
91
|
+
"PHTYPE",
|
|
92
|
+
]:
|
|
93
|
+
continue
|
|
94
|
+
|
|
95
|
+
value_mismatching_keys = [
|
|
96
|
+
"SCEM_I",
|
|
97
|
+
"N5_V",
|
|
98
|
+
"P5_I",
|
|
99
|
+
"PHD_LLD1_V",
|
|
100
|
+
"P_CEM_CMD_LVL_MON",
|
|
101
|
+
"S_CEM_CMD_LVL_MON",
|
|
102
|
+
"ESA_CMD_LVL_MON",
|
|
103
|
+
"PHD_LLD2_V",
|
|
104
|
+
"CHKSUM",
|
|
105
|
+
]
|
|
106
|
+
|
|
107
|
+
extra_keys_val_data = [
|
|
108
|
+
"ESA_GATE_SET",
|
|
109
|
+
"P5V_ESA_V_MON",
|
|
110
|
+
"M5V_ESA_V_MON",
|
|
111
|
+
"P5V_ESA_I_MON",
|
|
112
|
+
"M5V_ESA_I_MON",
|
|
113
|
+
]
|
|
114
|
+
|
|
115
|
+
if key in extra_keys_val_data or key in value_mismatching_keys:
|
|
114
116
|
continue
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
# for SHCOARSE we need the name of the column.
|
|
118
|
+
# This is done because pandas removed it from the
|
|
119
|
+
# main columns to make it the index.
|
|
120
|
+
assert first_data[key.lower()].values == (
|
|
121
|
+
validation_data[key] if key != "SHCOARSE" else validation_data.name
|
|
122
|
+
)
|
|
@@ -39,7 +39,7 @@ def test_filter_good_data():
|
|
|
39
39
|
total_sweeps = 3
|
|
40
40
|
ds = xr.Dataset(
|
|
41
41
|
{
|
|
42
|
-
"
|
|
42
|
+
"plan_id": xr.DataArray(np.full((total_sweeps * 12), 1)),
|
|
43
43
|
"sweep_table": xr.DataArray(np.repeat(np.arange(total_sweeps), 12)),
|
|
44
44
|
"mode": xr.DataArray(np.full((total_sweeps * 12), SWAPIMODE.HVSCI.value)),
|
|
45
45
|
},
|
|
@@ -69,9 +69,9 @@ def test_filter_good_data():
|
|
|
69
69
|
expected = [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
|
|
70
70
|
np.testing.assert_array_equal(filter_good_data(ds), expected)
|
|
71
71
|
|
|
72
|
-
# Check for bad
|
|
72
|
+
# Check for bad plan_id data.
|
|
73
73
|
ds["sweep_table"] = xr.DataArray(np.repeat(np.arange(total_sweeps), 12))
|
|
74
|
-
ds["
|
|
74
|
+
ds["plan_id"][24 : total_sweeps * 12] = np.arange(0, 12)
|
|
75
75
|
np.testing.assert_array_equal(filter_good_data(ds), np.arange(0, 24))
|
|
76
76
|
|
|
77
77
|
|
|
@@ -157,7 +157,7 @@ def test_process_swapi_science(decom_test_data):
|
|
|
157
157
|
)
|
|
158
158
|
|
|
159
159
|
# make PLAN_ID data incorrect. Now processed data should have less sweeps
|
|
160
|
-
ds_data["
|
|
160
|
+
ds_data["plan_id"].data[:24] = np.arange(24)
|
|
161
161
|
processed_data = process_swapi_science(
|
|
162
162
|
ds_data, decom_test_data[SWAPIAPID.SWP_HK], data_version="001"
|
|
163
163
|
)
|
|
@@ -74,3 +74,36 @@ def l1a_validation_df():
|
|
|
74
74
|
# Fill NaNs with the previous value
|
|
75
75
|
df["shcoarse"] = df["shcoarse"].ffill()
|
|
76
76
|
return df
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@pytest.fixture(scope="session")
|
|
80
|
+
def l1b_validation_df():
|
|
81
|
+
"""Read validation data from file"""
|
|
82
|
+
l1_val_path = imap_module_directory / "tests/swe/l1_validation"
|
|
83
|
+
filename = "swe_l0_unpacked-data_20240510_v001_VALIDATION_L1B_v3.dat"
|
|
84
|
+
|
|
85
|
+
# Define column names for validation data
|
|
86
|
+
column_names = [
|
|
87
|
+
"shcoarse",
|
|
88
|
+
"cem_1",
|
|
89
|
+
"cem_2",
|
|
90
|
+
"cem_3",
|
|
91
|
+
"cem_4",
|
|
92
|
+
"cem_5",
|
|
93
|
+
"cem_6",
|
|
94
|
+
"cem_7",
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
# Read the data, specifying na_values and delimiter
|
|
98
|
+
df = pd.read_csv(
|
|
99
|
+
l1_val_path / filename,
|
|
100
|
+
skiprows=12, # Skip the first 10 rows of comments
|
|
101
|
+
sep=r"\s*,\s*", # Regex to handle spaces and commas as delimiters
|
|
102
|
+
names=column_names,
|
|
103
|
+
na_values=["", " "], # Treat empty strings or spaces as NaN
|
|
104
|
+
engine="python",
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Fill NaNs with the previous value
|
|
108
|
+
df["shcoarse"] = df["shcoarse"].ffill()
|
|
109
|
+
return df
|