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,95 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Various classes and functions used throughout CoDICE processing.
|
|
3
|
+
|
|
4
|
+
This module contains utility classes and functions that are used by various
|
|
5
|
+
other CoDICE processing modules.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from enum import IntEnum
|
|
9
|
+
|
|
10
|
+
import space_packet_parser
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CODICEAPID(IntEnum):
|
|
14
|
+
"""Create ENUM for CoDICE APIDs."""
|
|
15
|
+
|
|
16
|
+
COD_AUT = 1120
|
|
17
|
+
COD_BOOT_HK = 1121
|
|
18
|
+
COD_BOOT_MEMDMP = 1122
|
|
19
|
+
COD_COUNTS_COMMON = 1135
|
|
20
|
+
COD_NHK = 1136
|
|
21
|
+
COD_EVTMSG = 1137
|
|
22
|
+
COD_MEMDMP = 1138
|
|
23
|
+
COD_SHK = 1139
|
|
24
|
+
COD_RTS = 1141
|
|
25
|
+
COD_DIAG_CDHFPGA = 1144
|
|
26
|
+
COD_DIAG_SNSR_HV = 1145
|
|
27
|
+
COD_DIAG_OPTC_HV = 1146
|
|
28
|
+
COD_DIAG_APDFPGA = 1147
|
|
29
|
+
COD_DIAG_SSDFPGA = 1148
|
|
30
|
+
COD_DIAG_FSW = 1149
|
|
31
|
+
COD_DIAG_SYSVARS = 1150
|
|
32
|
+
COD_LO_IAL = 1152
|
|
33
|
+
COD_LO_PHA = 1153
|
|
34
|
+
COD_LO_SW_PRIORITY_COUNTS = 1155
|
|
35
|
+
COD_LO_SW_SPECIES_COUNTS = 1156
|
|
36
|
+
COD_LO_NSW_SPECIES_COUNTS = 1157
|
|
37
|
+
COD_LO_SW_ANGULAR_COUNTS = 1158
|
|
38
|
+
COD_LO_NSW_ANGULAR_COUNTS = 1159
|
|
39
|
+
COD_LO_NSW_PRIORITY_COUNTS = 1160
|
|
40
|
+
COD_LO_INST_COUNTS_AGGREGATED = 1161
|
|
41
|
+
COD_LO_INST_COUNTS_SINGLES = 1162
|
|
42
|
+
COD_HI_IAL = 1168
|
|
43
|
+
COD_HI_PHA = 1169
|
|
44
|
+
COD_HI_INST_COUNTS_AGGREGATED = 1170
|
|
45
|
+
COD_HI_INST_COUNTS_SINGLES = 1171
|
|
46
|
+
COD_HI_OMNI_SPECIES_COUNTS = 1172
|
|
47
|
+
COD_HI_SECT_SPECIES_COUNTS = 1173
|
|
48
|
+
COD_CSTOL_CONFIG = 2457
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class CoDICECompression(IntEnum):
|
|
52
|
+
"""Create ENUM for CoDICE compression algorithms."""
|
|
53
|
+
|
|
54
|
+
NO_COMPRESSION = 0
|
|
55
|
+
LOSSY_A = 1
|
|
56
|
+
LOSSY_B = 2
|
|
57
|
+
LOSSLESS = 3
|
|
58
|
+
LOSSY_A_LOSSLESS = 4
|
|
59
|
+
LOSSY_B_LOSSLESS = 5
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def add_metadata_to_array(packet: space_packet_parser, metadata_arrays: dict) -> dict:
|
|
63
|
+
"""
|
|
64
|
+
Add metadata to the metadata_arrays.
|
|
65
|
+
|
|
66
|
+
Parameters
|
|
67
|
+
----------
|
|
68
|
+
packet : space_packet_parser.parser.Packet
|
|
69
|
+
CODICE data packet.
|
|
70
|
+
metadata_arrays : dict
|
|
71
|
+
Metadata arrays.
|
|
72
|
+
|
|
73
|
+
Returns
|
|
74
|
+
-------
|
|
75
|
+
metadata_arrays : dict
|
|
76
|
+
Updated metadata arrays with values.
|
|
77
|
+
"""
|
|
78
|
+
ignore_list = [
|
|
79
|
+
"SPARE_1",
|
|
80
|
+
"SPARE_2",
|
|
81
|
+
"SPARE_3",
|
|
82
|
+
"SPARE_4",
|
|
83
|
+
"SPARE_5",
|
|
84
|
+
"SPARE_6",
|
|
85
|
+
"CHECKSUM",
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
for key, value in packet.header.items():
|
|
89
|
+
metadata_arrays.setdefault(key, []).append(value.raw_value)
|
|
90
|
+
|
|
91
|
+
for key, value in packet.data.items():
|
|
92
|
+
if key not in ignore_list:
|
|
93
|
+
metadata_arrays.setdefault(key, []).append(value.raw_value)
|
|
94
|
+
|
|
95
|
+
return metadata_arrays
|
imap_processing/decom.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Decommutate a packet file using a given packet definition.
|
|
3
|
+
|
|
4
|
+
This module contains a common function that can be used by multiple instruments
|
|
5
|
+
to decommutate CCSDS packet data using a given XTCE packet definition.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
11
|
+
from space_packet_parser import parser, xtcedef
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def decom_packets(
|
|
15
|
+
packet_file: Union[str, Path], xtce_packet_definition: Union[str, Path]
|
|
16
|
+
) -> list:
|
|
17
|
+
"""
|
|
18
|
+
Unpack CCSDS data packet.
|
|
19
|
+
|
|
20
|
+
In this function, we unpack and return data
|
|
21
|
+
as it is. Data modification will not be done at this step.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
packet_file : str
|
|
26
|
+
Path to data packet path with filename.
|
|
27
|
+
xtce_packet_definition : str
|
|
28
|
+
Path to XTCE file with filename.
|
|
29
|
+
|
|
30
|
+
Returns
|
|
31
|
+
-------
|
|
32
|
+
list
|
|
33
|
+
List of all the unpacked data.
|
|
34
|
+
"""
|
|
35
|
+
packet_definition = xtcedef.XtcePacketDefinition(xtce_packet_definition)
|
|
36
|
+
packet_parser = parser.PacketParser(packet_definition)
|
|
37
|
+
|
|
38
|
+
with open(packet_file, "rb") as binary_data:
|
|
39
|
+
packet_generator = packet_parser.generator(binary_data)
|
|
40
|
+
return list(packet_generator)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "v001"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Table for conversion/decoding ancillary parameters collected onboard by IMAP/GLOWS",
|
|
3
|
+
"version": "v001",
|
|
4
|
+
"date_of_creation_yyyymmdd": "20230527",
|
|
5
|
+
"filter_temperature": {
|
|
6
|
+
"min": -30.0,
|
|
7
|
+
"max": 80.0,
|
|
8
|
+
"n_bits": 8,
|
|
9
|
+
"p01": 0.0,
|
|
10
|
+
"p02": 0.0,
|
|
11
|
+
"p03": 0.0,
|
|
12
|
+
"p04": 0.0
|
|
13
|
+
},
|
|
14
|
+
"hv_voltage": {
|
|
15
|
+
"min": 0.0,
|
|
16
|
+
"max": 3500.0,
|
|
17
|
+
"n_bits": 12,
|
|
18
|
+
"p01": 0.0,
|
|
19
|
+
"p02": 0.0,
|
|
20
|
+
"p03": 0.0,
|
|
21
|
+
"p04": 0.0
|
|
22
|
+
},
|
|
23
|
+
"spin_period": {
|
|
24
|
+
"min": 0.0,
|
|
25
|
+
"max": 20.9712,
|
|
26
|
+
"n_bits": 16
|
|
27
|
+
},
|
|
28
|
+
"spin_phase": {
|
|
29
|
+
"min": 0.0,
|
|
30
|
+
"max": 360.0,
|
|
31
|
+
"n_bits": 16
|
|
32
|
+
},
|
|
33
|
+
"pulse_length": {
|
|
34
|
+
"min": 0.0,
|
|
35
|
+
"max": 255.0,
|
|
36
|
+
"n_bits": 8,
|
|
37
|
+
"p01": 0.0,
|
|
38
|
+
"p02": 0.0,
|
|
39
|
+
"p03": 0.0,
|
|
40
|
+
"p04": 0.0
|
|
41
|
+
}
|
|
42
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Decommutate GLOWS CCSDS packets using GLOWS packet definitions."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from space_packet_parser import parser, xtcedef
|
|
7
|
+
|
|
8
|
+
from imap_processing import imap_module_directory
|
|
9
|
+
from imap_processing.ccsds.ccsds_data import CcsdsData
|
|
10
|
+
from imap_processing.glows import __version__
|
|
11
|
+
from imap_processing.glows.l0.glows_l0_data import DirectEventL0, HistogramL0
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GlowsParams(Enum):
|
|
15
|
+
"""
|
|
16
|
+
Enum class for Glows packet data.
|
|
17
|
+
|
|
18
|
+
Attributes
|
|
19
|
+
----------
|
|
20
|
+
HIST_APID : int
|
|
21
|
+
Histogram packet APID
|
|
22
|
+
DE_APID : int
|
|
23
|
+
Direct event APID
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
HIST_APID = 1480
|
|
27
|
+
DE_APID = 1481
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def decom_packets(
|
|
31
|
+
packet_file_path: Path,
|
|
32
|
+
) -> tuple[list[HistogramL0], list[DirectEventL0]]:
|
|
33
|
+
"""
|
|
34
|
+
Decom GLOWS data packets using GLOWS packet definition.
|
|
35
|
+
|
|
36
|
+
Parameters
|
|
37
|
+
----------
|
|
38
|
+
packet_file_path : str
|
|
39
|
+
Path to data packet path with filename.
|
|
40
|
+
|
|
41
|
+
Returns
|
|
42
|
+
-------
|
|
43
|
+
data : tuple[list[HistogramL0], list[DirectEventL0]]
|
|
44
|
+
A tuple with two pieces: one list of the GLOWS histogram data, in GlowsHistL0
|
|
45
|
+
instances, and one list of the GLOWS direct event data, in GlowsDeL0 instance.
|
|
46
|
+
"""
|
|
47
|
+
# Define paths
|
|
48
|
+
xtce_document = Path(
|
|
49
|
+
f"{imap_module_directory}/glows/packet_definitions/GLX_COMBINED.xml"
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
packet_definition = xtcedef.XtcePacketDefinition(xtce_document)
|
|
53
|
+
glows_parser = parser.PacketParser(packet_definition)
|
|
54
|
+
|
|
55
|
+
histdata = []
|
|
56
|
+
dedata = []
|
|
57
|
+
|
|
58
|
+
filename = packet_file_path.name
|
|
59
|
+
|
|
60
|
+
with open(packet_file_path, "rb") as binary_data:
|
|
61
|
+
glows_packets = glows_parser.generator(binary_data)
|
|
62
|
+
|
|
63
|
+
for packet in glows_packets:
|
|
64
|
+
apid = packet.header["PKT_APID"].derived_value
|
|
65
|
+
# Do something with the packet data
|
|
66
|
+
if apid == GlowsParams.HIST_APID.value:
|
|
67
|
+
values = [
|
|
68
|
+
item.derived_value
|
|
69
|
+
if item.derived_value is not None
|
|
70
|
+
else item.raw_value
|
|
71
|
+
for item in packet.data.values()
|
|
72
|
+
]
|
|
73
|
+
hist_l0 = HistogramL0(
|
|
74
|
+
__version__, filename, CcsdsData(packet.header), *values
|
|
75
|
+
)
|
|
76
|
+
histdata.append(hist_l0)
|
|
77
|
+
|
|
78
|
+
if apid == GlowsParams.DE_APID.value:
|
|
79
|
+
values = [
|
|
80
|
+
item.derived_value
|
|
81
|
+
if item.derived_value is not None
|
|
82
|
+
else item.raw_value
|
|
83
|
+
for item in packet.data.values()
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
de_l0 = DirectEventL0(
|
|
87
|
+
__version__, filename, CcsdsData(packet.header), *values
|
|
88
|
+
)
|
|
89
|
+
dedata.append(de_l0)
|
|
90
|
+
|
|
91
|
+
return histdata, dedata
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"""Contains data classes to support GLOWS L0 processing."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
|
|
5
|
+
from imap_processing.ccsds.ccsds_data import CcsdsData
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class GlowsL0:
|
|
10
|
+
"""
|
|
11
|
+
Data structure for common values across histogram and direct events data.
|
|
12
|
+
|
|
13
|
+
Attributes
|
|
14
|
+
----------
|
|
15
|
+
ground_sw_version : str
|
|
16
|
+
Ground software version
|
|
17
|
+
packet_file_name : str
|
|
18
|
+
File name of the source packet
|
|
19
|
+
ccsds_header : CcsdsData
|
|
20
|
+
CCSDS header data
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
ground_sw_version: str
|
|
24
|
+
packet_file_name: str
|
|
25
|
+
ccsds_header: CcsdsData
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass
|
|
29
|
+
class HistogramL0(GlowsL0):
|
|
30
|
+
"""
|
|
31
|
+
Data structure for storing GLOWS histogram packet data.
|
|
32
|
+
|
|
33
|
+
Attributes
|
|
34
|
+
----------
|
|
35
|
+
MET : int
|
|
36
|
+
CCSDS Packet Time Stamp (coarse time)
|
|
37
|
+
STARTID : int
|
|
38
|
+
Histogram Start ID
|
|
39
|
+
ENDID : int
|
|
40
|
+
Histogram End ID
|
|
41
|
+
FLAGS : int
|
|
42
|
+
Histogram flags
|
|
43
|
+
SWVER : int
|
|
44
|
+
Version of SW used for generation
|
|
45
|
+
SEC : int
|
|
46
|
+
Block start time (IMAP), seconds
|
|
47
|
+
SUBSEC : int
|
|
48
|
+
Block start time (IMAP), subseconds
|
|
49
|
+
OFFSETSEC : int
|
|
50
|
+
Block end time (IMAP), seconds
|
|
51
|
+
OFFSETSUBSEC : int
|
|
52
|
+
Block end time (IMAP), subseconds
|
|
53
|
+
GLXSEC : int
|
|
54
|
+
Block start time (GLOWS), seconds
|
|
55
|
+
GLXSUBSEC : int
|
|
56
|
+
Block start time (GLOWS), Subseconds
|
|
57
|
+
GLXOFFSEC : int
|
|
58
|
+
Block end time (GLOWS), seconds
|
|
59
|
+
GLXOFFSUBSEC : int
|
|
60
|
+
Block end time (GLOWS), subseconds
|
|
61
|
+
SPINS : int
|
|
62
|
+
Number of spins
|
|
63
|
+
NBINS : int
|
|
64
|
+
Number of bins
|
|
65
|
+
TEMPAVG : int
|
|
66
|
+
Mean filter temperature
|
|
67
|
+
TEMPVAR : int
|
|
68
|
+
Variance of filter temperature
|
|
69
|
+
HVAVG : int
|
|
70
|
+
Mean CEM voltage
|
|
71
|
+
HVVAR : int
|
|
72
|
+
Variance of CEM voltage
|
|
73
|
+
SPAVG : int
|
|
74
|
+
Mean spin period
|
|
75
|
+
SPVAR : int
|
|
76
|
+
Variance of spin period
|
|
77
|
+
ELAVG : int
|
|
78
|
+
Mean length of event impulse
|
|
79
|
+
ELVAR : int
|
|
80
|
+
Variance of event-impulse length
|
|
81
|
+
EVENTS : int
|
|
82
|
+
Number of events
|
|
83
|
+
HISTOGRAM_DATA : bytes
|
|
84
|
+
Raw binary format histogram data
|
|
85
|
+
ground_sw_version : str
|
|
86
|
+
Ground software version
|
|
87
|
+
packet_file_name : str
|
|
88
|
+
File name of the source packet
|
|
89
|
+
ccsds_header : CcsdsData
|
|
90
|
+
CCSDS header data
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
MET: int
|
|
94
|
+
STARTID: int
|
|
95
|
+
ENDID: int
|
|
96
|
+
FLAGS: int
|
|
97
|
+
SWVER: int
|
|
98
|
+
SEC: int
|
|
99
|
+
SUBSEC: int
|
|
100
|
+
OFFSETSEC: int
|
|
101
|
+
OFFSETSUBSEC: int
|
|
102
|
+
GLXSEC: int
|
|
103
|
+
GLXSUBSEC: int
|
|
104
|
+
GLXOFFSEC: int
|
|
105
|
+
GLXOFFSUBSEC: int
|
|
106
|
+
SPINS: int
|
|
107
|
+
NBINS: int
|
|
108
|
+
TEMPAVG: int
|
|
109
|
+
TEMPVAR: int
|
|
110
|
+
HVAVG: int
|
|
111
|
+
HVVAR: int
|
|
112
|
+
SPAVG: int
|
|
113
|
+
SPVAR: int
|
|
114
|
+
ELAVG: int
|
|
115
|
+
ELVAR: int
|
|
116
|
+
EVENTS: int
|
|
117
|
+
HISTOGRAM_DATA: bytearray
|
|
118
|
+
|
|
119
|
+
def __post_init__(self) -> None:
|
|
120
|
+
"""Convert HISTOGRAM_DATA attribute from string to bytearray if needed."""
|
|
121
|
+
if isinstance(self.HISTOGRAM_DATA, str):
|
|
122
|
+
# Convert string output from space_packet_parser to bytearray
|
|
123
|
+
self.HISTOGRAM_DATA = bytearray(
|
|
124
|
+
int(self.HISTOGRAM_DATA, 2).to_bytes(
|
|
125
|
+
len(self.HISTOGRAM_DATA) // 8, "big"
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@dataclass
|
|
131
|
+
class DirectEventL0(GlowsL0):
|
|
132
|
+
"""
|
|
133
|
+
Data structure for storing GLOWS direct event packet data.
|
|
134
|
+
|
|
135
|
+
Attributes
|
|
136
|
+
----------
|
|
137
|
+
MET : int
|
|
138
|
+
CCSDS Packet Time Stamp (coarse time)
|
|
139
|
+
SEC : int
|
|
140
|
+
Data IMAP timestamp, seconds counter.
|
|
141
|
+
LEN : int
|
|
142
|
+
Number of packets in data set.
|
|
143
|
+
SEQ : int
|
|
144
|
+
Packet sequence in data set.
|
|
145
|
+
DE_DATA : bytearray
|
|
146
|
+
Raw direct event data (compressed)
|
|
147
|
+
ground_sw_version : str
|
|
148
|
+
Ground software version
|
|
149
|
+
packet_file_name : str
|
|
150
|
+
File name of the source packet
|
|
151
|
+
ccsds_header : CcsdsData
|
|
152
|
+
CCSDS header data
|
|
153
|
+
|
|
154
|
+
Methods
|
|
155
|
+
-------
|
|
156
|
+
within_same_sequence(other)
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
MET: int
|
|
160
|
+
SEC: int
|
|
161
|
+
LEN: int
|
|
162
|
+
SEQ: int
|
|
163
|
+
DE_DATA: bytearray = field(repr=False) # Do not include in print
|
|
164
|
+
|
|
165
|
+
def __post_init__(self) -> None:
|
|
166
|
+
"""Convert from string to bytearray if DE_DATA is a string of ones and zeros."""
|
|
167
|
+
if isinstance(self.DE_DATA, str):
|
|
168
|
+
# Convert string output from space_packet_parser to bytearray
|
|
169
|
+
self.DE_DATA = bytearray(
|
|
170
|
+
int(self.DE_DATA, 2).to_bytes(len(self.DE_DATA) // 8, "big")
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
def within_same_sequence(self, other: "DirectEventL0") -> bool:
|
|
174
|
+
"""
|
|
175
|
+
Compare fields for L0 which should be the same for packets within one sequence.
|
|
176
|
+
|
|
177
|
+
This method compares the IMAP time (SEC) and packet length (LEN) fields.
|
|
178
|
+
|
|
179
|
+
Parameters
|
|
180
|
+
----------
|
|
181
|
+
other : DirectEventL0
|
|
182
|
+
Another instance of DirectEventL0 to compare to.
|
|
183
|
+
|
|
184
|
+
Returns
|
|
185
|
+
-------
|
|
186
|
+
bool
|
|
187
|
+
True if the SEC and LEN fields match, False otherwise.
|
|
188
|
+
"""
|
|
189
|
+
if not isinstance(other, DirectEventL0):
|
|
190
|
+
return False
|
|
191
|
+
|
|
192
|
+
# Time and overall packet length should match
|
|
193
|
+
# TODO: What other fields need to match?
|
|
194
|
+
return self.SEC == other.SEC and self.LEN == other.LEN
|