imap-processing 0.12.0__py3-none-any.whl → 0.13.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 -0
- imap_processing/_version.py +2 -2
- imap_processing/ccsds/ccsds_data.py +1 -2
- imap_processing/ccsds/excel_to_xtce.py +1 -2
- imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +18 -12
- imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +569 -0
- imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +1846 -128
- imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +5 -5
- imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +20 -1
- imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +6 -4
- imap_processing/cdf/config/imap_idex_l1b_variable_attrs.yaml +3 -3
- imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +15 -0
- imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +22 -0
- imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +16 -0
- imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +178 -5
- imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +5045 -41
- imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +33 -19
- imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +8 -48
- imap_processing/cdf/utils.py +41 -33
- imap_processing/cli.py +463 -234
- imap_processing/codice/codice_l1a.py +260 -47
- imap_processing/codice/codice_l1b.py +51 -152
- imap_processing/codice/constants.py +38 -1
- imap_processing/ena_maps/ena_maps.py +658 -65
- imap_processing/ena_maps/utils/coordinates.py +1 -1
- imap_processing/ena_maps/utils/spatial_utils.py +10 -5
- imap_processing/glows/l1a/glows_l1a.py +28 -99
- imap_processing/glows/l1a/glows_l1a_data.py +2 -2
- imap_processing/glows/l1b/glows_l1b.py +1 -4
- imap_processing/glows/l1b/glows_l1b_data.py +1 -3
- imap_processing/glows/l2/glows_l2.py +2 -5
- imap_processing/hi/l1a/hi_l1a.py +31 -12
- imap_processing/hi/l1b/hi_l1b.py +80 -43
- imap_processing/hi/l1c/hi_l1c.py +12 -16
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-sector-dt0-factors_20250219_v002.csv +81 -0
- imap_processing/hit/hit_utils.py +93 -35
- imap_processing/hit/l0/decom_hit.py +3 -1
- imap_processing/hit/l1a/hit_l1a.py +30 -25
- imap_processing/hit/l1b/constants.py +6 -2
- imap_processing/hit/l1b/hit_l1b.py +279 -318
- imap_processing/hit/l2/constants.py +37 -0
- imap_processing/hit/l2/hit_l2.py +373 -264
- imap_processing/ialirt/l0/parse_mag.py +138 -10
- imap_processing/ialirt/l0/process_swapi.py +69 -0
- imap_processing/ialirt/l0/process_swe.py +318 -22
- imap_processing/ialirt/packet_definitions/ialirt.xml +216 -212
- imap_processing/ialirt/packet_definitions/ialirt_codicehi.xml +1 -1
- imap_processing/ialirt/packet_definitions/ialirt_codicelo.xml +1 -1
- imap_processing/ialirt/packet_definitions/ialirt_swapi.xml +14 -14
- imap_processing/ialirt/utils/grouping.py +1 -1
- imap_processing/idex/idex_constants.py +9 -1
- imap_processing/idex/idex_l0.py +22 -8
- imap_processing/idex/idex_l1a.py +75 -44
- imap_processing/idex/idex_l1b.py +9 -8
- imap_processing/idex/idex_l2a.py +79 -45
- imap_processing/idex/idex_l2b.py +120 -0
- imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +33 -39
- imap_processing/idex/packet_definitions/idex_housekeeping_packet_definition.xml +9130 -0
- imap_processing/lo/l0/lo_science.py +1 -2
- imap_processing/lo/l1a/lo_l1a.py +1 -4
- imap_processing/lo/l1b/lo_l1b.py +527 -6
- imap_processing/lo/l1b/tof_conversions.py +11 -0
- imap_processing/lo/l1c/lo_l1c.py +1 -4
- imap_processing/mag/constants.py +43 -0
- imap_processing/mag/imap_mag_sdc_configuration_v001.py +8 -0
- imap_processing/mag/l1a/mag_l1a.py +2 -9
- imap_processing/mag/l1a/mag_l1a_data.py +10 -10
- imap_processing/mag/l1b/mag_l1b.py +84 -17
- imap_processing/mag/l1c/interpolation_methods.py +180 -3
- imap_processing/mag/l1c/mag_l1c.py +236 -70
- imap_processing/mag/l2/mag_l2.py +140 -0
- imap_processing/mag/l2/mag_l2_data.py +288 -0
- imap_processing/spacecraft/quaternions.py +1 -3
- imap_processing/spice/geometry.py +3 -3
- imap_processing/spice/kernels.py +0 -276
- imap_processing/spice/pointing_frame.py +257 -0
- imap_processing/spice/repoint.py +48 -19
- imap_processing/spice/spin.py +38 -33
- imap_processing/spice/time.py +24 -0
- imap_processing/swapi/l1/swapi_l1.py +16 -12
- imap_processing/swapi/l2/swapi_l2.py +116 -4
- imap_processing/swapi/swapi_utils.py +32 -0
- imap_processing/swe/l1a/swe_l1a.py +2 -9
- imap_processing/swe/l1a/swe_science.py +8 -11
- imap_processing/swe/l1b/swe_l1b.py +898 -23
- imap_processing/swe/l2/swe_l2.py +21 -77
- imap_processing/swe/utils/swe_constants.py +1 -0
- imap_processing/tests/ccsds/test_excel_to_xtce.py +1 -1
- imap_processing/tests/cdf/test_utils.py +14 -16
- imap_processing/tests/codice/conftest.py +44 -33
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-pha_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-pha_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/test_codice_l1a.py +20 -11
- imap_processing/tests/codice/test_codice_l1b.py +6 -7
- imap_processing/tests/conftest.py +78 -22
- imap_processing/tests/ena_maps/test_ena_maps.py +462 -33
- imap_processing/tests/ena_maps/test_spatial_utils.py +1 -1
- imap_processing/tests/glows/conftest.py +10 -14
- imap_processing/tests/glows/test_glows_decom.py +4 -4
- imap_processing/tests/glows/test_glows_l1a_cdf.py +6 -27
- imap_processing/tests/glows/test_glows_l1a_data.py +6 -8
- imap_processing/tests/glows/test_glows_l1b.py +11 -11
- imap_processing/tests/glows/test_glows_l1b_data.py +5 -5
- imap_processing/tests/glows/test_glows_l2.py +2 -8
- imap_processing/tests/hi/conftest.py +1 -1
- imap_processing/tests/hi/test_hi_l1b.py +10 -12
- imap_processing/tests/hi/test_hi_l1c.py +27 -24
- imap_processing/tests/hi/test_l1a.py +7 -9
- imap_processing/tests/hi/test_science_direct_event.py +2 -2
- imap_processing/tests/hit/helpers/l1_validation.py +44 -43
- imap_processing/tests/hit/test_decom_hit.py +1 -1
- imap_processing/tests/hit/test_hit_l1a.py +9 -9
- imap_processing/tests/hit/test_hit_l1b.py +172 -217
- imap_processing/tests/hit/test_hit_l2.py +380 -118
- imap_processing/tests/hit/test_hit_utils.py +122 -55
- imap_processing/tests/hit/validation_data/hit_l1b_standard_sample2_nsrl_v4_3decimals.csv +62 -62
- imap_processing/tests/hit/validation_data/sci_sample_raw.csv +1 -1
- imap_processing/tests/ialirt/unit/test_decom_ialirt.py +16 -81
- imap_processing/tests/ialirt/unit/test_grouping.py +2 -2
- imap_processing/tests/ialirt/unit/test_parse_mag.py +71 -16
- imap_processing/tests/ialirt/unit/test_process_codicehi.py +3 -3
- imap_processing/tests/ialirt/unit/test_process_codicelo.py +3 -10
- imap_processing/tests/ialirt/unit/test_process_ephemeris.py +4 -4
- imap_processing/tests/ialirt/unit/test_process_hit.py +3 -3
- imap_processing/tests/ialirt/unit/test_process_swapi.py +24 -16
- imap_processing/tests/ialirt/unit/test_process_swe.py +115 -7
- imap_processing/tests/idex/conftest.py +72 -7
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20241206_v001.pkts +0 -0
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20250108_v001.pkts +0 -0
- imap_processing/tests/idex/test_idex_l0.py +33 -11
- imap_processing/tests/idex/test_idex_l1a.py +50 -23
- imap_processing/tests/idex/test_idex_l1b.py +104 -25
- imap_processing/tests/idex/test_idex_l2a.py +48 -32
- imap_processing/tests/idex/test_idex_l2b.py +93 -0
- imap_processing/tests/lo/test_lo_l1a.py +3 -3
- imap_processing/tests/lo/test_lo_l1b.py +371 -6
- imap_processing/tests/lo/test_lo_l1c.py +1 -1
- imap_processing/tests/lo/test_lo_science.py +6 -7
- imap_processing/tests/lo/test_star_sensor.py +1 -1
- imap_processing/tests/mag/conftest.py +58 -9
- imap_processing/tests/mag/test_mag_decom.py +4 -3
- imap_processing/tests/mag/test_mag_l1a.py +13 -7
- imap_processing/tests/mag/test_mag_l1b.py +9 -9
- imap_processing/tests/mag/test_mag_l1c.py +151 -47
- imap_processing/tests/mag/test_mag_l2.py +130 -0
- imap_processing/tests/mag/test_mag_validation.py +144 -7
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-magi-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-magi-normal-out.csv +1857 -0
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-mago-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-mago-normal-out.csv +1857 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-magi-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-magi-normal-out.csv +1793 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-mago-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-mago-normal-out.csv +1793 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-burst-in.csv +2561 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-normal-in.csv +961 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-normal-out.csv +1539 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-mago-normal-in.csv +1921 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-mago-normal-out.csv +2499 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-magi-normal-in.csv +865 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-magi-normal-out.csv +1196 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-mago-normal-in.csv +1729 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-mago-normal-out.csv +3053 -0
- imap_processing/tests/mag/validation/L2/imap_mag_l1b_norm-mago_20251017_v002.cdf +0 -0
- imap_processing/tests/mag/validation/calibration/imap_mag_l2-calibration-matrices_20251017_v004.cdf +0 -0
- imap_processing/tests/mag/validation/calibration/imap_mag_l2-offsets-norm_20251017_20251017_v001.cdf +0 -0
- imap_processing/tests/spacecraft/test_quaternions.py +1 -1
- imap_processing/tests/spice/test_data/fake_repoint_data.csv +4 -4
- imap_processing/tests/spice/test_data/fake_spin_data.csv +11 -11
- imap_processing/tests/spice/test_geometry.py +3 -3
- imap_processing/tests/spice/test_kernels.py +1 -200
- imap_processing/tests/spice/test_pointing_frame.py +185 -0
- imap_processing/tests/spice/test_repoint.py +20 -10
- imap_processing/tests/spice/test_spin.py +50 -9
- imap_processing/tests/spice/test_time.py +14 -0
- imap_processing/tests/swapi/lut/imap_swapi_esa-unit-conversion_20250211_v000.csv +73 -0
- imap_processing/tests/swapi/lut/imap_swapi_lut-notes_20250211_v000.csv +1025 -0
- imap_processing/tests/swapi/test_swapi_l1.py +7 -9
- imap_processing/tests/swapi/test_swapi_l2.py +180 -8
- imap_processing/tests/swe/lut/checker-board-indices.csv +24 -0
- imap_processing/tests/swe/lut/imap_swe_esa-lut_20250301_v000.csv +385 -0
- imap_processing/tests/swe/lut/imap_swe_l1b-in-flight-cal_20240510_20260716_v000.csv +3 -0
- imap_processing/tests/swe/test_swe_l1a.py +6 -6
- imap_processing/tests/swe/test_swe_l1a_science.py +3 -3
- imap_processing/tests/swe/test_swe_l1b.py +162 -24
- imap_processing/tests/swe/test_swe_l2.py +82 -102
- imap_processing/tests/test_cli.py +171 -88
- imap_processing/tests/test_utils.py +2 -1
- imap_processing/tests/ultra/data/mock_data.py +49 -21
- imap_processing/tests/ultra/unit/conftest.py +53 -70
- imap_processing/tests/ultra/unit/test_badtimes.py +2 -4
- imap_processing/tests/ultra/unit/test_cullingmask.py +4 -6
- imap_processing/tests/ultra/unit/test_de.py +3 -10
- imap_processing/tests/ultra/unit/test_decom_apid_880.py +27 -76
- imap_processing/tests/ultra/unit/test_decom_apid_881.py +15 -16
- imap_processing/tests/ultra/unit/test_decom_apid_883.py +12 -10
- imap_processing/tests/ultra/unit/test_decom_apid_896.py +202 -55
- imap_processing/tests/ultra/unit/test_lookup_utils.py +23 -1
- imap_processing/tests/ultra/unit/test_spacecraft_pset.py +3 -4
- imap_processing/tests/ultra/unit/test_ultra_l1a.py +84 -307
- imap_processing/tests/ultra/unit/test_ultra_l1b.py +30 -12
- imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +2 -2
- imap_processing/tests/ultra/unit/test_ultra_l1b_culling.py +4 -1
- imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +163 -29
- imap_processing/tests/ultra/unit/test_ultra_l1c.py +5 -5
- imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +32 -43
- imap_processing/tests/ultra/unit/test_ultra_l2.py +230 -0
- imap_processing/ultra/constants.py +1 -1
- imap_processing/ultra/l0/decom_tools.py +21 -34
- imap_processing/ultra/l0/decom_ultra.py +168 -204
- imap_processing/ultra/l0/ultra_utils.py +152 -136
- imap_processing/ultra/l1a/ultra_l1a.py +55 -243
- imap_processing/ultra/l1b/badtimes.py +1 -4
- imap_processing/ultra/l1b/cullingmask.py +2 -6
- imap_processing/ultra/l1b/de.py +62 -47
- imap_processing/ultra/l1b/extendedspin.py +8 -4
- imap_processing/ultra/l1b/lookup_utils.py +72 -9
- imap_processing/ultra/l1b/ultra_l1b.py +3 -8
- imap_processing/ultra/l1b/ultra_l1b_culling.py +4 -4
- imap_processing/ultra/l1b/ultra_l1b_extended.py +236 -78
- imap_processing/ultra/l1c/histogram.py +2 -6
- imap_processing/ultra/l1c/spacecraft_pset.py +2 -4
- imap_processing/ultra/l1c/ultra_l1c.py +1 -5
- imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +107 -60
- imap_processing/ultra/l2/ultra_l2.py +299 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_LeftSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_RightSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_LeftSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_RightSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/FM45_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -2
- imap_processing/ultra/lookup_tables/FM90_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -0
- imap_processing/ultra/packet_definitions/README.md +38 -0
- imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +15302 -482
- imap_processing/ultra/utils/ultra_l1_utils.py +13 -12
- imap_processing/utils.py +1 -1
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/METADATA +3 -2
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/RECORD +264 -225
- imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +0 -154
- imap_processing/mag/imap_mag_sdc-configuration_v001.yaml +0 -6
- imap_processing/mag/l1b/__init__.py +0 -0
- imap_processing/swe/l1b/swe_esa_lookup_table.csv +0 -1441
- imap_processing/swe/l1b/swe_l1b_science.py +0 -699
- imap_processing/tests/swe/test_swe_l1b_science.py +0 -103
- imap_processing/ultra/lookup_tables/dps_sensitivity45.cdf +0 -0
- imap_processing/ultra/lookup_tables/ultra_90_dps_exposure_compressed.cdf +0 -0
- /imap_processing/idex/packet_definitions/{idex_packet_definition.xml → idex_science_packet_definition.xml} +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/20240827095047_SWE_IALIRT_packet.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971383-404.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971384-405.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971385-406.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971386-407.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971387-408.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971388-409.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971389-410.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971390-411.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971391-412.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/BinLog CCSDS_FRAG_TLM_20240826_152323Z_IALIRT_data_for_SDC.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/IALiRT Raw Packet Telemetry.txt +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/apid01152.tlm +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/eu_SWP_IAL_20240826_152033.csv +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/hi_fsw_view_1_ccsds.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/hit_ialirt_sample.ccsds +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/hit_ialirt_sample.csv +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/idle_export_eu.SWE_IALIRT_20240827_093852.csv +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/imap_codice_l1a_hi-ialirt_20240523200000_v0.0.0.cdf +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/sample_decoded_i-alirt_data.csv +0 -0
- /imap_processing/tests/mag/validation/{imap_calibration_mag_20240229_v01.cdf → calibration/imap_mag_l1b-calibration_20240229_v001.cdf} +0 -0
- /imap_processing/{swe/l1b/engineering_unit_convert_table.csv → tests/swe/lut/imap_swe_eu-conversion_20240510_v000.csv} +0 -0
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/LICENSE +0 -0
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/WHEEL +0 -0
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/entry_points.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Pytest plugin module for test data paths"""
|
|
1
|
+
"""Pytest plugin module for test data paths."""
|
|
2
2
|
|
|
3
3
|
from unittest import mock
|
|
4
4
|
|
|
@@ -6,19 +6,24 @@ import numpy as np
|
|
|
6
6
|
import pytest
|
|
7
7
|
import xarray as xr
|
|
8
8
|
|
|
9
|
-
from imap_processing import
|
|
10
|
-
from imap_processing.ultra.l0.decom_ultra import
|
|
9
|
+
from imap_processing import imap_module_directory
|
|
10
|
+
from imap_processing.ultra.l0.decom_ultra import (
|
|
11
|
+
process_ultra_events,
|
|
12
|
+
process_ultra_rates,
|
|
13
|
+
process_ultra_tof,
|
|
14
|
+
)
|
|
11
15
|
from imap_processing.ultra.l0.ultra_utils import (
|
|
12
16
|
ULTRA_AUX,
|
|
13
17
|
ULTRA_EVENTS,
|
|
14
18
|
ULTRA_RATES,
|
|
19
|
+
ULTRA_TOF,
|
|
15
20
|
)
|
|
16
|
-
from imap_processing.ultra.l1a import ultra_l1a
|
|
21
|
+
from imap_processing.ultra.l1a.ultra_l1a import ultra_l1a
|
|
17
22
|
from imap_processing.ultra.l1b.ultra_l1b import ultra_l1b
|
|
18
|
-
from imap_processing.utils import
|
|
23
|
+
from imap_processing.utils import packet_file_to_datasets
|
|
19
24
|
|
|
20
25
|
|
|
21
|
-
@pytest.fixture
|
|
26
|
+
@pytest.fixture
|
|
22
27
|
def ccsds_path():
|
|
23
28
|
"""Returns the ccsds directory."""
|
|
24
29
|
return (
|
|
@@ -31,7 +36,7 @@ def ccsds_path():
|
|
|
31
36
|
)
|
|
32
37
|
|
|
33
38
|
|
|
34
|
-
@pytest.fixture
|
|
39
|
+
@pytest.fixture
|
|
35
40
|
def ccsds_path_events():
|
|
36
41
|
"""Returns the ccsds directory."""
|
|
37
42
|
return (
|
|
@@ -44,7 +49,7 @@ def ccsds_path_events():
|
|
|
44
49
|
)
|
|
45
50
|
|
|
46
51
|
|
|
47
|
-
@pytest.fixture
|
|
52
|
+
@pytest.fixture
|
|
48
53
|
def ccsds_path_theta_0():
|
|
49
54
|
"""Returns the ccsds directory."""
|
|
50
55
|
return (
|
|
@@ -58,7 +63,7 @@ def ccsds_path_theta_0():
|
|
|
58
63
|
)
|
|
59
64
|
|
|
60
65
|
|
|
61
|
-
@pytest.fixture
|
|
66
|
+
@pytest.fixture
|
|
62
67
|
def ccsds_path_tof():
|
|
63
68
|
"""Returns the ccsds directory."""
|
|
64
69
|
return (
|
|
@@ -71,7 +76,7 @@ def ccsds_path_tof():
|
|
|
71
76
|
)
|
|
72
77
|
|
|
73
78
|
|
|
74
|
-
@pytest.fixture
|
|
79
|
+
@pytest.fixture
|
|
75
80
|
def xtce_path():
|
|
76
81
|
"""Returns the xtce image rates directory."""
|
|
77
82
|
return (
|
|
@@ -82,7 +87,7 @@ def xtce_path():
|
|
|
82
87
|
)
|
|
83
88
|
|
|
84
89
|
|
|
85
|
-
@pytest.fixture
|
|
90
|
+
@pytest.fixture
|
|
86
91
|
def rates_test_path():
|
|
87
92
|
"""Returns the xtce image rates test data directory."""
|
|
88
93
|
filename = (
|
|
@@ -92,17 +97,16 @@ def rates_test_path():
|
|
|
92
97
|
return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
|
|
93
98
|
|
|
94
99
|
|
|
95
|
-
@pytest.fixture
|
|
100
|
+
@pytest.fixture
|
|
96
101
|
def aux_test_path():
|
|
97
102
|
"""Returns the xtce auxiliary test data directory."""
|
|
98
103
|
filename = (
|
|
99
|
-
"
|
|
100
|
-
"20220530T225054.csv"
|
|
104
|
+
"ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv"
|
|
101
105
|
)
|
|
102
106
|
return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
|
|
103
107
|
|
|
104
108
|
|
|
105
|
-
@pytest.fixture
|
|
109
|
+
@pytest.fixture
|
|
106
110
|
def events_test_path():
|
|
107
111
|
"""Returns the xtce auxiliary test data directory."""
|
|
108
112
|
filename = (
|
|
@@ -112,7 +116,7 @@ def events_test_path():
|
|
|
112
116
|
return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
|
|
113
117
|
|
|
114
118
|
|
|
115
|
-
@pytest.fixture
|
|
119
|
+
@pytest.fixture
|
|
116
120
|
def tof_test_path():
|
|
117
121
|
"""Returns the xtce auxiliary test data directory."""
|
|
118
122
|
filename = (
|
|
@@ -122,21 +126,31 @@ def tof_test_path():
|
|
|
122
126
|
return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
|
|
123
127
|
|
|
124
128
|
|
|
125
|
-
@pytest.fixture
|
|
129
|
+
@pytest.fixture
|
|
126
130
|
def decom_test_data(request, xtce_path):
|
|
127
131
|
"""Read test data from file"""
|
|
128
132
|
apid = request.param["apid"]
|
|
129
133
|
filename = request.param["filename"]
|
|
130
134
|
ccsds_path = imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
|
|
131
135
|
|
|
132
|
-
|
|
133
|
-
|
|
136
|
+
datasets_by_apid = packet_file_to_datasets(ccsds_path, xtce_path)
|
|
137
|
+
|
|
138
|
+
strategy_dict = {
|
|
139
|
+
ULTRA_TOF.apid[0]: process_ultra_tof,
|
|
140
|
+
ULTRA_EVENTS.apid[0]: process_ultra_events,
|
|
141
|
+
ULTRA_RATES.apid[0]: process_ultra_rates,
|
|
142
|
+
ULTRA_TOF.apid[1]: process_ultra_tof,
|
|
143
|
+
ULTRA_EVENTS.apid[1]: process_ultra_events,
|
|
144
|
+
ULTRA_RATES.apid[1]: process_ultra_rates,
|
|
145
|
+
}
|
|
134
146
|
|
|
135
|
-
|
|
136
|
-
|
|
147
|
+
process_function = strategy_dict.get(apid, lambda *args: False)
|
|
148
|
+
data_packet_xarray = process_function(datasets_by_apid[apid])
|
|
137
149
|
|
|
150
|
+
return data_packet_xarray
|
|
138
151
|
|
|
139
|
-
|
|
152
|
+
|
|
153
|
+
@pytest.fixture
|
|
140
154
|
def events_fsw_comparison_theta_0():
|
|
141
155
|
"""FSW test data."""
|
|
142
156
|
filename = (
|
|
@@ -146,60 +160,28 @@ def events_fsw_comparison_theta_0():
|
|
|
146
160
|
return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
|
|
147
161
|
|
|
148
162
|
|
|
149
|
-
@pytest.fixture
|
|
163
|
+
@pytest.fixture
|
|
150
164
|
def de_dataset(ccsds_path_theta_0, xtce_path):
|
|
151
165
|
"""L1A test data"""
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
decom_ultra_events = process_ultra_apids(
|
|
155
|
-
grouped_data[ULTRA_EVENTS.apid[0]], ULTRA_EVENTS.apid[0]
|
|
156
|
-
)
|
|
157
|
-
decom_ultra_aux = process_ultra_apids(
|
|
158
|
-
grouped_data[ULTRA_AUX.apid[0]], ULTRA_AUX.apid[0]
|
|
159
|
-
)
|
|
160
|
-
de_dataset = ultra_l1a.create_dataset(
|
|
161
|
-
{
|
|
162
|
-
ULTRA_EVENTS.apid[0]: decom_ultra_events,
|
|
163
|
-
ULTRA_AUX.apid[0]: decom_ultra_aux,
|
|
164
|
-
}
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
return de_dataset
|
|
166
|
+
test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_EVENTS.apid[0])
|
|
167
|
+
return test_data[0]
|
|
168
168
|
|
|
169
169
|
|
|
170
|
-
@pytest.fixture
|
|
171
|
-
def rates_dataset(ccsds_path_theta_0
|
|
170
|
+
@pytest.fixture
|
|
171
|
+
def rates_dataset(ccsds_path_theta_0):
|
|
172
172
|
"""L1A test data"""
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
decom_ultra_rates = process_ultra_apids(
|
|
176
|
-
grouped_data[ULTRA_RATES.apid[0]], ULTRA_RATES.apid[0]
|
|
177
|
-
)
|
|
178
|
-
l1a_rates_dataset = ultra_l1a.create_dataset(
|
|
179
|
-
{
|
|
180
|
-
ULTRA_RATES.apid[0]: decom_ultra_rates,
|
|
181
|
-
}
|
|
182
|
-
)
|
|
183
|
-
return l1a_rates_dataset
|
|
173
|
+
test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_RATES.apid[0])
|
|
174
|
+
return test_data[0]
|
|
184
175
|
|
|
185
176
|
|
|
186
|
-
@pytest.fixture
|
|
187
|
-
def aux_dataset(ccsds_path_theta_0
|
|
177
|
+
@pytest.fixture
|
|
178
|
+
def aux_dataset(ccsds_path_theta_0):
|
|
188
179
|
"""L1A test data"""
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
decom_ultra_aux = process_ultra_apids(
|
|
192
|
-
grouped_data[ULTRA_AUX.apid[0]], ULTRA_AUX.apid[0]
|
|
193
|
-
)
|
|
194
|
-
l1a_aux_dataset = ultra_l1a.create_dataset(
|
|
195
|
-
{
|
|
196
|
-
ULTRA_AUX.apid[0]: decom_ultra_aux,
|
|
197
|
-
}
|
|
198
|
-
)
|
|
199
|
-
return l1a_aux_dataset
|
|
180
|
+
test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_AUX.apid[0])
|
|
181
|
+
return test_data[0]
|
|
200
182
|
|
|
201
183
|
|
|
202
|
-
@pytest.fixture
|
|
184
|
+
@pytest.fixture
|
|
203
185
|
def faux_aux_dataset():
|
|
204
186
|
"""Fixture to compute and return aux test data."""
|
|
205
187
|
|
|
@@ -229,7 +211,7 @@ def faux_aux_dataset():
|
|
|
229
211
|
return test_aux_dataset
|
|
230
212
|
|
|
231
213
|
|
|
232
|
-
@pytest.fixture
|
|
214
|
+
@pytest.fixture
|
|
233
215
|
@mock.patch("imap_processing.ultra.l1b.de.get_annotated_particle_velocity")
|
|
234
216
|
def l1b_de_dataset(
|
|
235
217
|
mock_get_annotated_particle_velocity,
|
|
@@ -259,12 +241,12 @@ def l1b_de_dataset(
|
|
|
259
241
|
|
|
260
242
|
mock_get_annotated_particle_velocity.side_effect = side_effect_func
|
|
261
243
|
|
|
262
|
-
output_datasets = ultra_l1b(data_dict
|
|
244
|
+
output_datasets = ultra_l1b(data_dict)
|
|
263
245
|
|
|
264
246
|
return output_datasets
|
|
265
247
|
|
|
266
248
|
|
|
267
|
-
@pytest.fixture
|
|
249
|
+
@pytest.fixture
|
|
268
250
|
def l1b_extendedspin_dataset(
|
|
269
251
|
l1b_de_dataset,
|
|
270
252
|
rates_dataset,
|
|
@@ -277,7 +259,8 @@ def l1b_extendedspin_dataset(
|
|
|
277
259
|
# TODO: this is a placeholder for the hk dataset.
|
|
278
260
|
data_dict["imap_ultra_l1a_45sensor-hk"] = faux_aux_dataset
|
|
279
261
|
data_dict["imap_ultra_l1a_45sensor-rates"] = rates_dataset
|
|
262
|
+
data_dict["imap_ultra_l1a_45sensor-params"] = l1b_de_dataset[0]
|
|
280
263
|
|
|
281
|
-
output_datasets = ultra_l1b(data_dict
|
|
264
|
+
output_datasets = ultra_l1b(data_dict)
|
|
282
265
|
|
|
283
266
|
return output_datasets
|
|
@@ -32,6 +32,7 @@ def test_calculate_badtimes():
|
|
|
32
32
|
|
|
33
33
|
ds = xr.Dataset(
|
|
34
34
|
{
|
|
35
|
+
"epoch": np.array([0, 1, 2, 3], dtype="datetime64[ns]"),
|
|
35
36
|
"quality_attitude": (("spin_number",), quality_attitude),
|
|
36
37
|
"quality_ena_rates": (
|
|
37
38
|
("energy_bin_geometric_mean", "spin_number"),
|
|
@@ -45,14 +46,11 @@ def test_calculate_badtimes():
|
|
|
45
46
|
},
|
|
46
47
|
)
|
|
47
48
|
|
|
48
|
-
culling_ds = calculate_cullingmask(
|
|
49
|
-
ds, name="imap_ultra_l1b_45sensor-badtimes", data_version="v1"
|
|
50
|
-
)
|
|
49
|
+
culling_ds = calculate_cullingmask(ds, name="imap_ultra_l1b_45sensor-badtimes")
|
|
51
50
|
badtimes_ds = calculate_badtimes(
|
|
52
51
|
ds,
|
|
53
52
|
culling_ds["spin_number"].values,
|
|
54
53
|
name="imap_ultra_l1b_45sensor-badtimes",
|
|
55
|
-
data_version="v1",
|
|
56
54
|
)
|
|
57
55
|
|
|
58
56
|
assert not np.any(
|
|
@@ -25,6 +25,7 @@ def test_calculate_cullingmask_attitude():
|
|
|
25
25
|
|
|
26
26
|
ds = xr.Dataset(
|
|
27
27
|
{
|
|
28
|
+
"epoch": np.array([0, 1, 2, 3], dtype="datetime64[ns]"),
|
|
28
29
|
"quality_attitude": (("spin_number",), quality_attitude),
|
|
29
30
|
"quality_ena_rates": (
|
|
30
31
|
("energy_bin_geometric_mean", "spin_number"),
|
|
@@ -38,9 +39,7 @@ def test_calculate_cullingmask_attitude():
|
|
|
38
39
|
},
|
|
39
40
|
)
|
|
40
41
|
|
|
41
|
-
result_ds = calculate_cullingmask(
|
|
42
|
-
ds, name="imap_ultra_l1b_45sensor-cullingmask", data_version="v1"
|
|
43
|
-
)
|
|
42
|
+
result_ds = calculate_cullingmask(ds, name="imap_ultra_l1b_45sensor-cullingmask")
|
|
44
43
|
|
|
45
44
|
np.testing.assert_array_equal(result_ds["spin_number"].values, np.array([0]))
|
|
46
45
|
|
|
@@ -78,14 +77,13 @@ def test_calculate_cullingmask_rates():
|
|
|
78
77
|
"spin_start_time": (("spin_number",), spin_start_time),
|
|
79
78
|
},
|
|
80
79
|
coords={
|
|
80
|
+
"epoch": np.array([0, 1, 2, 3], dtype="datetime64[ns]"),
|
|
81
81
|
"spin_number": spin_numbers,
|
|
82
82
|
"energy_bin_geometric_mean": energy_bins,
|
|
83
83
|
},
|
|
84
84
|
)
|
|
85
85
|
|
|
86
|
-
result_ds = calculate_cullingmask(
|
|
87
|
-
ds, name="imap_ultra_l1b_45sensor-cullingmask", data_version="v1"
|
|
88
|
-
)
|
|
86
|
+
result_ds = calculate_cullingmask(ds, name="imap_ultra_l1b_45sensor-cullingmask")
|
|
89
87
|
|
|
90
88
|
expected_spins = np.array([0, 1])
|
|
91
89
|
np.testing.assert_array_equal(result_ds["spin_number"].values, expected_spins)
|
|
@@ -7,7 +7,7 @@ import pytest
|
|
|
7
7
|
from imap_processing.ultra.constants import UltraConstants
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
@pytest.fixture
|
|
10
|
+
@pytest.fixture
|
|
11
11
|
def df_filt(de_dataset, events_fsw_comparison_theta_0):
|
|
12
12
|
"""Fixture to import test dataset."""
|
|
13
13
|
df = pd.read_csv(events_fsw_comparison_theta_0)
|
|
@@ -22,7 +22,7 @@ def test_calculate_de(l1b_de_dataset, df_filt):
|
|
|
22
22
|
|
|
23
23
|
l1b_de_dataset = l1b_de_dataset[0]
|
|
24
24
|
l1b_de_dataset = l1b_de_dataset.where(
|
|
25
|
-
l1b_de_dataset["start_type"] !=
|
|
25
|
+
l1b_de_dataset["start_type"] != 255, drop=True
|
|
26
26
|
)
|
|
27
27
|
# Front and back positions
|
|
28
28
|
assert np.allclose(l1b_de_dataset["x_front"].data, df_filt["Xf"].astype("float"))
|
|
@@ -63,7 +63,7 @@ def test_calculate_de(l1b_de_dataset, df_filt):
|
|
|
63
63
|
& (l1b_de_dataset["tof_corrected"] < UltraConstants.CTOF_SPECIES_MAX)
|
|
64
64
|
)[0]
|
|
65
65
|
]
|
|
66
|
-
assert np.all(species_array ==
|
|
66
|
+
assert np.all(species_array == 1)
|
|
67
67
|
|
|
68
68
|
# Velocities in various frames
|
|
69
69
|
test_tof = l1b_de_dataset["tof_start_stop"]
|
|
@@ -113,10 +113,3 @@ def test_calculate_de(l1b_de_dataset, df_filt):
|
|
|
113
113
|
len(l1b_de_dataset["epoch"]),
|
|
114
114
|
3,
|
|
115
115
|
)
|
|
116
|
-
|
|
117
|
-
# Event efficiency
|
|
118
|
-
assert np.allclose(
|
|
119
|
-
l1b_de_dataset["event_efficiency"],
|
|
120
|
-
np.full(len(l1b_de_dataset["epoch"]), np.nan),
|
|
121
|
-
equal_nan=True,
|
|
122
|
-
)
|
|
@@ -3,96 +3,47 @@ import pandas as pd
|
|
|
3
3
|
import pytest
|
|
4
4
|
|
|
5
5
|
from imap_processing.ultra.l0.ultra_utils import ULTRA_AUX
|
|
6
|
-
from imap_processing.utils import
|
|
6
|
+
from imap_processing.utils import packet_file_to_datasets
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
@pytest.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
pytest.param(
|
|
13
|
-
{
|
|
14
|
-
"apid": ULTRA_AUX.apid[0],
|
|
15
|
-
"filename": "Ultra45_EM_SwRI_Cal_Run7_"
|
|
16
|
-
"ThetaScan_20220530T225054.CCSDS",
|
|
17
|
-
}
|
|
18
|
-
)
|
|
19
|
-
],
|
|
20
|
-
indirect=True,
|
|
21
|
-
)
|
|
22
|
-
def test_aux_enumerated(decom_test_data):
|
|
23
|
-
"""Test if enumerated values derived correctly"""
|
|
24
|
-
|
|
25
|
-
_, packets = decom_test_data
|
|
26
|
-
|
|
27
|
-
count = 0 # count number of packets with APID 880
|
|
28
|
-
total_packets = 23
|
|
29
|
-
|
|
30
|
-
grouped_data = group_by_apid(packets)
|
|
31
|
-
apid_data = grouped_data[880]
|
|
9
|
+
@pytest.fixture
|
|
10
|
+
def decom_ultra_aux_data(ccsds_path, xtce_path):
|
|
11
|
+
"""Data for decom_ultra_aux"""
|
|
32
12
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
assert packet["SPINPERIODSOURCE"] == "NOMINAL"
|
|
37
|
-
assert packet["CATBEDHEATERFLAG"] == "UNFLAGGED"
|
|
38
|
-
count += 1
|
|
13
|
+
datasets_by_apid = packet_file_to_datasets(ccsds_path, xtce_path)
|
|
14
|
+
decom_ultra_dataset = datasets_by_apid[ULTRA_AUX.apid[0]]
|
|
15
|
+
return decom_ultra_dataset
|
|
39
16
|
|
|
40
|
-
assert count == total_packets
|
|
41
17
|
|
|
42
|
-
|
|
43
|
-
@pytest.mark.parametrize(
|
|
44
|
-
"decom_test_data",
|
|
45
|
-
[
|
|
46
|
-
pytest.param(
|
|
47
|
-
{
|
|
48
|
-
"apid": ULTRA_AUX.apid[0],
|
|
49
|
-
"filename": "Ultra45_EM_SwRI_Cal_Run7_"
|
|
50
|
-
"ThetaScan_20220530T225054.CCSDS",
|
|
51
|
-
}
|
|
52
|
-
)
|
|
53
|
-
],
|
|
54
|
-
indirect=True,
|
|
55
|
-
)
|
|
56
|
-
def test_aux_mode(decom_test_data):
|
|
18
|
+
def test_aux_modes(decom_ultra_aux_data):
|
|
57
19
|
"""Test if enumerated values derived correctly"""
|
|
58
20
|
|
|
59
|
-
|
|
21
|
+
assert np.all(decom_ultra_aux_data["spinperiodvalid"] == 0)
|
|
22
|
+
assert np.all(decom_ultra_aux_data["spinphasevalid"] == 1)
|
|
23
|
+
assert np.all(decom_ultra_aux_data["spinperiodsource"] == 1)
|
|
24
|
+
assert np.all(decom_ultra_aux_data["catbedheaterflag"] == 0)
|
|
25
|
+
assert np.all(decom_ultra_aux_data["hwmode"] == 0)
|
|
26
|
+
assert np.all(decom_ultra_aux_data["imcenb"] == 0)
|
|
27
|
+
assert np.all(decom_ultra_aux_data["leftdeflectioncharge"] == 0)
|
|
28
|
+
assert np.all(decom_ultra_aux_data["rightdeflectioncharge"] == 0)
|
|
60
29
|
|
|
61
|
-
|
|
62
|
-
if packet["PKT_APID"] == 880:
|
|
63
|
-
assert packet["HWMODE"] == "MODE0"
|
|
64
|
-
assert packet["IMCENB"] == "MODE0"
|
|
65
|
-
assert packet["LEFTDEFLECTIONCHARGE"] == "MODE0"
|
|
66
|
-
assert packet["RIGHTDEFLECTIONCHARGE"] == "MODE0"
|
|
30
|
+
assert len(decom_ultra_aux_data["shcoarse"]) == 23
|
|
67
31
|
|
|
68
32
|
|
|
69
|
-
|
|
70
|
-
"decom_test_data",
|
|
71
|
-
[
|
|
72
|
-
pytest.param(
|
|
73
|
-
{
|
|
74
|
-
"apid": ULTRA_AUX.apid[0],
|
|
75
|
-
"filename": "Ultra45_EM_SwRI_Cal_Run7_"
|
|
76
|
-
"ThetaScan_20220530T225054.CCSDS",
|
|
77
|
-
}
|
|
78
|
-
)
|
|
79
|
-
],
|
|
80
|
-
indirect=True,
|
|
81
|
-
)
|
|
82
|
-
def test_aux_decom(decom_test_data, aux_test_path):
|
|
33
|
+
def test_aux_decom(decom_ultra_aux_data, aux_test_path):
|
|
83
34
|
"""This function reads validation data and checks that
|
|
84
35
|
decom data matches validation data for auxiliary packet"""
|
|
85
36
|
|
|
86
|
-
decom_ultra, _ = decom_test_data
|
|
87
|
-
|
|
88
37
|
df = pd.read_csv(aux_test_path, index_col="MET")
|
|
89
38
|
|
|
90
|
-
np.testing.assert_array_equal(df.SpinStartSeconds, decom_ultra["TIMESPINSTART"])
|
|
91
39
|
np.testing.assert_array_equal(
|
|
92
|
-
df.
|
|
40
|
+
df.SpinStartSeconds, decom_ultra_aux_data["timespinstart"]
|
|
41
|
+
)
|
|
42
|
+
np.testing.assert_array_equal(
|
|
43
|
+
df.SpinStartSubseconds, decom_ultra_aux_data["timespinstartsub"]
|
|
93
44
|
)
|
|
94
|
-
np.testing.assert_array_equal(df.SpinDuration,
|
|
95
|
-
np.testing.assert_array_equal(df.SpinNumber,
|
|
96
|
-
np.testing.assert_array_equal(df.SpinDataTime,
|
|
97
|
-
np.testing.assert_array_equal(df.SpinPeriod,
|
|
98
|
-
np.testing.assert_array_equal(df.SpinPhase,
|
|
45
|
+
np.testing.assert_array_equal(df.SpinDuration, decom_ultra_aux_data["duration"])
|
|
46
|
+
np.testing.assert_array_equal(df.SpinNumber, decom_ultra_aux_data["spinnumber"])
|
|
47
|
+
np.testing.assert_array_equal(df.SpinDataTime, decom_ultra_aux_data["timespindata"])
|
|
48
|
+
np.testing.assert_array_equal(df.SpinPeriod, decom_ultra_aux_data["spinperiod"])
|
|
49
|
+
np.testing.assert_array_equal(df.SpinPhase, decom_ultra_aux_data["spinphase"])
|
|
@@ -14,8 +14,7 @@ from imap_processing.ultra.l0.ultra_utils import RATES_KEYS, ULTRA_RATES
|
|
|
14
14
|
pytest.param(
|
|
15
15
|
{
|
|
16
16
|
"apid": ULTRA_RATES.apid[0],
|
|
17
|
-
"filename": "
|
|
18
|
-
"ThetaScan_20220530T225054.CCSDS",
|
|
17
|
+
"filename": "Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS",
|
|
19
18
|
}
|
|
20
19
|
)
|
|
21
20
|
],
|
|
@@ -24,27 +23,27 @@ from imap_processing.ultra.l0.ultra_utils import RATES_KEYS, ULTRA_RATES
|
|
|
24
23
|
def test_image_rate_decom(decom_test_data, rates_test_path):
|
|
25
24
|
"""This function reads validation data and checks that decom data
|
|
26
25
|
matches validation data for image rate packet"""
|
|
27
|
-
decom_ultra
|
|
26
|
+
decom_ultra = decom_test_data
|
|
28
27
|
|
|
29
28
|
df = pd.read_csv(rates_test_path, index_col="MET")
|
|
30
29
|
total_packets = 23
|
|
31
30
|
|
|
32
|
-
np.testing.assert_array_equal(df.SID, decom_ultra["
|
|
33
|
-
np.testing.assert_array_equal(df.Spin, decom_ultra["
|
|
34
|
-
np.testing.assert_array_equal(df.AbortFlag, decom_ultra["
|
|
35
|
-
np.testing.assert_array_equal(df.StartDelay, decom_ultra["
|
|
31
|
+
np.testing.assert_array_equal(df.SID, decom_ultra["sid"])
|
|
32
|
+
np.testing.assert_array_equal(df.Spin, decom_ultra["spin"])
|
|
33
|
+
np.testing.assert_array_equal(df.AbortFlag, decom_ultra["abortflag"])
|
|
34
|
+
np.testing.assert_array_equal(df.StartDelay, decom_ultra["startdelay"])
|
|
36
35
|
|
|
37
36
|
# Spot-check first packet
|
|
38
|
-
t0 = decom_ultra["
|
|
39
|
-
expected_arr0 = json.loads(df.loc[t0].Counts)
|
|
37
|
+
t0 = decom_ultra["shcoarse"][0]
|
|
38
|
+
expected_arr0 = json.loads(df.loc[int(t0)].Counts)
|
|
40
39
|
arr = []
|
|
41
40
|
for name in RATES_KEYS:
|
|
42
41
|
arr.append(decom_ultra[name][0])
|
|
43
42
|
assert expected_arr0 == arr
|
|
44
43
|
|
|
45
44
|
# Spot-check last packet
|
|
46
|
-
tn = decom_ultra["
|
|
47
|
-
expected_arrn = json.loads(df.loc[tn].Counts)
|
|
45
|
+
tn = decom_ultra["shcoarse"][total_packets - 1]
|
|
46
|
+
expected_arrn = json.loads(df.loc[int(tn)].Counts)
|
|
48
47
|
arr = []
|
|
49
48
|
for name in RATES_KEYS:
|
|
50
49
|
arr.append(decom_ultra[name][total_packets - 1])
|
|
@@ -75,15 +74,15 @@ def test_image_rate_decom_zero_width(decom_test_data):
|
|
|
75
74
|
/ "ultra45_raw_sc_ultraimgrates_20220530_00.csv"
|
|
76
75
|
)
|
|
77
76
|
|
|
78
|
-
decom_ultra
|
|
77
|
+
decom_ultra = decom_test_data
|
|
79
78
|
|
|
80
79
|
df = pd.read_csv(test_path, index_col="MET")
|
|
81
80
|
total_packets = 163
|
|
82
81
|
|
|
83
|
-
np.testing.assert_array_equal(df.SID, decom_ultra["
|
|
84
|
-
np.testing.assert_array_equal(df.Spin, decom_ultra["
|
|
85
|
-
np.testing.assert_array_equal(df.AbortFlag, decom_ultra["
|
|
86
|
-
np.testing.assert_array_equal(df.StartDelay, decom_ultra["
|
|
82
|
+
np.testing.assert_array_equal(df.SID, decom_ultra["sid"])
|
|
83
|
+
np.testing.assert_array_equal(df.Spin, decom_ultra["spin"])
|
|
84
|
+
np.testing.assert_array_equal(df.AbortFlag, decom_ultra["abortflag"])
|
|
85
|
+
np.testing.assert_array_equal(df.StartDelay, decom_ultra["startdelay"])
|
|
87
86
|
|
|
88
87
|
for i in range(total_packets):
|
|
89
88
|
t = int(df["SequenceCount"].iloc[i]) # Ensure we get an integer value
|
|
@@ -6,8 +6,6 @@ import pytest
|
|
|
6
6
|
|
|
7
7
|
from imap_processing.ultra.l0.ultra_utils import ULTRA_TOF
|
|
8
8
|
|
|
9
|
-
# TODO: discuss with instrument team incomplete set of SIDs
|
|
10
|
-
|
|
11
9
|
|
|
12
10
|
@pytest.mark.parametrize(
|
|
13
11
|
"decom_test_data",
|
|
@@ -15,7 +13,7 @@ from imap_processing.ultra.l0.ultra_utils import ULTRA_TOF
|
|
|
15
13
|
pytest.param(
|
|
16
14
|
{
|
|
17
15
|
"apid": ULTRA_TOF.apid[0],
|
|
18
|
-
"filename": "
|
|
16
|
+
"filename": "FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS",
|
|
19
17
|
}
|
|
20
18
|
)
|
|
21
19
|
],
|
|
@@ -25,20 +23,24 @@ def test_tof_decom(decom_test_data, tof_test_path):
|
|
|
25
23
|
"""This function reads validation data and checks that decom data
|
|
26
24
|
matches validation data for image rate packet"""
|
|
27
25
|
|
|
28
|
-
decom_ultra
|
|
26
|
+
decom_ultra = decom_test_data
|
|
29
27
|
df = pd.read_csv(tof_test_path, index_col="SequenceCount")
|
|
30
28
|
|
|
31
|
-
np.testing.assert_array_equal(df.Spin, decom_ultra["
|
|
32
|
-
np.testing.assert_array_equal(
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
np.testing.assert_array_equal(df.Spin, decom_ultra["spin"].values.flatten())
|
|
30
|
+
np.testing.assert_array_equal(
|
|
31
|
+
df.AbortFlag, decom_ultra["abortflag"].values.flatten()
|
|
32
|
+
)
|
|
33
|
+
np.testing.assert_array_equal(
|
|
34
|
+
df.StartDelay, decom_ultra["startdelay"].values.flatten()
|
|
35
|
+
)
|
|
36
|
+
assert json.loads(df["P00s"].values[0])[0] == decom_ultra["p00"][0][0]
|
|
35
37
|
|
|
36
38
|
for count in df.index.get_level_values("SequenceCount").values:
|
|
37
39
|
df_data = df[df.index.get_level_values("SequenceCount") == count].Images.values[
|
|
38
40
|
0
|
|
39
41
|
]
|
|
40
|
-
rows, cols = np.where(decom_ultra["
|
|
41
|
-
decom_data = decom_ultra["
|
|
42
|
+
rows, cols = np.where(decom_ultra["src_seq_ctr"] == count)
|
|
43
|
+
decom_data = decom_ultra["packetdata"][rows[0]][cols[0]]
|
|
42
44
|
df_data_array = np.array(json.loads(df_data)[0])
|
|
43
45
|
|
|
44
46
|
np.testing.assert_array_equal(df_data_array, decom_data)
|