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,254 @@
|
|
|
1
|
+
"""Decommutate HIT CCSDS data and create L1a data products."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from enum import IntEnum
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
import xarray as xr
|
|
8
|
+
|
|
9
|
+
from imap_processing import imap_module_directory
|
|
10
|
+
from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
|
|
11
|
+
from imap_processing.utils import packet_file_to_datasets
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
# TODO review logging levels to use (debug vs. info)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class HitAPID(IntEnum):
|
|
19
|
+
"""
|
|
20
|
+
HIT APID Mappings.
|
|
21
|
+
|
|
22
|
+
Attributes
|
|
23
|
+
----------
|
|
24
|
+
HIT_HSKP: int
|
|
25
|
+
Housekeeping
|
|
26
|
+
HIT_SCIENCE : int
|
|
27
|
+
Science
|
|
28
|
+
HIT_IALRT : int
|
|
29
|
+
I-ALiRT
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
HIT_HSKP = 1251
|
|
33
|
+
HIT_SCIENCE = 1252
|
|
34
|
+
HIT_IALRT = 1253
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def hit_l1a(packet_file: str, data_version: str) -> list[xr.Dataset]:
|
|
38
|
+
"""
|
|
39
|
+
Will process HIT L0 data into L1A data products.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
packet_file : str
|
|
44
|
+
Path to the CCSDS data packet file.
|
|
45
|
+
data_version : str
|
|
46
|
+
Version of the data product being created.
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
processed_data : list[xarray.Dataset]
|
|
51
|
+
List of Datasets of L1A processed data.
|
|
52
|
+
"""
|
|
53
|
+
# TODO add logging
|
|
54
|
+
|
|
55
|
+
# Unpack ccsds file
|
|
56
|
+
packet_definition = (
|
|
57
|
+
imap_module_directory / "hit/packet_definitions/hit_packet_definitions.xml"
|
|
58
|
+
)
|
|
59
|
+
datasets_by_apid = packet_file_to_datasets(
|
|
60
|
+
packet_file=packet_file,
|
|
61
|
+
xtce_packet_definition=packet_definition,
|
|
62
|
+
use_derived_value=False,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
# Create the attribute manager for this data level
|
|
66
|
+
attr_mgr = ImapCdfAttributes()
|
|
67
|
+
attr_mgr.add_instrument_global_attrs(instrument="hit")
|
|
68
|
+
attr_mgr.add_instrument_variable_attrs(instrument="hit", level="l1a")
|
|
69
|
+
attr_mgr.add_global_attribute("Data_version", data_version)
|
|
70
|
+
|
|
71
|
+
# Process science to l1a.
|
|
72
|
+
if HitAPID.HIT_HSKP in datasets_by_apid:
|
|
73
|
+
datasets_by_apid[HitAPID.HIT_HSKP] = process_housekeeping(
|
|
74
|
+
datasets_by_apid[HitAPID.HIT_HSKP], attr_mgr
|
|
75
|
+
)
|
|
76
|
+
if HitAPID.HIT_SCIENCE in datasets_by_apid:
|
|
77
|
+
# TODO complete science data processing
|
|
78
|
+
print("Skipping science data for now")
|
|
79
|
+
datasets_by_apid[HitAPID.HIT_SCIENCE] = process_science(
|
|
80
|
+
datasets_by_apid[HitAPID.HIT_SCIENCE], attr_mgr
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
return list(datasets_by_apid.values())
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def concatenate_leak_variables(
|
|
87
|
+
dataset: xr.Dataset, adc_channels: xr.DataArray
|
|
88
|
+
) -> xr.Dataset:
|
|
89
|
+
"""
|
|
90
|
+
Concatenate leak variables in the dataset.
|
|
91
|
+
|
|
92
|
+
Updates the housekeeping dataset to replace the individual
|
|
93
|
+
leak_i_00, leak_i_01, ..., leak_i_63 variables with a single
|
|
94
|
+
leak_i variable as a 2D array. "i" here represents current
|
|
95
|
+
in the leakage current [Voltage] data.
|
|
96
|
+
|
|
97
|
+
Parameters
|
|
98
|
+
----------
|
|
99
|
+
dataset : xarray.Dataset
|
|
100
|
+
Dataset containing 64 leak variables.
|
|
101
|
+
adc_channels : xarray.DataArray
|
|
102
|
+
DataArray to be used as a dimension for the concatenated leak variables.
|
|
103
|
+
|
|
104
|
+
Returns
|
|
105
|
+
-------
|
|
106
|
+
dataset : xarray.Dataset
|
|
107
|
+
Updated dataset with concatenated leak variables.
|
|
108
|
+
"""
|
|
109
|
+
# Stack 64 leak variables (leak_00, leak_01, ..., leak_63)
|
|
110
|
+
leak_vars = [dataset[f"leak_i_{i:02d}"] for i in range(64)]
|
|
111
|
+
|
|
112
|
+
# Concatenate along 'adc_channels' and reorder dimensions
|
|
113
|
+
stacked_leaks = xr.concat(leak_vars, dim=adc_channels).transpose(
|
|
114
|
+
"epoch", "adc_channels"
|
|
115
|
+
)
|
|
116
|
+
dataset["leak_i"] = stacked_leaks
|
|
117
|
+
|
|
118
|
+
# Drop the individual leak variables
|
|
119
|
+
updated_dataset = dataset.drop_vars([f"leak_i_{i:02d}" for i in range(64)])
|
|
120
|
+
|
|
121
|
+
return updated_dataset
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def process_science(dataset: xr.Dataset, attr_mgr: ImapCdfAttributes) -> xr.Dataset:
|
|
125
|
+
"""
|
|
126
|
+
Will process science dataset for CDF product.
|
|
127
|
+
|
|
128
|
+
Process binary science data for CDF creation. The data is
|
|
129
|
+
grouped into science frames, decommutated and decompressed,
|
|
130
|
+
and split into count rates and event datasets. Updates the
|
|
131
|
+
dataset attributes and coordinates and data variable
|
|
132
|
+
dimensions according to specifications in a cdf yaml file.
|
|
133
|
+
|
|
134
|
+
Parameters
|
|
135
|
+
----------
|
|
136
|
+
dataset : xarray.Dataset
|
|
137
|
+
Dataset containing HIT science data.
|
|
138
|
+
|
|
139
|
+
attr_mgr : ImapCdfAttributes
|
|
140
|
+
Attribute manager used to get the data product field's attributes.
|
|
141
|
+
|
|
142
|
+
Returns
|
|
143
|
+
-------
|
|
144
|
+
dataset : xarray.Dataset
|
|
145
|
+
An updated dataset ready for CDF conversion.
|
|
146
|
+
"""
|
|
147
|
+
logger.info("Creating HIT L1A science datasets")
|
|
148
|
+
|
|
149
|
+
# Logical sources for the two products.
|
|
150
|
+
# logical_sources = ["imap_hit_l1a_sci-counts", "imap_hit_l1a_pulse-height-event"]
|
|
151
|
+
|
|
152
|
+
# TODO: Complete this function
|
|
153
|
+
# - call decom_hit.py to decommutate the science data
|
|
154
|
+
# - split the science data into count rates and event datasets
|
|
155
|
+
# - update dimensions and add attributes to the dataset and data arrays
|
|
156
|
+
# - return list of two datasets (count rates and events)?
|
|
157
|
+
|
|
158
|
+
# logger.info("HIT L1A event dataset created")
|
|
159
|
+
# logger.info("HIT L1A count rates dataset created")
|
|
160
|
+
|
|
161
|
+
return dataset
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def process_housekeeping(
|
|
165
|
+
dataset: xr.Dataset, attr_mgr: ImapCdfAttributes
|
|
166
|
+
) -> xr.Dataset:
|
|
167
|
+
"""
|
|
168
|
+
Will process housekeeping dataset for CDF product.
|
|
169
|
+
|
|
170
|
+
Updates the housekeeping dataset to replace with a single
|
|
171
|
+
leak_i variable as a 2D array. Also updates the dataset
|
|
172
|
+
attributes and coordinates and data variable dimensions
|
|
173
|
+
according to specifications in a cdf yaml file.
|
|
174
|
+
|
|
175
|
+
Parameters
|
|
176
|
+
----------
|
|
177
|
+
dataset : xarray.Dataset
|
|
178
|
+
Dataset containing HIT housekeeping data.
|
|
179
|
+
|
|
180
|
+
attr_mgr : ImapCdfAttributes
|
|
181
|
+
Attribute manager used to get the data product field's attributes.
|
|
182
|
+
|
|
183
|
+
Returns
|
|
184
|
+
-------
|
|
185
|
+
dataset : xarray.Dataset
|
|
186
|
+
An updated dataset ready for CDF conversion.
|
|
187
|
+
"""
|
|
188
|
+
logger.info("Creating HIT L1A housekeeping dataset")
|
|
189
|
+
|
|
190
|
+
logical_source = "imap_hit_l1a_hk"
|
|
191
|
+
|
|
192
|
+
# Drop keys that are not CDF data variables
|
|
193
|
+
drop_keys = [
|
|
194
|
+
"pkt_apid",
|
|
195
|
+
"sc_tick",
|
|
196
|
+
"version",
|
|
197
|
+
"type",
|
|
198
|
+
"sec_hdr_flg",
|
|
199
|
+
"seq_flgs",
|
|
200
|
+
"src_seq_ctr",
|
|
201
|
+
"pkt_len",
|
|
202
|
+
"hskp_spare1",
|
|
203
|
+
"hskp_spare2",
|
|
204
|
+
"hskp_spare3",
|
|
205
|
+
"hskp_spare4",
|
|
206
|
+
"hskp_spare5",
|
|
207
|
+
]
|
|
208
|
+
|
|
209
|
+
# Drop variables not needed for CDF
|
|
210
|
+
dataset = dataset.drop_vars(drop_keys)
|
|
211
|
+
|
|
212
|
+
# Create data arrays for dependencies
|
|
213
|
+
adc_channels = xr.DataArray(
|
|
214
|
+
np.arange(64, dtype=np.uint8),
|
|
215
|
+
name="adc_channels",
|
|
216
|
+
dims=["adc_channels"],
|
|
217
|
+
attrs=attr_mgr.get_variable_attributes("adc_channels"),
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# NOTE: LABL_PTR_1 should be CDF_CHAR.
|
|
221
|
+
adc_channels_label = xr.DataArray(
|
|
222
|
+
adc_channels.values.astype(str),
|
|
223
|
+
name="adc_channels_label",
|
|
224
|
+
dims=["adc_channels_label"],
|
|
225
|
+
attrs=attr_mgr.get_variable_attributes("adc_channels_label"),
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
# Update dataset coordinates and attributes
|
|
229
|
+
dataset = dataset.assign_coords(
|
|
230
|
+
{
|
|
231
|
+
"adc_channels": adc_channels,
|
|
232
|
+
"adc_channels_label": adc_channels_label,
|
|
233
|
+
}
|
|
234
|
+
)
|
|
235
|
+
dataset.attrs = attr_mgr.get_global_attributes(logical_source)
|
|
236
|
+
|
|
237
|
+
# Stack 64 leak variables (leak_00, leak_01, ..., leak_63)
|
|
238
|
+
dataset = concatenate_leak_variables(dataset, adc_channels)
|
|
239
|
+
|
|
240
|
+
# Assign attributes and dimensions to each data array in the Dataset
|
|
241
|
+
for field in dataset.data_vars.keys():
|
|
242
|
+
# Create a dict of dimensions using the DEPEND_I keys in the
|
|
243
|
+
# attributes
|
|
244
|
+
dims = {
|
|
245
|
+
key: value
|
|
246
|
+
for key, value in attr_mgr.get_variable_attributes(field).items()
|
|
247
|
+
if "DEPEND" in key
|
|
248
|
+
}
|
|
249
|
+
dataset[field].attrs = attr_mgr.get_variable_attributes(field)
|
|
250
|
+
dataset[field].assign_coords(dims)
|
|
251
|
+
|
|
252
|
+
dataset.epoch.attrs = attr_mgr.get_variable_attributes("epoch")
|
|
253
|
+
|
|
254
|
+
return dataset
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"""IMAP-HIT L1B data processing."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from dataclasses import fields
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
import xarray as xr
|
|
8
|
+
|
|
9
|
+
from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
|
|
10
|
+
from imap_processing.hit.l0.data_classes.housekeeping import Housekeeping
|
|
11
|
+
from imap_processing.spice.time import met_to_j2000ns
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
# TODO review logging levels to use (debug vs. info)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def hit_l1b(l1a_dataset: xr.Dataset, data_version: str) -> list[xr.Dataset]:
|
|
19
|
+
"""
|
|
20
|
+
Will process HIT data to L1B.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
l1a_dataset : xarray.Dataset
|
|
25
|
+
L1A data.
|
|
26
|
+
data_version : str
|
|
27
|
+
Version of the data product being created.
|
|
28
|
+
|
|
29
|
+
Returns
|
|
30
|
+
-------
|
|
31
|
+
cdf_filepaths : xarray.Dataset
|
|
32
|
+
L1B processed data.
|
|
33
|
+
"""
|
|
34
|
+
# create the attribute manager for this data level
|
|
35
|
+
attr_mgr = ImapCdfAttributes()
|
|
36
|
+
attr_mgr.add_instrument_global_attrs(instrument="hit")
|
|
37
|
+
attr_mgr.add_instrument_variable_attrs(instrument="hit", level="l1b")
|
|
38
|
+
attr_mgr.add_global_attribute("Data_version", data_version)
|
|
39
|
+
|
|
40
|
+
# TODO: Check for type of L1A dataset and determine what L1B products to make
|
|
41
|
+
# Need more info from instrument teams. Work with housekeeping data for now
|
|
42
|
+
logical_source = "imap_hit_l1b_hk"
|
|
43
|
+
|
|
44
|
+
# Create datasets
|
|
45
|
+
datasets = []
|
|
46
|
+
if "_hk" in logical_source:
|
|
47
|
+
dataset = create_hk_dataset(attr_mgr)
|
|
48
|
+
datasets.append(dataset)
|
|
49
|
+
elif "_sci" in logical_source:
|
|
50
|
+
# process science data. placeholder for future code
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
return datasets
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# TODO: This is going to work differently when we have sample data
|
|
57
|
+
def create_hk_dataset(attr_mgr: ImapCdfAttributes) -> xr.Dataset:
|
|
58
|
+
"""
|
|
59
|
+
Create a housekeeping dataset.
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
attr_mgr : ImapCdfAttributes
|
|
64
|
+
Attribute manager used to get the data product field's attributes.
|
|
65
|
+
|
|
66
|
+
Returns
|
|
67
|
+
-------
|
|
68
|
+
hk_dataset : xarray.dataset
|
|
69
|
+
Dataset with all data product fields in xarray.DataArray.
|
|
70
|
+
"""
|
|
71
|
+
logger.info("Creating datasets for HIT L1B data")
|
|
72
|
+
|
|
73
|
+
# TODO: TEMPORARY. Need to update to use the L1B data class once that exists.
|
|
74
|
+
# Using l1a housekeeping data class for now since l1b housekeeping has the
|
|
75
|
+
# same data fields
|
|
76
|
+
data_fields = fields(Housekeeping)
|
|
77
|
+
|
|
78
|
+
# TODO define keys to skip. This will change later.
|
|
79
|
+
skip_keys = [
|
|
80
|
+
"shcoarse",
|
|
81
|
+
"ground_sw_version",
|
|
82
|
+
"packet_file_name",
|
|
83
|
+
"ccsds_header",
|
|
84
|
+
"leak_i_raw",
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
logical_source = "imap_hit_l1b_hk"
|
|
88
|
+
|
|
89
|
+
# Create fake data for now
|
|
90
|
+
|
|
91
|
+
# Convert integers into datetime64[s]
|
|
92
|
+
epoch_converted_time = met_to_j2000ns([0, 1, 2])
|
|
93
|
+
|
|
94
|
+
# Shape for dims
|
|
95
|
+
n_epoch = 3
|
|
96
|
+
n_channels = 64
|
|
97
|
+
|
|
98
|
+
# Create xarray data arrays for dependencies
|
|
99
|
+
epoch_time = xr.DataArray(
|
|
100
|
+
data=epoch_converted_time,
|
|
101
|
+
name="epoch",
|
|
102
|
+
dims=["epoch"],
|
|
103
|
+
attrs=attr_mgr.get_variable_attributes("epoch"),
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
adc_channels = xr.DataArray(
|
|
107
|
+
np.arange(n_channels, dtype=np.uint16),
|
|
108
|
+
name="adc_channels",
|
|
109
|
+
dims=["adc_channels"],
|
|
110
|
+
attrs=attr_mgr.get_variable_attributes("adc_channels"),
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
# Create xarray dataset
|
|
114
|
+
hk_dataset = xr.Dataset(
|
|
115
|
+
coords={"epoch": epoch_time, "adc_channels": adc_channels},
|
|
116
|
+
attrs=attr_mgr.get_global_attributes(logical_source),
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Create xarray data array for each data field
|
|
120
|
+
for data_field in data_fields:
|
|
121
|
+
field = data_field.name.lower()
|
|
122
|
+
if field not in skip_keys:
|
|
123
|
+
# Create a list of all the dimensions using the DEPEND_I keys in the
|
|
124
|
+
# attributes
|
|
125
|
+
dims = [
|
|
126
|
+
value
|
|
127
|
+
for key, value in attr_mgr.get_variable_attributes(field).items()
|
|
128
|
+
if "DEPEND" in key
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
# TODO: This is temporary.
|
|
132
|
+
# The data will be set in the data class when that's created
|
|
133
|
+
if field == "leak_i":
|
|
134
|
+
# 2D array - needs two dims
|
|
135
|
+
hk_dataset[field] = xr.DataArray(
|
|
136
|
+
np.ones((n_epoch, n_channels), dtype=np.uint16),
|
|
137
|
+
dims=dims,
|
|
138
|
+
attrs=attr_mgr.get_variable_attributes(field),
|
|
139
|
+
)
|
|
140
|
+
elif field in [
|
|
141
|
+
"preamp_l234a",
|
|
142
|
+
"preamp_l1a",
|
|
143
|
+
"preamp_l1b",
|
|
144
|
+
"preamp_l234b",
|
|
145
|
+
"temp0",
|
|
146
|
+
"temp1",
|
|
147
|
+
"temp2",
|
|
148
|
+
"temp3",
|
|
149
|
+
"analog_temp",
|
|
150
|
+
"hvps_temp",
|
|
151
|
+
"idpu_temp",
|
|
152
|
+
"lvps_temp",
|
|
153
|
+
"ebox_3d4vd",
|
|
154
|
+
"ebox_5d1vd",
|
|
155
|
+
"ebox_p12va",
|
|
156
|
+
"ebox_m12va",
|
|
157
|
+
"ebox_p5d7va",
|
|
158
|
+
"ebox_m5d7va",
|
|
159
|
+
"ref_p5v",
|
|
160
|
+
"l1ab_bias",
|
|
161
|
+
"l2ab_bias",
|
|
162
|
+
"l34a_bias",
|
|
163
|
+
"l34b_bias",
|
|
164
|
+
"ebox_p2d0vd",
|
|
165
|
+
]:
|
|
166
|
+
hk_dataset[field] = xr.DataArray(
|
|
167
|
+
np.ones(3, dtype=np.float16),
|
|
168
|
+
dims=dims,
|
|
169
|
+
attrs=attr_mgr.get_variable_attributes(field),
|
|
170
|
+
)
|
|
171
|
+
else:
|
|
172
|
+
hk_dataset[field] = xr.DataArray(
|
|
173
|
+
[1, 1, 1],
|
|
174
|
+
dims=dims,
|
|
175
|
+
attrs=attr_mgr.get_variable_attributes(field),
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
logger.info("HIT L1B datasets created")
|
|
179
|
+
return hk_dataset
|