imap-processing 1.0.35__tar.gz → 1.0.36__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {imap_processing-1.0.35 → imap_processing-1.0.36}/PKG-INFO +1 -1
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/_version.py +2 -2
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_hi_variable_attrs.yaml +22 -2
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cli.py +174 -63
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/ena_maps.py +19 -3
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/utils/naming.py +180 -23
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/hi_goodtimes.py +24 -16
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/hi_l1b.py +366 -29
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/hi_l1c.py +68 -1
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/utils.py +199 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l1a/hit_l1a.py +4 -4
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/calculate_ingest.py +1 -1
- imap_processing-1.0.36/imap_processing/lo/ancillary_data/imap_lo_hydrogen-geometric-factor_v004.csv +16 -0
- imap_processing-1.0.36/imap_processing/lo/ancillary_data/imap_lo_oxygen-geometric-factor_v004.csv +16 -0
- imap_processing-1.0.36/imap_processing/lo/constants.py +165 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l1b/lo_l1b.py +6 -4
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l1c/lo_l1c.py +58 -13
- imap_processing-1.0.36/imap_processing/lo/l2/lo_l2.py +955 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/quality_flags.py +4 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l2/ultra_l2.py +23 -1
- {imap_processing-1.0.35 → imap_processing-1.0.36}/pyproject.toml +1 -1
- imap_processing-1.0.35/imap_processing/lo/ancillary_data/imap_lo_hydrogen-geometric-factor_v004.csv +0 -16
- imap_processing-1.0.35/imap_processing/lo/ancillary_data/imap_lo_oxygen-geometric-factor_v004.csv +0 -16
- imap_processing-1.0.35/imap_processing/lo/constants.py +0 -91
- imap_processing-1.0.35/imap_processing/lo/l2/lo_l2.py +0 -1455
- {imap_processing-1.0.35 → imap_processing-1.0.36}/LICENSE +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/README.md +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ancillary/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ancillary/ancillary_dataset_combiner.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ccsds/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ccsds/ccsds_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ccsds/excel_to_xtce.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_l2-hi-direct-events_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_l2-hi-omni_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_l2-hi-sectored_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_l2-lo-angular_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_l2-lo-direct-events_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_constant_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_default_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_enamaps_l2-common_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_enamaps_l2-healpix_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_enamaps_l2-rectangular_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_glows_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_glows_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_hit_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_ialirt_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_ialirt_l1_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_idex_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_idex_l2a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_idex_l2b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_idex_l2c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_lo_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_mag_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_mag_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_mag_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_spacecraft_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_spacecraft_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_swe_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/config/imap_variable_schema.yaml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/imap_cdf_manager.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/cdf/utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_de.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_hi_counters_aggregated.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_hi_counters_singles.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_hi_omni.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_hi_priority.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_hi_sectored.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_ialirt_hi.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_lo_counters_aggregated.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_lo_counters_singles.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_lo_priority.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1a_lo_species.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l1b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/codice_l2.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/data/esa_sweep_values.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/data/lo_stepping_values.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/decompress.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/packet_definitions/P_COD_NHK.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/packet_definitions/imap_codice_packet-definition_20250101_v001.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/packet_definitions/imap_codice_packet-definition_20260129_v001.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/codice/utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/utils/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/utils/coordinates.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/utils/corrections.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/utils/map_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ena_maps/utils/spatial_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/ancillary/imap_glows_exclusions-by-instr-team_20250923_v002.dat +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/ancillary/imap_glows_map-of-excluded-regions_20250923_v002.dat +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/ancillary/imap_glows_map-of-uv-sources_20250923_v002.dat +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/ancillary/imap_glows_pipeline-settings_20250923_v002.json +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/ancillary/imap_glows_pipeline_settings_v001.json +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/ancillary/imap_glows_suspected-transients_20250923_v002.dat +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/ancillary/l1b_conversion_table_v001.json +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l0/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l0/decom_glows.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l0/glows_l0_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l1a/glows_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l1a/glows_l1a_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l1b/glows_l1b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l1b/glows_l1b_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l2/glows_l2.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/l2/glows_l2_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/packet_definitions/GLX_COMBINED.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/packet_definitions/P_GLX_TMSCDE.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/packet_definitions/P_GLX_TMSCHIST.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/utils/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/glows/utils/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/hi_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/hi_l2.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/packet_definitions/TLM_HI_COMBINED_SCI.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hi/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/hit_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l0/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l0/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l0/decom_hit.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l1a/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l1b/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l1b/hit_l1b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l2/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/l2/hit_l2.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/hit/packet_definitions/hit_packet_definitions.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/generate_coverage.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/ialirt_spice.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/mag_l0_ialirt_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/parse_mag.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/process_codice.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/process_hit.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/process_status.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/process_swapi.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/l0/process_swe.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/ialirt.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/ialirt_codicehi.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/ialirt_codicelo.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/ialirt_hit.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/ialirt_mag.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/ialirt_swapi.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/packet_definitions/ialirt_swe.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/process_ephemeris.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/utils/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/utils/create_xarray.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/utils/grouping.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ialirt/utils/time.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/atomic_masses.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/decode.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/evt_msg_decode_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_10_day_CDF_names.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_evt_msg_parsing_dictionaries.json +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_l0.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_l1b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_l2a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_l2b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/packet_definitions/idex_housekeeping_packet_definition.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/idex/packet_definitions/idex_science_packet_definition.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/ancillary_data/imap_lo_bootstrap-correction-factors_v001.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/ancillary_data/imap_lo_hydrogen-geometric-factor_v001.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/ancillary_data/imap_lo_oxygen-geometric-factor_v001.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/ancillary_data/imap_lo_sputter-correction-factors_v001.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/decompression_tables/decompression_tables.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/decompression_tables/log10_12_to_16_bit_uncompress.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/decompression_tables/log10_8_to_12_bit_uncompress.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/decompression_tables/log10_8_to_16_bit_uncompress.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/lo_apid.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/lo_science.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/lo_star_sensor.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/utils/binary_string.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l0/utils/bit_decompression.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l1a/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l1a/lo_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/l1b/tof_conversions.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/lo_ancillary.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/lo/packet_definitions/lo_xtce.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/imap_mag_sdc_configuration_v001.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l0/decom_mag.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l0/mag_l0_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1a/mag_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1a/mag_l1a_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1b/imap_mag_l1b-calibration_20240229_v002.cdf +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1b/mag_l1b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1c/interpolation_methods.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1c/mag_l1c.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1d/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1d/mag_l1d.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l1d/mag_l1d_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l2/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l2/mag_l2.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/l2/mag_l2_data.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/mag/packet_definitions/MAG_SCI_COMBINED.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spacecraft/packet_definitions/scid_x252.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spacecraft/quaternions.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spice/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spice/config.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spice/geometry.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spice/pointing_frame.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spice/repoint.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spice/spin.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/spice/time.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/l1/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/l1/swapi_l1.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/l2/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/l2/swapi_l2.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/packet_definitions/swapi_packet_definition.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swapi/swapi_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/l1a/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/l1a/swe_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/l1a/swe_science.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/l1b/swe_l1b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/l2/swe_l2.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/packet_definitions/swe_packet_definition.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/utils/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/utils/swe_constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/swe/utils/swe_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/constants.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l0/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l0/decom_tools.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l0/decom_ultra.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l0/ultra_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1a/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1a/ultra_l1a.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/badtimes.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/de.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/extendedspin.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/goodtimes.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/lookup_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/quality_flag_filters.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/ultra_l1b.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/ultra_l1b_annotated.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/ultra_l1b_culling.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1b/ultra_l1b_extended.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/helio_pset.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/l1c_lookup_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/make_helio_index_maps.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/imap_001.tf +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/imap_science_100.tf +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/imap_science_120.tf +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/imap_sclk_0000.tsc +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/imap_spk_demo.bsp +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/naif0012.tls +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/sim_1yr_imap_attitude.bc +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/sim_spice_kernels/sim_1yr_imap_pointing_frame.bc +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/spacecraft_pset.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/ultra_l1c.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/ultra_l1c_culling.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l2/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/l2/ultra_l2_systematic_uncertainties.csv +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/packet_definitions/README.md +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/utils/__init__.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/ultra/utils/ultra_l1_utils.py +0 -0
- {imap_processing-1.0.35 → imap_processing-1.0.36}/imap_processing/utils.py +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
# These version placeholders will be replaced later during substitution.
|
|
2
|
-
__version__ = "1.0.
|
|
3
|
-
__version_tuple__ = (1, 0,
|
|
2
|
+
__version__ = "1.0.36"
|
|
3
|
+
__version_tuple__ = (1, 0, 36)
|
|
@@ -446,8 +446,10 @@ hi_de_ccsds_qf:
|
|
|
446
446
|
VALIDMIN: 0
|
|
447
447
|
VAR_NOTES: >
|
|
448
448
|
Bitwise quality flag for CCSDS packet. Bit 0 (value 1): packet was full
|
|
449
|
-
(contained 664 events). Bit
|
|
450
|
-
|
|
449
|
+
(contained 664 events). Bit 1 (value 2): ESA (inner/outer) voltage did not
|
|
450
|
+
match any known esa_energy_step. Bit 2 (value 4): packet contained events
|
|
451
|
+
from an invalid spin. Bit 3 (value 8): detector high voltage (CEM/MCP/U-Can/
|
|
452
|
+
deflector) did not match the pointing's classified gain configuration.
|
|
451
453
|
|
|
452
454
|
# ======= L1C PSET Section =======
|
|
453
455
|
|
|
@@ -477,6 +479,24 @@ hi_pset_esa_energy_step:
|
|
|
477
479
|
VAR_TYPE: support_data
|
|
478
480
|
dtype: uint8
|
|
479
481
|
|
|
482
|
+
hi_pset_geometric_factor:
|
|
483
|
+
<<: *default_float32
|
|
484
|
+
CATDESC: Geometric factor for the detector gain configuration active during this pointing
|
|
485
|
+
DEPEND_0: epoch
|
|
486
|
+
DEPEND_1: esa_energy_step
|
|
487
|
+
DISPLAY_TYPE: no_plot
|
|
488
|
+
FIELDNAM: Geometric factor
|
|
489
|
+
FORMAT: E12.5
|
|
490
|
+
LABLAXIS: Geometric Factor
|
|
491
|
+
LABL_PTR_1: esa_energy_step_label
|
|
492
|
+
UNITS: cm^2 sr
|
|
493
|
+
VALIDMAX: 1.0
|
|
494
|
+
VALIDMIN: 0.0
|
|
495
|
+
VAR_NOTES: >
|
|
496
|
+
Geometric factor per esa_energy_step, looked up from the gain-configuration
|
|
497
|
+
ancillary file using the l1b_de's classified gain configuration.
|
|
498
|
+
VAR_TYPE: support_data
|
|
499
|
+
|
|
480
500
|
hi_pset_calibration_prod:
|
|
481
501
|
CATDESC: Coincidence types are combined into various calibration products
|
|
482
502
|
FIELDNAM: Calibration product number
|
|
@@ -18,6 +18,7 @@ import logging
|
|
|
18
18
|
import sys
|
|
19
19
|
from abc import ABC, abstractmethod
|
|
20
20
|
from pathlib import Path
|
|
21
|
+
from time import sleep
|
|
21
22
|
from typing import final
|
|
22
23
|
|
|
23
24
|
import imap_data_access
|
|
@@ -53,6 +54,7 @@ from imap_processing.cdf.utils import load_cdf, write_cdf
|
|
|
53
54
|
# In code:
|
|
54
55
|
# call cdf.utils.write_cdf
|
|
55
56
|
from imap_processing.codice import codice_l1a, codice_l1b, codice_l2
|
|
57
|
+
from imap_processing.ena_maps.utils.naming import MapDescriptor
|
|
56
58
|
from imap_processing.glows.l1a.glows_l1a import glows_l1a
|
|
57
59
|
from imap_processing.glows.l1b.glows_l1b import glows_l1b, glows_l1b_de
|
|
58
60
|
from imap_processing.glows.l2.glows_l2 import glows_l2
|
|
@@ -95,6 +97,9 @@ from imap_processing.utils import (
|
|
|
95
97
|
|
|
96
98
|
logger = logging.getLogger(__name__)
|
|
97
99
|
|
|
100
|
+
RETRY_EXIT_CODE = 75 # Exit code indicating the job should be retried
|
|
101
|
+
# (e.g., imap-data-access 503 SlowDown).
|
|
102
|
+
|
|
98
103
|
|
|
99
104
|
def _parse_args() -> argparse.Namespace:
|
|
100
105
|
"""
|
|
@@ -201,8 +206,9 @@ def _parse_args() -> argparse.Namespace:
|
|
|
201
206
|
'{"major_version": 2, "minor_version": 1}}'
|
|
202
207
|
"}'"
|
|
203
208
|
" A path to a JSON file containing this same information may also be"
|
|
204
|
-
"passed in. If dependency is a string ending in '.json', it will be
|
|
205
|
-
" as such a file path
|
|
209
|
+
" passed in. If dependency is a string ending in '.json', it will be"
|
|
210
|
+
" interpreted as such a file path: an existing local file is used as-is,"
|
|
211
|
+
" otherwise the file is downloaded from the IMAP SDC."
|
|
206
212
|
)
|
|
207
213
|
|
|
208
214
|
parser = argparse.ArgumentParser(prog="imap_cli", description=description)
|
|
@@ -288,7 +294,10 @@ def _parse_args() -> argparse.Namespace:
|
|
|
288
294
|
logger.info(
|
|
289
295
|
f"Interpreting dependency argument as a JSON file: {args.dependency}"
|
|
290
296
|
)
|
|
291
|
-
|
|
297
|
+
if not Path(args.dependency).exists():
|
|
298
|
+
dependency_filepath = download(args.dependency)
|
|
299
|
+
else:
|
|
300
|
+
dependency_filepath = args.dependency
|
|
292
301
|
with open(dependency_filepath) as f:
|
|
293
302
|
args.dependency = f.read()
|
|
294
303
|
|
|
@@ -468,6 +477,8 @@ class ProcessInstrument(ABC):
|
|
|
468
477
|
"""
|
|
469
478
|
Upload data products to the IMAP SDC.
|
|
470
479
|
|
|
480
|
+
If a 503 SlowDown error is reported from the Upload API, a retry will be made
|
|
481
|
+
|
|
471
482
|
Parameters
|
|
472
483
|
----------
|
|
473
484
|
products : list[Path]
|
|
@@ -479,18 +490,42 @@ class ProcessInstrument(ABC):
|
|
|
479
490
|
return
|
|
480
491
|
|
|
481
492
|
for filename in products:
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
493
|
+
max_retries = 3
|
|
494
|
+
|
|
495
|
+
for attempt in range(max_retries):
|
|
496
|
+
try:
|
|
497
|
+
logger.info(f"Uploading file: {filename}")
|
|
498
|
+
imap_data_access.upload(filename)
|
|
499
|
+
break
|
|
500
|
+
|
|
501
|
+
except IMAPDataAccessError as e:
|
|
502
|
+
message = str(e)
|
|
503
|
+
|
|
504
|
+
if "FileAlreadyExists" in message and "409" in message:
|
|
505
|
+
logger.warning(
|
|
506
|
+
"Skipping upload of existing file, %s", filename
|
|
507
|
+
)
|
|
508
|
+
break
|
|
509
|
+
elif "503" in message and "SlowDown" in message:
|
|
510
|
+
if attempt < max_retries - 1:
|
|
511
|
+
logger.warning(
|
|
512
|
+
"Upload busy. Waiting 5 seconds before retrying..."
|
|
513
|
+
)
|
|
514
|
+
sleep(5)
|
|
515
|
+
continue
|
|
516
|
+
|
|
517
|
+
logger.error(
|
|
518
|
+
f"Upload failed after {max_retries} attempts. Exiting "
|
|
519
|
+
f"with code {RETRY_EXIT_CODE}."
|
|
520
|
+
)
|
|
521
|
+
sys.exit(RETRY_EXIT_CODE)
|
|
522
|
+
|
|
491
523
|
logger.error(f"Upload failed with error: {message}")
|
|
492
|
-
|
|
493
|
-
|
|
524
|
+
raise
|
|
525
|
+
|
|
526
|
+
except Exception as e:
|
|
527
|
+
logger.error(f"Upload failed unknown error: {e}")
|
|
528
|
+
raise
|
|
494
529
|
|
|
495
530
|
@final
|
|
496
531
|
def process(self) -> None:
|
|
@@ -937,9 +972,17 @@ class Hi(ProcessInstrument):
|
|
|
937
972
|
l1b_hk_file = dependencies.get_file_paths(
|
|
938
973
|
source="hi", data_type="l1b", descriptor="hk"
|
|
939
974
|
)[0]
|
|
940
|
-
esa_energies_csv = dependencies.get_file_paths(
|
|
975
|
+
esa_energies_csv = dependencies.get_file_paths(
|
|
976
|
+
data_type="ancillary", descriptor="esa-energies"
|
|
977
|
+
)[0]
|
|
978
|
+
gain_config_csv = dependencies.get_file_paths(
|
|
979
|
+
data_type="ancillary", descriptor="gain-configuration"
|
|
980
|
+
)[0]
|
|
941
981
|
datasets = hi_l1b.annotate_direct_events(
|
|
942
|
-
load_cdf(l1a_de_file),
|
|
982
|
+
load_cdf(l1a_de_file),
|
|
983
|
+
load_cdf(l1b_hk_file),
|
|
984
|
+
esa_energies_csv,
|
|
985
|
+
gain_config_csv,
|
|
943
986
|
)
|
|
944
987
|
elif self.data_level == "l1c":
|
|
945
988
|
if "pset" in self.descriptor:
|
|
@@ -957,10 +1000,10 @@ class Hi(ProcessInstrument):
|
|
|
957
1000
|
anc_dependencies = dependencies.get_processing_inputs(
|
|
958
1001
|
data_type="ancillary"
|
|
959
1002
|
)
|
|
960
|
-
if len(anc_dependencies) !=
|
|
1003
|
+
if len(anc_dependencies) != 3:
|
|
961
1004
|
raise ValueError(
|
|
962
|
-
f"Expected
|
|
963
|
-
f"backgrounds). Got "
|
|
1005
|
+
f"Expected three ancillary dependencies (cal-prod, "
|
|
1006
|
+
f"backgrounds, and gain-configuration). Got "
|
|
964
1007
|
f"{[anc_dep.descriptor for anc_dep in anc_dependencies]}"
|
|
965
1008
|
)
|
|
966
1009
|
|
|
@@ -972,14 +1015,16 @@ class Hi(ProcessInstrument):
|
|
|
972
1015
|
for dep in anc_dependencies
|
|
973
1016
|
}
|
|
974
1017
|
|
|
975
|
-
# Verify we have
|
|
1018
|
+
# Verify we have all required ancillary files
|
|
976
1019
|
if (
|
|
977
1020
|
"cal-prod" not in anc_path_dict
|
|
978
1021
|
or "backgrounds" not in anc_path_dict
|
|
1022
|
+
or "gain-configuration" not in anc_path_dict
|
|
979
1023
|
):
|
|
980
1024
|
raise ValueError(
|
|
981
|
-
f"Missing required ancillary files. Expected 'cal-prod'
|
|
982
|
-
f"'backgrounds', got
|
|
1025
|
+
f"Missing required ancillary files. Expected 'cal-prod', "
|
|
1026
|
+
f"'backgrounds', and 'gain-configuration', got "
|
|
1027
|
+
f"{list(anc_path_dict.keys())}"
|
|
983
1028
|
)
|
|
984
1029
|
|
|
985
1030
|
# Load goodtimes dependency
|
|
@@ -997,6 +1042,7 @@ class Hi(ProcessInstrument):
|
|
|
997
1042
|
anc_path_dict["cal-prod"],
|
|
998
1043
|
load_cdf(goodtimes_paths[0]),
|
|
999
1044
|
anc_path_dict["backgrounds"],
|
|
1045
|
+
anc_path_dict["gain-configuration"],
|
|
1000
1046
|
)
|
|
1001
1047
|
elif self.data_level == "l2":
|
|
1002
1048
|
science_paths = dependencies.get_file_paths(source="hi", data_type="l1c")
|
|
@@ -1208,52 +1254,109 @@ class Idex(ProcessInstrument):
|
|
|
1208
1254
|
class Lo(ProcessInstrument):
|
|
1209
1255
|
"""Process IMAP-Lo."""
|
|
1210
1256
|
|
|
1257
|
+
@staticmethod
|
|
1258
|
+
def _pointings_at_pivot_angle(
|
|
1259
|
+
dependencies: ProcessingInputCollection, map_pivot_angle: int
|
|
1260
|
+
) -> set[int]:
|
|
1261
|
+
"""
|
|
1262
|
+
Find the pointings that were taken at the pivot angle of a map.
|
|
1263
|
+
|
|
1264
|
+
A pointing's pivot angle is recorded in its goodtimes product, which is
|
|
1265
|
+
also the product the other inputs of that pointing are selected by.
|
|
1266
|
+
|
|
1267
|
+
Parameters
|
|
1268
|
+
----------
|
|
1269
|
+
dependencies : ProcessingInputCollection
|
|
1270
|
+
Object containing dependencies to process.
|
|
1271
|
+
map_pivot_angle : int
|
|
1272
|
+
The pivot angle [degrees] of the map being made.
|
|
1273
|
+
|
|
1274
|
+
Returns
|
|
1275
|
+
-------
|
|
1276
|
+
set[int]
|
|
1277
|
+
The repointings whose pivot angle is that of the map.
|
|
1278
|
+
"""
|
|
1279
|
+
at_pivot_angle = set()
|
|
1280
|
+
for goodtimes_path in dependencies.get_file_paths(
|
|
1281
|
+
source="lo", descriptor="goodtimes"
|
|
1282
|
+
):
|
|
1283
|
+
goodtimes = load_cdf(goodtimes_path)
|
|
1284
|
+
repointing = imap_data_access.ScienceFilePath(
|
|
1285
|
+
goodtimes_path.name
|
|
1286
|
+
).repointing
|
|
1287
|
+
if "pivot" not in goodtimes:
|
|
1288
|
+
logger.info(f"Dropping {goodtimes_path.name} - no pivot angle.")
|
|
1289
|
+
continue
|
|
1290
|
+
|
|
1291
|
+
pivot_angle = np.atleast_1d(goodtimes["pivot"].values)[0]
|
|
1292
|
+
if (
|
|
1293
|
+
abs(pivot_angle - map_pivot_angle)
|
|
1294
|
+
< LoConstants.PSET_PIVOT_ANGLE_TOLERANCE
|
|
1295
|
+
):
|
|
1296
|
+
at_pivot_angle.add(repointing)
|
|
1297
|
+
else:
|
|
1298
|
+
logger.info(
|
|
1299
|
+
f"Dropping repoint{repointing}, its pivot angle {pivot_angle} "
|
|
1300
|
+
f"is not the {map_pivot_angle} degree pivot angle of the map."
|
|
1301
|
+
)
|
|
1302
|
+
|
|
1303
|
+
return at_pivot_angle
|
|
1304
|
+
|
|
1211
1305
|
def pre_processing(self) -> ProcessingInputCollection:
|
|
1212
1306
|
"""
|
|
1213
1307
|
Complete pre-processing.
|
|
1214
1308
|
|
|
1215
|
-
Extends the base pre-processing by
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1309
|
+
Extends the base pre-processing by dropping, for map products, the Lo
|
|
1310
|
+
science inputs of the pointings that were not taken at the pivot angle
|
|
1311
|
+
of the map being made. A pointing is dropped whole: its goodtimes give
|
|
1312
|
+
the pivot angle, and its other inputs go with them.
|
|
1313
|
+
|
|
1314
|
+
Filtering here, rather than during processing, keeps the `Parents`
|
|
1315
|
+
attribute of the produced map limited to the files it was made from.
|
|
1220
1316
|
|
|
1221
1317
|
Returns
|
|
1222
1318
|
-------
|
|
1223
1319
|
dependencies : ProcessingInputCollection
|
|
1224
1320
|
Object containing dependencies to process.
|
|
1225
1321
|
"""
|
|
1226
|
-
|
|
1227
|
-
|
|
1322
|
+
dependencies = super().pre_processing()
|
|
1323
|
+
if self.data_level != "l2":
|
|
1324
|
+
return dependencies
|
|
1325
|
+
|
|
1326
|
+
try:
|
|
1327
|
+
map_pivot_angle = MapDescriptor.from_string(self.descriptor).sensor
|
|
1328
|
+
except ValueError:
|
|
1329
|
+
# Not a map product, so there is no pivot angle to select inputs with
|
|
1330
|
+
logger.info(
|
|
1331
|
+
f"Not filtering inputs by pivot angle, {self.descriptor} is not a "
|
|
1332
|
+
f"map descriptor."
|
|
1333
|
+
)
|
|
1334
|
+
return dependencies
|
|
1335
|
+
|
|
1336
|
+
if not isinstance(map_pivot_angle, int):
|
|
1337
|
+
# A map of no particular pivot angle, e.g. "ilo-ena-h-sf-nsp-ram-..."
|
|
1338
|
+
return dependencies
|
|
1339
|
+
|
|
1340
|
+
at_pivot_angle = self._pointings_at_pivot_angle(dependencies, map_pivot_angle)
|
|
1228
1341
|
|
|
1229
|
-
|
|
1342
|
+
filtered_dependencies = ProcessingInputCollection()
|
|
1343
|
+
for processing_input in dependencies.get_processing_inputs():
|
|
1230
1344
|
if (
|
|
1231
|
-
processing_input.
|
|
1232
|
-
|
|
1345
|
+
processing_input.input_type != ProcessingInputType.SCIENCE_FILE
|
|
1346
|
+
or processing_input.source != "lo"
|
|
1233
1347
|
):
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
pset = load_cdf(imap_file_path.construct_path())
|
|
1237
|
-
if "pivot_angle" in pset:
|
|
1238
|
-
if (
|
|
1239
|
-
abs(
|
|
1240
|
-
pset["pivot_angle"].item()
|
|
1241
|
-
- LoConstants.PSET_PIVOT_ANGLE
|
|
1242
|
-
)
|
|
1243
|
-
< LoConstants.PSET_PIVOT_ANGLE_TOLERANCE
|
|
1244
|
-
):
|
|
1245
|
-
valid_filenames.append(str(imap_file_path.filename))
|
|
1246
|
-
else:
|
|
1247
|
-
logger.info(
|
|
1248
|
-
f"Dropping pset {imap_file_path.filename} because "
|
|
1249
|
-
f"pivot angle is not in range."
|
|
1250
|
-
)
|
|
1251
|
-
if valid_filenames:
|
|
1252
|
-
new_datasets.add(type(processing_input)(*valid_filenames))
|
|
1253
|
-
else:
|
|
1254
|
-
new_datasets.add(processing_input)
|
|
1348
|
+
filtered_dependencies.add(processing_input)
|
|
1349
|
+
continue
|
|
1255
1350
|
|
|
1256
|
-
|
|
1351
|
+
kept_filenames = [
|
|
1352
|
+
str(imap_file_path.filename)
|
|
1353
|
+
for imap_file_path in processing_input.imap_file_paths
|
|
1354
|
+
if imap_file_path.repointing in at_pivot_angle
|
|
1355
|
+
]
|
|
1356
|
+
if kept_filenames:
|
|
1357
|
+
filtered_dependencies.add(type(processing_input)(*kept_filenames))
|
|
1358
|
+
|
|
1359
|
+
return filtered_dependencies
|
|
1257
1360
|
|
|
1258
1361
|
def do_processing(
|
|
1259
1362
|
self, dependencies: ProcessingInputCollection
|
|
@@ -1319,18 +1422,26 @@ class Lo(ProcessInstrument):
|
|
|
1319
1422
|
datasets = lo_l1c.lo_l1c(data_dict, anc_dependencies)
|
|
1320
1423
|
|
|
1321
1424
|
elif self.data_level == "l2":
|
|
1322
|
-
data_dict = {}
|
|
1323
|
-
science_files = dependencies.get_file_paths(source="lo", descriptor="pset")
|
|
1324
1425
|
anc_dependencies = dependencies.get_file_paths(data_type="ancillary")
|
|
1325
1426
|
|
|
1326
|
-
# Load
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1427
|
+
# Load every pointing of the map window, grouped into the products
|
|
1428
|
+
# of each pointing.
|
|
1429
|
+
sci_dependencies: dict[int, dict[str, xr.Dataset]] = {}
|
|
1430
|
+
for descriptor in lo_l2.REQUIRED_PRODUCTS:
|
|
1431
|
+
for file in dependencies.get_file_paths(
|
|
1432
|
+
source="lo", data_type="l1b", descriptor=descriptor
|
|
1433
|
+
):
|
|
1434
|
+
repointing = imap_data_access.ScienceFilePath(file.name).repointing
|
|
1435
|
+
if repointing is None:
|
|
1436
|
+
logger.warning(
|
|
1437
|
+
f"Dropping {file.name}, it covers no single pointing."
|
|
1438
|
+
)
|
|
1439
|
+
continue
|
|
1440
|
+
sci_dependencies.setdefault(repointing, {})[descriptor] = load_cdf(
|
|
1441
|
+
file
|
|
1442
|
+
)
|
|
1330
1443
|
|
|
1331
|
-
|
|
1332
|
-
data_dict[psets[0].attrs["Logical_source"]] = psets
|
|
1333
|
-
datasets = lo_l2.lo_l2(data_dict, anc_dependencies, self.descriptor)
|
|
1444
|
+
datasets = lo_l2.lo_l2(sci_dependencies, anc_dependencies, self.descriptor)
|
|
1334
1445
|
return datasets
|
|
1335
1446
|
|
|
1336
1447
|
|
|
@@ -1498,11 +1498,25 @@ class RectangularSkyMap(AbstractSkyMap):
|
|
|
1498
1498
|
# Now set global attributes
|
|
1499
1499
|
map_attrs = cdf_attrs.get_global_attributes(f"imap_{instrument}_{level}_enamap")
|
|
1500
1500
|
map_attrs["Spacing_degrees"] = str(self.spacing_deg)
|
|
1501
|
-
for key in ["Data_type", "Logical_source"
|
|
1501
|
+
for key in ["Data_type", "Logical_source"]:
|
|
1502
1502
|
map_attrs[key] = map_attrs[key].format(
|
|
1503
1503
|
descriptor=descriptor,
|
|
1504
1504
|
sensor=sensor,
|
|
1505
1505
|
)
|
|
1506
|
+
# Use the MapDescriptor to generate the Logical_source_description
|
|
1507
|
+
# when possible, but preserve previous behavior for non-descriptor
|
|
1508
|
+
# strings so later validation still raises the intended errors.
|
|
1509
|
+
try:
|
|
1510
|
+
md = naming.MapDescriptor.from_string(descriptor)
|
|
1511
|
+
except ValueError:
|
|
1512
|
+
map_attrs["Logical_source_description"] = map_attrs[
|
|
1513
|
+
"Logical_source_description"
|
|
1514
|
+
].format(
|
|
1515
|
+
descriptor=descriptor,
|
|
1516
|
+
sensor=sensor,
|
|
1517
|
+
)
|
|
1518
|
+
else:
|
|
1519
|
+
map_attrs["Logical_source_description"] = md.to_logical_source_description()
|
|
1506
1520
|
# Always add the following attributes to the map
|
|
1507
1521
|
map_attrs.update(
|
|
1508
1522
|
{
|
|
@@ -1804,8 +1818,10 @@ class HealpixSkyMap(AbstractSkyMap):
|
|
|
1804
1818
|
)
|
|
1805
1819
|
# Log the mean pixel value and the number of subdivisions for debugging
|
|
1806
1820
|
logger.debug(
|
|
1807
|
-
|
|
1808
|
-
|
|
1821
|
+
" Mean pixel value at Number of subdivisions: %s: array of shape %s: %s",
|
|
1822
|
+
num_subdivisions,
|
|
1823
|
+
mean_pixel_value.shape,
|
|
1824
|
+
mean_pixel_value,
|
|
1809
1825
|
)
|
|
1810
1826
|
return mean_pixel_value
|
|
1811
1827
|
|