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
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import pytest
|
|
3
|
+
|
|
4
|
+
from imap_processing import imap_module_directory
|
|
5
|
+
from imap_processing.cdf.utils import load_cdf
|
|
6
|
+
from imap_processing.ialirt.l0.process_codicelo import (
|
|
7
|
+
append_cod_lo_data,
|
|
8
|
+
find_groups,
|
|
9
|
+
process_codicelo,
|
|
10
|
+
)
|
|
11
|
+
from imap_processing.utils import packet_file_to_datasets
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@pytest.fixture(scope="session")
|
|
15
|
+
def xtce_codicelo_path():
|
|
16
|
+
"""Returns the xtce directory."""
|
|
17
|
+
return (
|
|
18
|
+
imap_module_directory / "ialirt" / "packet_definitions" / "ialirt_codicelo.xml"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@pytest.fixture(scope="session")
|
|
23
|
+
def binary_packet_path():
|
|
24
|
+
"""Returns the xtce directory."""
|
|
25
|
+
return (
|
|
26
|
+
imap_module_directory
|
|
27
|
+
/ "tests"
|
|
28
|
+
/ "ialirt"
|
|
29
|
+
/ "test_data"
|
|
30
|
+
/ "l0"
|
|
31
|
+
/ "apid01152.tlm"
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@pytest.fixture(scope="session")
|
|
36
|
+
def codicelo_validation_data():
|
|
37
|
+
"""Returns the test data directory."""
|
|
38
|
+
data_path = (
|
|
39
|
+
imap_module_directory
|
|
40
|
+
/ "tests"
|
|
41
|
+
/ "ialirt"
|
|
42
|
+
/ "test_data"
|
|
43
|
+
/ "l0"
|
|
44
|
+
/ "imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf"
|
|
45
|
+
)
|
|
46
|
+
data = load_cdf(data_path)
|
|
47
|
+
|
|
48
|
+
return data
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@pytest.fixture()
|
|
52
|
+
def codicelo_test_data(binary_packet_path, xtce_codicelo_path):
|
|
53
|
+
"""Create xarray data"""
|
|
54
|
+
apid = 1152
|
|
55
|
+
codicelo_test_data = packet_file_to_datasets(
|
|
56
|
+
binary_packet_path, xtce_codicelo_path
|
|
57
|
+
)[apid]
|
|
58
|
+
|
|
59
|
+
return codicelo_test_data
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_find_groups(codicelo_test_data):
|
|
63
|
+
"""Tests find_groups"""
|
|
64
|
+
|
|
65
|
+
grouped_data = find_groups(codicelo_test_data)
|
|
66
|
+
unique_groups = np.unique(grouped_data["group"])
|
|
67
|
+
for group in unique_groups:
|
|
68
|
+
group_data = grouped_data["cod_lo_counter"].values[
|
|
69
|
+
grouped_data["group"] == group
|
|
70
|
+
]
|
|
71
|
+
np.testing.assert_array_equal(group_data, np.arange(233))
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_append_cod_lo_data(codicelo_test_data):
|
|
75
|
+
"""Tests append_cod_lo_data"""
|
|
76
|
+
|
|
77
|
+
grouped_data = find_groups(codicelo_test_data)
|
|
78
|
+
unique_groups = np.unique(grouped_data["group"])
|
|
79
|
+
for group in unique_groups:
|
|
80
|
+
mask = grouped_data["group"] == group
|
|
81
|
+
filtered_indices = np.where(mask)[0]
|
|
82
|
+
group_data = grouped_data.isel(epoch=filtered_indices)
|
|
83
|
+
expected_cod_lo_counter = np.repeat(group_data["cod_lo_counter"].values, 15)
|
|
84
|
+
appended_data = append_cod_lo_data(group_data)
|
|
85
|
+
assert np.array_equal(
|
|
86
|
+
appended_data["cod_lo_counter"].values, expected_cod_lo_counter.astype(int)
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_process_codicelo(codicelo_test_data, codicelo_validation_data, caplog):
|
|
91
|
+
"""Tests process_codicelo."""
|
|
92
|
+
codicelo_product = process_codicelo(codicelo_test_data)
|
|
93
|
+
assert codicelo_product == [{}]
|
|
94
|
+
|
|
95
|
+
indices = (codicelo_test_data["cod_lo_acq"] != 0).values.nonzero()[0]
|
|
96
|
+
codicelo_test_data["cod_lo_counter"].values[indices[0] : indices[0] + 233] = (
|
|
97
|
+
np.random.permutation(233)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
with caplog.at_level("WARNING"):
|
|
101
|
+
process_codicelo(codicelo_test_data)
|
|
102
|
+
|
|
103
|
+
assert any(
|
|
104
|
+
"does not contain all values from 0 to 232 without duplicates" in message
|
|
105
|
+
for message in caplog.text.splitlines()
|
|
106
|
+
)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""Test processEphemeris functions."""
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
from imap_processing.ialirt import process_ephemeris
|
|
7
|
+
from imap_processing.spice.time import str_to_et
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_calculate_doppler():
|
|
11
|
+
"""
|
|
12
|
+
Test the calculate_doppler() function.
|
|
13
|
+
"""
|
|
14
|
+
assert process_ephemeris.calculate_doppler(805794429.1837295) == 1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@pytest.mark.external_kernel()
|
|
18
|
+
def test_latitude_longitude_to_ecef(furnish_kernels):
|
|
19
|
+
"""
|
|
20
|
+
Test the latitude_longitude_to_ecef() function.
|
|
21
|
+
|
|
22
|
+
Test data is from https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/cspice/
|
|
23
|
+
georec_c.html.
|
|
24
|
+
"""
|
|
25
|
+
longitude = 118.0 # degrees
|
|
26
|
+
latitude = 30.0 # degrees
|
|
27
|
+
altitude = 0.0 # kilometers
|
|
28
|
+
|
|
29
|
+
kernels = ["pck00011.tpc"]
|
|
30
|
+
with furnish_kernels(kernels):
|
|
31
|
+
rect_coords = process_ephemeris.latitude_longitude_to_ecef(
|
|
32
|
+
longitude, latitude, altitude
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
np.testing.assert_allclose(
|
|
36
|
+
rect_coords, [-2595.359123, 4881.160589, 3170.373523], atol=1e-6
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@pytest.mark.external_kernel()
|
|
41
|
+
def test_calculate_azimuth_and_elevation(furnish_kernels):
|
|
42
|
+
"""
|
|
43
|
+
Test the calculate_azimuth_and_elevation() function.
|
|
44
|
+
"""
|
|
45
|
+
longitude = -71.41 # longitude in degrees
|
|
46
|
+
latitude = -33.94 # latitude in degrees
|
|
47
|
+
altitude = 0.157 # altitude in kilometers
|
|
48
|
+
# test single observation time
|
|
49
|
+
observation_time = 805794429.1837295 # "2025-07-14T19:46:00.000"
|
|
50
|
+
|
|
51
|
+
kernels = [
|
|
52
|
+
"pck00011.tpc",
|
|
53
|
+
"de440s.bsp",
|
|
54
|
+
]
|
|
55
|
+
with furnish_kernels(kernels):
|
|
56
|
+
azimuth_result, elevation_result = (
|
|
57
|
+
process_ephemeris.calculate_azimuth_and_elevation(
|
|
58
|
+
longitude, latitude, altitude, observation_time
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
assert azimuth_result, elevation_result is not None
|
|
62
|
+
|
|
63
|
+
# test array of observation times
|
|
64
|
+
time_endpoints = ("2026 SEP 22 00:00:00", "2026 SEP 22 23:59:59")
|
|
65
|
+
time_interval = int(1e3) # seconds between data points
|
|
66
|
+
observation_time = np.arange(
|
|
67
|
+
str_to_et(time_endpoints[0]), str_to_et(time_endpoints[1]), time_interval
|
|
68
|
+
)
|
|
69
|
+
with furnish_kernels(kernels):
|
|
70
|
+
azimuth_result, elevation_result = (
|
|
71
|
+
process_ephemeris.calculate_azimuth_and_elevation(
|
|
72
|
+
longitude, latitude, altitude, observation_time
|
|
73
|
+
)
|
|
74
|
+
)
|
|
75
|
+
assert len(azimuth_result) == len(observation_time)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@pytest.mark.external_kernel()
|
|
79
|
+
def test_build_output(furnish_kernels):
|
|
80
|
+
"""
|
|
81
|
+
Test the build_output() function.
|
|
82
|
+
"""
|
|
83
|
+
# Example usage for Longovilo-Hacienda, Chile
|
|
84
|
+
# https://www.findlatitudeandlongitude.com/l/LONGOVILO%2C+CHILE/
|
|
85
|
+
longitude = -71.41 # longitude in degrees
|
|
86
|
+
latitude = -33.94 # latitude in degrees
|
|
87
|
+
altitude = 0.157 # altitude in kilometers
|
|
88
|
+
time_endpoints = ("2026 SEP 22 00:00:00", "2026 SEP 22 23:59:59")
|
|
89
|
+
time_interval = int(1e3) # seconds between data points
|
|
90
|
+
|
|
91
|
+
kernels = [
|
|
92
|
+
"naif0012.tls",
|
|
93
|
+
"pck00011.tpc",
|
|
94
|
+
"de440s.bsp",
|
|
95
|
+
]
|
|
96
|
+
with furnish_kernels(kernels):
|
|
97
|
+
output_dict = process_ephemeris.build_output(
|
|
98
|
+
longitude, latitude, altitude, time_endpoints, time_interval
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
for key_name in ["azimuth", "elevation", "time", "doppler"]:
|
|
102
|
+
assert key_name in output_dict.keys()
|
|
103
|
+
assert len(output_dict[key_name]) == len(
|
|
104
|
+
np.arange(
|
|
105
|
+
str_to_et(time_endpoints[0]),
|
|
106
|
+
str_to_et(time_endpoints[1]),
|
|
107
|
+
time_interval,
|
|
108
|
+
)
|
|
109
|
+
)
|
|
@@ -20,7 +20,7 @@ def xtce_hit_path():
|
|
|
20
20
|
|
|
21
21
|
@pytest.fixture(scope="session")
|
|
22
22
|
def binary_packet_path():
|
|
23
|
-
"""Returns the xtce
|
|
23
|
+
"""Returns the xtce directory."""
|
|
24
24
|
return (
|
|
25
25
|
imap_module_directory
|
|
26
26
|
/ "tests"
|
|
@@ -33,7 +33,7 @@ def binary_packet_path():
|
|
|
33
33
|
|
|
34
34
|
@pytest.fixture(scope="session")
|
|
35
35
|
def hit_test_data():
|
|
36
|
-
"""Returns the
|
|
36
|
+
"""Returns the test data directory."""
|
|
37
37
|
data_path = (
|
|
38
38
|
imap_module_directory
|
|
39
39
|
/ "tests"
|
|
@@ -141,7 +141,7 @@ def test_create_l1(xarray_data):
|
|
|
141
141
|
assert l1["L4IBHG"] == 2
|
|
142
142
|
|
|
143
143
|
|
|
144
|
-
def test_process_hit(xarray_data):
|
|
144
|
+
def test_process_hit(xarray_data, caplog):
|
|
145
145
|
"""Tests process_hit."""
|
|
146
146
|
|
|
147
147
|
# Tests that it functions normally
|
|
@@ -167,11 +167,14 @@ def test_process_hit(xarray_data):
|
|
|
167
167
|
i for i in range(29) for _ in range(2)
|
|
168
168
|
] + [59, 59]
|
|
169
169
|
|
|
170
|
-
with
|
|
171
|
-
ValueError, match="does not contain all values from 0 to 59 without duplicates"
|
|
172
|
-
):
|
|
170
|
+
with caplog.at_level("WARNING"):
|
|
173
171
|
process_hit(subset)
|
|
174
172
|
|
|
173
|
+
assert any(
|
|
174
|
+
"does not contain all values from 0 to 59 without duplicates" in message
|
|
175
|
+
for message in caplog.text.splitlines()
|
|
176
|
+
)
|
|
177
|
+
|
|
175
178
|
|
|
176
179
|
def test_decom_packets(xarray_data, hit_test_data):
|
|
177
180
|
"""This function checks that all instrument parameters are accounted for."""
|
|
@@ -7,7 +7,7 @@ from imap_processing import imap_module_directory
|
|
|
7
7
|
from imap_processing.idex.idex_l1a import PacketParser
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
@pytest.fixture()
|
|
10
|
+
@pytest.fixture(scope="module")
|
|
11
11
|
def decom_test_data() -> xr.Dataset:
|
|
12
12
|
"""Return a ``xarray`` dataset containing test data.
|
|
13
13
|
|
|
@@ -17,6 +17,6 @@ def decom_test_data() -> xr.Dataset:
|
|
|
17
17
|
A ``xarray`` dataset containing the test data
|
|
18
18
|
"""
|
|
19
19
|
test_file = Path(
|
|
20
|
-
f"{imap_module_directory}/tests/idex/
|
|
20
|
+
f"{imap_module_directory}/tests/idex/imap_idex_l0_raw_20231214_v001.pkts"
|
|
21
21
|
)
|
|
22
22
|
return PacketParser(test_file, "001").data
|
|
Binary file
|