imap-processing 0.11.0__py3-none-any.whl → 0.13.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of imap-processing might be problematic. Click here for more details.
- imap_processing/__init__.py +11 -11
- imap_processing/_version.py +2 -2
- imap_processing/ccsds/ccsds_data.py +1 -2
- imap_processing/ccsds/excel_to_xtce.py +66 -18
- imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +24 -40
- imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +934 -42
- imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +1846 -128
- imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +0 -5
- imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +10 -11
- imap_processing/cdf/config/imap_hi_variable_attrs.yaml +17 -19
- imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +27 -14
- imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +106 -116
- imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +120 -145
- imap_processing/cdf/config/imap_hit_l2_variable_attrs.yaml +14 -0
- imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +25 -9
- imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +6 -4
- imap_processing/cdf/config/imap_idex_l1b_variable_attrs.yaml +3 -3
- imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +0 -12
- imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +1 -1
- imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +23 -20
- imap_processing/cdf/config/imap_mag_l1a_variable_attrs.yaml +361 -0
- imap_processing/cdf/config/imap_mag_l1b_variable_attrs.yaml +160 -0
- imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +160 -0
- imap_processing/cdf/config/imap_spacecraft_global_cdf_attrs.yaml +18 -0
- imap_processing/cdf/config/imap_spacecraft_variable_attrs.yaml +40 -0
- imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +1 -5
- imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +22 -0
- imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +12 -4
- imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +16 -2
- imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +64 -52
- imap_processing/cdf/config/imap_swe_l2_variable_attrs.yaml +71 -47
- imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +180 -19
- imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +5045 -41
- imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +80 -17
- imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +32 -57
- imap_processing/cdf/utils.py +52 -38
- imap_processing/cli.py +477 -233
- imap_processing/codice/codice_l1a.py +466 -131
- imap_processing/codice/codice_l1b.py +51 -152
- imap_processing/codice/constants.py +1360 -569
- imap_processing/codice/decompress.py +2 -6
- imap_processing/ena_maps/ena_maps.py +1103 -146
- imap_processing/ena_maps/utils/coordinates.py +19 -0
- imap_processing/ena_maps/utils/map_utils.py +14 -17
- imap_processing/ena_maps/utils/spatial_utils.py +55 -52
- imap_processing/glows/l1a/glows_l1a.py +28 -99
- imap_processing/glows/l1a/glows_l1a_data.py +2 -2
- imap_processing/glows/l1b/glows_l1b.py +1 -4
- imap_processing/glows/l1b/glows_l1b_data.py +1 -3
- imap_processing/glows/l2/glows_l2.py +2 -5
- imap_processing/hi/l1a/hi_l1a.py +54 -29
- imap_processing/hi/l1a/histogram.py +0 -1
- imap_processing/hi/l1a/science_direct_event.py +6 -8
- imap_processing/hi/l1b/hi_l1b.py +111 -82
- imap_processing/hi/l1c/hi_l1c.py +416 -32
- imap_processing/hi/utils.py +58 -12
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-sector-dt0-factors_20250219_v002.csv +81 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt0-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt1-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt2-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt3-factors_20250219_v002.csv +205 -0
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-summed-dt0-factors_20250219_v002.csv +68 -0
- imap_processing/hit/hit_utils.py +235 -5
- imap_processing/hit/l0/constants.py +20 -11
- imap_processing/hit/l0/decom_hit.py +21 -5
- imap_processing/hit/l1a/hit_l1a.py +71 -75
- imap_processing/hit/l1b/constants.py +321 -0
- imap_processing/hit/l1b/hit_l1b.py +377 -67
- imap_processing/hit/l2/constants.py +318 -0
- imap_processing/hit/l2/hit_l2.py +723 -0
- imap_processing/hit/packet_definitions/hit_packet_definitions.xml +1323 -71
- imap_processing/ialirt/l0/mag_l0_ialirt_data.py +155 -0
- imap_processing/ialirt/l0/parse_mag.py +374 -0
- imap_processing/ialirt/l0/process_swapi.py +69 -0
- imap_processing/ialirt/l0/process_swe.py +548 -0
- imap_processing/ialirt/packet_definitions/ialirt.xml +216 -208
- imap_processing/ialirt/packet_definitions/ialirt_codicehi.xml +1 -1
- imap_processing/ialirt/packet_definitions/ialirt_codicelo.xml +1 -1
- imap_processing/ialirt/packet_definitions/ialirt_mag.xml +115 -0
- imap_processing/ialirt/packet_definitions/ialirt_swapi.xml +14 -14
- imap_processing/ialirt/utils/grouping.py +114 -0
- imap_processing/ialirt/utils/time.py +29 -0
- imap_processing/idex/atomic_masses.csv +22 -0
- imap_processing/idex/decode.py +2 -2
- imap_processing/idex/idex_constants.py +33 -0
- imap_processing/idex/idex_l0.py +22 -8
- imap_processing/idex/idex_l1a.py +81 -51
- imap_processing/idex/idex_l1b.py +13 -39
- imap_processing/idex/idex_l2a.py +823 -0
- imap_processing/idex/idex_l2b.py +120 -0
- imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +11 -11
- imap_processing/idex/packet_definitions/idex_housekeeping_packet_definition.xml +9130 -0
- imap_processing/lo/l0/lo_science.py +7 -2
- imap_processing/lo/l1a/lo_l1a.py +1 -5
- imap_processing/lo/l1b/lo_l1b.py +702 -29
- imap_processing/lo/l1b/tof_conversions.py +11 -0
- imap_processing/lo/l1c/lo_l1c.py +1 -4
- imap_processing/mag/constants.py +51 -0
- imap_processing/mag/imap_mag_sdc_configuration_v001.py +8 -0
- imap_processing/mag/l0/decom_mag.py +10 -3
- imap_processing/mag/l1a/mag_l1a.py +23 -19
- imap_processing/mag/l1a/mag_l1a_data.py +35 -10
- imap_processing/mag/l1b/mag_l1b.py +259 -50
- imap_processing/mag/l1c/interpolation_methods.py +388 -0
- imap_processing/mag/l1c/mag_l1c.py +621 -17
- imap_processing/mag/l2/mag_l2.py +140 -0
- imap_processing/mag/l2/mag_l2_data.py +288 -0
- imap_processing/quality_flags.py +1 -0
- imap_processing/spacecraft/packet_definitions/scid_x252.xml +538 -0
- imap_processing/spacecraft/quaternions.py +121 -0
- imap_processing/spice/geometry.py +19 -22
- imap_processing/spice/kernels.py +0 -276
- imap_processing/spice/pointing_frame.py +257 -0
- imap_processing/spice/repoint.py +149 -0
- imap_processing/spice/spin.py +38 -33
- imap_processing/spice/time.py +24 -0
- imap_processing/swapi/l1/swapi_l1.py +20 -12
- imap_processing/swapi/l2/swapi_l2.py +116 -5
- imap_processing/swapi/swapi_utils.py +32 -0
- imap_processing/swe/l1a/swe_l1a.py +44 -12
- imap_processing/swe/l1a/swe_science.py +13 -13
- imap_processing/swe/l1b/swe_l1b.py +898 -23
- imap_processing/swe/l2/swe_l2.py +75 -136
- imap_processing/swe/packet_definitions/swe_packet_definition.xml +1121 -1
- imap_processing/swe/utils/swe_constants.py +64 -0
- imap_processing/swe/utils/swe_utils.py +85 -28
- imap_processing/tests/ccsds/test_data/expected_output.xml +40 -1
- imap_processing/tests/ccsds/test_excel_to_xtce.py +24 -21
- imap_processing/tests/cdf/test_data/imap_instrument2_global_cdf_attrs.yaml +0 -2
- imap_processing/tests/cdf/test_utils.py +14 -16
- imap_processing/tests/codice/conftest.py +44 -33
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-counters-aggregated_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-counters-singles_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-ialirt_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-omni_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-pha_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-priorities_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-sectored_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-counters-aggregated_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-counters-singles_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-angular_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-priority_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-species_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-pha_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-angular_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-priority_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-species_20241110193700_v0.0.0.cdf +0 -0
- imap_processing/tests/codice/test_codice_l1a.py +126 -53
- imap_processing/tests/codice/test_codice_l1b.py +6 -7
- imap_processing/tests/codice/test_decompress.py +4 -4
- imap_processing/tests/conftest.py +239 -27
- imap_processing/tests/ena_maps/conftest.py +51 -0
- imap_processing/tests/ena_maps/test_ena_maps.py +1068 -110
- imap_processing/tests/ena_maps/test_map_utils.py +66 -43
- imap_processing/tests/ena_maps/test_spatial_utils.py +17 -21
- imap_processing/tests/glows/conftest.py +10 -14
- imap_processing/tests/glows/test_glows_decom.py +4 -4
- imap_processing/tests/glows/test_glows_l1a_cdf.py +6 -27
- imap_processing/tests/glows/test_glows_l1a_data.py +6 -8
- imap_processing/tests/glows/test_glows_l1b.py +11 -11
- imap_processing/tests/glows/test_glows_l1b_data.py +5 -5
- imap_processing/tests/glows/test_glows_l2.py +2 -8
- imap_processing/tests/hi/conftest.py +1 -1
- imap_processing/tests/hi/data/l0/H45_diag_fee_20250208.bin +0 -0
- imap_processing/tests/hi/data/l0/H45_diag_fee_20250208_verify.csv +205 -0
- imap_processing/tests/hi/test_hi_l1b.py +22 -27
- imap_processing/tests/hi/test_hi_l1c.py +249 -18
- imap_processing/tests/hi/test_l1a.py +35 -7
- imap_processing/tests/hi/test_science_direct_event.py +3 -3
- imap_processing/tests/hi/test_utils.py +24 -2
- imap_processing/tests/hit/helpers/l1_validation.py +74 -73
- imap_processing/tests/hit/test_data/hskp_sample.ccsds +0 -0
- imap_processing/tests/hit/test_data/imap_hit_l0_raw_20100105_v001.pkts +0 -0
- imap_processing/tests/hit/test_decom_hit.py +5 -1
- imap_processing/tests/hit/test_hit_l1a.py +32 -36
- imap_processing/tests/hit/test_hit_l1b.py +300 -81
- imap_processing/tests/hit/test_hit_l2.py +716 -0
- imap_processing/tests/hit/test_hit_utils.py +184 -7
- imap_processing/tests/hit/validation_data/hit_l1b_standard_sample2_nsrl_v4_3decimals.csv +62 -62
- imap_processing/tests/hit/validation_data/hskp_sample_eu_3_6_2025.csv +89 -0
- imap_processing/tests/hit/validation_data/hskp_sample_raw.csv +89 -88
- imap_processing/tests/hit/validation_data/sci_sample_raw.csv +1 -1
- imap_processing/tests/ialirt/data/l0/461971383-404.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971384-405.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971385-406.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971386-407.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971387-408.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971388-409.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971389-410.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971390-411.bin +0 -0
- imap_processing/tests/ialirt/data/l0/461971391-412.bin +0 -0
- imap_processing/tests/ialirt/data/l0/sample_decoded_i-alirt_data.csv +383 -0
- imap_processing/tests/ialirt/unit/test_decom_ialirt.py +16 -81
- imap_processing/tests/ialirt/unit/test_grouping.py +81 -0
- imap_processing/tests/ialirt/unit/test_parse_mag.py +223 -0
- imap_processing/tests/ialirt/unit/test_process_codicehi.py +3 -3
- imap_processing/tests/ialirt/unit/test_process_codicelo.py +3 -10
- imap_processing/tests/ialirt/unit/test_process_ephemeris.py +4 -4
- imap_processing/tests/ialirt/unit/test_process_hit.py +3 -3
- imap_processing/tests/ialirt/unit/test_process_swapi.py +24 -16
- imap_processing/tests/ialirt/unit/test_process_swe.py +319 -6
- imap_processing/tests/ialirt/unit/test_time.py +16 -0
- imap_processing/tests/idex/conftest.py +127 -6
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20231218_v001.pkts +0 -0
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20241206_v001.pkts +0 -0
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20250108_v001.pkts +0 -0
- imap_processing/tests/idex/test_data/impact_14_tof_high_data.txt +4508 -4508
- imap_processing/tests/idex/test_idex_l0.py +33 -11
- imap_processing/tests/idex/test_idex_l1a.py +92 -21
- imap_processing/tests/idex/test_idex_l1b.py +106 -27
- imap_processing/tests/idex/test_idex_l2a.py +399 -0
- imap_processing/tests/idex/test_idex_l2b.py +93 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_de_20241022_v002.cdf +0 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_spin_20241022_v002.cdf +0 -0
- imap_processing/tests/lo/test_lo_l1a.py +3 -3
- imap_processing/tests/lo/test_lo_l1b.py +515 -6
- imap_processing/tests/lo/test_lo_l1c.py +1 -1
- imap_processing/tests/lo/test_lo_science.py +7 -7
- imap_processing/tests/lo/test_star_sensor.py +1 -1
- imap_processing/tests/mag/conftest.py +120 -2
- imap_processing/tests/mag/test_mag_decom.py +5 -4
- imap_processing/tests/mag/test_mag_l1a.py +51 -7
- imap_processing/tests/mag/test_mag_l1b.py +40 -59
- imap_processing/tests/mag/test_mag_l1c.py +354 -19
- imap_processing/tests/mag/test_mag_l2.py +130 -0
- imap_processing/tests/mag/test_mag_validation.py +247 -26
- imap_processing/tests/mag/validation/L1b/T009/MAGScience-normal-(2,2)-8s-20250204-16h39.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T009/mag-l1a-l1b-t009-magi-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T009/mag-l1a-l1b-t009-mago-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T010/MAGScience-normal-(2,2)-8s-20250206-12h05.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T011/MAGScience-normal-(2,2)-8s-20250204-16h08.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T011/mag-l1a-l1b-t011-magi-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T011/mag-l1a-l1b-t011-mago-out.csv +16 -16
- imap_processing/tests/mag/validation/L1b/T012/MAGScience-normal-(2,2)-8s-20250204-16h08.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T012/data.bin +0 -0
- imap_processing/tests/mag/validation/L1b/T012/field_like_all_ranges.txt +19200 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-cal.cdf +0 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-in.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-magi-out.csv +17 -0
- imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-mago-out.csv +17 -0
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-magi-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-magi-normal-out.csv +1857 -0
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-mago-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-mago-normal-out.csv +1857 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-magi-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-magi-normal-out.csv +1793 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-mago-normal-in.csv +1217 -0
- imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-mago-normal-out.csv +1793 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-burst-in.csv +2561 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-normal-in.csv +961 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-normal-out.csv +1539 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-mago-normal-in.csv +1921 -0
- imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-mago-normal-out.csv +2499 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-magi-normal-in.csv +865 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-magi-normal-out.csv +1196 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-mago-normal-in.csv +1729 -0
- imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-mago-normal-out.csv +3053 -0
- imap_processing/tests/mag/validation/L2/imap_mag_l1b_norm-mago_20251017_v002.cdf +0 -0
- imap_processing/tests/mag/validation/calibration/imap_mag_l1b-calibration_20240229_v001.cdf +0 -0
- imap_processing/tests/mag/validation/calibration/imap_mag_l2-calibration-matrices_20251017_v004.cdf +0 -0
- imap_processing/tests/mag/validation/calibration/imap_mag_l2-offsets-norm_20251017_20251017_v001.cdf +0 -0
- imap_processing/tests/spacecraft/data/SSR_2024_190_20_08_12_0483851794_2_DA_apid0594_1packet.pkts +0 -0
- imap_processing/tests/spacecraft/test_quaternions.py +71 -0
- imap_processing/tests/spice/test_data/fake_repoint_data.csv +5 -0
- imap_processing/tests/spice/test_data/fake_spin_data.csv +11 -11
- imap_processing/tests/spice/test_geometry.py +9 -12
- imap_processing/tests/spice/test_kernels.py +1 -200
- imap_processing/tests/spice/test_pointing_frame.py +185 -0
- imap_processing/tests/spice/test_repoint.py +121 -0
- imap_processing/tests/spice/test_spin.py +50 -9
- imap_processing/tests/spice/test_time.py +14 -0
- imap_processing/tests/swapi/lut/imap_swapi_esa-unit-conversion_20250211_v000.csv +73 -0
- imap_processing/tests/swapi/lut/imap_swapi_lut-notes_20250211_v000.csv +1025 -0
- imap_processing/tests/swapi/test_swapi_l1.py +13 -11
- imap_processing/tests/swapi/test_swapi_l2.py +180 -8
- imap_processing/tests/swe/l0_data/2024051010_SWE_HK_packet.bin +0 -0
- imap_processing/tests/swe/l0_data/2024051011_SWE_CEM_RAW_packet.bin +0 -0
- imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_APP_HK_20240510_092742.csv +49 -0
- imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_CEM_RAW_20240510_092742.csv +593 -0
- imap_processing/tests/swe/lut/checker-board-indices.csv +24 -0
- imap_processing/tests/swe/lut/imap_swe_esa-lut_20250301_v000.csv +385 -0
- imap_processing/tests/swe/lut/imap_swe_l1b-in-flight-cal_20240510_20260716_v000.csv +3 -0
- imap_processing/tests/swe/test_swe_l1a.py +20 -2
- imap_processing/tests/swe/test_swe_l1a_cem_raw.py +52 -0
- imap_processing/tests/swe/test_swe_l1a_hk.py +68 -0
- imap_processing/tests/swe/test_swe_l1a_science.py +3 -3
- imap_processing/tests/swe/test_swe_l1b.py +162 -24
- imap_processing/tests/swe/test_swe_l2.py +153 -91
- imap_processing/tests/test_cli.py +171 -88
- imap_processing/tests/test_utils.py +140 -17
- imap_processing/tests/ultra/data/l0/FM45_UltraFM45_Functional_2024-01-22T0105_20240122T010548.CCSDS +0 -0
- imap_processing/tests/ultra/data/l0/ultra45_raw_sc_ultraimgrates_20220530_00.csv +164 -0
- imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultrarawimg_withFSWcalcs_FM45_40P_Phi28p5_BeamCal_LinearScan_phi2850_theta-000_20240207T102740.csv +3243 -3243
- imap_processing/tests/ultra/data/mock_data.py +369 -0
- imap_processing/tests/ultra/unit/conftest.py +115 -89
- imap_processing/tests/ultra/unit/test_badtimes.py +4 -4
- imap_processing/tests/ultra/unit/test_cullingmask.py +8 -6
- imap_processing/tests/ultra/unit/test_de.py +14 -13
- imap_processing/tests/ultra/unit/test_decom_apid_880.py +27 -76
- imap_processing/tests/ultra/unit/test_decom_apid_881.py +54 -11
- imap_processing/tests/ultra/unit/test_decom_apid_883.py +12 -10
- imap_processing/tests/ultra/unit/test_decom_apid_896.py +202 -55
- imap_processing/tests/ultra/unit/test_lookup_utils.py +23 -1
- imap_processing/tests/ultra/unit/test_spacecraft_pset.py +77 -0
- imap_processing/tests/ultra/unit/test_ultra_l1a.py +98 -305
- imap_processing/tests/ultra/unit/test_ultra_l1b.py +60 -14
- imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +2 -2
- imap_processing/tests/ultra/unit/test_ultra_l1b_culling.py +26 -27
- imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +239 -70
- imap_processing/tests/ultra/unit/test_ultra_l1c.py +5 -5
- imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +114 -83
- imap_processing/tests/ultra/unit/test_ultra_l2.py +230 -0
- imap_processing/ultra/constants.py +1 -1
- imap_processing/ultra/l0/decom_tools.py +27 -39
- imap_processing/ultra/l0/decom_ultra.py +168 -204
- imap_processing/ultra/l0/ultra_utils.py +152 -136
- imap_processing/ultra/l1a/ultra_l1a.py +55 -271
- imap_processing/ultra/l1b/badtimes.py +1 -4
- imap_processing/ultra/l1b/cullingmask.py +2 -6
- imap_processing/ultra/l1b/de.py +116 -57
- imap_processing/ultra/l1b/extendedspin.py +20 -18
- imap_processing/ultra/l1b/lookup_utils.py +72 -9
- imap_processing/ultra/l1b/ultra_l1b.py +36 -16
- imap_processing/ultra/l1b/ultra_l1b_culling.py +66 -30
- imap_processing/ultra/l1b/ultra_l1b_extended.py +297 -94
- imap_processing/ultra/l1c/histogram.py +2 -6
- imap_processing/ultra/l1c/spacecraft_pset.py +84 -0
- imap_processing/ultra/l1c/ultra_l1c.py +8 -9
- imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +206 -108
- imap_processing/ultra/l2/ultra_l2.py +299 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_LeftSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_RightSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_LeftSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_RightSlit.csv +526 -0
- imap_processing/ultra/lookup_tables/FM45_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -2
- imap_processing/ultra/lookup_tables/FM90_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -0
- imap_processing/ultra/packet_definitions/README.md +38 -0
- imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +15302 -482
- imap_processing/ultra/utils/ultra_l1_utils.py +31 -12
- imap_processing/utils.py +69 -29
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/METADATA +10 -6
- imap_processing-0.13.0.dist-info/RECORD +578 -0
- imap_processing/cdf/config/imap_mag_l1_variable_attrs.yaml +0 -237
- imap_processing/hi/l1a/housekeeping.py +0 -27
- imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +0 -154
- imap_processing/swe/l1b/swe_esa_lookup_table.csv +0 -1441
- imap_processing/swe/l1b/swe_l1b_science.py +0 -652
- imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hi-omni_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hi-sectored_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_hskp_20100101_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-omni_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hi-sectored_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_hskp_20100101_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-aggregated_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-singles_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-angular_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-priority_20240429_v001.cdf +0 -0
- imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-species_20240429_v001.cdf +0 -0
- imap_processing/tests/hi/data/l1/imap_hi_l1b_45sensor-de_20250415_v999.cdf +0 -0
- imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1251.pkts +0 -0
- imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1252.pkts +0 -0
- imap_processing/tests/hit/validation_data/hskp_sample_eu.csv +0 -89
- imap_processing/tests/hit/validation_data/sci_sample_raw1.csv +0 -29
- imap_processing/tests/idex/test_data/imap_idex_l0_raw_20231214_v001.pkts +0 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_de_20100101_v001.cdf +0 -0
- imap_processing/tests/lo/test_cdfs/imap_lo_l1a_spin_20100101_v001.cdf +0 -0
- imap_processing/tests/swe/test_swe_l1b_science.py +0 -84
- imap_processing/tests/ultra/test_data/mock_data.py +0 -161
- imap_processing/ultra/l1c/pset.py +0 -40
- imap_processing/ultra/lookup_tables/dps_sensitivity45.cdf +0 -0
- imap_processing-0.11.0.dist-info/RECORD +0 -488
- /imap_processing/idex/packet_definitions/{idex_packet_definition.xml → idex_science_packet_definition.xml} +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/20240827095047_SWE_IALIRT_packet.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/BinLog CCSDS_FRAG_TLM_20240826_152323Z_IALIRT_data_for_SDC.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/IALiRT Raw Packet Telemetry.txt +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/apid01152.tlm +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/eu_SWP_IAL_20240826_152033.csv +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/hi_fsw_view_1_ccsds.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/hit_ialirt_sample.ccsds +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/hit_ialirt_sample.csv +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/idle_export_eu.SWE_IALIRT_20240827_093852.csv +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/imap_codice_l1a_hi-ialirt_20240523200000_v0.0.0.cdf +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf +0 -0
- /imap_processing/{mag/l1b → tests/spacecraft}/__init__.py +0 -0
- /imap_processing/{swe/l1b/engineering_unit_convert_table.csv → tests/swe/lut/imap_swe_eu-conversion_20240510_v000.csv} +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/FM45_40P_Phi28p5_BeamCal_LinearScan_phi28.50_theta-0.00_20240207T102740.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/FM45_7P_Phi0.0_BeamCal_LinearScan_phi0.04_theta-0.01_20230821T121304.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_enaphxtofhangimg_FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultraimgrates_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultrarawimgevent_FM45_7P_Phi00_BeamCal_LinearScan_phi004_theta-001_20230821T121304.csv +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E1.cdf +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E12.cdf +0 -0
- /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E24.cdf +0 -0
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/LICENSE +0 -0
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/WHEEL +0 -0
- {imap_processing-0.11.0.dist-info → imap_processing-0.13.0.dist-info}/entry_points.txt +0 -0
|
@@ -1,264 +1,30 @@
|
|
|
1
1
|
"""Generate ULTRA L1a CDFs."""
|
|
2
2
|
|
|
3
|
-
# TODO: Evaluate naming conventions for fields and variables
|
|
4
|
-
# TODO: Improved short and long descriptions for each variable
|
|
5
|
-
# TODO: Improved var_notes for each variable
|
|
6
3
|
import logging
|
|
7
4
|
from typing import Optional
|
|
8
5
|
|
|
9
|
-
import numpy as np
|
|
10
6
|
import xarray as xr
|
|
11
7
|
|
|
12
|
-
from imap_processing import
|
|
8
|
+
from imap_processing import imap_module_directory
|
|
13
9
|
from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
|
|
14
|
-
from imap_processing.
|
|
15
|
-
|
|
10
|
+
from imap_processing.ultra.l0.decom_ultra import (
|
|
11
|
+
process_ultra_events,
|
|
12
|
+
process_ultra_rates,
|
|
13
|
+
process_ultra_tof,
|
|
14
|
+
)
|
|
16
15
|
from imap_processing.ultra.l0.ultra_utils import (
|
|
17
16
|
ULTRA_AUX,
|
|
18
17
|
ULTRA_EVENTS,
|
|
18
|
+
ULTRA_HK,
|
|
19
19
|
ULTRA_RATES,
|
|
20
20
|
ULTRA_TOF,
|
|
21
21
|
)
|
|
22
|
-
from imap_processing.utils import
|
|
22
|
+
from imap_processing.utils import packet_file_to_datasets
|
|
23
23
|
|
|
24
24
|
logger = logging.getLogger(__name__)
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
def
|
|
28
|
-
"""
|
|
29
|
-
Initiate xarray data arrays.
|
|
30
|
-
|
|
31
|
-
Parameters
|
|
32
|
-
----------
|
|
33
|
-
decom_ultra : dict
|
|
34
|
-
Parsed data.
|
|
35
|
-
apid : int
|
|
36
|
-
Packet APID.
|
|
37
|
-
|
|
38
|
-
Returns
|
|
39
|
-
-------
|
|
40
|
-
dataset : xarray.Dataset
|
|
41
|
-
Data in xarray format.
|
|
42
|
-
"""
|
|
43
|
-
if apid in ULTRA_EVENTS.apid:
|
|
44
|
-
index = ULTRA_EVENTS.apid.index(apid)
|
|
45
|
-
logical_source = ULTRA_EVENTS.logical_source[index]
|
|
46
|
-
addition_to_logical_desc = ULTRA_EVENTS.addition_to_logical_desc
|
|
47
|
-
raw_time = decom_ultra["EVENTTIMES"]
|
|
48
|
-
elif apid in ULTRA_TOF.apid:
|
|
49
|
-
index = ULTRA_TOF.apid.index(apid)
|
|
50
|
-
logical_source = ULTRA_TOF.logical_source[index]
|
|
51
|
-
addition_to_logical_desc = ULTRA_TOF.addition_to_logical_desc
|
|
52
|
-
raw_time = np.unique(decom_ultra["SHCOARSE"])
|
|
53
|
-
elif apid in ULTRA_AUX.apid:
|
|
54
|
-
index = ULTRA_AUX.apid.index(apid)
|
|
55
|
-
logical_source = ULTRA_AUX.logical_source[index]
|
|
56
|
-
addition_to_logical_desc = ULTRA_AUX.addition_to_logical_desc
|
|
57
|
-
raw_time = decom_ultra["SHCOARSE"]
|
|
58
|
-
elif apid in ULTRA_RATES.apid:
|
|
59
|
-
index = ULTRA_RATES.apid.index(apid)
|
|
60
|
-
logical_source = ULTRA_RATES.logical_source[index]
|
|
61
|
-
addition_to_logical_desc = ULTRA_RATES.addition_to_logical_desc
|
|
62
|
-
raw_time = decom_ultra["SHCOARSE"]
|
|
63
|
-
else:
|
|
64
|
-
raise ValueError(f"APID {apid} not recognized.")
|
|
65
|
-
|
|
66
|
-
# Load the CDF attributes
|
|
67
|
-
cdf_manager = ImapCdfAttributes()
|
|
68
|
-
cdf_manager.add_instrument_global_attrs("ultra")
|
|
69
|
-
cdf_manager.add_instrument_variable_attrs("ultra", "l1a")
|
|
70
|
-
|
|
71
|
-
epoch_time = xr.DataArray(
|
|
72
|
-
met_to_ttj2000ns(raw_time),
|
|
73
|
-
name="epoch",
|
|
74
|
-
dims=["epoch"],
|
|
75
|
-
attrs=cdf_manager.get_variable_attributes("epoch"),
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
sci_cdf_attrs = cdf_manager.get_global_attributes("imap_ultra_l1a_sci")
|
|
79
|
-
# replace the logical source and logical source description
|
|
80
|
-
sci_cdf_attrs["Logical_source"] = logical_source
|
|
81
|
-
sci_cdf_attrs["Logical_source_desc"] = (
|
|
82
|
-
f"IMAP Mission ULTRA Instrument Level-1A {addition_to_logical_desc} Data"
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
if apid not in (ULTRA_TOF.apid[0], ULTRA_TOF.apid[1]):
|
|
86
|
-
dataset = xr.Dataset(
|
|
87
|
-
coords={"epoch": epoch_time},
|
|
88
|
-
attrs=sci_cdf_attrs,
|
|
89
|
-
)
|
|
90
|
-
else:
|
|
91
|
-
row = xr.DataArray(
|
|
92
|
-
# Number of pixel rows
|
|
93
|
-
np.arange(54),
|
|
94
|
-
name="row",
|
|
95
|
-
dims=["row"],
|
|
96
|
-
attrs=cdf_manager.get_variable_attributes("ultra_metadata_attrs"),
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
column = xr.DataArray(
|
|
100
|
-
# Number of pixel columns
|
|
101
|
-
np.arange(180),
|
|
102
|
-
name="column",
|
|
103
|
-
dims=["column"],
|
|
104
|
-
attrs=cdf_manager.get_variable_attributes("ultra_metadata_attrs"),
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
sid = xr.DataArray(
|
|
108
|
-
# Number of pixel columns
|
|
109
|
-
np.arange(8),
|
|
110
|
-
name="sid",
|
|
111
|
-
dims=["sid"],
|
|
112
|
-
attrs=cdf_manager.get_variable_attributes("ultra_metadata_attrs"),
|
|
113
|
-
)
|
|
114
|
-
|
|
115
|
-
dataset = xr.Dataset(
|
|
116
|
-
coords={"epoch": epoch_time, "sid": sid, "row": row, "column": column},
|
|
117
|
-
attrs=sci_cdf_attrs,
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
return dataset
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
def get_event_time(decom_ultra_dict: dict) -> dict:
|
|
124
|
-
"""
|
|
125
|
-
Get event times using data from events and aux packets.
|
|
126
|
-
|
|
127
|
-
Parameters
|
|
128
|
-
----------
|
|
129
|
-
decom_ultra_dict : dict
|
|
130
|
-
Events and aux data.
|
|
131
|
-
|
|
132
|
-
Returns
|
|
133
|
-
-------
|
|
134
|
-
decom_events : dict
|
|
135
|
-
Ultra events data with calculated events timestamps.
|
|
136
|
-
|
|
137
|
-
Notes
|
|
138
|
-
-----
|
|
139
|
-
Equation for event time:
|
|
140
|
-
t = t_(spin start) + t_(spin start sub)/1000 +
|
|
141
|
-
t_(spin duration)/1000 * phase_angle/720
|
|
142
|
-
"""
|
|
143
|
-
event_times, durations, spin_starts = ([] for _ in range(3))
|
|
144
|
-
decom_aux = decom_ultra_dict[ULTRA_AUX.apid[0]]
|
|
145
|
-
decom_events: dict = decom_ultra_dict[ULTRA_EVENTS.apid[0]]
|
|
146
|
-
|
|
147
|
-
timespinstart_array = np.array(decom_aux["TIMESPINSTART"])
|
|
148
|
-
timespinstartsub_array = np.array(decom_aux["TIMESPINSTARTSUB"]) / 1000
|
|
149
|
-
|
|
150
|
-
# spin start according to aux data
|
|
151
|
-
aux_spin_starts = timespinstart_array + timespinstartsub_array
|
|
152
|
-
|
|
153
|
-
for time in np.unique(decom_events["SHCOARSE"]):
|
|
154
|
-
# Get the nearest spin start and duration prior to the event
|
|
155
|
-
spin_start = aux_spin_starts[aux_spin_starts <= time][-1]
|
|
156
|
-
duration = np.array(decom_aux["DURATION"])[aux_spin_starts <= time][-1]
|
|
157
|
-
|
|
158
|
-
# Find the events
|
|
159
|
-
event_indices = np.where(np.array(decom_events["SHCOARSE"]) == time)
|
|
160
|
-
|
|
161
|
-
for event_index in event_indices[0]:
|
|
162
|
-
phase_angle = decom_events["PHASE_ANGLE"][event_index]
|
|
163
|
-
|
|
164
|
-
durations.append(duration)
|
|
165
|
-
spin_starts.append(spin_start)
|
|
166
|
-
|
|
167
|
-
# If there were no events, the time is set to 'SHCOARSE'
|
|
168
|
-
if decom_events["COUNT"][event_index] == 0:
|
|
169
|
-
event_times.append(decom_events["SHCOARSE"][event_index])
|
|
170
|
-
else:
|
|
171
|
-
event_times.append(spin_start + (duration / 1000) * (phase_angle / 720))
|
|
172
|
-
|
|
173
|
-
decom_events["DURATION"] = durations
|
|
174
|
-
decom_events["TIMESPINSTART"] = spin_starts
|
|
175
|
-
decom_events["EVENTTIMES"] = event_times
|
|
176
|
-
|
|
177
|
-
return decom_events
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
def create_dataset(decom_ultra_dict: dict) -> xr.Dataset:
|
|
181
|
-
"""
|
|
182
|
-
Create xarray for packet.
|
|
183
|
-
|
|
184
|
-
Parameters
|
|
185
|
-
----------
|
|
186
|
-
decom_ultra_dict : dict
|
|
187
|
-
Dictionary of parsed data.
|
|
188
|
-
|
|
189
|
-
Returns
|
|
190
|
-
-------
|
|
191
|
-
dataset : xarray.Dataset
|
|
192
|
-
Data in xarray format.
|
|
193
|
-
"""
|
|
194
|
-
# Combine events and aux datasets so we can have proper event timestamps
|
|
195
|
-
if ULTRA_EVENTS.apid[0] in decom_ultra_dict.keys():
|
|
196
|
-
apid = ULTRA_EVENTS.apid[0]
|
|
197
|
-
decom_ultra = get_event_time(decom_ultra_dict)
|
|
198
|
-
else:
|
|
199
|
-
apid = next(iter(decom_ultra_dict.keys()))
|
|
200
|
-
decom_ultra = decom_ultra_dict[apid]
|
|
201
|
-
|
|
202
|
-
# Load the CDF attributes
|
|
203
|
-
# TODO: call this once and pass the object to the function
|
|
204
|
-
cdf_manager = ImapCdfAttributes()
|
|
205
|
-
cdf_manager.add_instrument_global_attrs("ultra")
|
|
206
|
-
cdf_manager.add_instrument_variable_attrs("ultra", "l1a")
|
|
207
|
-
|
|
208
|
-
dataset = initiate_data_arrays(decom_ultra, apid)
|
|
209
|
-
|
|
210
|
-
for key, value in decom_ultra.items():
|
|
211
|
-
# EVENT DATA and FASTDATA_00 have been broken down further
|
|
212
|
-
# (see ultra_utils.py) and are therefore not needed.
|
|
213
|
-
# SID is also not needed as it is used as a dimension.
|
|
214
|
-
if key in {"EVENTDATA", "FASTDATA_00", "SID"}:
|
|
215
|
-
continue
|
|
216
|
-
# Everything in the TOF packet has dimensions of (time, sid) except
|
|
217
|
-
# for PACKETDATA which has dimensions of (time, sid, row, column) and
|
|
218
|
-
# SHCOARSE with has dimensions of (time)
|
|
219
|
-
elif apid == ULTRA_TOF.apid[0] and key != "PACKETDATA" and key != "SHCOARSE":
|
|
220
|
-
# TODO: fix this to use the correct attributes
|
|
221
|
-
attrs = cdf_manager.get_variable_attributes("ultra_support_attrs")
|
|
222
|
-
dims = ["epoch", "sid"]
|
|
223
|
-
# AUX enums require string attributes
|
|
224
|
-
elif key in [
|
|
225
|
-
"SPINPERIODVALID",
|
|
226
|
-
"SPINPHASEVALID",
|
|
227
|
-
"SPINPERIODSOURCE",
|
|
228
|
-
"CATBEDHEATERFLAG",
|
|
229
|
-
"HWMODE",
|
|
230
|
-
"IMCENB",
|
|
231
|
-
"LEFTDEFLECTIONCHARGE",
|
|
232
|
-
"RIGHTDEFLECTIONCHARGE",
|
|
233
|
-
]:
|
|
234
|
-
# TODO: fix this to use the correct attributes
|
|
235
|
-
attrs = cdf_manager.get_variable_attributes("string_base_attrs")
|
|
236
|
-
dims = ["epoch"]
|
|
237
|
-
# TOF packetdata has multiple dimensions
|
|
238
|
-
elif key == "PACKETDATA":
|
|
239
|
-
# TODO: fix this to use the correct attributes
|
|
240
|
-
attrs = cdf_manager.get_variable_attributes("packet_data_attrs")
|
|
241
|
-
dims = ["epoch", "sid", "row", "column"]
|
|
242
|
-
# Use metadata with a single dimension for
|
|
243
|
-
# all other data products
|
|
244
|
-
else:
|
|
245
|
-
# TODO: fix this to use the correct attributes
|
|
246
|
-
attrs = cdf_manager.get_variable_attributes("ultra_support_attrs")
|
|
247
|
-
dims = ["epoch"]
|
|
248
|
-
|
|
249
|
-
dataset[key] = xr.DataArray(
|
|
250
|
-
value,
|
|
251
|
-
name=key if key == "epoch" else key.lower(),
|
|
252
|
-
dims=dims,
|
|
253
|
-
attrs=attrs,
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
return dataset
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
def ultra_l1a(
|
|
260
|
-
packet_file: str, data_version: str, apid: Optional[int] = None
|
|
261
|
-
) -> list[xr.Dataset]:
|
|
27
|
+
def ultra_l1a(packet_file: str, apid_input: Optional[int] = None) -> list[xr.Dataset]:
|
|
262
28
|
"""
|
|
263
29
|
Will process ULTRA L0 data into L1A CDF files at output_filepath.
|
|
264
30
|
|
|
@@ -266,9 +32,7 @@ def ultra_l1a(
|
|
|
266
32
|
----------
|
|
267
33
|
packet_file : str
|
|
268
34
|
Path to the CCSDS data packet file.
|
|
269
|
-
|
|
270
|
-
Version of the data product being created.
|
|
271
|
-
apid : Optional[int]
|
|
35
|
+
apid_input : Optional[int]
|
|
272
36
|
Optional apid.
|
|
273
37
|
|
|
274
38
|
Returns
|
|
@@ -277,43 +41,63 @@ def ultra_l1a(
|
|
|
277
41
|
List of xarray.Dataset.
|
|
278
42
|
"""
|
|
279
43
|
xtce = str(
|
|
280
|
-
f"{imap_module_directory}/ultra/packet_definitions/
|
|
44
|
+
f"{imap_module_directory}/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml"
|
|
281
45
|
)
|
|
282
46
|
|
|
283
|
-
|
|
284
|
-
grouped_data = group_by_apid(packets)
|
|
47
|
+
datasets_by_apid = packet_file_to_datasets(packet_file, xtce)
|
|
285
48
|
|
|
286
49
|
output_datasets = []
|
|
287
50
|
|
|
288
51
|
# This is used for two purposes currently:
|
|
289
|
-
#
|
|
52
|
+
# For testing purposes to only generate a dataset for a single apid.
|
|
290
53
|
# Each test dataset is only for a single apid while the rest of the apids
|
|
291
54
|
# contain zeros. Ideally we would have
|
|
292
55
|
# test data for all apids and remove this parameter.
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
# correct event timestamps (get_event_time). This part will change
|
|
296
|
-
# when we begin using the spin table in the database instead of the aux packet.
|
|
297
|
-
if apid is not None:
|
|
298
|
-
apids = [apid]
|
|
56
|
+
if apid_input is not None:
|
|
57
|
+
apids = [apid_input]
|
|
299
58
|
else:
|
|
300
|
-
apids = list(
|
|
59
|
+
apids = list(datasets_by_apid.keys())
|
|
60
|
+
|
|
61
|
+
# Update dataset global attributes
|
|
62
|
+
attr_mgr = ImapCdfAttributes()
|
|
63
|
+
attr_mgr.add_instrument_global_attrs("ultra")
|
|
64
|
+
attr_mgr.add_instrument_variable_attrs("ultra", "l1a")
|
|
301
65
|
|
|
302
66
|
for apid in apids:
|
|
303
|
-
if apid
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
67
|
+
if apid in ULTRA_AUX.apid:
|
|
68
|
+
decom_ultra_dataset = datasets_by_apid[apid]
|
|
69
|
+
gattr_key = ULTRA_AUX.logical_source[ULTRA_AUX.apid.index(apid)]
|
|
70
|
+
elif apid in ULTRA_TOF.apid:
|
|
71
|
+
decom_ultra_dataset = process_ultra_tof(datasets_by_apid[apid])
|
|
72
|
+
gattr_key = ULTRA_TOF.logical_source[ULTRA_TOF.apid.index(apid)]
|
|
73
|
+
elif apid in ULTRA_RATES.apid:
|
|
74
|
+
decom_ultra_dataset = process_ultra_rates(datasets_by_apid[apid])
|
|
75
|
+
gattr_key = ULTRA_RATES.logical_source[ULTRA_RATES.apid.index(apid)]
|
|
76
|
+
elif apid in ULTRA_EVENTS.apid:
|
|
77
|
+
decom_ultra_dataset = process_ultra_events(datasets_by_apid[apid])
|
|
78
|
+
gattr_key = ULTRA_EVENTS.logical_source[ULTRA_EVENTS.apid.index(apid)]
|
|
79
|
+
# Add coordinate attributes
|
|
80
|
+
attrs = attr_mgr.get_variable_attributes("event_id")
|
|
81
|
+
decom_ultra_dataset.coords["event_id"].attrs.update(attrs)
|
|
82
|
+
elif apid in ULTRA_HK.apid:
|
|
83
|
+
decom_ultra_dataset = datasets_by_apid[apid]
|
|
84
|
+
gattr_key = ULTRA_HK.logical_source[ULTRA_HK.apid.index(apid)]
|
|
310
85
|
else:
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
86
|
+
logger.error(f"APID {apid} not recognized.")
|
|
87
|
+
# TODO: here we can put other apids
|
|
88
|
+
continue
|
|
89
|
+
|
|
90
|
+
decom_ultra_dataset.attrs.update(attr_mgr.get_global_attributes(gattr_key))
|
|
91
|
+
|
|
92
|
+
# Add data variable attributes
|
|
93
|
+
for key in decom_ultra_dataset.data_vars:
|
|
94
|
+
attrs = attr_mgr.get_variable_attributes(key.lower())
|
|
95
|
+
decom_ultra_dataset.data_vars[key].attrs.update(attrs)
|
|
96
|
+
|
|
97
|
+
# Add coordinate attributes
|
|
98
|
+
attrs = attr_mgr.get_variable_attributes("epoch", check_schema=False)
|
|
99
|
+
decom_ultra_dataset.coords["epoch"].attrs.update(attrs)
|
|
100
|
+
|
|
101
|
+
output_datasets.append(decom_ultra_dataset)
|
|
318
102
|
|
|
319
103
|
return output_datasets
|
|
@@ -11,7 +11,6 @@ def calculate_badtimes(
|
|
|
11
11
|
extendedspin_dataset: xr.Dataset,
|
|
12
12
|
cullingmask_spins: NDArray,
|
|
13
13
|
name: str,
|
|
14
|
-
data_version: str,
|
|
15
14
|
) -> xr.Dataset:
|
|
16
15
|
"""
|
|
17
16
|
Create dataset with defined datatypes for Badtimes Data.
|
|
@@ -24,8 +23,6 @@ def calculate_badtimes(
|
|
|
24
23
|
Dataset containing the culled data.
|
|
25
24
|
name : str
|
|
26
25
|
Name of the dataset.
|
|
27
|
-
data_version : str
|
|
28
|
-
Version of the data.
|
|
29
26
|
|
|
30
27
|
Returns
|
|
31
28
|
-------
|
|
@@ -38,6 +35,6 @@ def calculate_badtimes(
|
|
|
38
35
|
|
|
39
36
|
filtered_dataset = extendedspin_dataset.sel(spin_number=culled_spins)
|
|
40
37
|
|
|
41
|
-
badtimes_dataset = create_dataset(filtered_dataset, name, "l1b"
|
|
38
|
+
badtimes_dataset = create_dataset(filtered_dataset, name, "l1b")
|
|
42
39
|
|
|
43
40
|
return badtimes_dataset
|
|
@@ -6,9 +6,7 @@ from imap_processing.quality_flags import ImapAttitudeUltraFlags, ImapRatesUltra
|
|
|
6
6
|
from imap_processing.ultra.utils.ultra_l1_utils import create_dataset
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def calculate_cullingmask(
|
|
10
|
-
extendedspin_dataset: xr.Dataset, name: str, data_version: str
|
|
11
|
-
) -> xr.Dataset:
|
|
9
|
+
def calculate_cullingmask(extendedspin_dataset: xr.Dataset, name: str) -> xr.Dataset:
|
|
12
10
|
"""
|
|
13
11
|
Create dataset with defined datatype for Culling Mask Data.
|
|
14
12
|
|
|
@@ -18,8 +16,6 @@ def calculate_cullingmask(
|
|
|
18
16
|
Dataset containing the data.
|
|
19
17
|
name : str
|
|
20
18
|
Name of the dataset.
|
|
21
|
-
data_version : str
|
|
22
|
-
Version of the data.
|
|
23
19
|
|
|
24
20
|
Returns
|
|
25
21
|
-------
|
|
@@ -47,6 +43,6 @@ def calculate_cullingmask(
|
|
|
47
43
|
spin_number=extendedspin_dataset["spin_number"][good_mask]
|
|
48
44
|
)
|
|
49
45
|
|
|
50
|
-
cullingmask_dataset = create_dataset(filtered_dataset, name, "l1b"
|
|
46
|
+
cullingmask_dataset = create_dataset(filtered_dataset, name, "l1b")
|
|
51
47
|
|
|
52
48
|
return cullingmask_dataset
|