imap-processing 1.0.27__tar.gz → 1.0.29__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.27 → imap_processing-1.0.29}/PKG-INFO +1 -1
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/_version.py +2 -2
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +48 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cli.py +31 -4
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_hi_sectored.py +6 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l2.py +10 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/ena_maps.py +12 -2
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l2/glows_l2.py +1 -1
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l2/glows_l2_data.py +103 -10
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/hi_l1c.py +223 -24
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/utils.py +194 -53
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/generate_coverage.py +1 -68
- imap_processing-1.0.29/imap_processing/ialirt/l0/process_status.py +77 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/constants.py +32 -2
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/extendedspin.py +58 -4
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/goodtimes.py +9 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/quality_flag_filters.py +3 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/ultra_l1b.py +23 -4
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/ultra_l1b_culling.py +143 -3
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/helio_pset.py +30 -19
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/l1c_lookup_utils.py +109 -26
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/spacecraft_pset.py +31 -17
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/ultra_l1c.py +5 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +1 -1
- {imap_processing-1.0.27 → imap_processing-1.0.29}/pyproject.toml +1 -1
- {imap_processing-1.0.27 → imap_processing-1.0.29}/LICENSE +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/README.md +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ancillary/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ancillary/ancillary_dataset_combiner.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ccsds/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ccsds/ccsds_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ccsds/excel_to_xtce.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_l2-hi-direct-events_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_l2-hi-omni_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_l2-hi-sectored_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_l2-lo-angular_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_l2-lo-direct-events_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_constant_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_default_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_enamaps_l2-common_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_enamaps_l2-healpix_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_enamaps_l2-rectangular_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_glows_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_glows_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_hi_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_hit_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_ialirt_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_ialirt_l1_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_idex_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_idex_l2a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_idex_l2b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_idex_l2c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_lo_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_mag_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_mag_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_mag_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_spacecraft_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_spacecraft_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_swe_l2_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/config/imap_variable_schema.yaml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/imap_cdf_manager.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/cdf/utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_de.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_hi_counters_aggregated.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_hi_counters_singles.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_hi_omni.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_hi_priority.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_ialirt_hi.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_lo_angular.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_lo_counters_aggregated.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_lo_counters_singles.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_lo_priority.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_lo_species.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/data/esa_sweep_values.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/data/lo_stepping_values.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/decompress.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/packet_definitions/P_COD_NHK.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/packet_definitions/imap_codice_packet-definition_20250101_v001.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/packet_definitions/imap_codice_packet-definition_20260129_v001.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/utils/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/utils/coordinates.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/utils/corrections.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/utils/map_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/utils/naming.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ena_maps/utils/spatial_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/ancillary/imap_glows_exclusions-by-instr-team_20250923_v002.dat +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/ancillary/imap_glows_map-of-excluded-regions_20250923_v002.dat +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/ancillary/imap_glows_map-of-uv-sources_20250923_v002.dat +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/ancillary/imap_glows_pipeline-settings_20250923_v002.json +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/ancillary/imap_glows_pipeline_settings_v001.json +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/ancillary/imap_glows_suspected-transients_20250923_v002.dat +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/ancillary/l1b_conversion_table_v001.json +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l0/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l0/decom_glows.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l0/glows_l0_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l1a/glows_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l1a/glows_l1a_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l1b/glows_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/l1b/glows_l1b_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/packet_definitions/GLX_COMBINED.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/packet_definitions/P_GLX_TMSCDE.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/packet_definitions/P_GLX_TMSCHIST.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/utils/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/glows/utils/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/hi_goodtimes.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/hi_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/hi_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/hi_l2.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/packet_definitions/TLM_HI_COMBINED_SCI.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hi/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/hit_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l0/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l0/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l0/decom_hit.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l1a/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l1a/hit_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l1b/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l1b/hit_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l2/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/l2/hit_l2.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/hit/packet_definitions/hit_packet_definitions.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/calculate_ingest.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/ialirt_spice.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/mag_l0_ialirt_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/parse_mag.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/process_codice.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/process_hit.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/process_swapi.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/l0/process_swe.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/ialirt.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/ialirt_codicehi.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/ialirt_codicelo.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/ialirt_hit.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/ialirt_mag.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/ialirt_swapi.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/packet_definitions/ialirt_swe.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/process_ephemeris.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/utils/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/utils/create_xarray.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/utils/grouping.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ialirt/utils/time.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/atomic_masses.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/decode.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/evt_msg_decode_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_evt_msg_parsing_dictionaries.json +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_l0.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_l2a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_l2b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/packet_definitions/idex_housekeeping_packet_definition.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/idex/packet_definitions/idex_science_packet_definition.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/ancillary_data/imap_lo_hydrogen-geometric-factor_v001.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/ancillary_data/imap_lo_oxygen-geometric-factor_v001.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/decompression_tables/decompression_tables.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/decompression_tables/log10_12_to_16_bit_uncompress.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/decompression_tables/log10_8_to_12_bit_uncompress.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/decompression_tables/log10_8_to_16_bit_uncompress.csv +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/lo_apid.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/lo_science.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/lo_star_sensor.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/utils/binary_string.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l0/utils/bit_decompression.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l1a/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l1a/lo_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l1b/lo_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l1b/tof_conversions.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l1c/lo_l1c.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/l2/lo_l2.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/lo_ancillary.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/lo/packet_definitions/lo_xtce.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/imap_mag_sdc_configuration_v001.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l0/decom_mag.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l0/mag_l0_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1a/mag_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1a/mag_l1a_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1b/imap_mag_l1b-calibration_20240229_v002.cdf +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1b/mag_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1c/interpolation_methods.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1c/mag_l1c.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1d/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1d/mag_l1d.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l1d/mag_l1d_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l2/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l2/mag_l2.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/l2/mag_l2_data.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/mag/packet_definitions/MAG_SCI_COMBINED.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/quality_flags.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spacecraft/packet_definitions/scid_x252.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spacecraft/quaternions.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spice/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spice/config.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spice/geometry.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spice/pointing_frame.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spice/repoint.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spice/spin.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/spice/time.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/l1/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/l1/swapi_l1.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/l2/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/l2/swapi_l2.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/packet_definitions/swapi_packet_definition.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swapi/swapi_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/l1a/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/l1a/swe_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/l1a/swe_science.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/l1b/swe_l1b.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/l2/swe_l2.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/packet_definitions/swe_packet_definition.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/utils/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/utils/swe_constants.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/swe/utils/swe_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l0/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l0/decom_tools.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l0/decom_ultra.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l0/ultra_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1a/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1a/ultra_l1a.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/badtimes.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/de.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/lookup_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/ultra_l1b_annotated.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1b/ultra_l1b_extended.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/make_helio_index_maps.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/imap_001.tf +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/imap_science_100.tf +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/imap_science_120.tf +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/imap_sclk_0000.tsc +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/imap_spk_demo.bsp +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/naif0012.tls +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/sim_1yr_imap_attitude.bc +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/sim_spice_kernels/sim_1yr_imap_pointing_frame.bc +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l1c/ultra_l1c_culling.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l2/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/l2/ultra_l2.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/packet_definitions/README.md +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/packet_definitions/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/utils/__init__.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/ultra/utils/ultra_l1_utils.py +0 -0
- {imap_processing-1.0.27 → imap_processing-1.0.29}/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.29"
|
|
3
|
+
__version_tuple__ = (1, 0, 29)
|
|
@@ -212,6 +212,54 @@ imap_ultra_l1b_90sensor-de:
|
|
|
212
212
|
Logical_source: imap_ultra_l1b_90sensor-de
|
|
213
213
|
Logical_source_description: IMAP-Ultra Instrument Level-1B Direct Event Data.
|
|
214
214
|
|
|
215
|
+
imap_ultra_l1b_45sensor-priority-1-de:
|
|
216
|
+
<<: *instrument_base
|
|
217
|
+
Data_type: L1B_PRIORITY_1_DE>Level-1B Priority 1 Direct Event
|
|
218
|
+
Logical_source: imap_ultra_l1b_45sensor-priority-1-de
|
|
219
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 1 Direct Event Data.
|
|
220
|
+
|
|
221
|
+
imap_ultra_l1b_90sensor-priority-1-de:
|
|
222
|
+
<<: *instrument_base
|
|
223
|
+
Data_type: L1B_PRIORITY_1_DE>Level-1B Priority 1 Direct Event
|
|
224
|
+
Logical_source: imap_ultra_l1b_90sensor-priority-1-de
|
|
225
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 1 Direct Event Data.
|
|
226
|
+
|
|
227
|
+
imap_ultra_l1b_45sensor-priority-2-de:
|
|
228
|
+
<<: *instrument_base
|
|
229
|
+
Data_type: L1B_PRIORITY_2_DE>Level-1B Priority 2 Direct Event
|
|
230
|
+
Logical_source: imap_ultra_l1b_45sensor-priority-2-de
|
|
231
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 2 Direct Event Data.
|
|
232
|
+
|
|
233
|
+
imap_ultra_l1b_90sensor-priority-2-de:
|
|
234
|
+
<<: *instrument_base
|
|
235
|
+
Data_type: L1B_PRIORITY_2_DE>Level-1B Priority 2 Direct Event
|
|
236
|
+
Logical_source: imap_ultra_l1b_90sensor-priority-2-de
|
|
237
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 2 Direct Event Data.
|
|
238
|
+
|
|
239
|
+
imap_ultra_l1b_45sensor-priority-3-de:
|
|
240
|
+
<<: *instrument_base
|
|
241
|
+
Data_type: L1B_PRIORITY_3_DE>Level-1B Priority 3 Direct Event
|
|
242
|
+
Logical_source: imap_ultra_l1b_45sensor-priority-3-de
|
|
243
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 3 Direct Event Data.
|
|
244
|
+
|
|
245
|
+
imap_ultra_l1b_90sensor-priority-3-de:
|
|
246
|
+
<<: *instrument_base
|
|
247
|
+
Data_type: L1B_PRIORITY_3_DE>Level-1B Priority 3 Direct Event
|
|
248
|
+
Logical_source: imap_ultra_l1b_90sensor-priority-3-de
|
|
249
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 3 Direct Event Data.
|
|
250
|
+
|
|
251
|
+
imap_ultra_l1b_45sensor-priority-4-de:
|
|
252
|
+
<<: *instrument_base
|
|
253
|
+
Data_type: L1B_PRIORITY_4_DE>Level-1B Priority 4 Direct Event
|
|
254
|
+
Logical_source: imap_ultra_l1b_45sensor-priority-4-de
|
|
255
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 4 Direct Event Data.
|
|
256
|
+
|
|
257
|
+
imap_ultra_l1b_90sensor-priority-4-de:
|
|
258
|
+
<<: *instrument_base
|
|
259
|
+
Data_type: L1B_PRIORITY_4_DE>Level-1B Priority 4 Direct Event
|
|
260
|
+
Logical_source: imap_ultra_l1b_90sensor-priority-4-de
|
|
261
|
+
Logical_source_description: IMAP-Ultra Instrument Level-1B Priority 4 Direct Event Data.
|
|
262
|
+
|
|
215
263
|
imap_ultra_l1b_45sensor-extendedspin:
|
|
216
264
|
<<: *instrument_base
|
|
217
265
|
Data_type: L1B_45Sensor-ExtendedSpin>Level-1B Extended Spin for Ultra45
|
|
@@ -879,11 +879,36 @@ class Hi(ProcessInstrument):
|
|
|
879
879
|
f"Expected exactly one DE science dependency. "
|
|
880
880
|
f"Got {l1b_de_paths}"
|
|
881
881
|
)
|
|
882
|
-
|
|
883
|
-
|
|
882
|
+
|
|
883
|
+
# Get ancillary dependencies
|
|
884
|
+
anc_dependencies = dependencies.get_processing_inputs(
|
|
885
|
+
data_type="ancillary"
|
|
886
|
+
)
|
|
887
|
+
if len(anc_dependencies) != 2:
|
|
888
|
+
raise ValueError(
|
|
889
|
+
f"Expected two ancillary dependencies (cal-prod and "
|
|
890
|
+
f"backgrounds). Got "
|
|
891
|
+
f"{[anc_dep.descriptor for anc_dep in anc_dependencies]}"
|
|
892
|
+
)
|
|
893
|
+
|
|
894
|
+
# Create mapping from descriptor to path
|
|
895
|
+
anc_path_dict = {
|
|
896
|
+
dep.descriptor.split("-", 1)[1]: dep.imap_file_paths[
|
|
897
|
+
0
|
|
898
|
+
].construct_path()
|
|
899
|
+
for dep in anc_dependencies
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
# Verify we have both required ancillary files
|
|
903
|
+
if (
|
|
904
|
+
"cal-prod" not in anc_path_dict
|
|
905
|
+
or "backgrounds" not in anc_path_dict
|
|
906
|
+
):
|
|
884
907
|
raise ValueError(
|
|
885
|
-
f"
|
|
908
|
+
f"Missing required ancillary files. Expected 'cal-prod' and "
|
|
909
|
+
f"'backgrounds', got {list(anc_path_dict.keys())}"
|
|
886
910
|
)
|
|
911
|
+
|
|
887
912
|
# Load goodtimes dependency
|
|
888
913
|
goodtimes_paths = dependencies.get_file_paths(
|
|
889
914
|
source="hi", data_type="l1b", descriptor="goodtimes"
|
|
@@ -893,10 +918,12 @@ class Hi(ProcessInstrument):
|
|
|
893
918
|
f"Expected exactly one goodtimes dependency. "
|
|
894
919
|
f"Got {goodtimes_paths}"
|
|
895
920
|
)
|
|
921
|
+
|
|
896
922
|
datasets = hi_l1c.hi_l1c(
|
|
897
923
|
load_cdf(l1b_de_paths[0]),
|
|
898
|
-
|
|
924
|
+
anc_path_dict["cal-prod"],
|
|
899
925
|
load_cdf(goodtimes_paths[0]),
|
|
926
|
+
anc_path_dict["backgrounds"],
|
|
900
927
|
)
|
|
901
928
|
elif self.data_level == "l2":
|
|
902
929
|
science_paths = dependencies.get_file_paths(source="hi", data_type="l1c")
|
{imap_processing-1.0.27 → imap_processing-1.0.29}/imap_processing/codice/codice_l1a_hi_sectored.py
RENAMED
|
@@ -234,7 +234,13 @@ def l1a_hi_sectored(unpacked_dataset: xr.Dataset, lut_file: Path) -> xr.Dataset:
|
|
|
234
234
|
|
|
235
235
|
# Extract species data from decompressed data:
|
|
236
236
|
# - (num_packets, energy_bins, spin_sector, inst_az)
|
|
237
|
+
# Unpacked data is in this order:
|
|
238
|
+
# (epoch, number_species, energy_{species}, inst_az, spin_sector)
|
|
237
239
|
species_data = decompressed_data[:, species_index, :, :, :]
|
|
240
|
+
# Now transpose to put data in the correct order for writing to CDF:
|
|
241
|
+
# (epoch, energy_{species}, spin_sector, inst_az)
|
|
242
|
+
species_data = np.transpose(species_data, [0, 1, 3, 2])
|
|
243
|
+
|
|
238
244
|
species_attrs = cdf_attrs.get_variable_attributes("hi-species-attrs")
|
|
239
245
|
species_attrs = apply_replacements_to_attrs(
|
|
240
246
|
species_attrs, {"species": species_name}
|
|
@@ -1166,6 +1166,16 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset:
|
|
|
1166
1166
|
base_angles = np.asarray(L2_HI_SECTORED_ANGLE, dtype=float).reshape(n_spin, 1)
|
|
1167
1167
|
|
|
1168
1168
|
spin_angle = (base_angles + elevation_offsets) % 360.0
|
|
1169
|
+
# We need to transpose spin_angle to put spin_angle data into correct
|
|
1170
|
+
# dimensions. Eg.
|
|
1171
|
+
# spin_angle[0,0] - 285
|
|
1172
|
+
# spin_angle[1,0] - 315
|
|
1173
|
+
# ....
|
|
1174
|
+
# This is expected behavior per CoDICE because the spin angle should increments
|
|
1175
|
+
# at 30 degree spin angle per elevation angle. Due to that, in the example, the
|
|
1176
|
+
# column remained same but spin angle incremented by 30 degrees for each
|
|
1177
|
+
# elevation angle.
|
|
1178
|
+
spin_angle = spin_angle.T
|
|
1169
1179
|
# Add spin angle variable using the new elevation_angle dimension
|
|
1170
1180
|
l2_dataset["spin_angle"] = (("spin_sector", "elevation_angle"), spin_angle)
|
|
1171
1181
|
l2_dataset["spin_angle"].attrs = cdf_attrs.get_variable_attributes(
|
|
@@ -627,6 +627,14 @@ class UltraPointingSet(HealpixPointingSet):
|
|
|
627
627
|
nside of the input pset counts variable (e.g. 128) to the nside of the pset.
|
|
628
628
|
"""
|
|
629
629
|
pset_data = self.data
|
|
630
|
+
# TODO remove this check once we reprocess all psets
|
|
631
|
+
# going forward, all psets should have counts_pixel_index as a coordinate.
|
|
632
|
+
if "counts_pixel_index" not in pset_data.dims:
|
|
633
|
+
logger.info(
|
|
634
|
+
"No counts_pixel_index found in the dataset. Skipping counts "
|
|
635
|
+
"downsampling."
|
|
636
|
+
)
|
|
637
|
+
return
|
|
630
638
|
counts_n_pix = pset_data.sizes["counts_pixel_index"]
|
|
631
639
|
pset_n_pix = hp.nside2npix(self.nside)
|
|
632
640
|
if counts_n_pix != pset_n_pix:
|
|
@@ -647,9 +655,11 @@ class UltraPointingSet(HealpixPointingSet):
|
|
|
647
655
|
# Get counts in nested ordering. In nested ordering, the
|
|
648
656
|
# pixels that need to be binned together to go from the counts nside to
|
|
649
657
|
# the pset nside are contiguous in the array.
|
|
658
|
+
# Use nest2ring to get the indices to convert from ring to nest ordering if
|
|
659
|
+
# necessary.
|
|
650
660
|
if not self.nested:
|
|
651
661
|
counts_n = counts[
|
|
652
|
-
:, hp.
|
|
662
|
+
:, hp.nest2ring(counts_nside, np.arange(counts_n_pix))
|
|
653
663
|
]
|
|
654
664
|
else:
|
|
655
665
|
counts_n = counts
|
|
@@ -667,7 +677,7 @@ class UltraPointingSet(HealpixPointingSet):
|
|
|
667
677
|
# convert back to ring ordering if necessary and store in the
|
|
668
678
|
# downsampled counts array
|
|
669
679
|
binned_counts_n = binned_counts_n[
|
|
670
|
-
:, hp.
|
|
680
|
+
:, hp.ring2nest(self.nside, np.arange(pset_n_pix))
|
|
671
681
|
]
|
|
672
682
|
|
|
673
683
|
self.data["counts"] = xr.DataArray(
|
|
@@ -59,7 +59,7 @@ def glows_l2(
|
|
|
59
59
|
pipeline_settings_dataset.sel(epoch=day, method="nearest")
|
|
60
60
|
)
|
|
61
61
|
|
|
62
|
-
l2 = HistogramL2(input_dataset, pipeline_settings)
|
|
62
|
+
l2 = HistogramL2(input_dataset, pipeline_settings, calibration_dataset)
|
|
63
63
|
if l2.number_of_good_l1b_inputs == 0:
|
|
64
64
|
logger.warning("No good data found in L1B dataset. Returning empty list.")
|
|
65
65
|
return []
|
|
@@ -14,7 +14,12 @@ from imap_processing.spice.geometry import (
|
|
|
14
14
|
frame_transform_az_el,
|
|
15
15
|
get_instrument_mounting_az_el,
|
|
16
16
|
)
|
|
17
|
-
from imap_processing.spice.time import
|
|
17
|
+
from imap_processing.spice.time import (
|
|
18
|
+
et_to_datetime64,
|
|
19
|
+
met_to_sclkticks,
|
|
20
|
+
sct_to_et,
|
|
21
|
+
ttj2000ns_to_et,
|
|
22
|
+
)
|
|
18
23
|
|
|
19
24
|
|
|
20
25
|
@dataclass
|
|
@@ -46,6 +51,8 @@ class DailyLightcurve:
|
|
|
46
51
|
number of bins in lightcurve
|
|
47
52
|
l1b_data : xarray.Dataset
|
|
48
53
|
L1B data filtered by good times, good angles, and good bins.
|
|
54
|
+
calibration_factor : float | None
|
|
55
|
+
Rayleigh calibration factor used for flux calculations.
|
|
49
56
|
"""
|
|
50
57
|
|
|
51
58
|
# All variables should have n_bin elements
|
|
@@ -55,14 +62,19 @@ class DailyLightcurve:
|
|
|
55
62
|
exposure_times: np.ndarray = field(init=False)
|
|
56
63
|
flux_uncertainties: np.ndarray = field(init=False)
|
|
57
64
|
histogram_flag_array: np.ndarray = field(init=False)
|
|
58
|
-
# TODO: ecliptic coordinates
|
|
59
65
|
ecliptic_lon: np.ndarray = field(init=False)
|
|
60
66
|
ecliptic_lat: np.ndarray = field(init=False)
|
|
61
67
|
number_of_bins: int = field(init=False)
|
|
62
68
|
l1b_data: InitVar[xr.Dataset]
|
|
63
69
|
position_angle: InitVar[float]
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
calibration_factor: InitVar[float | None]
|
|
71
|
+
|
|
72
|
+
def __post_init__(
|
|
73
|
+
self,
|
|
74
|
+
l1b_data: xr.Dataset,
|
|
75
|
+
position_angle: float,
|
|
76
|
+
calibration_factor: float | None,
|
|
77
|
+
) -> None:
|
|
66
78
|
"""
|
|
67
79
|
Compute all the daily lightcurve variables from L1B data.
|
|
68
80
|
|
|
@@ -74,6 +86,10 @@ class DailyLightcurve:
|
|
|
74
86
|
position_angle : float
|
|
75
87
|
The offset angle of the GLOWS instrument from the north spin point - this
|
|
76
88
|
is used in spin angle calculations.
|
|
89
|
+
calibration_factor : float
|
|
90
|
+
Calibration factor used for flux calculations, in units of counts per second
|
|
91
|
+
per Rayleigh. This is used to convert from raw histograms and exposure times
|
|
92
|
+
to physical photon flux units.
|
|
77
93
|
"""
|
|
78
94
|
# number_of_bins_per_histogram is the count of valid (non-FILLVAL) bins.
|
|
79
95
|
# Histogram arrays from L1B are always GlowsConstants.STANDARD_BIN_COUNT
|
|
@@ -107,12 +123,16 @@ class DailyLightcurve:
|
|
|
107
123
|
self.flux_uncertainties = np.zeros(self.number_of_bins)
|
|
108
124
|
|
|
109
125
|
if (
|
|
110
|
-
|
|
126
|
+
self.number_of_bins > 0
|
|
111
127
|
and self.exposure_times[0] > 0
|
|
112
|
-
and
|
|
128
|
+
and calibration_factor
|
|
113
129
|
):
|
|
114
|
-
self.photon_flux =
|
|
115
|
-
|
|
130
|
+
self.photon_flux = (
|
|
131
|
+
self.raw_histograms / self.exposure_times
|
|
132
|
+
) / calibration_factor
|
|
133
|
+
self.flux_uncertainties = (
|
|
134
|
+
raw_uncertainties / self.exposure_times
|
|
135
|
+
) / calibration_factor
|
|
116
136
|
|
|
117
137
|
self.spin_angle = np.zeros(0)
|
|
118
138
|
|
|
@@ -244,6 +264,8 @@ class HistogramL2:
|
|
|
244
264
|
GLOWS histogram L1B dataset, as produced by glows_l1b.py.
|
|
245
265
|
pipeline_settings : PipelineSettings
|
|
246
266
|
Pipeline settings object read from ancillary file.
|
|
267
|
+
calibration_dataset : xr.Dataset
|
|
268
|
+
The cps-to-Rayleigh calibration dataset needed for flux calculations.
|
|
247
269
|
|
|
248
270
|
Attributes
|
|
249
271
|
----------
|
|
@@ -327,7 +349,12 @@ class HistogramL2:
|
|
|
327
349
|
spin_axis_orientation_average: np.ndarray[np.double]
|
|
328
350
|
bad_time_flag_occurrences: np.ndarray
|
|
329
351
|
|
|
330
|
-
def __init__(
|
|
352
|
+
def __init__(
|
|
353
|
+
self,
|
|
354
|
+
l1b_dataset: xr.Dataset,
|
|
355
|
+
pipeline_settings: PipelineSettings,
|
|
356
|
+
calibration_dataset: xr.Dataset,
|
|
357
|
+
) -> None:
|
|
331
358
|
"""
|
|
332
359
|
Given an L1B dataset, process data into an output HistogramL2 object.
|
|
333
360
|
|
|
@@ -337,6 +364,9 @@ class HistogramL2:
|
|
|
337
364
|
GLOWS histogram L1B dataset, as produced by glows_l1b.py.
|
|
338
365
|
pipeline_settings : PipelineSettings
|
|
339
366
|
Pipeline settings object read from ancillary file.
|
|
367
|
+
calibration_dataset : xr.Dataset
|
|
368
|
+
cps-to-Rayleigh calibration dataset used for flux calculations.
|
|
369
|
+
coords: start_time_utc, data_vars: cps_per_r
|
|
340
370
|
"""
|
|
341
371
|
active_flags = np.array(pipeline_settings.active_bad_time_flags, dtype=float)
|
|
342
372
|
|
|
@@ -438,7 +468,17 @@ class HistogramL2:
|
|
|
438
468
|
.data[np.newaxis, :]
|
|
439
469
|
)
|
|
440
470
|
|
|
441
|
-
|
|
471
|
+
# Select calibration factor corresponding to the mid-epoch in the L1B data.
|
|
472
|
+
if len(good_data["epoch"].data) != 0:
|
|
473
|
+
calibration_factor = self.get_calibration_factor(
|
|
474
|
+
good_data["epoch"].data, calibration_dataset
|
|
475
|
+
)
|
|
476
|
+
else:
|
|
477
|
+
calibration_factor = None # No good data available. Still proceed
|
|
478
|
+
|
|
479
|
+
self.daily_lightcurve = DailyLightcurve(
|
|
480
|
+
good_data, position_angle, calibration_factor
|
|
481
|
+
)
|
|
442
482
|
|
|
443
483
|
def filter_bad_bins(self, histograms: NDArray, bin_exclusions: NDArray) -> NDArray:
|
|
444
484
|
"""
|
|
@@ -517,3 +557,56 @@ class HistogramL2:
|
|
|
517
557
|
# doesn't move from the SPICE determined mounting angle.
|
|
518
558
|
glows_mounting_azimuth, _ = get_instrument_mounting_az_el(SpiceFrame.IMAP_GLOWS)
|
|
519
559
|
return (360.0 - glows_mounting_azimuth) % 360.0
|
|
560
|
+
|
|
561
|
+
@staticmethod
|
|
562
|
+
def get_calibration_factor(
|
|
563
|
+
epoch_values: np.ndarray, calibration_dataset: xr.Dataset
|
|
564
|
+
) -> float:
|
|
565
|
+
"""
|
|
566
|
+
Select calibration factor for an observational day.
|
|
567
|
+
|
|
568
|
+
The calibration factor is needed to compute flux in Rayleigh units.
|
|
569
|
+
There is a strong assumption that the calibration is constant for
|
|
570
|
+
a given observational day.
|
|
571
|
+
|
|
572
|
+
Parameters
|
|
573
|
+
----------
|
|
574
|
+
epoch_values : np.ndarray
|
|
575
|
+
Array of epoch values from the L1B dataset, in TT J2000 nanoseconds.
|
|
576
|
+
calibration_dataset : xr.Dataset
|
|
577
|
+
Dataset containing calibration data with the following structure:
|
|
578
|
+
Coords: epoch (datetime64[s])
|
|
579
|
+
Dims: epoch, cps_per_r_dim_0, start_time_utc_dim_0
|
|
580
|
+
Data vars: "cps_per_r" and "start_time_utc" are 2D (epoch, *_dim_0)
|
|
581
|
+
|
|
582
|
+
Note: epoch and start_time_utc do not necessarily match in size or
|
|
583
|
+
values
|
|
584
|
+
- epoch contains timestamps in the calibration data up to a defined
|
|
585
|
+
day buffer and start_time_utc are the timestamps for all the
|
|
586
|
+
calibration data entries.
|
|
587
|
+
- epoch is used for selecting the time block, and start_time_utc is
|
|
588
|
+
used for selecting the calibration value within that block.
|
|
589
|
+
|
|
590
|
+
Returns
|
|
591
|
+
-------
|
|
592
|
+
float
|
|
593
|
+
The calibration factor needed to compute flux in Rayleigh units.
|
|
594
|
+
"""
|
|
595
|
+
# Use the midpoint epoch for the observation day
|
|
596
|
+
mid_idx = len(epoch_values) // 2
|
|
597
|
+
mid_epoch_utc = et_to_datetime64(ttj2000ns_to_et(epoch_values[mid_idx].item()))
|
|
598
|
+
|
|
599
|
+
# Select calibration data before or equal to mid_epoch_utc using "pad" to find
|
|
600
|
+
# the nearest preceding entry in the calibration dataset's epoch
|
|
601
|
+
# coordinate which is in UTC datetime64 format.
|
|
602
|
+
cal_at_epoch = calibration_dataset.sel(epoch=mid_epoch_utc, method="pad")
|
|
603
|
+
|
|
604
|
+
# start_time_utc is a data variable with its own index dimension.
|
|
605
|
+
# Use searchsorted to find the last entry whose start_time_utc <= mid_epoch_utc.
|
|
606
|
+
start_times = np.array(
|
|
607
|
+
cal_at_epoch["start_time_utc"].values, dtype="datetime64[ns]"
|
|
608
|
+
)
|
|
609
|
+
nearest_idx = np.searchsorted(start_times, mid_epoch_utc, side="right") - 1
|
|
610
|
+
|
|
611
|
+
# Select the calibration value at the nearest index.
|
|
612
|
+
return float(cal_at_epoch["cps_per_r"].isel(cps_per_r_dim_0=nearest_idx))
|