imap-processing 0.3.0rc1__tar.gz → 0.4.0__tar.gz
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.
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/PKG-INFO +3 -1
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/__init__.py +0 -5
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/_version.py +2 -2
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ccsds/ccsds_data.py +15 -9
- imap_processing-0.4.0/imap_processing/ccsds/excel_to_xtce.py +433 -0
- imap_processing-0.4.0/imap_processing/cdf/__init__.py +5 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/cdf_attribute_manager.py +136 -53
- imap_processing-0.4.0/imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +198 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +2 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +371 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_constant_attrs.yaml +33 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +40 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_glows_l1a_variable_attrs.yaml +376 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +350 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +25 -1
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_hi_variable_attrs.yaml +225 -35
- imap_processing-0.4.0/imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +27 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +509 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +580 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +24 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_idex_l1_variable_attrs.yaml +443 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +14 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +195 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +97 -0
- imap_processing-0.3.0rc1/imap_processing/cdf/config/imap_mag_l1a_variable_attrs.yaml → imap_processing-0.4.0/imap_processing/cdf/config/imap_mag_l1_variable_attrs.yaml +68 -8
- imap_processing-0.4.0/imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +26 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +104 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +8 -0
- imap_processing-0.4.0/imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +52 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/shared/default_variable_cdf_attrs_schema.yaml +1 -1
- imap_processing-0.4.0/imap_processing/cdf/imap_cdf_manager.py +64 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/utils.py +54 -43
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cli.py +323 -118
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/codice_l0.py +9 -7
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/codice_l1a.py +62 -57
- imap_processing-0.4.0/imap_processing/codice/codice_l1b.py +194 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/constants.py +4 -3
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/decompress.py +29 -19
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/utils.py +33 -34
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/decom.py +14 -7
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/l0/decom_glows.py +5 -3
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/l0/glows_l0_data.py +13 -12
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/l1a/glows_l1a.py +90 -81
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/l1a/glows_l1a_data.py +89 -70
- imap_processing-0.4.0/imap_processing/glows/l1b/glows_l1b.py +270 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/l1b/glows_l1b_data.py +90 -40
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/utils/constants.py +18 -4
- imap_processing-0.4.0/imap_processing/hi/l0/decom_hi.py +24 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/l1a/hi_l1a.py +27 -16
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/l1a/histogram.py +41 -40
- imap_processing-0.4.0/imap_processing/hi/l1a/housekeeping.py +27 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/l1a/science_direct_event.py +40 -66
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/l1b/hi_l1b.py +33 -31
- imap_processing-0.4.0/imap_processing/hi/l1c/hi_l1c.py +230 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/utils.py +4 -9
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/l0/data_classes/housekeeping.py +19 -4
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/l0/data_classes/science_packet.py +8 -5
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/l0/utils/hit_base.py +11 -8
- imap_processing-0.4.0/imap_processing/hit/l1a/hit_l1a.py +252 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/l1b/hit_l1b.py +38 -30
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ialirt/l0/decom_ialirt.py +9 -6
- imap_processing-0.4.0/imap_processing/idex/l0/idex_l0.py +29 -0
- imap_processing-0.4.0/imap_processing/idex/l1/idex_l1.py +631 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/data_classes/science_counts.py +68 -7
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/data_classes/science_direct_events.py +41 -25
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/data_classes/star_sensor.py +23 -7
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/utils/binary_string.py +14 -9
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/utils/bit_decompression.py +9 -5
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/utils/lo_base.py +11 -7
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l1a/lo_data_container.py +15 -15
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l1a/lo_l1a.py +30 -22
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l1a/lo_l1a_write_cdfs.py +37 -23
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l1b/lo_l1b.py +27 -19
- imap_processing-0.4.0/imap_processing/lo/l1c/lo_l1c.py +180 -0
- imap_processing-0.4.0/imap_processing/mag/__init__.py +2 -0
- imap_processing-0.4.0/imap_processing/mag/constants.py +57 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/mag/l0/decom_mag.py +27 -21
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/mag/l0/mag_l0_data.py +29 -26
- imap_processing-0.4.0/imap_processing/mag/l1a/mag_l1a.py +323 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/mag/l1a/mag_l1a_data.py +184 -40
- imap_processing-0.4.0/imap_processing/mag/l1b/imap_calibration_mag_20240229_v01.cdf +0 -0
- imap_processing-0.4.0/imap_processing/mag/l1b/mag_l1b.py +125 -0
- imap_processing-0.4.0/imap_processing/mag/l1c/mag_l1c.py +57 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swapi/l1/swapi_l1.py +100 -120
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swapi/swapi_utils.py +4 -13
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/l0/decom_swe.py +7 -4
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/l1a/swe_l1a.py +10 -7
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/l1a/swe_science.py +16 -16
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/l1b/swe_l1b.py +7 -6
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/l1b/swe_l1b_science.py +62 -39
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/utils/swe_utils.py +15 -10
- imap_processing-0.4.0/imap_processing/tests/ccsds/test_excel_to_xtce.py +60 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/imap_default_global_cdf_attrs.yaml +8 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/shared/default_global_cdf_attrs_schema.yaml +246 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/shared/default_variable_cdf_attrs_schema.yaml +466 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_cdf_attribute_manager.py +353 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_data/imap_default_global_test_cdf_attrs.yaml +7 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_data/imap_instrument1_global_cdf_attrs.yaml +14 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_data/imap_instrument1_level1_variable_attrs.yaml +23 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_data/imap_instrument2_global_cdf_attrs.yaml +23 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_data/imap_instrument2_level2_variable_attrs.yaml +30 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_data/imap_test_global.yaml +26 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_data/imap_test_variable.yaml +41 -0
- imap_processing-0.4.0/imap_processing/tests/cdf/test_imap_cdf_manager.py +62 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/cdf/test_utils.py +33 -20
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-singles_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_hi-omni_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_hi-sectored_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_hskp_20100101_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-singles_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-angular_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-priority_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-species_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-angular_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-priority_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-species_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-singles_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_hi-omni_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_hi-sectored_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_hskp_20100101_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-singles_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-angular_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-priority_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-species_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-angular_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-priority_20240429_v001.cdf +0 -0
- imap_processing-0.4.0/imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-species_20240429_v001.cdf +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/test_codice_l0.py +1 -1
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/test_codice_l1a.py +21 -22
- imap_processing-0.4.0/imap_processing/tests/codice/test_codice_l1b.py +102 -0
- imap_processing-0.4.0/imap_processing/tests/conftest.py +20 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/glows/test_glows_l1a_cdf.py +5 -2
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/glows/test_glows_l1b.py +108 -6
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hi/conftest.py +27 -1
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hi/test_decom.py +11 -16
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hi/test_hi_l1b.py +6 -12
- imap_processing-0.4.0/imap_processing/tests/hi/test_hi_l1c.py +70 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hi/test_l1a.py +11 -13
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hi/test_l1a_sci_de.py +4 -4
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hit/test_hit_l1a.py +14 -17
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hit/test_hit_l1b.py +14 -10
- imap_processing-0.3.0rc1/imap_processing/tests/idex/test_decom.py → imap_processing-0.4.0/imap_processing/tests/idex/test_idex_l0.py +1 -1
- imap_processing-0.3.0rc1/imap_processing/tests/idex/test_l1_cdfs.py → imap_processing-0.4.0/imap_processing/tests/idex/test_idex_l1.py +1 -1
- imap_processing-0.4.0/imap_processing/tests/lo/test_cdfs/imap_lo_l1b_de_20100101_v001.cdf +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_lo_l1a.py +6 -6
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_lo_l1a_write_cdfs.py +2 -2
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_lo_l1b.py +4 -6
- imap_processing-0.4.0/imap_processing/tests/lo/test_lo_l1c.py +66 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_science_direct_events.py +30 -31
- imap_processing-0.4.0/imap_processing/tests/mag/imap_mag_l1a_burst-magi_20231025_v001.cdf +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/mag/test_mag_decom.py +33 -19
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/mag/test_mag_l1a.py +71 -4
- imap_processing-0.4.0/imap_processing/tests/mag/test_mag_l1b.py +77 -0
- imap_processing-0.4.0/imap_processing/tests/mag/test_mag_l1c.py +40 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/test_swapi_l1.py +29 -33
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/test_cli.py +29 -45
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/test_decom_apid_896.py +2 -3
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/test_ultra_l1a.py +113 -104
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l0/decom_tools.py +29 -15
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l0/decom_ultra.py +55 -42
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l0/ultra_utils.py +27 -16
- imap_processing-0.4.0/imap_processing/ultra/l1a/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l1a/ultra_l1a.py +69 -96
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l1b/badtimes.py +6 -4
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l1b/cullingmask.py +6 -4
- imap_processing-0.4.0/imap_processing/ultra/l1b/de.py +59 -0
- imap_processing-0.4.0/imap_processing/ultra/l1b/extendedspin.py +45 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l1b/ultra_l1b.py +8 -6
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l1c/histogram.py +7 -3
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l1c/pset.py +6 -4
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/l1c/ultra_l1c.py +8 -6
- imap_processing-0.4.0/imap_processing/ultra/packet_definitions/__init__.py +0 -0
- imap_processing-0.4.0/imap_processing/ultra/utils/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/utils/ultra_l1_utils.py +6 -6
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/utils.py +124 -67
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/pyproject.toml +18 -3
- imap_processing-0.3.0rc1/imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +0 -105
- imap_processing-0.3.0rc1/imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +0 -49
- imap_processing-0.3.0rc1/imap_processing/cdf/defaults.py +0 -37
- imap_processing-0.3.0rc1/imap_processing/cdf/global_attrs.py +0 -414
- imap_processing-0.3.0rc1/imap_processing/cdf/imap_cdf_manager.py +0 -26
- imap_processing-0.3.0rc1/imap_processing/cdf/tests/test_cdf_attribute_manager.py +0 -58
- imap_processing-0.3.0rc1/imap_processing/common_cdf_attrs.py +0 -16
- imap_processing-0.3.0rc1/imap_processing/glows/glows_cdf_attrs.py +0 -248
- imap_processing-0.3.0rc1/imap_processing/glows/l1b/glows_l1b.py +0 -142
- imap_processing-0.3.0rc1/imap_processing/hi/hi_cdf_attrs.py +0 -186
- imap_processing-0.3.0rc1/imap_processing/hi/l0/decom_hi.py +0 -11
- imap_processing-0.3.0rc1/imap_processing/hi/l1a/housekeeping.py +0 -33
- imap_processing-0.3.0rc1/imap_processing/hit/hit_cdf_attrs.py +0 -867
- imap_processing-0.3.0rc1/imap_processing/hit/l1a/hit_l1a.py +0 -218
- imap_processing-0.3.0rc1/imap_processing/idex/idex_cdf_attrs.py +0 -184
- imap_processing-0.3.0rc1/imap_processing/idex/idex_packet_parser.py +0 -945
- imap_processing-0.3.0rc1/imap_processing/lo/l1a/lo_cdf_attrs.py +0 -60
- imap_processing-0.3.0rc1/imap_processing/mag/__init__.py +0 -1
- imap_processing-0.3.0rc1/imap_processing/mag/l1a/mag_l1a.py +0 -289
- imap_processing-0.3.0rc1/imap_processing/mag/mag_cdf_attrs.py +0 -249
- imap_processing-0.3.0rc1/imap_processing/swapi/swapi_cdf_attrs.py +0 -102
- imap_processing-0.3.0rc1/imap_processing/tests/cdf/test_attr_classes.py +0 -87
- imap_processing-0.3.0rc1/imap_processing/tests/conftest.py +0 -31
- imap_processing-0.3.0rc1/imap_processing/ultra/l1b/de.py +0 -34
- imap_processing-0.3.0rc1/imap_processing/ultra/l1b/extendedspin.py +0 -34
- imap_processing-0.3.0rc1/imap_processing/ultra/ultra_cdf_attrs.py +0 -62
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/LICENSE +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/README.md +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ccsds/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_default_global_cdf_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_lo_l1b_variable_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/cdf/config/shared/default_global_cdf_attrs_schema.yaml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/data/esa_sweep_values.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/data/lo_stepping_values.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_HI_INST_COUNTS_AGGREGATED.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_HI_INST_COUNTS_SINGLES.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_HI_OMNI_SPECIES_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_HI_PHA.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_HI_SECT_SPECIES_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_INST_COUNTS_AGGREGATED.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_INST_COUNTS_SINGLES.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_NSW_ANGULAR_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_NSW_PRIORITY_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_NSW_SPECIES_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_PHA.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_SW_ANGULAR_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_SW_PRIORITY_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_LO_SW_SPECIES_COUNTS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/codice/packet_definitions/P_COD_NHK.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/ancillary/l1b_conversion_table_v001.json +0 -0
- {imap_processing-0.3.0rc1/imap_processing/cdf → imap_processing-0.4.0/imap_processing/glows/l0}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/packet_definitions/GLX_COMBINED.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/packet_definitions/P_GLX_TMSCDE.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/glows/packet_definitions/P_GLX_TMSCHIST.xml +0 -0
- {imap_processing-0.3.0rc1/imap_processing/glows/l0 → imap_processing-0.4.0/imap_processing/glows/utils}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/glows/utils → imap_processing-0.4.0/imap_processing/hi/l0}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/hi/l0 → imap_processing-0.4.0/imap_processing/hi/l1a}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/hi/l1a → imap_processing-0.4.0/imap_processing/hi/l1b}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +0 -0
- {imap_processing-0.3.0rc1/imap_processing/hi/l1b → imap_processing-0.4.0/imap_processing/hi/l1c}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/packet_definitions/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hi/packet_definitions/hi_packet_definition.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/l0/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/l1a/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/packet_definitions/P_HIT_HSKP.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/hit/packet_definitions/P_HIT_SCIENCE.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ialirt/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ialirt/l0/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ialirt/packet_definitions/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ialirt/packet_definitions/ialirt.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/idex/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/idex/idex_constants.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/lo → imap_processing-0.4.0/imap_processing/idex}/l0/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/lo/l1a → imap_processing-0.4.0/imap_processing/idex/l1}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/idex/packet_definitions/idex_packet_definition.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/swapi/l1 → imap_processing-0.4.0/imap_processing/lo/l0}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/decompression_tables/12_to_16_bit.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/decompression_tables/8_to_12_bit.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/decompression_tables/8_to_16_bit.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/decompression_tables/decompression_tables.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/l0/lo_apid.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/swapi/packet_definitions → imap_processing-0.4.0/imap_processing/lo/l1a}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_APP_NHK.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_APP_SHK.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_AUTO.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_BOOT_HK.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_BOOT_MEMDMP.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_DIAG_BULK_HVPS.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_DIAG_CDH.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_DIAG_IFB.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_DIAG_PCC.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_DIAG_TOF_BD.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_EVTMSG.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_MEMDMP.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_RAW_CNT.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_RAW_DE.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_RAW_STAR.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_SCI_CNT.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_SCI_DE.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_SPIN.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/lo/packet_definitions/P_ILO_STAR.xml +0 -0
- {imap_processing-0.3.0rc1/imap_processing/swe/l0 → imap_processing-0.4.0/imap_processing/mag/l1b}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/mag/packet_definitions/MAG_SCI_COMBINED.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swapi/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/swe/l1a → imap_processing-0.4.0/imap_processing/swapi/l1}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/swe → imap_processing-0.4.0/imap_processing/swapi}/packet_definitions/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swapi/packet_definitions/swapi_packet_definition.xml +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/swe/utils → imap_processing-0.4.0/imap_processing/swe/l0}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests → imap_processing-0.4.0/imap_processing/swe/l1a}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/l1b/engineering_unit_convert_table.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/l1b/swe_esa_lookup_table.csv +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/cdf → imap_processing-0.4.0/imap_processing/swe/packet_definitions}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/swe/packet_definitions/swe_packet_definition.xml +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/codice → imap_processing-0.4.0/imap_processing/swe/utils}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/hi → imap_processing-0.4.0/imap_processing/tests}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/hit → imap_processing-0.4.0/imap_processing/tests/cdf}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/ialirt → imap_processing-0.4.0/imap_processing/tests/codice}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/eu_unit_lookup_table.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/idle_export_eu.COD_NHK_20230822_122700 2.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/idle_export_raw.COD_NHK_20230822_122700.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_hi-counters-aggregated_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_hi-counters-singles_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_hi-omni_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_hi-sectored_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_hskp_20100101_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-counters-aggregated_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-counters-singles_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-angular_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-priority_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-species_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-sw-angular_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-sw-priority_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/data/imap_codice_l0_lo-sw-species_20240429_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/codice/test_decompress.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/glows/direct_events_validation_data_l1a.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/glows/glows_test_packet_20110921_v01.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/glows/test_glows_decom.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/glows/test_glows_l1a_data.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/glows/test_glows_l1b_data.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/ialirt/unit → imap_processing-0.4.0/imap_processing/tests/hi}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/hi/l0_test_data → imap_processing-0.4.0/imap_processing/tests/hi/test_data/l0}/20231030_H45_APP_NHK.bin +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/hi/l0_validation_data → imap_processing-0.4.0/imap_processing/tests/hi/test_data/l0}/20231030_H45_APP_NHK.csv +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/hi/l0_test_data → imap_processing-0.4.0/imap_processing/tests/hi/test_data/l0}/20231030_H45_SCI_CNT.bin +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/hi/l0_test_data → imap_processing-0.4.0/imap_processing/tests/hi/test_data/l0}/20231030_H45_SCI_DE.bin +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/hi/l0_test_data → imap_processing-0.4.0/imap_processing/tests/hi/test_data/l0}/README.txt +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hi/test_utils.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1251.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1252.pkts +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/idex → imap_processing-0.4.0/imap_processing/tests/hit}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hit/test_data/hskp_sample.ccsds +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hit/test_housekeeping.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/hit/validation_data/hskp_sample_raw.csv +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/lo → imap_processing-0.4.0/imap_processing/tests/ialirt}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ialirt/test_data/l0/IALiRT Raw Packet Telemetry.txt +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/swapi → imap_processing-0.4.0/imap_processing/tests/ialirt/unit}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ialirt/unit/test_decom_ialirt.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/swapi/l0_data → imap_processing-0.4.0/imap_processing/tests/idex}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/idex/imap_idex_l0_raw_20230725_v001.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/idex/impact_14_tof_high_data.txt +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/swapi/l0_validation_data → imap_processing-0.4.0/imap_processing/tests/lo}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_binary_string.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_bit_decompression.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/lo/test_l1a_cdfs → imap_processing-0.4.0/imap_processing/tests/lo/test_cdfs}/imap_lo_l1a_de_20100101_v001.cdf +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/lo/test_l1a_cdfs → imap_processing-0.4.0/imap_processing/tests/lo/test_cdfs}/imap_lo_l1a_spin_20100101_v001.cdf +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_science_counts.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/lo/test_star_sensor.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/mag/mag_l0_test_data.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/mag/mag_l0_test_output.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/mag/mag_l1_test_data.pkts +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/mag/mag_l1a_test_output.csv +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/swe → imap_processing-0.4.0/imap_processing/tests/swapi}/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/ultra → imap_processing-0.4.0/imap_processing/tests/swapi/l0_data}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_data/imap_swapi_l0_raw_20231012_v001.pkts +0 -0
- {imap_processing-0.3.0rc1/imap_processing/tests/ultra/unit → imap_processing-0.4.0/imap_processing/tests/swapi/l0_validation_data}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_AUT_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_HK_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_MG_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_SCI_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_AUT_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_HK_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_MG_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_SCI_20231012_125245.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swapi/test_swapi_decom.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/ultra/l0 → imap_processing-0.4.0/imap_processing/tests/swe}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/conftest.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/decompressed/20230927173238_4th_quarter_decompressed.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/decompressed/20230927173253_1st_quarter_decompressed.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/decompressed/20230927173308_2nd_quarter_decompressed.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/decompressed/20230927173323_3rd_quarter_decompressed.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/l0_data/2024051010_SWE_SCIENCE_packet.bin +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_SCIENCE_20240510_092742.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/l0_validation_data/idle_export_raw.SWE_SCIENCE_20240510_092742.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/test_swe_l1a.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/test_swe_l1a_science.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/test_swe_l1b.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/swe/test_swe_l1b_science.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/test_decom.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/test_utils.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/ultra/l1a → imap_processing-0.4.0/imap_processing/tests/ultra}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/FM45_40P_Phi28p5_BeamCal_LinearScan_phi28.50_theta-0.00_20240207T102740.CCSDS +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/FM45_7P_Phi0.0_BeamCal_LinearScan_phi0.04_theta-0.01_20230821T121304.CCSDS +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_enaphxtofhangimg_FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultraimgrates_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultrarawimgevent_FM45_7P_Phi00_BeamCal_LinearScan_phi004_theta-001_20230821T121304.csv +0 -0
- {imap_processing-0.3.0rc1/imap_processing/ultra/packet_definitions → imap_processing-0.4.0/imap_processing/tests/ultra/unit}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/conftest.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/test_decom_apid_880.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/test_decom_apid_881.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/test_decom_apid_883.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/test_ultra_l1b.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/tests/ultra/unit/test_ultra_l1c.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/__init__.py +0 -0
- {imap_processing-0.3.0rc1/imap_processing/ultra/utils → imap_processing-0.4.0/imap_processing/ultra/l0}/__init__.py +0 -0
- {imap_processing-0.3.0rc1 → imap_processing-0.4.0}/imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: imap-processing
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: IMAP Science Operations Center Processing
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: IMAP,SDC,SOC,Science Operations
|
|
@@ -28,6 +28,8 @@ Provides-Extra: test
|
|
|
28
28
|
Provides-Extra: tools
|
|
29
29
|
Requires-Dist: cdflib (==1.2.6)
|
|
30
30
|
Requires-Dist: imap-data-access (>=0.5.0)
|
|
31
|
+
Requires-Dist: mypy (>=1.10.1,<2.0.0) ; extra == "dev"
|
|
32
|
+
Requires-Dist: numpy (>=1.26.4,<2.0.0)
|
|
31
33
|
Requires-Dist: numpydoc (>=1.5.0,<2.0.0) ; extra == "doc"
|
|
32
34
|
Requires-Dist: openpyxl (>=3.0.7) ; extra == "tools"
|
|
33
35
|
Requires-Dist: pandas (>=2.0.0) ; extra == "tools"
|
|
@@ -14,8 +14,6 @@ the CDF file format, and to interact with the SPICE toolkit.
|
|
|
14
14
|
# This directory is used by the imap_processing package to find the packet definitions.
|
|
15
15
|
from pathlib import Path
|
|
16
16
|
|
|
17
|
-
import numpy as np
|
|
18
|
-
|
|
19
17
|
from imap_processing._version import __version__, __version_tuple__ # noqa: F401
|
|
20
18
|
|
|
21
19
|
# Eg. imap_module_directory = /usr/local/lib/python3.11/site-packages/imap_processing
|
|
@@ -34,6 +32,3 @@ PROCESSING_LEVELS = {
|
|
|
34
32
|
"swe": ["l0", "l1a", "l1b", "l2"],
|
|
35
33
|
"ultra": ["l0", "l1a", "l1b", "l1c", "l2"],
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
# Reference start time (launch time or epoch)
|
|
39
|
-
launch_time = np.datetime64("2010-01-01T00:01:06.184", "ns")
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
# These version placeholders will be replaced later during substitution.
|
|
2
|
-
__version__ = "0.
|
|
3
|
-
__version_tuple__ = (0,
|
|
2
|
+
__version__ = "0.4.0"
|
|
3
|
+
__version_tuple__ = (0, 4, 0)
|
|
@@ -1,28 +1,34 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Contain a data class for CCSDS data."""
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass, fields
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
@dataclass
|
|
7
7
|
class CcsdsData:
|
|
8
|
-
"""
|
|
8
|
+
"""
|
|
9
|
+
Data class for CCSDS header.
|
|
10
|
+
|
|
11
|
+
Parameters
|
|
12
|
+
----------
|
|
13
|
+
packet_header : dict
|
|
14
|
+
Dictionary of packet headers.
|
|
9
15
|
|
|
10
16
|
Attributes
|
|
11
17
|
----------
|
|
12
18
|
VERSION: int
|
|
13
|
-
CCSDS Packet Version Number
|
|
19
|
+
CCSDS Packet Version Number.
|
|
14
20
|
TYPE: int
|
|
15
|
-
CCSDS Packet Type Indicator
|
|
21
|
+
CCSDS Packet Type Indicator.
|
|
16
22
|
SEC_HDR_FLG: int
|
|
17
|
-
CCSDS Packet Secondary Header Flag
|
|
23
|
+
CCSDS Packet Secondary Header Flag.
|
|
18
24
|
PKT_APID: int
|
|
19
|
-
CCSDS Packet Application Process ID
|
|
25
|
+
CCSDS Packet Application Process ID.
|
|
20
26
|
SEQ_FLGS: int
|
|
21
|
-
CCSDS Packet Grouping Flags
|
|
27
|
+
CCSDS Packet Grouping Flags.
|
|
22
28
|
SRC_SEQ_CTR: int
|
|
23
|
-
CCSDS Packet Sequence Count
|
|
29
|
+
CCSDS Packet Sequence Count.
|
|
24
30
|
PKT_LEN: int
|
|
25
|
-
CCSDS Packet Length
|
|
31
|
+
CCSDS Packet Length.
|
|
26
32
|
"""
|
|
27
33
|
|
|
28
34
|
VERSION: int
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Convert an Excel file of packet definitions into the XTCE format.
|
|
3
|
+
|
|
4
|
+
This script reads in an Excel file containing packet definitions and converts
|
|
5
|
+
them into an XTCE file.
|
|
6
|
+
|
|
7
|
+
.. code::
|
|
8
|
+
imap_xtce /path/to/excel_file.xlsx --output /path/to/output.xml
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
import xml.etree.ElementTree as Et
|
|
13
|
+
from importlib.util import find_spec
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
import pandas as pd
|
|
17
|
+
|
|
18
|
+
_CCSDS_PARAMETERS = [
|
|
19
|
+
{
|
|
20
|
+
"name": "VERSION",
|
|
21
|
+
"lengthInBits": 3,
|
|
22
|
+
"description": "CCSDS Packet Version Number (always 0)",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "TYPE",
|
|
26
|
+
"lengthInBits": 1,
|
|
27
|
+
"description": "CCSDS Packet Type Indicator (0=telemetry)",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "SEC_HDR_FLG",
|
|
31
|
+
"lengthInBits": 1,
|
|
32
|
+
"description": "CCSDS Packet Secondary Header Flag (always 1)",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "PKT_APID",
|
|
36
|
+
"lengthInBits": 11,
|
|
37
|
+
"description": "CCSDS Packet Application Process ID",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "SEQ_FLGS",
|
|
41
|
+
"lengthInBits": 2,
|
|
42
|
+
"description": "CCSDS Packet Grouping Flags (3=not part of group)",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "SRC_SEQ_CTR",
|
|
46
|
+
"lengthInBits": 14,
|
|
47
|
+
"description": "CCSDS Packet Sequence Count "
|
|
48
|
+
"(increments with each new packet)",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "PKT_LEN",
|
|
52
|
+
"lengthInBits": 16,
|
|
53
|
+
"description": "CCSDS Packet Length "
|
|
54
|
+
"(number of bytes after Packet length minus 1)",
|
|
55
|
+
},
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class XTCEGenerator:
|
|
60
|
+
"""
|
|
61
|
+
Automatically generate XTCE files from excel definition files.
|
|
62
|
+
|
|
63
|
+
The excel file should have the following columns: mnemonic, sequence, lengthInBits,
|
|
64
|
+
startBit, dataType, convertAs, units, source, and either shortDescription or
|
|
65
|
+
longDescription.
|
|
66
|
+
|
|
67
|
+
This class will correctly generate a CCSDS header and the provided data types.
|
|
68
|
+
|
|
69
|
+
It is intended for use as a first pass of XTCE generation, and most cases, the
|
|
70
|
+
packet definitions will require manual updates.
|
|
71
|
+
|
|
72
|
+
Use ``to_xml`` to write the output xml file.
|
|
73
|
+
|
|
74
|
+
Parameters
|
|
75
|
+
----------
|
|
76
|
+
path_to_excel_file : Path
|
|
77
|
+
Path to the excel file.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
def __init__(self, path_to_excel_file: Path):
|
|
81
|
+
# Read in all sheets from the excel file
|
|
82
|
+
self.sheets = pd.read_excel(path_to_excel_file, sheet_name=None)
|
|
83
|
+
# Set up the packet mapping from packetName to Apid
|
|
84
|
+
packet_sheet = self.sheets["Packets"]
|
|
85
|
+
if "apId" not in packet_sheet.columns:
|
|
86
|
+
# Create the apId column from the apIdHex (base=0 works with the 0x prefix)
|
|
87
|
+
packet_sheet["apId"] = packet_sheet["apIdHex"].apply(int, base=0)
|
|
88
|
+
self._packet_mapping = packet_sheet.set_index("packetName")["apId"].to_dict()
|
|
89
|
+
|
|
90
|
+
# Create the XML containers that will be populated later
|
|
91
|
+
self._setup_xml_containers()
|
|
92
|
+
# Add the CCSDS Header information to the containers
|
|
93
|
+
self._setup_ccsds_header()
|
|
94
|
+
# Create the sequence containers (also adding parameters within)
|
|
95
|
+
self._create_container_sets()
|
|
96
|
+
|
|
97
|
+
def _setup_xml_containers(self) -> None:
|
|
98
|
+
"""Create an XML representation of telemetry data."""
|
|
99
|
+
# Register the XML namespace
|
|
100
|
+
source_link = "http://www.omg.org/space/xtce"
|
|
101
|
+
Et.register_namespace("xtce", source_link)
|
|
102
|
+
|
|
103
|
+
# Create the root element and add namespaces
|
|
104
|
+
root = Et.Element("xtce:SpaceSystem")
|
|
105
|
+
self._root = root
|
|
106
|
+
root.attrib["xmlns:xtce"] = source_link
|
|
107
|
+
# Subsystem sheet name is used as the base name for this XTCE definition
|
|
108
|
+
subsystem = self.sheets["Subsystem"]
|
|
109
|
+
root.attrib["name"] = str(
|
|
110
|
+
subsystem.loc[subsystem["infoField"] == "subsystem", "infoValue"].values[0]
|
|
111
|
+
)
|
|
112
|
+
# Create the Header element with attributes 'date', 'version', and 'author'
|
|
113
|
+
# Versioning is used to keep track of changes to the XML file.
|
|
114
|
+
header = Et.SubElement(root, "xtce:Header")
|
|
115
|
+
header.attrib["date"] = str(
|
|
116
|
+
subsystem.loc[
|
|
117
|
+
subsystem["infoField"] == "sheetReleaseDate", "infoValue"
|
|
118
|
+
].values[0]
|
|
119
|
+
)
|
|
120
|
+
header.attrib["version"] = str(
|
|
121
|
+
subsystem.loc[
|
|
122
|
+
subsystem["infoField"] == "sheetReleaseRev", "infoValue"
|
|
123
|
+
].values[0]
|
|
124
|
+
)
|
|
125
|
+
header.attrib["author"] = "IMAP SDC"
|
|
126
|
+
|
|
127
|
+
# Create the TelemetryMetaData element
|
|
128
|
+
self._telemetry_metadata = Et.SubElement(root, "xtce:TelemetryMetaData")
|
|
129
|
+
|
|
130
|
+
# Create the ParameterTypeSet element
|
|
131
|
+
self._parameter_type_set = Et.SubElement(
|
|
132
|
+
self._telemetry_metadata, "xtce:ParameterTypeSet"
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
# Create the ParameterSet element
|
|
136
|
+
self._parameter_set = Et.SubElement(
|
|
137
|
+
self._telemetry_metadata, "xtce:ParameterSet"
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
# Create ContainerSet element
|
|
141
|
+
self._container_sets = Et.SubElement(
|
|
142
|
+
self._telemetry_metadata, "xtce:ContainerSet"
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
def _setup_ccsds_header(self) -> None:
|
|
146
|
+
"""Fill in the default CCSDS header information."""
|
|
147
|
+
# Create CCSDSPacket SequenceContainer
|
|
148
|
+
ccsds_container = Et.SubElement(self._container_sets, "xtce:SequenceContainer")
|
|
149
|
+
ccsds_container.attrib["name"] = "CCSDSPacket"
|
|
150
|
+
ccsds_container.attrib["abstract"] = "true"
|
|
151
|
+
ccsds_entry_list = Et.SubElement(ccsds_container, "xtce:EntryList")
|
|
152
|
+
|
|
153
|
+
# Populate EntryList for CCSDSPacket SequenceContainer
|
|
154
|
+
for parameter_data in _CCSDS_PARAMETERS:
|
|
155
|
+
parameter_ref_entry = Et.SubElement(
|
|
156
|
+
ccsds_entry_list, "xtce:ParameterRefEntry"
|
|
157
|
+
)
|
|
158
|
+
name = str(parameter_data["name"])
|
|
159
|
+
|
|
160
|
+
parameter_ref_entry.attrib["parameterRef"] = name
|
|
161
|
+
|
|
162
|
+
# Add the parameter to the ParameterSet
|
|
163
|
+
parameter = Et.SubElement(self._parameter_set, "xtce:Parameter")
|
|
164
|
+
parameter.attrib["name"] = name
|
|
165
|
+
parameter.attrib["parameterTypeRef"] = name
|
|
166
|
+
|
|
167
|
+
description = Et.SubElement(parameter, "xtce:LongDescription")
|
|
168
|
+
description.text = str(parameter_data["description"])
|
|
169
|
+
|
|
170
|
+
# Add the typeref to the parameter type set
|
|
171
|
+
parameter_type = Et.SubElement(
|
|
172
|
+
self._parameter_type_set, "xtce:IntegerParameterType"
|
|
173
|
+
)
|
|
174
|
+
parameter_type.attrib["name"] = name
|
|
175
|
+
parameter_type.attrib["signed"] = "false"
|
|
176
|
+
|
|
177
|
+
encoding = Et.SubElement(parameter_type, "xtce:IntegerDataEncoding")
|
|
178
|
+
encoding.attrib["sizeInBits"] = str(parameter_data["lengthInBits"])
|
|
179
|
+
encoding.attrib["encoding"] = "unsigned"
|
|
180
|
+
|
|
181
|
+
def _create_container_sets(self) -> None:
|
|
182
|
+
"""Create a container set for each packet in the Excel file."""
|
|
183
|
+
# Iterate over all packets and create Packet SequenceContainers
|
|
184
|
+
for packet_name, apid in self._packet_mapping.items():
|
|
185
|
+
# Populate EntryList for packet SequenceContainers
|
|
186
|
+
# The sheets are sometimes prefixed with P_, so we need to try both options
|
|
187
|
+
try:
|
|
188
|
+
packet_df = self.sheets[packet_name]
|
|
189
|
+
except KeyError:
|
|
190
|
+
try:
|
|
191
|
+
packet_df = self.sheets[f"P_{packet_name}"]
|
|
192
|
+
except KeyError:
|
|
193
|
+
print(
|
|
194
|
+
f"Packet definition for {packet_name} "
|
|
195
|
+
"not found in the excel file."
|
|
196
|
+
)
|
|
197
|
+
continue
|
|
198
|
+
|
|
199
|
+
# Create Packet SequenceContainer that use the CCSDSPacket SequenceContainer
|
|
200
|
+
# as the base container
|
|
201
|
+
science_container = Et.SubElement(
|
|
202
|
+
self._container_sets, "xtce:SequenceContainer"
|
|
203
|
+
)
|
|
204
|
+
science_container.attrib["name"] = packet_name
|
|
205
|
+
|
|
206
|
+
# Every container should inherit from the base container, CCSDSPacket
|
|
207
|
+
base_container = Et.SubElement(science_container, "xtce:BaseContainer")
|
|
208
|
+
base_container.attrib["containerRef"] = "CCSDSPacket"
|
|
209
|
+
|
|
210
|
+
# Add RestrictionCriteria element to use the given APID for comparison
|
|
211
|
+
restriction_criteria = Et.SubElement(
|
|
212
|
+
base_container, "xtce:RestrictionCriteria"
|
|
213
|
+
)
|
|
214
|
+
comparison = Et.SubElement(restriction_criteria, "xtce:Comparison")
|
|
215
|
+
comparison.attrib["parameterRef"] = "PKT_APID"
|
|
216
|
+
comparison.attrib["value"] = str(apid)
|
|
217
|
+
comparison.attrib["useCalibratedValue"] = "false"
|
|
218
|
+
|
|
219
|
+
packet_entry_list = Et.SubElement(science_container, "xtce:EntryList")
|
|
220
|
+
# Needed for dynamic binary packet length
|
|
221
|
+
total_packet_bits = int(packet_df["lengthInBits"].sum())
|
|
222
|
+
for i, row in packet_df.iterrows():
|
|
223
|
+
if i < 7:
|
|
224
|
+
# Skip first 7 rows as they are the CCSDS header elements
|
|
225
|
+
continue
|
|
226
|
+
if pd.isna(row.get("packetName")):
|
|
227
|
+
# This is a poorly formatted row, skip it
|
|
228
|
+
continue
|
|
229
|
+
name = f"{row['packetName']}_{row['mnemonic']}"
|
|
230
|
+
parameter_ref_entry = Et.SubElement(
|
|
231
|
+
packet_entry_list, "xtce:ParameterRefEntry"
|
|
232
|
+
)
|
|
233
|
+
parameter_ref_entry.attrib["parameterRef"] = name
|
|
234
|
+
# Add this parameter to the ParameterSet too
|
|
235
|
+
self._add_parameter(row, total_packet_bits)
|
|
236
|
+
|
|
237
|
+
def _add_parameter(self, row: pd.Series, total_packet_bits: int) -> None:
|
|
238
|
+
"""
|
|
239
|
+
Row from a packet definition to be added to the XTCE file.
|
|
240
|
+
|
|
241
|
+
Parameters
|
|
242
|
+
----------
|
|
243
|
+
row : pandas.Row
|
|
244
|
+
Row to be added to the XTCE file, containing mnemonic, lengthInBits, ...
|
|
245
|
+
total_packet_bits : int
|
|
246
|
+
Total number of bits in the packet, as summed from the lengthInBits column.
|
|
247
|
+
"""
|
|
248
|
+
parameter = Et.SubElement(self._parameter_set, "xtce:Parameter")
|
|
249
|
+
# Combine the packet name and mnemonic to create a unique parameter name
|
|
250
|
+
name = f"{row['packetName']}_{row['mnemonic']}"
|
|
251
|
+
parameter.attrib["name"] = name
|
|
252
|
+
# UINT8, ...
|
|
253
|
+
parameter.attrib["parameterTypeRef"] = name
|
|
254
|
+
|
|
255
|
+
# Add descriptions if they exist
|
|
256
|
+
if pd.notna(row.get("shortDescription")):
|
|
257
|
+
parameter.attrib["shortDescription"] = row.get("shortDescription")
|
|
258
|
+
if pd.notna(row.get("longDescription")):
|
|
259
|
+
description = Et.SubElement(parameter, "xtce:LongDescription")
|
|
260
|
+
description.text = row.get("longDescription")
|
|
261
|
+
|
|
262
|
+
length_in_bits = int(row["lengthInBits"])
|
|
263
|
+
|
|
264
|
+
# Add the parameterTypeRef for this row
|
|
265
|
+
if "UINT" in row["dataType"]:
|
|
266
|
+
parameter_type = Et.SubElement(
|
|
267
|
+
self._parameter_type_set, "xtce:IntegerParameterType"
|
|
268
|
+
)
|
|
269
|
+
parameter_type.attrib["name"] = name
|
|
270
|
+
parameter_type.attrib["signed"] = "false"
|
|
271
|
+
|
|
272
|
+
encoding = Et.SubElement(parameter_type, "xtce:IntegerDataEncoding")
|
|
273
|
+
encoding.attrib["sizeInBits"] = str(length_in_bits)
|
|
274
|
+
encoding.attrib["encoding"] = "unsigned"
|
|
275
|
+
|
|
276
|
+
elif any(x in row["dataType"] for x in ["SINT", "INT"]):
|
|
277
|
+
parameter_type = Et.SubElement(
|
|
278
|
+
self._parameter_type_set, "xtce:IntegerParameterType"
|
|
279
|
+
)
|
|
280
|
+
parameter_type.attrib["name"] = name
|
|
281
|
+
parameter_type.attrib["signed"] = "true"
|
|
282
|
+
encoding = Et.SubElement(parameter_type, "xtce:IntegerDataEncoding")
|
|
283
|
+
encoding.attrib["sizeInBits"] = str(length_in_bits)
|
|
284
|
+
encoding.attrib["encoding"] = "signed"
|
|
285
|
+
|
|
286
|
+
elif "BYTE" in row["dataType"]:
|
|
287
|
+
parameter_type = Et.SubElement(
|
|
288
|
+
self._parameter_type_set, "xtce:BinaryParameterType"
|
|
289
|
+
)
|
|
290
|
+
parameter_type.attrib["name"] = name
|
|
291
|
+
|
|
292
|
+
encoding = Et.SubElement(parameter_type, "xtce:BinaryDataEncoding")
|
|
293
|
+
encoding.attrib["bitOrder"] = "mostSignificantBitFirst"
|
|
294
|
+
|
|
295
|
+
size_in_bits = Et.SubElement(encoding, "xtce:SizeInBits")
|
|
296
|
+
|
|
297
|
+
# If it is a byte field consider it a dynamic value.
|
|
298
|
+
dynamic_value = Et.SubElement(size_in_bits, "xtce:DynamicValue")
|
|
299
|
+
param_ref = Et.SubElement(dynamic_value, "xtce:ParameterInstanceRef")
|
|
300
|
+
param_ref.attrib["parameterRef"] = "PKT_LEN"
|
|
301
|
+
linear_adjustment = Et.SubElement(dynamic_value, "xtce:LinearAdjustment")
|
|
302
|
+
linear_adjustment.attrib["slope"] = str(8)
|
|
303
|
+
# The length of all other variables (other than this specific one)
|
|
304
|
+
other_variable_bits = total_packet_bits - length_in_bits
|
|
305
|
+
# PKT_LEN == number of bytes in the packet data field - 1
|
|
306
|
+
# So we need to subtract the header bytes plus 1 to get the offset
|
|
307
|
+
# The amount to subtract to get the intercept is then:
|
|
308
|
+
# number of other bits in the packet - (6 + 1) * 8
|
|
309
|
+
linear_adjustment.attrib["intercept"] = str(-int(other_variable_bits - 56))
|
|
310
|
+
|
|
311
|
+
# TODO: Do we want to allow fixed length values?
|
|
312
|
+
# fixed_value = Et.SubElement(size_in_bits, "xtce:FixedValue")
|
|
313
|
+
# fixed_value.text = str(row["lengthInBits"])
|
|
314
|
+
|
|
315
|
+
if row["convertAs"] == "ANALOG":
|
|
316
|
+
# Go look up the conversion in the AnalogConversions tab
|
|
317
|
+
# and add it to the encoding
|
|
318
|
+
self._add_analog_conversion(row, encoding)
|
|
319
|
+
|
|
320
|
+
def _add_analog_conversion(self, row: pd.Series, encoding: Et.Element) -> None:
|
|
321
|
+
"""
|
|
322
|
+
Add an analog conversion to the encoding element.
|
|
323
|
+
|
|
324
|
+
Parameters
|
|
325
|
+
----------
|
|
326
|
+
row : pandas.Row
|
|
327
|
+
Row to be added to the XTCE file, containing mnemonic, packetName.
|
|
328
|
+
encoding : Element
|
|
329
|
+
The encoding element to add the conversion to.
|
|
330
|
+
"""
|
|
331
|
+
# Look up the conversion in the AnalogConversions tab
|
|
332
|
+
analog_conversion = self.sheets["AnalogConversions"]
|
|
333
|
+
# conversion is a row from the AnalogConversions sheet
|
|
334
|
+
conversion = analog_conversion.loc[
|
|
335
|
+
(analog_conversion["mnemonic"] == row["mnemonic"])
|
|
336
|
+
& (analog_conversion["packetName"] == row["packetName"])
|
|
337
|
+
].iloc[0]
|
|
338
|
+
|
|
339
|
+
# Create the Conversion element
|
|
340
|
+
default_calibrator = Et.SubElement(encoding, "xtce:DefaultCalibrator")
|
|
341
|
+
polynomial_calibrator = Et.SubElement(
|
|
342
|
+
default_calibrator, "xtce:PolynomialCalibrator"
|
|
343
|
+
)
|
|
344
|
+
# FIXME: Use lowValue / highValue from the conversion sheet
|
|
345
|
+
# FIXME: Handle segmented polynomials (only using first segment now)
|
|
346
|
+
for i in range(8):
|
|
347
|
+
col = f"c{i}"
|
|
348
|
+
if conversion[col] != 0:
|
|
349
|
+
term = Et.SubElement(polynomial_calibrator, "xtce:Term")
|
|
350
|
+
term.attrib["coefficient"] = str(conversion[col])
|
|
351
|
+
term.attrib["exponent"] = str(i)
|
|
352
|
+
|
|
353
|
+
def to_xml(self, output_xml_path: Path) -> None:
|
|
354
|
+
"""
|
|
355
|
+
Create and output an XTCE file from the Element Tree representation.
|
|
356
|
+
|
|
357
|
+
Parameters
|
|
358
|
+
----------
|
|
359
|
+
output_xml_path : Path
|
|
360
|
+
Path to the output XML file.
|
|
361
|
+
"""
|
|
362
|
+
# Create the XML tree and save the document
|
|
363
|
+
tree = Et.ElementTree(self._root)
|
|
364
|
+
Et.indent(tree, space="\t", level=0)
|
|
365
|
+
|
|
366
|
+
# Use the provided output_xml_path
|
|
367
|
+
tree.write(output_xml_path, encoding="utf-8", xml_declaration=True)
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
# Function to parse command line arguments
|
|
371
|
+
def _parse_args() -> argparse.Namespace:
|
|
372
|
+
"""
|
|
373
|
+
Parse the command line arguments.
|
|
374
|
+
|
|
375
|
+
The expected input format is a required argument of "/path/to/excel_file.xlsx"
|
|
376
|
+
with an optional argument containing the output path for the XTCE file
|
|
377
|
+
"/path/to/output.xml".
|
|
378
|
+
|
|
379
|
+
Returns
|
|
380
|
+
-------
|
|
381
|
+
args : argparse.Namespace
|
|
382
|
+
An object containing the parsed arguments and their values.
|
|
383
|
+
"""
|
|
384
|
+
description = (
|
|
385
|
+
"This command line program generates an instrument specific XTCE file. "
|
|
386
|
+
"Example usage: imap_xtce "
|
|
387
|
+
"path/to/excel_packet_file.xlsx --output path/to/output_packet_definition.xml"
|
|
388
|
+
)
|
|
389
|
+
output_help = (
|
|
390
|
+
"Where to save the output XTCE file. "
|
|
391
|
+
"If not provided, the input file name will be used with a "
|
|
392
|
+
".xml extension."
|
|
393
|
+
)
|
|
394
|
+
file_path_help = "Provide the full path to the input excel file."
|
|
395
|
+
|
|
396
|
+
parser = argparse.ArgumentParser(prog="imap_xtce", description=description)
|
|
397
|
+
parser.add_argument("excel_file", type=Path, help=file_path_help)
|
|
398
|
+
parser.add_argument("--output", type=Path, required=False, help=output_help)
|
|
399
|
+
|
|
400
|
+
if not find_spec("openpyxl"):
|
|
401
|
+
parser.error(
|
|
402
|
+
"The openpyxl package is required for this script. "
|
|
403
|
+
"Please install it using 'pip install openpyxl'."
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
args = parser.parse_args()
|
|
407
|
+
|
|
408
|
+
if not args.excel_file.exists():
|
|
409
|
+
parser.error(f"File not found: {args.excel_file}")
|
|
410
|
+
|
|
411
|
+
if not args.output:
|
|
412
|
+
args.output = args.excel_file.with_suffix(".xml")
|
|
413
|
+
|
|
414
|
+
return args
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def main() -> None:
|
|
418
|
+
"""
|
|
419
|
+
Generate xtce file from CLI information given.
|
|
420
|
+
|
|
421
|
+
The xtce file will be written in an instrument specific subfolder.
|
|
422
|
+
"""
|
|
423
|
+
# Parse arguments from the command line
|
|
424
|
+
args = _parse_args()
|
|
425
|
+
|
|
426
|
+
xtce_generator = XTCEGenerator(
|
|
427
|
+
path_to_excel_file=args.excel_file,
|
|
428
|
+
)
|
|
429
|
+
xtce_generator.to_xml(args.output)
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
if __name__ == "__main__":
|
|
433
|
+
main()
|