imap-processing 0.11.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 +11 -11
- imap_processing/_version.py +2 -2
- imap_processing/ccsds/ccsds_data.py +1 -2
- imap_processing/ccsds/excel_to_xtce.py +66 -18
- imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +24 -40
- imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +934 -42
- imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +1846 -128
- imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +0 -5
- imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +10 -11
- imap_processing/cdf/config/imap_hi_variable_attrs.yaml +17 -19
- imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +27 -14
- imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +106 -116
- imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +120 -145
- imap_processing/cdf/config/imap_hit_l2_variable_attrs.yaml +14 -0
- imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +25 -9
- 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_lo_global_cdf_attrs.yaml +0 -12
- imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +1 -1
- imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +23 -20
- imap_processing/cdf/config/imap_mag_l1a_variable_attrs.yaml +361 -0
- imap_processing/cdf/config/imap_mag_l1b_variable_attrs.yaml +160 -0
- imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +160 -0
- imap_processing/cdf/config/imap_spacecraft_global_cdf_attrs.yaml +18 -0
- imap_processing/cdf/config/imap_spacecraft_variable_attrs.yaml +40 -0
- imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +1 -5
- imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +22 -0
- imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +12 -4
- imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +16 -2
- imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +64 -52
- imap_processing/cdf/config/imap_swe_l2_variable_attrs.yaml +71 -47
- imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +180 -19
- imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +5045 -41
- imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +80 -17
- imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +32 -57
- imap_processing/cdf/utils.py +52 -38
- imap_processing/cli.py +477 -233
- imap_processing/codice/codice_l1a.py +466 -131
- imap_processing/codice/codice_l1b.py +51 -152
- imap_processing/codice/constants.py +1360 -569
- imap_processing/codice/decompress.py +2 -6
- imap_processing/ena_maps/ena_maps.py +1103 -146
- imap_processing/ena_maps/utils/coordinates.py +19 -0
- imap_processing/ena_maps/utils/map_utils.py +14 -17
- imap_processing/ena_maps/utils/spatial_utils.py +55 -52
- 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 +54 -29
- imap_processing/hi/l1a/histogram.py +0 -1
- imap_processing/hi/l1a/science_direct_event.py +6 -8
- imap_processing/hi/l1b/hi_l1b.py +111 -82
- imap_processing/hi/l1c/hi_l1c.py +416 -32
- imap_processing/hi/utils.py +58 -12
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-sector-dt0-factors_20250219_v002.csv +81 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt0-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt1-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt2-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt3-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-summed-dt0-factors_20250219_v002.csv +68 -0
- imap_processing/hit/hit_utils.py +235 -5
- imap_processing/hit/l0/constants.py +20 -11
- imap_processing/hit/l0/decom_hit.py +21 -5
- imap_processing/hit/l1a/hit_l1a.py +71 -75
- imap_processing/hit/l1b/constants.py +321 -0
- imap_processing/hit/l1b/hit_l1b.py +377 -67
- imap_processing/hit/l2/constants.py +318 -0
- imap_processing/hit/l2/hit_l2.py +723 -0
- imap_processing/hit/packet_definitions/hit_packet_definitions.xml +1323 -71
- imap_processing/ialirt/l0/mag_l0_ialirt_data.py +155 -0
- imap_processing/ialirt/l0/parse_mag.py +374 -0
- imap_processing/ialirt/l0/process_swapi.py +69 -0
- imap_processing/ialirt/l0/process_swe.py +548 -0
- imap_processing/ialirt/packet_definitions/ialirt.xml +216 -208
- 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_mag.xml +115 -0
- imap_processing/ialirt/packet_definitions/ialirt_swapi.xml +14 -14
- imap_processing/ialirt/utils/grouping.py +114 -0
- imap_processing/ialirt/utils/time.py +29 -0
- imap_processing/idex/atomic_masses.csv +22 -0
- imap_processing/idex/decode.py +2 -2
- imap_processing/idex/idex_constants.py +33 -0
- imap_processing/idex/idex_l0.py +22 -8
- imap_processing/idex/idex_l1a.py +81 -51
- imap_processing/idex/idex_l1b.py +13 -39
- imap_processing/idex/idex_l2a.py +823 -0
- imap_processing/idex/idex_l2b.py +120 -0
- imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +11 -11
- imap_processing/idex/packet_definitions/idex_housekeeping_packet_definition.xml +9130 -0
- imap_processing/lo/l0/lo_science.py +7 -2
- imap_processing/lo/l1a/lo_l1a.py +1 -5
- imap_processing/lo/l1b/lo_l1b.py +702 -29
- imap_processing/lo/l1b/tof_conversions.py +11 -0
- imap_processing/lo/l1c/lo_l1c.py +1 -4
- imap_processing/mag/constants.py +51 -0
- imap_processing/mag/imap_mag_sdc_configuration_v001.py +8 -0
- imap_processing/mag/l0/decom_mag.py +10 -3
- imap_processing/mag/l1a/mag_l1a.py +23 -19
- imap_processing/mag/l1a/mag_l1a_data.py +35 -10
- imap_processing/mag/l1b/mag_l1b.py +259 -50
- imap_processing/mag/l1c/interpolation_methods.py +388 -0
- imap_processing/mag/l1c/mag_l1c.py +621 -17
- imap_processing/mag/l2/mag_l2.py +140 -0
- imap_processing/mag/l2/mag_l2_data.py +288 -0
- imap_processing/quality_flags.py +1 -0
- imap_processing/spacecraft/packet_definitions/scid_x252.xml +538 -0
- imap_processing/spacecraft/quaternions.py +121 -0
- imap_processing/spice/geometry.py +19 -22
- imap_processing/spice/kernels.py +0 -276
- imap_processing/spice/pointing_frame.py +257 -0
- imap_processing/spice/repoint.py +149 -0
- imap_processing/spice/spin.py +38 -33
- imap_processing/spice/time.py +24 -0
- imap_processing/swapi/l1/swapi_l1.py +20 -12
- imap_processing/swapi/l2/swapi_l2.py +116 -5
- imap_processing/swapi/swapi_utils.py +32 -0
- imap_processing/swe/l1a/swe_l1a.py +44 -12
- imap_processing/swe/l1a/swe_science.py +13 -13
- imap_processing/swe/l1b/swe_l1b.py +898 -23
- imap_processing/swe/l2/swe_l2.py +75 -136
- imap_processing/swe/packet_definitions/swe_packet_definition.xml +1121 -1
- imap_processing/swe/utils/swe_constants.py +64 -0
- imap_processing/swe/utils/swe_utils.py +85 -28
- imap_processing/tests/ccsds/test_data/expected_output.xml +40 -1
- imap_processing/tests/ccsds/test_excel_to_xtce.py +24 -21
- imap_processing/tests/cdf/test_data/imap_instrument2_global_cdf_attrs.yaml +0 -2
- 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-counters-aggregated_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-counters-singles_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-ialirt_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-omni_20241110193700_v0.0.0.cdf +0 -0
- 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_hi-priorities_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-sectored_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-counters-aggregated_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-counters-singles_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-angular_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-priority_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-species_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/data/validation/imap_codice_l1a_lo-sw-angular_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-priority_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-species_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/test_codice_l1a.py +126 -53
- imap_processing/tests/codice/test_codice_l1b.py +6 -7
- imap_processing/tests/codice/test_decompress.py +4 -4
- imap_processing/tests/conftest.py +239 -27
- imap_processing/tests/ena_maps/conftest.py +51 -0
- imap_processing/tests/ena_maps/test_ena_maps.py +1068 -110
- imap_processing/tests/ena_maps/test_map_utils.py +66 -43
- imap_processing/tests/ena_maps/test_spatial_utils.py +17 -21
- 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/data/l0/H45_diag_fee_20250208.bin +0 -0
- imap_processing/tests/hi/data/l0/H45_diag_fee_20250208_verify.csv +205 -0
- imap_processing/tests/hi/test_hi_l1b.py +22 -27
- imap_processing/tests/hi/test_hi_l1c.py +249 -18
- imap_processing/tests/hi/test_l1a.py +35 -7
- imap_processing/tests/hi/test_science_direct_event.py +3 -3
- imap_processing/tests/hi/test_utils.py +24 -2
- imap_processing/tests/hit/helpers/l1_validation.py +74 -73
- imap_processing/tests/hit/test_data/hskp_sample.ccsds +0 -0
- imap_processing/tests/hit/test_data/imap_hit_l0_raw_20100105_v001.pkts +0 -0
- imap_processing/tests/hit/test_decom_hit.py +5 -1
- imap_processing/tests/hit/test_hit_l1a.py +32 -36
- imap_processing/tests/hit/test_hit_l1b.py +300 -81
- imap_processing/tests/hit/test_hit_l2.py +716 -0
- imap_processing/tests/hit/test_hit_utils.py +184 -7
- imap_processing/tests/hit/validation_data/hit_l1b_standard_sample2_nsrl_v4_3decimals.csv +62 -62
- imap_processing/tests/hit/validation_data/hskp_sample_eu_3_6_2025.csv +89 -0
- imap_processing/tests/hit/validation_data/hskp_sample_raw.csv +89 -88
- imap_processing/tests/hit/validation_data/sci_sample_raw.csv +1 -1
- imap_processing/tests/ialirt/data/l0/461971383-404.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971384-405.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971385-406.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971386-407.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971387-408.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971388-409.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971389-410.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971390-411.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971391-412.bin +0 -0
- imap_processing/tests/ialirt/data/l0/sample_decoded_i-alirt_data.csv +383 -0
- imap_processing/tests/ialirt/unit/test_decom_ialirt.py +16 -81
- imap_processing/tests/ialirt/unit/test_grouping.py +81 -0
- imap_processing/tests/ialirt/unit/test_parse_mag.py +223 -0
- 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 +319 -6
- imap_processing/tests/ialirt/unit/test_time.py +16 -0
- imap_processing/tests/idex/conftest.py +127 -6
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20231218_v001.pkts +0 -0
- 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_data/impact_14_tof_high_data.txt +4508 -4508
- imap_processing/tests/idex/test_idex_l0.py +33 -11
- imap_processing/tests/idex/test_idex_l1a.py +92 -21
- imap_processing/tests/idex/test_idex_l1b.py +106 -27
- imap_processing/tests/idex/test_idex_l2a.py +399 -0
- imap_processing/tests/idex/test_idex_l2b.py +93 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_de_20241022_v002.cdf +0 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_spin_20241022_v002.cdf +0 -0
- imap_processing/tests/lo/test_lo_l1a.py +3 -3
- imap_processing/tests/lo/test_lo_l1b.py +515 -6
- imap_processing/tests/lo/test_lo_l1c.py +1 -1
- imap_processing/tests/lo/test_lo_science.py +7 -7
- imap_processing/tests/lo/test_star_sensor.py +1 -1
- imap_processing/tests/mag/conftest.py +120 -2
- imap_processing/tests/mag/test_mag_decom.py +5 -4
- imap_processing/tests/mag/test_mag_l1a.py +51 -7
- imap_processing/tests/mag/test_mag_l1b.py +40 -59
- imap_processing/tests/mag/test_mag_l1c.py +354 -19
- imap_processing/tests/mag/test_mag_l2.py +130 -0
- imap_processing/tests/mag/test_mag_validation.py +247 -26
- imap_processing/tests/mag/validation/L1b/T009/MAGScience-normal-(2,2)-8s-20250204-16h39.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T009/mag-l1a-l1b-t009-magi-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T009/mag-l1a-l1b-t009-mago-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T010/MAGScience-normal-(2,2)-8s-20250206-12h05.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T011/MAGScience-normal-(2,2)-8s-20250204-16h08.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T011/mag-l1a-l1b-t011-magi-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T011/mag-l1a-l1b-t011-mago-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T012/MAGScience-normal-(2,2)-8s-20250204-16h08.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T012/data.bin +0 -0
- imap_processing/tests/mag/validation/L1b/T012/field_like_all_ranges.txt +19200 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-cal.cdf +0 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-in.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-magi-out.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-mago-out.csv +17 -0
- 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_l1b-calibration_20240229_v001.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/data/SSR_2024_190_20_08_12_0483851794_2_DA_apid0594_1packet.pkts +0 -0
- imap_processing/tests/spacecraft/test_quaternions.py +71 -0
- imap_processing/tests/spice/test_data/fake_repoint_data.csv +5 -0
- imap_processing/tests/spice/test_data/fake_spin_data.csv +11 -11
- imap_processing/tests/spice/test_geometry.py +9 -12
- 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 +121 -0
- 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 +13 -11
- imap_processing/tests/swapi/test_swapi_l2.py +180 -8
- imap_processing/tests/swe/l0_data/2024051010_SWE_HK_packet.bin +0 -0
- imap_processing/tests/swe/l0_data/2024051011_SWE_CEM_RAW_packet.bin +0 -0
- imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_APP_HK_20240510_092742.csv +49 -0
- imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_CEM_RAW_20240510_092742.csv +593 -0
- 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 +20 -2
- imap_processing/tests/swe/test_swe_l1a_cem_raw.py +52 -0
- imap_processing/tests/swe/test_swe_l1a_hk.py +68 -0
- 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 +153 -91
- imap_processing/tests/test_cli.py +171 -88
- imap_processing/tests/test_utils.py +140 -17
- imap_processing/tests/ultra/data/l0/FM45_UltraFM45_Functional_2024-01-22T0105_20240122T010548.CCSDS +0 -0
- imap_processing/tests/ultra/data/l0/ultra45_raw_sc_ultraimgrates_20220530_00.csv +164 -0
- imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultrarawimg_withFSWcalcs_FM45_40P_Phi28p5_BeamCal_LinearScan_phi2850_theta-000_20240207T102740.csv +3243 -3243
- imap_processing/tests/ultra/data/mock_data.py +369 -0
- imap_processing/tests/ultra/unit/conftest.py +115 -89
- imap_processing/tests/ultra/unit/test_badtimes.py +4 -4
- imap_processing/tests/ultra/unit/test_cullingmask.py +8 -6
- imap_processing/tests/ultra/unit/test_de.py +14 -13
- imap_processing/tests/ultra/unit/test_decom_apid_880.py +27 -76
- imap_processing/tests/ultra/unit/test_decom_apid_881.py +54 -11
- 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 +77 -0
- imap_processing/tests/ultra/unit/test_ultra_l1a.py +98 -305
- imap_processing/tests/ultra/unit/test_ultra_l1b.py +60 -14
- imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +2 -2
- imap_processing/tests/ultra/unit/test_ultra_l1b_culling.py +26 -27
- imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +239 -70
- imap_processing/tests/ultra/unit/test_ultra_l1c.py +5 -5
- imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +114 -83
- 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 +27 -39
- 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 -271
- imap_processing/ultra/l1b/badtimes.py +1 -4
- imap_processing/ultra/l1b/cullingmask.py +2 -6
- imap_processing/ultra/l1b/de.py +116 -57
- imap_processing/ultra/l1b/extendedspin.py +20 -18
- imap_processing/ultra/l1b/lookup_utils.py +72 -9
- imap_processing/ultra/l1b/ultra_l1b.py +36 -16
- imap_processing/ultra/l1b/ultra_l1b_culling.py +66 -30
- imap_processing/ultra/l1b/ultra_l1b_extended.py +297 -94
- imap_processing/ultra/l1c/histogram.py +2 -6
- imap_processing/ultra/l1c/spacecraft_pset.py +84 -0
- imap_processing/ultra/l1c/ultra_l1c.py +8 -9
- imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +206 -108
- 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 +31 -12
- imap_processing/utils.py +69 -29
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/METADATA +10 -6
- imap_processing-0.13.0.dist-info/RECORD +578 -0
- imap_processing/cdf/config/imap_mag_l1_variable_attrs.yaml +0 -237
- imap_processing/hi/l1a/housekeeping.py +0 -27
- imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +0 -154
- imap_processing/swe/l1b/swe_esa_lookup_table.csv +0 -1441
- imap_processing/swe/l1b/swe_l1b_science.py +0 -652
- imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hi-omni_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hi-sectored_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hskp_20100101_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-omni_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-sectored_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hskp_20100101_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/hi/data/l1/imap_hi_l1b_45sensor-de_20250415_v999.cdf +0 -0
- imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1251.pkts +0 -0
- imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1252.pkts +0 -0
- imap_processing/tests/hit/validation_data/hskp_sample_eu.csv +0 -89
- imap_processing/tests/hit/validation_data/sci_sample_raw1.csv +0 -29
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20231214_v001.pkts +0 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_de_20100101_v001.cdf +0 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_spin_20100101_v001.cdf +0 -0
- imap_processing/tests/swe/test_swe_l1b_science.py +0 -84
- imap_processing/tests/ultra/test_data/mock_data.py +0 -161
- imap_processing/ultra/l1c/pset.py +0 -40
- imap_processing/ultra/lookup_tables/dps_sensitivity45.cdf +0 -0
- imap_processing-0.11.0.dist-info/RECORD +0 -488
- /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/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/{mag/l1b → tests/spacecraft}/__init__.py +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/tests/ultra/{test_data → data}/l0/FM45_40P_Phi28p5_BeamCal_LinearScan_phi28.50_theta-0.00_20240207T102740.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/FM45_7P_Phi0.0_BeamCal_LinearScan_phi0.04_theta-0.01_20230821T121304.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_enaphxtofhangimg_FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultraimgrates_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultrarawimgevent_FM45_7P_Phi00_BeamCal_LinearScan_phi004_theta-001_20230821T121304.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E1.cdf +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E12.cdf +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E24.cdf +0 -0
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/LICENSE +0 -0
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/WHEEL +0 -0
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/entry_points.txt +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Tests the L1a processing for decommutated CoDICE data"""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
import re
|
|
4
5
|
|
|
5
6
|
import numpy as np
|
|
6
7
|
import pytest
|
|
@@ -9,6 +10,7 @@ import xarray as xr
|
|
|
9
10
|
from imap_processing.cdf.utils import load_cdf, write_cdf
|
|
10
11
|
from imap_processing.codice import constants
|
|
11
12
|
from imap_processing.codice.codice_l1a import process_codice_l1a
|
|
13
|
+
from imap_processing.tests.conftest import _download_external_data, _test_data_paths
|
|
12
14
|
|
|
13
15
|
from .conftest import TEST_L0_FILE, VALIDATION_DATA
|
|
14
16
|
|
|
@@ -50,19 +52,19 @@ EXPECTED_ARRAY_SHAPES = [
|
|
|
50
52
|
(77, 1, 128), # lo-nsw-species
|
|
51
53
|
(77, 5, 12, 128), # lo-sw-angular
|
|
52
54
|
(77, 19, 12, 128), # lo-nsw-angular
|
|
53
|
-
(77,
|
|
54
|
-
(77,
|
|
55
|
-
(77, 15, 4
|
|
55
|
+
(77,), # hi-counters-aggregated
|
|
56
|
+
(77, 12), # hi-counters-singles
|
|
57
|
+
(77, 15, 4), # hi-omni
|
|
56
58
|
(77, 8, 12, 12), # hi-sectored
|
|
57
|
-
(), # hi-priority
|
|
58
|
-
(), # lo-pha
|
|
59
|
+
(77,), # hi-priority
|
|
60
|
+
(77, 10000), # lo-pha
|
|
59
61
|
(), # hi-pha # TODO: Need to implement
|
|
60
62
|
]
|
|
61
63
|
|
|
62
64
|
EXPECTED_NUM_VARIABLES = [
|
|
63
65
|
0, # hi-ialirt # TODO: Need to implement
|
|
64
66
|
0, # lo-ialirt # TODO: Need to implement
|
|
65
|
-
|
|
67
|
+
139, # hskp
|
|
66
68
|
8 + len(constants.LO_COUNTERS_AGGREGATED_VARIABLE_NAMES), # lo-counters-aggregated
|
|
67
69
|
9, # lo-counters-singles
|
|
68
70
|
13, # lo-sw-priority
|
|
@@ -71,15 +73,37 @@ EXPECTED_NUM_VARIABLES = [
|
|
|
71
73
|
16, # lo-nsw-species
|
|
72
74
|
12, # lo-sw-angular
|
|
73
75
|
9, # lo-nsw-angular
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
2 + len(constants.HI_COUNTERS_AGGREGATED_VARIABLE_NAMES), # hi-counters-aggregated
|
|
77
|
+
5, # hi-counters-singles
|
|
76
78
|
10, # hi-omni
|
|
77
79
|
6, # hi-sectored
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
8, # hi-priority
|
|
81
|
+
80, # lo-pha
|
|
80
82
|
0, # hi-pha # TODO: Need to implement
|
|
81
83
|
]
|
|
82
84
|
|
|
85
|
+
# CoDICE-Hi products that have support variables to test
|
|
86
|
+
CODICE_HI_PRODUCTS = [
|
|
87
|
+
"hi-counters-aggregated",
|
|
88
|
+
"hi-counters-singles",
|
|
89
|
+
"hi-priority",
|
|
90
|
+
"hi-sectored",
|
|
91
|
+
]
|
|
92
|
+
# TODO: Add hi-omni here once I sort out the array shape discrepancy with the
|
|
93
|
+
# validation data
|
|
94
|
+
|
|
95
|
+
# CoDICE-Lo products that have support variables to test
|
|
96
|
+
CODICE_LO_PRODUCTS = [
|
|
97
|
+
"lo-counters-aggregated",
|
|
98
|
+
"lo-counters-singles",
|
|
99
|
+
"lo-sw-priority",
|
|
100
|
+
"lo-nsw-priority",
|
|
101
|
+
"lo-sw-species",
|
|
102
|
+
"lo-nsw-species",
|
|
103
|
+
"lo-sw-angular",
|
|
104
|
+
"lo-nsw-angular",
|
|
105
|
+
]
|
|
106
|
+
|
|
83
107
|
|
|
84
108
|
@pytest.fixture(scope="session")
|
|
85
109
|
def test_l1a_data() -> xr.Dataset:
|
|
@@ -90,8 +114,11 @@ def test_l1a_data() -> xr.Dataset:
|
|
|
90
114
|
processed_datasets : list[xarray.Dataset]
|
|
91
115
|
A list of ``xarray`` datasets containing the test data
|
|
92
116
|
"""
|
|
93
|
-
|
|
94
|
-
|
|
117
|
+
# Make sure we have the data available here. This test collection gets
|
|
118
|
+
# skipped at the module level if the mark isn't present. We can't decorate
|
|
119
|
+
# a fixture, so add the needed call directly here instead.
|
|
120
|
+
_download_external_data(_test_data_paths())
|
|
121
|
+
processed_datasets = process_codice_l1a(file_path=TEST_L0_FILE)
|
|
95
122
|
|
|
96
123
|
return processed_datasets
|
|
97
124
|
|
|
@@ -113,9 +140,10 @@ def test_l1a_data_array_shape(test_l1a_data, index):
|
|
|
113
140
|
|
|
114
141
|
# Mark currently broken/unsupported datasets as expected to fail
|
|
115
142
|
# TODO: Remove these once they are supported
|
|
116
|
-
if index in [0, 1,
|
|
143
|
+
if index in [0, 1, 17]:
|
|
117
144
|
pytest.xfail("Data product is currently unsupported")
|
|
118
145
|
|
|
146
|
+
# There are exceptions for some variables
|
|
119
147
|
for variable in processed_dataset:
|
|
120
148
|
# For variables with energy dimensions
|
|
121
149
|
if variable in ["energy_table", "acquisition_time_per_step"]:
|
|
@@ -132,7 +160,10 @@ def test_l1a_data_array_shape(test_l1a_data, index):
|
|
|
132
160
|
assert processed_dataset[variable].data.shape == (
|
|
133
161
|
len(processed_dataset["epoch"].data),
|
|
134
162
|
)
|
|
135
|
-
# For
|
|
163
|
+
# For some direct event variables:
|
|
164
|
+
elif re.match(r"P[0-7]_(NumEvents|DataQuality)", variable):
|
|
165
|
+
assert processed_dataset[variable].data.shape == (77,)
|
|
166
|
+
# For nominal variables
|
|
136
167
|
else:
|
|
137
168
|
assert processed_dataset[variable].data.shape == expected_shape
|
|
138
169
|
|
|
@@ -157,7 +188,7 @@ def test_l1a_logical_sources(test_l1a_data, index):
|
|
|
157
188
|
|
|
158
189
|
# Mark currently broken/unsupported datasets as expected to fail
|
|
159
190
|
# TODO: Remove these once they are supported
|
|
160
|
-
if index in [0, 1,
|
|
191
|
+
if index in [0, 1, 17]:
|
|
161
192
|
pytest.xfail("Data product is currently unsupported")
|
|
162
193
|
|
|
163
194
|
# Write the dataset to a file to set the logical source attribute
|
|
@@ -185,7 +216,7 @@ def test_l1a_num_data_variables(test_l1a_data, index):
|
|
|
185
216
|
|
|
186
217
|
# Mark currently broken/unsupported datasets as expected to fail
|
|
187
218
|
# TODO: Remove these once they are supported
|
|
188
|
-
if index in [0, 1,
|
|
219
|
+
if index in [0, 1, 17]:
|
|
189
220
|
pytest.xfail("Data product is currently unsupported")
|
|
190
221
|
|
|
191
222
|
assert len(processed_dataset) == EXPECTED_NUM_VARIABLES[index]
|
|
@@ -211,6 +242,10 @@ def test_l1a_validate_data_arrays(test_l1a_data: xr.Dataset, index):
|
|
|
211
242
|
# TODO: Currently only the following products can be validated, expand this
|
|
212
243
|
# to other data products as I can validate them.
|
|
213
244
|
able_to_be_validated = [
|
|
245
|
+
"hi-counters-aggregated",
|
|
246
|
+
"hi-counters-singles",
|
|
247
|
+
"hi-priority",
|
|
248
|
+
"hi-sectored",
|
|
214
249
|
"lo-counters-aggregated",
|
|
215
250
|
"lo-counters-singles",
|
|
216
251
|
"lo-sw-angular",
|
|
@@ -219,26 +254,22 @@ def test_l1a_validate_data_arrays(test_l1a_data: xr.Dataset, index):
|
|
|
219
254
|
"lo-nsw-priority",
|
|
220
255
|
"lo-sw-species",
|
|
221
256
|
"lo-nsw-species",
|
|
257
|
+
"lo_pha",
|
|
222
258
|
]
|
|
259
|
+
|
|
223
260
|
if descriptor in able_to_be_validated:
|
|
224
261
|
counters = getattr(
|
|
225
|
-
constants, f
|
|
262
|
+
constants, f"{descriptor.upper().replace('-', '_')}_VARIABLE_NAMES"
|
|
226
263
|
)
|
|
227
264
|
processed_dataset = test_l1a_data[index]
|
|
228
265
|
validation_dataset = load_cdf(VALIDATION_DATA[index])
|
|
229
266
|
|
|
230
267
|
for counter in counters:
|
|
231
|
-
# Ensure the data
|
|
232
|
-
|
|
233
|
-
processed_dataset[counter].data.
|
|
234
|
-
== validation_dataset[counter].data.shape
|
|
268
|
+
# Ensure the data arrays are equal
|
|
269
|
+
np.testing.assert_equal(
|
|
270
|
+
processed_dataset[counter].data, validation_dataset[counter].data
|
|
235
271
|
)
|
|
236
272
|
|
|
237
|
-
# TODO: Once Joey and I figure out some small discrepancies with
|
|
238
|
-
# some data products, we should get matching data array shapes
|
|
239
|
-
# AND values (i.e. run assert_array_equal on the arrays,
|
|
240
|
-
# instead of just checking shape)
|
|
241
|
-
|
|
242
273
|
else:
|
|
243
274
|
pytest.xfail(f"Still need to implement validation for {descriptor}")
|
|
244
275
|
|
|
@@ -253,35 +284,17 @@ def test_l1a_validate_hskp_data(test_l1a_data):
|
|
|
253
284
|
# Load the validation housekeeping data
|
|
254
285
|
validation_hskp_data = load_cdf(validation_hskp_filepath)
|
|
255
286
|
|
|
256
|
-
# These variables are present in the
|
|
257
|
-
# the validation data
|
|
258
|
-
# TODO: Ask Joey if these can be removed from the L1a housekeeping CDFs
|
|
287
|
+
# These variables are not present in the validation dataset
|
|
259
288
|
exclude_variables = [
|
|
260
|
-
"
|
|
261
|
-
"
|
|
262
|
-
"
|
|
263
|
-
"
|
|
264
|
-
"
|
|
265
|
-
"
|
|
266
|
-
"
|
|
267
|
-
"spare_68",
|
|
289
|
+
"version",
|
|
290
|
+
"type",
|
|
291
|
+
"sec_hdr_flg",
|
|
292
|
+
"pkt_apid",
|
|
293
|
+
"seq_flgs",
|
|
294
|
+
"src_seq_ctr",
|
|
295
|
+
"pkt_len",
|
|
268
296
|
]
|
|
269
297
|
|
|
270
|
-
# These variables are not present in the validation data
|
|
271
|
-
# TODO: Ask joey if this is expected
|
|
272
|
-
exclude_variables.extend(
|
|
273
|
-
[
|
|
274
|
-
"version",
|
|
275
|
-
"type",
|
|
276
|
-
"sec_hdr_flg",
|
|
277
|
-
"pkt_apid",
|
|
278
|
-
"seq_flgs",
|
|
279
|
-
"src_seq_ctr",
|
|
280
|
-
"pkt_len",
|
|
281
|
-
"chksum",
|
|
282
|
-
]
|
|
283
|
-
)
|
|
284
|
-
|
|
285
298
|
for variable in hskp_data:
|
|
286
299
|
if variable not in exclude_variables:
|
|
287
300
|
np.testing.assert_array_equal(
|
|
@@ -289,10 +302,70 @@ def test_l1a_validate_hskp_data(test_l1a_data):
|
|
|
289
302
|
)
|
|
290
303
|
|
|
291
304
|
|
|
305
|
+
@pytest.mark.parametrize("index", range(len(DESCRIPTORS)))
|
|
306
|
+
def test_l1a_validate_support_variables(test_l1a_data, index):
|
|
307
|
+
"""Tests that the support variables for the generated products match the
|
|
308
|
+
validation data
|
|
309
|
+
|
|
310
|
+
Parameters
|
|
311
|
+
----------
|
|
312
|
+
test_l1a_data : list[xarray.Dataset]
|
|
313
|
+
A list of ``xarray`` datasets containing the test data
|
|
314
|
+
index : int
|
|
315
|
+
The index of the list to test
|
|
316
|
+
"""
|
|
317
|
+
|
|
318
|
+
# Hopefully I can remove this someday if Joey gives me validation data
|
|
319
|
+
# with updated naming conventions
|
|
320
|
+
variable_name_mapping = {
|
|
321
|
+
"data_quality": "DataQuality",
|
|
322
|
+
"nso_half_spin": "NSOHalfSpin",
|
|
323
|
+
"rgfo_half_spin": "RGFOHalfSpin",
|
|
324
|
+
"spin_period": "SpinPeriod",
|
|
325
|
+
"st_bias_gain_mode": "STBiasGainMode",
|
|
326
|
+
"sw_bias_gain_mode": "SWBiasGainMode",
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
descriptor = DESCRIPTORS[index]
|
|
330
|
+
dataset = test_l1a_data[index]
|
|
331
|
+
validation_dataset = load_cdf(VALIDATION_DATA[index])
|
|
332
|
+
|
|
333
|
+
if descriptor in CODICE_LO_PRODUCTS:
|
|
334
|
+
# Note that for the energy table and acquisition time, the validation
|
|
335
|
+
# data only carries three decimal places whereas the SDC-generated CDFs
|
|
336
|
+
# carry more significant figures
|
|
337
|
+
|
|
338
|
+
# Ensure the energy table values are (nearly) equal
|
|
339
|
+
np.testing.assert_almost_equal(
|
|
340
|
+
dataset.energy_table.data, validation_dataset.EnergyTable.data, decimal=3
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
# Ensure that the acquisition times are (nearly) equal
|
|
344
|
+
np.testing.assert_almost_equal(
|
|
345
|
+
dataset.acquisition_time_per_step.data,
|
|
346
|
+
validation_dataset.AcquisitionTimePerStep.data,
|
|
347
|
+
decimal=3,
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
# Ensure that the support variables derived from packet data are equal
|
|
351
|
+
for variable in variable_name_mapping:
|
|
352
|
+
np.testing.assert_equal(
|
|
353
|
+
dataset[variable].data,
|
|
354
|
+
validation_dataset[variable_name_mapping[variable]].data,
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
elif descriptor in CODICE_HI_PRODUCTS:
|
|
358
|
+
for variable in ["spin_period", "data_quality"]:
|
|
359
|
+
np.testing.assert_equal(
|
|
360
|
+
dataset[variable].data,
|
|
361
|
+
validation_dataset[variable_name_mapping[variable]].data,
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
|
|
292
365
|
def test_l1a_multiple_packets():
|
|
293
366
|
"""Tests that an input L0 file containing multiple APIDs can be processed."""
|
|
294
367
|
|
|
295
|
-
processed_datasets = process_codice_l1a(file_path=TEST_L0_FILE
|
|
368
|
+
processed_datasets = process_codice_l1a(file_path=TEST_L0_FILE)
|
|
296
369
|
|
|
297
370
|
# TODO: Could add some more checks here?
|
|
298
371
|
assert len(processed_datasets) == 18
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
import pytest
|
|
4
4
|
import xarray as xr
|
|
5
5
|
|
|
6
|
-
from imap_processing.cdf.utils import load_cdf
|
|
7
6
|
from imap_processing.codice.codice_l1b import process_codice_l1b
|
|
8
7
|
|
|
9
8
|
from .conftest import TEST_L1A_FILES
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
EXPECTED_LOGICAL_SOURCES = [
|
|
12
11
|
"imap_codice_l1b_hskp",
|
|
13
12
|
"imap_codice_l1b_hi-counters-aggregated",
|
|
14
13
|
"imap_codice_l1b_hi-counters-singles",
|
|
15
14
|
"imap_codice_l1b_hi-omni",
|
|
15
|
+
"imap_codice_l1b_hi-priority",
|
|
16
16
|
"imap_codice_l1b_hi-sectored",
|
|
17
17
|
"imap_codice_l1b_lo-counters-aggregated",
|
|
18
18
|
"imap_codice_l1b_lo-counters-singles",
|
|
@@ -34,18 +34,17 @@ def test_l1b_data(request) -> xr.Dataset:
|
|
|
34
34
|
dataset : xr.Dataset
|
|
35
35
|
A ``xarray`` dataset containing the test data
|
|
36
36
|
"""
|
|
37
|
-
|
|
38
|
-
dataset = process_codice_l1b(input_dataset, data_version="001")
|
|
37
|
+
dataset = process_codice_l1b(request.param)
|
|
39
38
|
return dataset
|
|
40
39
|
|
|
41
40
|
|
|
42
41
|
@pytest.mark.skip("Awaiting proper implementation of L1B")
|
|
43
42
|
@pytest.mark.parametrize(
|
|
44
43
|
"test_l1b_data, expected_logical_source",
|
|
45
|
-
list(zip(TEST_L1A_FILES,
|
|
44
|
+
list(zip(TEST_L1A_FILES, EXPECTED_LOGICAL_SOURCES)),
|
|
46
45
|
indirect=["test_l1b_data"],
|
|
47
46
|
)
|
|
48
|
-
def
|
|
47
|
+
def test_l1b_logical_sources(test_l1b_data: xr.Dataset, expected_logical_source: str):
|
|
49
48
|
"""Tests that the ``process_codice_l1b`` function generates datasets
|
|
50
49
|
with the expected logical source.
|
|
51
50
|
|
|
@@ -53,7 +52,7 @@ def test_l1b_cdf_filenames(test_l1b_data: xr.Dataset, expected_logical_source: s
|
|
|
53
52
|
----------
|
|
54
53
|
test_l1b_data : xr.Dataset
|
|
55
54
|
A ``xarray`` dataset containing the test data
|
|
56
|
-
|
|
55
|
+
expected_logical_source : str
|
|
57
56
|
The expected CDF filename
|
|
58
57
|
"""
|
|
59
58
|
|
|
@@ -13,11 +13,11 @@ lzma_bytes = lzma.compress((234).to_bytes(1, byteorder="big"))
|
|
|
13
13
|
# LZMA_EXAMPLE = "".join(format(byte, "08b") for byte in lzma_bytes)
|
|
14
14
|
TEST_DATA = [
|
|
15
15
|
(b"\xea", CoDICECompression.NO_COMPRESSION, [234]),
|
|
16
|
-
(b"\xea", CoDICECompression.LOSSY_A, [
|
|
17
|
-
(b"\xea", CoDICECompression.LOSSY_B, [
|
|
16
|
+
(b"\xea", CoDICECompression.LOSSY_A, [221183]),
|
|
17
|
+
(b"\xea", CoDICECompression.LOSSY_B, [1441791]),
|
|
18
18
|
(lzma_bytes, CoDICECompression.LOSSLESS, [234]),
|
|
19
|
-
(lzma_bytes, CoDICECompression.LOSSY_A_LOSSLESS, [
|
|
20
|
-
(lzma_bytes, CoDICECompression.LOSSY_B_LOSSLESS, [
|
|
19
|
+
(lzma_bytes, CoDICECompression.LOSSY_A_LOSSLESS, [221183]),
|
|
20
|
+
(lzma_bytes, CoDICECompression.LOSSY_B_LOSSLESS, [1441791]),
|
|
21
21
|
]
|
|
22
22
|
|
|
23
23
|
|