imap-processing 0.6.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.
- imap_processing/__init__.py +34 -0
- imap_processing/_version.py +3 -0
- imap_processing/ccsds/__init__.py +0 -0
- imap_processing/ccsds/ccsds_data.py +55 -0
- imap_processing/ccsds/excel_to_xtce.py +477 -0
- imap_processing/cdf/__init__.py +0 -0
- imap_processing/cdf/cdf_attribute_manager.py +322 -0
- imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +212 -0
- imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +1358 -0
- imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +391 -0
- imap_processing/cdf/config/imap_constant_attrs.yaml +33 -0
- imap_processing/cdf/config/imap_default_global_cdf_attrs.yaml +17 -0
- imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +41 -0
- imap_processing/cdf/config/imap_glows_l1a_variable_attrs.yaml +499 -0
- imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +334 -0
- imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +51 -0
- imap_processing/cdf/config/imap_hi_variable_attrs.yaml +435 -0
- imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +27 -0
- imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +493 -0
- imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +564 -0
- imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +24 -0
- imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +426 -0
- imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +90 -0
- imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +487 -0
- imap_processing/cdf/config/imap_lo_l1b_variable_attrs.yaml +121 -0
- imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +179 -0
- imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +97 -0
- imap_processing/cdf/config/imap_mag_l1_variable_attrs.yaml +201 -0
- imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +33 -0
- imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +137 -0
- imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +24 -0
- imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +234 -0
- imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +273 -0
- imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +100 -0
- imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +52 -0
- imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +297 -0
- imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +121 -0
- imap_processing/cdf/config/shared/default_global_cdf_attrs_schema.yaml +246 -0
- imap_processing/cdf/config/shared/default_variable_cdf_attrs_schema.yaml +466 -0
- imap_processing/cdf/imap_cdf_manager.py +64 -0
- imap_processing/cdf/utils.py +147 -0
- imap_processing/cli.py +863 -0
- imap_processing/codice/__init__.py +1 -0
- imap_processing/codice/codice_l0.py +54 -0
- imap_processing/codice/codice_l1a.py +558 -0
- imap_processing/codice/codice_l1b.py +194 -0
- imap_processing/codice/constants.py +986 -0
- imap_processing/codice/data/esa_sweep_values.csv +257 -0
- imap_processing/codice/data/lo_stepping_values.csv +129 -0
- imap_processing/codice/decompress.py +142 -0
- imap_processing/codice/packet_definitions/P_COD_NHK.xml +618 -0
- imap_processing/codice/packet_definitions/codice_packet_definition.xml +5073 -0
- imap_processing/codice/utils.py +95 -0
- imap_processing/decom.py +40 -0
- imap_processing/glows/__init__.py +1 -0
- imap_processing/glows/ancillary/l1b_conversion_table_v001.json +42 -0
- imap_processing/glows/l0/__init__.py +0 -0
- imap_processing/glows/l0/decom_glows.py +91 -0
- imap_processing/glows/l0/glows_l0_data.py +194 -0
- imap_processing/glows/l1a/glows_l1a.py +424 -0
- imap_processing/glows/l1a/glows_l1a_data.py +555 -0
- imap_processing/glows/l1b/glows_l1b.py +270 -0
- imap_processing/glows/l1b/glows_l1b_data.py +583 -0
- imap_processing/glows/packet_definitions/GLX_COMBINED.xml +254 -0
- imap_processing/glows/packet_definitions/P_GLX_TMSCDE.xml +97 -0
- imap_processing/glows/packet_definitions/P_GLX_TMSCHIST.xml +215 -0
- imap_processing/glows/utils/__init__.py +0 -0
- imap_processing/glows/utils/constants.py +105 -0
- imap_processing/hi/__init__.py +1 -0
- imap_processing/hi/l0/__init__.py +0 -0
- imap_processing/hi/l0/decom_hi.py +24 -0
- imap_processing/hi/l1a/__init__.py +0 -0
- imap_processing/hi/l1a/hi_l1a.py +73 -0
- imap_processing/hi/l1a/histogram.py +142 -0
- imap_processing/hi/l1a/housekeeping.py +27 -0
- imap_processing/hi/l1a/science_direct_event.py +341 -0
- imap_processing/hi/l1b/__init__.py +0 -0
- imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +154 -0
- imap_processing/hi/l1b/hi_l1b.py +127 -0
- imap_processing/hi/l1c/__init__.py +0 -0
- imap_processing/hi/l1c/hi_l1c.py +228 -0
- imap_processing/hi/packet_definitions/__init__.py +0 -0
- imap_processing/hi/packet_definitions/hi_packet_definition.xml +482 -0
- imap_processing/hi/utils.py +27 -0
- imap_processing/hit/__init__.py +1 -0
- imap_processing/hit/l0/__init__.py +0 -0
- imap_processing/hit/l0/data_classes/housekeeping.py +240 -0
- imap_processing/hit/l0/data_classes/science_packet.py +259 -0
- imap_processing/hit/l0/decom_hit.py +467 -0
- imap_processing/hit/l0/utils/hit_base.py +57 -0
- imap_processing/hit/l1a/__init__.py +0 -0
- imap_processing/hit/l1a/hit_l1a.py +254 -0
- imap_processing/hit/l1b/hit_l1b.py +179 -0
- imap_processing/hit/packet_definitions/hit_packet_definitions.xml +1276 -0
- imap_processing/ialirt/__init__.py +0 -0
- imap_processing/ialirt/l0/__init__.py +0 -0
- imap_processing/ialirt/l0/process_hit.py +220 -0
- imap_processing/ialirt/packet_definitions/__init__.py +0 -0
- imap_processing/ialirt/packet_definitions/ialirt.xml +778 -0
- imap_processing/ialirt/packet_definitions/ialirt_hit.xml +186 -0
- imap_processing/idex/__init__.py +2 -0
- imap_processing/idex/idex_constants.py +27 -0
- imap_processing/idex/idex_l0.py +31 -0
- imap_processing/idex/idex_l1a.py +631 -0
- imap_processing/idex/packet_definitions/idex_packet_definition.xml +3162 -0
- imap_processing/lo/__init__.py +1 -0
- imap_processing/lo/l0/__init__.py +0 -0
- imap_processing/lo/l0/data_classes/science_direct_events.py +215 -0
- imap_processing/lo/l0/data_classes/star_sensor.py +98 -0
- imap_processing/lo/l0/decompression_tables/12_to_16_bit.csv +4097 -0
- imap_processing/lo/l0/decompression_tables/8_to_12_bit.csv +257 -0
- imap_processing/lo/l0/decompression_tables/8_to_16_bit.csv +257 -0
- imap_processing/lo/l0/decompression_tables/decompression_tables.py +75 -0
- imap_processing/lo/l0/lo_apid.py +15 -0
- imap_processing/lo/l0/lo_science.py +150 -0
- imap_processing/lo/l0/utils/binary_string.py +59 -0
- imap_processing/lo/l0/utils/bit_decompression.py +62 -0
- imap_processing/lo/l0/utils/lo_base.py +57 -0
- imap_processing/lo/l1a/__init__.py +0 -0
- imap_processing/lo/l1a/lo_l1a.py +157 -0
- imap_processing/lo/l1b/lo_l1b.py +160 -0
- imap_processing/lo/l1c/lo_l1c.py +180 -0
- imap_processing/lo/packet_definitions/lo_xtce.xml +3541 -0
- imap_processing/mag/__init__.py +2 -0
- imap_processing/mag/constants.py +108 -0
- imap_processing/mag/l0/decom_mag.py +170 -0
- imap_processing/mag/l0/mag_l0_data.py +118 -0
- imap_processing/mag/l1a/mag_l1a.py +317 -0
- imap_processing/mag/l1a/mag_l1a_data.py +1007 -0
- imap_processing/mag/l1b/__init__.py +0 -0
- imap_processing/mag/l1b/imap_calibration_mag_20240229_v01.cdf +0 -0
- imap_processing/mag/l1b/mag_l1b.py +125 -0
- imap_processing/mag/l1c/mag_l1c.py +57 -0
- imap_processing/mag/packet_definitions/MAG_SCI_COMBINED.xml +235 -0
- imap_processing/quality_flags.py +91 -0
- imap_processing/spice/__init__.py +1 -0
- imap_processing/spice/geometry.py +322 -0
- imap_processing/spice/kernels.py +459 -0
- imap_processing/spice/time.py +72 -0
- imap_processing/swapi/__init__.py +1 -0
- imap_processing/swapi/l1/__init__.py +0 -0
- imap_processing/swapi/l1/swapi_l1.py +685 -0
- imap_processing/swapi/l2/__init__.py +0 -0
- imap_processing/swapi/l2/swapi_l2.py +107 -0
- imap_processing/swapi/packet_definitions/__init__.py +0 -0
- imap_processing/swapi/packet_definitions/swapi_packet_definition.xml +708 -0
- imap_processing/swapi/swapi_utils.py +25 -0
- imap_processing/swe/__init__.py +1 -0
- imap_processing/swe/l1a/__init__.py +0 -0
- imap_processing/swe/l1a/swe_l1a.py +48 -0
- imap_processing/swe/l1a/swe_science.py +223 -0
- imap_processing/swe/l1b/engineering_unit_convert_table.csv +65 -0
- imap_processing/swe/l1b/swe_esa_lookup_table.csv +1441 -0
- imap_processing/swe/l1b/swe_l1b.py +49 -0
- imap_processing/swe/l1b/swe_l1b_science.py +557 -0
- imap_processing/swe/packet_definitions/__init__.py +0 -0
- imap_processing/swe/packet_definitions/swe_packet_definition.xml +303 -0
- imap_processing/swe/utils/__init__.py +0 -0
- imap_processing/swe/utils/swe_utils.py +9 -0
- imap_processing/tests/__init__.py +0 -0
- imap_processing/tests/ccsds/test_data/expected_output.xml +171 -0
- imap_processing/tests/ccsds/test_excel_to_xtce.py +285 -0
- imap_processing/tests/cdf/__init__.py +0 -0
- imap_processing/tests/cdf/imap_default_global_cdf_attrs.yaml +8 -0
- imap_processing/tests/cdf/shared/default_global_cdf_attrs_schema.yaml +246 -0
- imap_processing/tests/cdf/shared/default_variable_cdf_attrs_schema.yaml +466 -0
- imap_processing/tests/cdf/test_cdf_attribute_manager.py +353 -0
- imap_processing/tests/cdf/test_data/imap_default_global_test_cdf_attrs.yaml +7 -0
- imap_processing/tests/cdf/test_data/imap_instrument1_global_cdf_attrs.yaml +14 -0
- imap_processing/tests/cdf/test_data/imap_instrument1_level1_variable_attrs.yaml +23 -0
- imap_processing/tests/cdf/test_data/imap_instrument2_global_cdf_attrs.yaml +23 -0
- imap_processing/tests/cdf/test_data/imap_instrument2_level2_variable_attrs.yaml +30 -0
- imap_processing/tests/cdf/test_data/imap_test_global.yaml +26 -0
- imap_processing/tests/cdf/test_data/imap_test_variable.yaml +41 -0
- imap_processing/tests/cdf/test_imap_cdf_manager.py +62 -0
- imap_processing/tests/cdf/test_utils.py +109 -0
- imap_processing/tests/codice/__init__.py +0 -0
- imap_processing/tests/codice/conftest.py +56 -0
- imap_processing/tests/codice/data/eu_unit_lookup_table.csv +101 -0
- imap_processing/tests/codice/data/idle_export_eu.COD_NHK_20230822_122700 2.csv +100 -0
- imap_processing/tests/codice/data/idle_export_raw.COD_NHK_20230822_122700.csv +100 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-counters-aggregated_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-counters-singles_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-omni_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-pha_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hi-sectored_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_hskp_20100101_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-counters-aggregated_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-counters-singles_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-angular_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-priority_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-species_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-pha_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-sw-angular_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-sw-priority_20240429_v001.pkts +0 -0
- imap_processing/tests/codice/data/imap_codice_l0_lo-sw-species_20240429_v001.pkts +0 -0
- imap_processing/tests/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/codice/test_codice_l0.py +144 -0
- imap_processing/tests/codice/test_codice_l1a.py +187 -0
- imap_processing/tests/codice/test_codice_l1b.py +60 -0
- imap_processing/tests/codice/test_decompress.py +50 -0
- imap_processing/tests/conftest.py +372 -0
- imap_processing/tests/glows/direct_events_validation_data_l1a.csv +5704 -0
- imap_processing/tests/glows/glows_test_packet_20110921_v01.pkts +0 -0
- imap_processing/tests/glows/test_glows_decom.py +133 -0
- imap_processing/tests/glows/test_glows_l1a_cdf.py +85 -0
- imap_processing/tests/glows/test_glows_l1a_data.py +510 -0
- imap_processing/tests/glows/test_glows_l1b.py +348 -0
- imap_processing/tests/glows/test_glows_l1b_data.py +70 -0
- imap_processing/tests/hi/__init__.py +0 -0
- imap_processing/tests/hi/conftest.py +133 -0
- imap_processing/tests/hi/test_data/l0/20231030_H45_APP_NHK.bin +0 -0
- imap_processing/tests/hi/test_data/l0/20231030_H45_APP_NHK.csv +201 -0
- imap_processing/tests/hi/test_data/l0/20231030_H45_SCI_CNT.bin +0 -0
- imap_processing/tests/hi/test_data/l0/20231030_H45_SCI_DE.bin +0 -0
- imap_processing/tests/hi/test_data/l0/README.txt +54 -0
- imap_processing/tests/hi/test_decom.py +55 -0
- imap_processing/tests/hi/test_hi_l1b.py +31 -0
- imap_processing/tests/hi/test_hi_l1c.py +69 -0
- imap_processing/tests/hi/test_l1a.py +96 -0
- imap_processing/tests/hi/test_l1a_sci_de.py +72 -0
- imap_processing/tests/hi/test_utils.py +15 -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/__init__.py +0 -0
- imap_processing/tests/hit/test_data/imap_hit_l0_hk_20100105_v001.pkts +0 -0
- imap_processing/tests/hit/test_data/sci_sample.ccsds +0 -0
- imap_processing/tests/hit/test_hit_decom.py +230 -0
- imap_processing/tests/hit/test_hit_l1a.py +224 -0
- imap_processing/tests/hit/test_hit_l1b.py +52 -0
- imap_processing/tests/hit/validation_data/hskp_sample_raw.csv +88 -0
- imap_processing/tests/ialirt/__init__.py +0 -0
- imap_processing/tests/ialirt/test_data/l0/IALiRT Raw Packet Telemetry.txt +33 -0
- imap_processing/tests/ialirt/test_data/l0/hit_ialirt_sample.ccsds +0 -0
- imap_processing/tests/ialirt/test_data/l0/hit_ialirt_sample.csv +1001 -0
- imap_processing/tests/ialirt/unit/__init__.py +0 -0
- imap_processing/tests/ialirt/unit/test_decom_ialirt.py +94 -0
- imap_processing/tests/ialirt/unit/test_process_hit.py +226 -0
- imap_processing/tests/idex/__init__.py +0 -0
- imap_processing/tests/idex/conftest.py +22 -0
- imap_processing/tests/idex/imap_idex_l0_raw_20230725_v001.pkts +0 -0
- imap_processing/tests/idex/impact_14_tof_high_data.txt +8189 -0
- imap_processing/tests/idex/test_idex_l0.py +45 -0
- imap_processing/tests/idex/test_idex_l1a.py +91 -0
- imap_processing/tests/lo/__init__.py +0 -0
- imap_processing/tests/lo/test_binary_string.py +21 -0
- imap_processing/tests/lo/test_bit_decompression.py +39 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l0_raw_20240627_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/lo/test_cdfs/imap_lo_l1b_de_20100101_v001.cdf +0 -0
- imap_processing/tests/lo/test_lo_l1a.py +66 -0
- imap_processing/tests/lo/test_lo_l1b.py +74 -0
- imap_processing/tests/lo/test_lo_l1c.py +66 -0
- imap_processing/tests/lo/test_science_counts.py +41 -0
- imap_processing/tests/lo/test_science_direct_events.py +209 -0
- imap_processing/tests/lo/test_star_sensor.py +35 -0
- imap_processing/tests/mag/imap_mag_l1a_burst-magi_20231025_v001.cdf +0 -0
- imap_processing/tests/mag/mag_l0_test_data.pkts +0 -0
- imap_processing/tests/mag/mag_l0_test_output.csv +37 -0
- imap_processing/tests/mag/mag_l1_test_data.pkts +0 -0
- imap_processing/tests/mag/mag_l1a_test_output.csv +97 -0
- imap_processing/tests/mag/test_mag_decom.py +117 -0
- imap_processing/tests/mag/test_mag_l1a.py +856 -0
- imap_processing/tests/mag/test_mag_l1b.py +77 -0
- imap_processing/tests/mag/test_mag_l1c.py +40 -0
- imap_processing/tests/spice/__init__.py +0 -0
- imap_processing/tests/spice/test_data/imap_ena_sim_metakernel.template +4 -0
- imap_processing/tests/spice/test_data/imap_science_0001.tf +171 -0
- imap_processing/tests/spice/test_data/imap_sclk_0000.tsc +156 -0
- imap_processing/tests/spice/test_data/imap_sim_ck_2hr_2secsampling_with_nutation.bc +0 -0
- imap_processing/tests/spice/test_data/imap_simple_metakernel.template +3 -0
- imap_processing/tests/spice/test_data/imap_spk_demo.bsp +0 -0
- imap_processing/tests/spice/test_data/imap_wkcp.tf +1806 -0
- imap_processing/tests/spice/test_data/naif0012.tls +150 -0
- imap_processing/tests/spice/test_data/sim_1yr_imap_attitude.bc +0 -0
- imap_processing/tests/spice/test_data/sim_1yr_imap_pointing_frame.bc +0 -0
- imap_processing/tests/spice/test_geometry.py +214 -0
- imap_processing/tests/spice/test_kernels.py +272 -0
- imap_processing/tests/spice/test_time.py +35 -0
- imap_processing/tests/swapi/__init__.py +0 -0
- imap_processing/tests/swapi/conftest.py +16 -0
- imap_processing/tests/swapi/l0_data/__init__.py +0 -0
- imap_processing/tests/swapi/l0_data/imap_swapi_l0_raw_20231012_v001.pkts +0 -0
- imap_processing/tests/swapi/l0_validation_data/__init__.py +0 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_AUT_20231012_125245.csv +124 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_HK_20231012_125245.csv +98 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_MG_20231012_125245.csv +9 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_SCI_20231012_125245.csv +72 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_AUT_20231012_125245.csv +124 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_HK_20231012_125245.csv +98 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_MG_20231012_125245.csv +9 -0
- imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_SCI_20231012_125245.csv +72 -0
- imap_processing/tests/swapi/test_swapi_decom.py +135 -0
- imap_processing/tests/swapi/test_swapi_l1.py +354 -0
- imap_processing/tests/swapi/test_swapi_l2.py +21 -0
- imap_processing/tests/swe/__init__.py +0 -0
- imap_processing/tests/swe/conftest.py +35 -0
- imap_processing/tests/swe/decompressed/20230927173238_4th_quarter_decompressed.csv +181 -0
- imap_processing/tests/swe/decompressed/20230927173253_1st_quarter_decompressed.csv +181 -0
- imap_processing/tests/swe/decompressed/20230927173308_2nd_quarter_decompressed.csv +181 -0
- imap_processing/tests/swe/decompressed/20230927173323_3rd_quarter_decompressed.csv +181 -0
- imap_processing/tests/swe/l0_data/2024051010_SWE_SCIENCE_packet.bin +0 -0
- imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_SCIENCE_20240510_092742.csv +544 -0
- imap_processing/tests/swe/l0_validation_data/idle_export_raw.SWE_SCIENCE_20240510_092742.csv +363 -0
- imap_processing/tests/swe/test_swe_l1a.py +12 -0
- imap_processing/tests/swe/test_swe_l1a_science.py +129 -0
- imap_processing/tests/swe/test_swe_l1b.py +61 -0
- imap_processing/tests/swe/test_swe_l1b_science.py +65 -0
- imap_processing/tests/test_cli.py +229 -0
- imap_processing/tests/test_decom.py +66 -0
- imap_processing/tests/test_quality_flags.py +71 -0
- imap_processing/tests/test_utils.py +107 -0
- imap_processing/tests/ultra/__init__.py +0 -0
- imap_processing/tests/ultra/test_data/l0/FM45_40P_Phi28p5_BeamCal_LinearScan_phi28.50_theta-0.00_20240207T102740.CCSDS +0 -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/tests/ultra/test_data/l0/FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS +0 -0
- imap_processing/tests/ultra/test_data/l0/Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS +0 -0
- imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +24 -0
- imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_enaphxtofhangimg_FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.csv +105 -0
- imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultraimgrates_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +24 -0
- imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultrarawimg_withFSWcalcs_FM45_40P_Phi28p5_BeamCal_LinearScan_phi2850_theta-000_20240207T102740.csv +3314 -0
- imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultrarawimgevent_FM45_7P_Phi00_BeamCal_LinearScan_phi004_theta-001_20230821T121304.csv +702 -0
- imap_processing/tests/ultra/unit/__init__.py +0 -0
- imap_processing/tests/ultra/unit/conftest.py +210 -0
- imap_processing/tests/ultra/unit/test_decom_apid_880.py +98 -0
- imap_processing/tests/ultra/unit/test_decom_apid_881.py +50 -0
- imap_processing/tests/ultra/unit/test_decom_apid_883.py +44 -0
- imap_processing/tests/ultra/unit/test_decom_apid_896.py +104 -0
- imap_processing/tests/ultra/unit/test_lookup_utils.py +68 -0
- imap_processing/tests/ultra/unit/test_ultra_l1a.py +338 -0
- imap_processing/tests/ultra/unit/test_ultra_l1b.py +122 -0
- imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +57 -0
- imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +342 -0
- imap_processing/tests/ultra/unit/test_ultra_l1c.py +104 -0
- imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +35 -0
- imap_processing/ultra/__init__.py +1 -0
- imap_processing/ultra/constants.py +60 -0
- imap_processing/ultra/l0/__init__.py +0 -0
- imap_processing/ultra/l0/decom_tools.py +281 -0
- imap_processing/ultra/l0/decom_ultra.py +278 -0
- imap_processing/ultra/l0/ultra_utils.py +326 -0
- imap_processing/ultra/l1a/__init__.py +0 -0
- imap_processing/ultra/l1a/ultra_l1a.py +319 -0
- imap_processing/ultra/l1b/badtimes.py +26 -0
- imap_processing/ultra/l1b/cullingmask.py +26 -0
- imap_processing/ultra/l1b/de.py +59 -0
- imap_processing/ultra/l1b/extendedspin.py +45 -0
- imap_processing/ultra/l1b/lookup_utils.py +165 -0
- imap_processing/ultra/l1b/ultra_l1b.py +65 -0
- imap_processing/ultra/l1b/ultra_l1b_annotated.py +54 -0
- imap_processing/ultra/l1b/ultra_l1b_extended.py +764 -0
- imap_processing/ultra/l1c/histogram.py +36 -0
- imap_processing/ultra/l1c/pset.py +36 -0
- imap_processing/ultra/l1c/ultra_l1c.py +52 -0
- imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +54 -0
- imap_processing/ultra/lookup_tables/EgyNorm.mem.csv +32769 -0
- imap_processing/ultra/lookup_tables/FM45_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -0
- imap_processing/ultra/lookup_tables/ultra45_back-pos-luts.csv +4097 -0
- imap_processing/ultra/lookup_tables/ultra45_tdc_norm.csv +2050 -0
- imap_processing/ultra/lookup_tables/ultra90_back-pos-luts.csv +4097 -0
- imap_processing/ultra/lookup_tables/ultra90_tdc_norm.csv +2050 -0
- imap_processing/ultra/lookup_tables/yadjust.csv +257 -0
- imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +547 -0
- imap_processing/ultra/packet_definitions/__init__.py +0 -0
- imap_processing/ultra/utils/__init__.py +0 -0
- imap_processing/ultra/utils/ultra_l1_utils.py +50 -0
- imap_processing/utils.py +413 -0
- imap_processing-0.6.0.dist-info/LICENSE +21 -0
- imap_processing-0.6.0.dist-info/METADATA +107 -0
- imap_processing-0.6.0.dist-info/RECORD +398 -0
- imap_processing-0.6.0.dist-info/WHEEL +4 -0
- imap_processing-0.6.0.dist-info/entry_points.txt +4 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "001"
|
|
File without changes
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"""L1A Science Direct Events data class."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
from space_packet_parser.parser import Packet
|
|
7
|
+
|
|
8
|
+
from imap_processing.ccsds.ccsds_data import CcsdsData
|
|
9
|
+
from imap_processing.lo.l0.decompression_tables.decompression_tables import (
|
|
10
|
+
CASE_DECODER,
|
|
11
|
+
DATA_BITS,
|
|
12
|
+
DE_BIT_SHIFT,
|
|
13
|
+
)
|
|
14
|
+
from imap_processing.lo.l0.utils.binary_string import BinaryString
|
|
15
|
+
from imap_processing.lo.l0.utils.lo_base import LoBase
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class ScienceDirectEvents(LoBase):
|
|
20
|
+
"""
|
|
21
|
+
L1A Science Direct Events data.
|
|
22
|
+
|
|
23
|
+
The Science Direct Events class handles the parsing and
|
|
24
|
+
decompression of L0 to L1A data.
|
|
25
|
+
|
|
26
|
+
The TOF data in the binary is in the following order:
|
|
27
|
+
ABSENT, TIME, ENERGY, MODE, TOF0, TOF1, TOF2, TOF3, CKSM, POS
|
|
28
|
+
|
|
29
|
+
ABSENT, TIME, ENERGY, and MODE will be present for every type of DE.
|
|
30
|
+
|
|
31
|
+
ABSENT: signals the case number for the DE (4 bits).
|
|
32
|
+
TIME: the time of the DE (12 bits).
|
|
33
|
+
ENERGY: Energy step (3 bits).
|
|
34
|
+
MODE: Signals how the data is packed. If MODE is 1, then the TOF1
|
|
35
|
+
(for case 1a) will need to be calculated using the checksum and other TOFs
|
|
36
|
+
in the L1B data product.
|
|
37
|
+
If MODE is 0, then there was no compression and all TOFs are transmitted.
|
|
38
|
+
|
|
39
|
+
The presence of TOF0, TOF1, TOF2, TOF3, CKSM, and POS depend on the
|
|
40
|
+
case number.
|
|
41
|
+
|
|
42
|
+
- Case 0 can either be a gold or silver triple. Gold triples do
|
|
43
|
+
not send down the TOF1 value and instead recover the TOF1 value
|
|
44
|
+
on the ground using the decompressed checksum.
|
|
45
|
+
|
|
46
|
+
- Cases 4, 6, 10, 12, 13 may be Bronze. If it's not a bronze,
|
|
47
|
+
the Position is not transmitted, but TOF3 is. If it is bronze, the table
|
|
48
|
+
should be used as is. If it's not bronze, position was not transmitted,
|
|
49
|
+
but TOF3 was transmitted.
|
|
50
|
+
|
|
51
|
+
- Cases 1, 2, 3, 5, 7, 9, 13 will always have a MODE of 0, so the same
|
|
52
|
+
fields will always be transmitted.
|
|
53
|
+
|
|
54
|
+
Bit Shifting:
|
|
55
|
+
TOF0, TOF1, TOF2, TOF3, and CKSM all must be shifted by one bit to the
|
|
56
|
+
left. All other fields do not need to be bit shifted.
|
|
57
|
+
|
|
58
|
+
The raw values are computed for L1A and will be converted to
|
|
59
|
+
engineering units in L1B.
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
packet : dict
|
|
64
|
+
Single packet from space_packet_parser.
|
|
65
|
+
software_version : str
|
|
66
|
+
Current version of IMAP-Lo processing.
|
|
67
|
+
packet_file_name : str
|
|
68
|
+
Name of the CCSDS file where the packet originated.
|
|
69
|
+
|
|
70
|
+
Attributes
|
|
71
|
+
----------
|
|
72
|
+
SHCOARSE : int
|
|
73
|
+
Spacecraft time.
|
|
74
|
+
DE_COUNT: int
|
|
75
|
+
Number of direct events.
|
|
76
|
+
DATA: str
|
|
77
|
+
Compressed TOF Direct Event time tagged data.
|
|
78
|
+
DE_TIME: numpy.ndarray
|
|
79
|
+
Time tag for the direct event.
|
|
80
|
+
ESA_STEP: numpy.ndarray
|
|
81
|
+
Energy of the direct event ENA.
|
|
82
|
+
MODE: numpy.ndarray
|
|
83
|
+
Indication of how the data is packed.
|
|
84
|
+
TOF0: numpy.ndarray
|
|
85
|
+
Time of Flight 0 value for direct event.
|
|
86
|
+
TOF1: numpy.ndarray
|
|
87
|
+
Time of Flight 1 value for direct event.
|
|
88
|
+
TOF2: numpy.ndarray
|
|
89
|
+
Time of Flight 2 value for direct event.
|
|
90
|
+
TOF3: numpy.ndarray
|
|
91
|
+
Time of Flight 3 value for direct event.
|
|
92
|
+
CKSM: numpy.ndarray
|
|
93
|
+
This is checksum defined relative to the TOFs
|
|
94
|
+
condition for golden triples. If golden triples are below
|
|
95
|
+
a certain threshold in checksum it's considered golden, otherwise,
|
|
96
|
+
it's considered a silver triple. This is important for the compression
|
|
97
|
+
for golden triples because it's used to recover TOF1 because
|
|
98
|
+
compression scheme to save space on golden triples doesn't send
|
|
99
|
+
down TOF1 so it's recovered on the ground using the checksum.
|
|
100
|
+
POS: numpy.ndarray
|
|
101
|
+
Stop position for the direct event. There are 4 quadrants
|
|
102
|
+
on the at the stop position.
|
|
103
|
+
|
|
104
|
+
Methods
|
|
105
|
+
-------
|
|
106
|
+
__init__(packet, software_vesion, packet_file_name):
|
|
107
|
+
Uses the CCSDS packet, version of the software, and
|
|
108
|
+
the name of the packet file to parse and store information about
|
|
109
|
+
the Direct Event packet data.
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
SHCOARSE: int
|
|
113
|
+
DE_COUNT: int
|
|
114
|
+
DATA: str
|
|
115
|
+
DE_TIME: np.ndarray
|
|
116
|
+
ESA_STEP: np.ndarray
|
|
117
|
+
MODE: np.ndarray
|
|
118
|
+
TOF0: np.ndarray
|
|
119
|
+
TOF1: np.ndarray
|
|
120
|
+
TOF2: np.ndarray
|
|
121
|
+
TOF3: np.ndarray
|
|
122
|
+
CKSM: np.ndarray
|
|
123
|
+
POS: np.ndarray
|
|
124
|
+
|
|
125
|
+
def __init__(
|
|
126
|
+
self,
|
|
127
|
+
packet: Packet,
|
|
128
|
+
software_version: str,
|
|
129
|
+
packet_file_name: str,
|
|
130
|
+
) -> None:
|
|
131
|
+
"""
|
|
132
|
+
Initialize Science Direct Events Data class.
|
|
133
|
+
|
|
134
|
+
Parameters
|
|
135
|
+
----------
|
|
136
|
+
packet : space_packet_parser.parser.Packet
|
|
137
|
+
Single packet from space_packet_parser.
|
|
138
|
+
software_version : str
|
|
139
|
+
Current version of IMAP-Lo processing.
|
|
140
|
+
packet_file_name : str
|
|
141
|
+
Name of the CCSDS file where the packet originated.
|
|
142
|
+
"""
|
|
143
|
+
super().__init__(software_version, packet_file_name, CcsdsData(packet.header))
|
|
144
|
+
self.set_attributes(packet)
|
|
145
|
+
# TOF values are not transmitted for certain
|
|
146
|
+
# cases, so these can be initialized to the
|
|
147
|
+
# CDF fill val and stored with this value for
|
|
148
|
+
# those cases.
|
|
149
|
+
self.DE_TIME = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
150
|
+
self.ESA_STEP = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
151
|
+
self.MODE = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
152
|
+
self.TOF0 = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
153
|
+
self.TOF1 = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
154
|
+
self.TOF2 = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
155
|
+
self.TOF3 = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
156
|
+
self.CKSM = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
157
|
+
self.POS = np.ones(self.DE_COUNT) * np.float64(-1.0e31)
|
|
158
|
+
self._decompress_data()
|
|
159
|
+
|
|
160
|
+
def _decompress_data(self) -> None:
|
|
161
|
+
"""
|
|
162
|
+
Will decompress the Lo Science Direct Events data.
|
|
163
|
+
|
|
164
|
+
TOF data is decompressed and the direct event data class
|
|
165
|
+
attributes are set.
|
|
166
|
+
"""
|
|
167
|
+
data = BinaryString(self.DATA)
|
|
168
|
+
for de_idx in range(self.DE_COUNT):
|
|
169
|
+
# The first 4 bits of the binary data are used to
|
|
170
|
+
# determine which case number we are working with.
|
|
171
|
+
# The case number is used to determine how to
|
|
172
|
+
# decompress the TOF values.
|
|
173
|
+
case_number = int(data.next_bits(4), 2)
|
|
174
|
+
|
|
175
|
+
# time, ESA_STEP, and mode are always transmitted.
|
|
176
|
+
self.DE_TIME[de_idx] = int(data.next_bits(DATA_BITS.DE_TIME), 2)
|
|
177
|
+
self.ESA_STEP[de_idx] = int(data.next_bits(DATA_BITS.ESA_STEP), 2)
|
|
178
|
+
self.MODE[de_idx] = int(data.next_bits(DATA_BITS.MODE), 2)
|
|
179
|
+
|
|
180
|
+
# Case decoder indicates which parts of the data
|
|
181
|
+
# are transmitted for each case.
|
|
182
|
+
case_decoder = CASE_DECODER[(case_number, self.MODE[de_idx])] # type: ignore[index]
|
|
183
|
+
# Todo Mypy Error: Invalid index type "tuple[int, ndarray[Any, Any]]" for
|
|
184
|
+
# "dict[tuple[int, int], TOFFields]"; expected type "tuple[int, int]"
|
|
185
|
+
|
|
186
|
+
# Check the case decoder to see if the TOF field was
|
|
187
|
+
# transmitted for this case. Then grab the bits from
|
|
188
|
+
# the binary turn these into an integer, and perform
|
|
189
|
+
# a bit shift to the left on that integer value. The
|
|
190
|
+
# data was packed using a right bit shift (1 bit), so
|
|
191
|
+
# needs to be bit shifted to the left (1 bit) during
|
|
192
|
+
# unpacking.
|
|
193
|
+
if case_decoder.TOF0:
|
|
194
|
+
self.TOF0[de_idx] = (
|
|
195
|
+
int(data.next_bits(DATA_BITS.TOF0), 2) << DE_BIT_SHIFT
|
|
196
|
+
)
|
|
197
|
+
if case_decoder.TOF1:
|
|
198
|
+
self.TOF1[de_idx] = (
|
|
199
|
+
int(data.next_bits(DATA_BITS.TOF1), 2) << DE_BIT_SHIFT
|
|
200
|
+
)
|
|
201
|
+
if case_decoder.TOF2:
|
|
202
|
+
self.TOF2[de_idx] = (
|
|
203
|
+
int(data.next_bits(DATA_BITS.TOF2), 2) << DE_BIT_SHIFT
|
|
204
|
+
)
|
|
205
|
+
if case_decoder.TOF3:
|
|
206
|
+
self.TOF3[de_idx] = (
|
|
207
|
+
int(data.next_bits(DATA_BITS.TOF3), 2) << DE_BIT_SHIFT
|
|
208
|
+
)
|
|
209
|
+
if case_decoder.CKSM:
|
|
210
|
+
self.CKSM[de_idx] = (
|
|
211
|
+
int(data.next_bits(DATA_BITS.CKSM), 2) << DE_BIT_SHIFT
|
|
212
|
+
)
|
|
213
|
+
if case_decoder.POS:
|
|
214
|
+
# no bit shift for POS
|
|
215
|
+
self.POS[de_idx] = int(data.next_bits(DATA_BITS.POS), 2)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""L1A Star Sensor data class."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
import space_packet_parser
|
|
7
|
+
|
|
8
|
+
from imap_processing.ccsds.ccsds_data import CcsdsData
|
|
9
|
+
from imap_processing.lo.l0.utils.binary_string import BinaryString
|
|
10
|
+
from imap_processing.lo.l0.utils.bit_decompression import (
|
|
11
|
+
DECOMPRESSION_TABLES,
|
|
12
|
+
Decompress,
|
|
13
|
+
decompress_int,
|
|
14
|
+
)
|
|
15
|
+
from imap_processing.lo.l0.utils.lo_base import LoBase
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class StarSensor(LoBase):
|
|
20
|
+
"""
|
|
21
|
+
L1A Star Sensor data class.
|
|
22
|
+
|
|
23
|
+
The Start Sensor class handles the parsing
|
|
24
|
+
and decompression of L0 to L1A data.
|
|
25
|
+
|
|
26
|
+
Parameters
|
|
27
|
+
----------
|
|
28
|
+
packet : space_packet_parser.parser.Packet
|
|
29
|
+
The packet.
|
|
30
|
+
software_version : str
|
|
31
|
+
Software version.
|
|
32
|
+
packet_file_name : str
|
|
33
|
+
Name of packet file.
|
|
34
|
+
|
|
35
|
+
Attributes
|
|
36
|
+
----------
|
|
37
|
+
SHCOARSE : int
|
|
38
|
+
Spacecraft time.
|
|
39
|
+
COUNT : int
|
|
40
|
+
Number of star sensor samples.
|
|
41
|
+
DATA_COMPRESSED : str
|
|
42
|
+
Star sensor compressed binary data.
|
|
43
|
+
DATA : list(int)
|
|
44
|
+
Decompressed star sensor data list.
|
|
45
|
+
|
|
46
|
+
Methods
|
|
47
|
+
-------
|
|
48
|
+
__init__(packet, software_vesion, packet_file_name):
|
|
49
|
+
Uses the CCSDS packet, version of the software, and
|
|
50
|
+
the name of the packet file to parse and store data for
|
|
51
|
+
the Star Sensor packet.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
SHCOARSE: int
|
|
55
|
+
COUNT: int
|
|
56
|
+
DATA_COMPRESSED: str
|
|
57
|
+
DATA: np.ndarray
|
|
58
|
+
|
|
59
|
+
# TODO: Because test data does not currently exist, the init function contents
|
|
60
|
+
# must be commented out for the unit tests to run properly
|
|
61
|
+
def __init__(
|
|
62
|
+
self,
|
|
63
|
+
packet: space_packet_parser.parser.Packet,
|
|
64
|
+
software_version: str,
|
|
65
|
+
packet_file_name: str,
|
|
66
|
+
) -> None:
|
|
67
|
+
super().__init__(software_version, packet_file_name, CcsdsData(packet.header))
|
|
68
|
+
self.set_attributes(packet)
|
|
69
|
+
self._decompress_data()
|
|
70
|
+
|
|
71
|
+
def _decompress_data(self) -> None:
|
|
72
|
+
"""
|
|
73
|
+
Will decompress the Star Sensor packet data.
|
|
74
|
+
|
|
75
|
+
The Star packet data is read in as one large binary chunk
|
|
76
|
+
in the XTCE, but contains multiple data fields where each data field
|
|
77
|
+
is compressed to 8 bits. The data fields need to be extracted from
|
|
78
|
+
binary, decompressed, and stored in a list.
|
|
79
|
+
"""
|
|
80
|
+
# Star Sensor data fields have a bit length of 8.
|
|
81
|
+
# See Telem definition sheet for more information.
|
|
82
|
+
bit_length = 8
|
|
83
|
+
|
|
84
|
+
# make a bit stream containing the binary for the entire
|
|
85
|
+
# chunk of Star packet data
|
|
86
|
+
data_list = list()
|
|
87
|
+
binary_string = BinaryString(self.DATA_COMPRESSED)
|
|
88
|
+
while binary_string.bit_pos < len(binary_string.bin):
|
|
89
|
+
# Extract the 8 bit long field from the binary chunk and get the integer
|
|
90
|
+
extracted_integer = int(binary_string.next_bits(bit_length), 2)
|
|
91
|
+
# The Star Sensor packet uses a 12 to 8 bit compression
|
|
92
|
+
decompressed_integer = decompress_int(
|
|
93
|
+
[extracted_integer], Decompress.DECOMPRESS8TO12, DECOMPRESSION_TABLES
|
|
94
|
+
)
|
|
95
|
+
# TODO: Need to update this to work with decompress_int outputting
|
|
96
|
+
# a list of ints. Remove function from loop during refactor
|
|
97
|
+
data_list.append(decompressed_integer[0])
|
|
98
|
+
self.DATA = np.array(data_list)
|