imap-processing 0.12.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 +1 -0
- imap_processing/_version.py +2 -2
- imap_processing/ccsds/ccsds_data.py +1 -2
- imap_processing/ccsds/excel_to_xtce.py +1 -2
- imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +18 -12
- imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +569 -0
- imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +1846 -128
- imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +5 -5
- imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +20 -1
- 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_mag_global_cdf_attrs.yaml +15 -0
- imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +22 -0
- imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +16 -0
- imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +178 -5
- imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +5045 -41
- imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +33 -19
- imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +8 -48
- imap_processing/cdf/utils.py +41 -33
- imap_processing/cli.py +463 -234
- imap_processing/codice/codice_l1a.py +260 -47
- imap_processing/codice/codice_l1b.py +51 -152
- imap_processing/codice/constants.py +38 -1
- imap_processing/ena_maps/ena_maps.py +658 -65
- imap_processing/ena_maps/utils/coordinates.py +1 -1
- imap_processing/ena_maps/utils/spatial_utils.py +10 -5
- 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 +31 -12
- imap_processing/hi/l1b/hi_l1b.py +80 -43
- imap_processing/hi/l1c/hi_l1c.py +12 -16
- imap_processing/hit/ancillary/imap_hit_l1b-to-l2-sector-dt0-factors_20250219_v002.csv +81 -0
- imap_processing/hit/hit_utils.py +93 -35
- imap_processing/hit/l0/decom_hit.py +3 -1
- imap_processing/hit/l1a/hit_l1a.py +30 -25
- imap_processing/hit/l1b/constants.py +6 -2
- imap_processing/hit/l1b/hit_l1b.py +279 -318
- imap_processing/hit/l2/constants.py +37 -0
- imap_processing/hit/l2/hit_l2.py +373 -264
- imap_processing/ialirt/l0/parse_mag.py +138 -10
- imap_processing/ialirt/l0/process_swapi.py +69 -0
- imap_processing/ialirt/l0/process_swe.py +318 -22
- imap_processing/ialirt/packet_definitions/ialirt.xml +216 -212
- 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_swapi.xml +14 -14
- imap_processing/ialirt/utils/grouping.py +1 -1
- imap_processing/idex/idex_constants.py +9 -1
- imap_processing/idex/idex_l0.py +22 -8
- imap_processing/idex/idex_l1a.py +75 -44
- imap_processing/idex/idex_l1b.py +9 -8
- imap_processing/idex/idex_l2a.py +79 -45
- imap_processing/idex/idex_l2b.py +120 -0
- imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +33 -39
- imap_processing/idex/packet_definitions/idex_housekeeping_packet_definition.xml +9130 -0
- imap_processing/lo/l0/lo_science.py +1 -2
- imap_processing/lo/l1a/lo_l1a.py +1 -4
- imap_processing/lo/l1b/lo_l1b.py +527 -6
- imap_processing/lo/l1b/tof_conversions.py +11 -0
- imap_processing/lo/l1c/lo_l1c.py +1 -4
- imap_processing/mag/constants.py +43 -0
- imap_processing/mag/imap_mag_sdc_configuration_v001.py +8 -0
- imap_processing/mag/l1a/mag_l1a.py +2 -9
- imap_processing/mag/l1a/mag_l1a_data.py +10 -10
- imap_processing/mag/l1b/mag_l1b.py +84 -17
- imap_processing/mag/l1c/interpolation_methods.py +180 -3
- imap_processing/mag/l1c/mag_l1c.py +236 -70
- imap_processing/mag/l2/mag_l2.py +140 -0
- imap_processing/mag/l2/mag_l2_data.py +288 -0
- imap_processing/spacecraft/quaternions.py +1 -3
- imap_processing/spice/geometry.py +3 -3
- imap_processing/spice/kernels.py +0 -276
- imap_processing/spice/pointing_frame.py +257 -0
- imap_processing/spice/repoint.py +48 -19
- imap_processing/spice/spin.py +38 -33
- imap_processing/spice/time.py +24 -0
- imap_processing/swapi/l1/swapi_l1.py +16 -12
- imap_processing/swapi/l2/swapi_l2.py +116 -4
- imap_processing/swapi/swapi_utils.py +32 -0
- imap_processing/swe/l1a/swe_l1a.py +2 -9
- imap_processing/swe/l1a/swe_science.py +8 -11
- imap_processing/swe/l1b/swe_l1b.py +898 -23
- imap_processing/swe/l2/swe_l2.py +21 -77
- imap_processing/swe/utils/swe_constants.py +1 -0
- imap_processing/tests/ccsds/test_excel_to_xtce.py +1 -1
- 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-pha_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/test_codice_l1a.py +20 -11
- imap_processing/tests/codice/test_codice_l1b.py +6 -7
- imap_processing/tests/conftest.py +78 -22
- imap_processing/tests/ena_maps/test_ena_maps.py +462 -33
- imap_processing/tests/ena_maps/test_spatial_utils.py +1 -1
- 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/test_hi_l1b.py +10 -12
- imap_processing/tests/hi/test_hi_l1c.py +27 -24
- imap_processing/tests/hi/test_l1a.py +7 -9
- imap_processing/tests/hi/test_science_direct_event.py +2 -2
- imap_processing/tests/hit/helpers/l1_validation.py +44 -43
- imap_processing/tests/hit/test_decom_hit.py +1 -1
- imap_processing/tests/hit/test_hit_l1a.py +9 -9
- imap_processing/tests/hit/test_hit_l1b.py +172 -217
- imap_processing/tests/hit/test_hit_l2.py +380 -118
- imap_processing/tests/hit/test_hit_utils.py +122 -55
- imap_processing/tests/hit/validation_data/hit_l1b_standard_sample2_nsrl_v4_3decimals.csv +62 -62
- imap_processing/tests/hit/validation_data/sci_sample_raw.csv +1 -1
- imap_processing/tests/ialirt/unit/test_decom_ialirt.py +16 -81
- imap_processing/tests/ialirt/unit/test_grouping.py +2 -2
- imap_processing/tests/ialirt/unit/test_parse_mag.py +71 -16
- 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 +115 -7
- imap_processing/tests/idex/conftest.py +72 -7
- 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_idex_l0.py +33 -11
- imap_processing/tests/idex/test_idex_l1a.py +50 -23
- imap_processing/tests/idex/test_idex_l1b.py +104 -25
- imap_processing/tests/idex/test_idex_l2a.py +48 -32
- imap_processing/tests/idex/test_idex_l2b.py +93 -0
- imap_processing/tests/lo/test_lo_l1a.py +3 -3
- imap_processing/tests/lo/test_lo_l1b.py +371 -6
- imap_processing/tests/lo/test_lo_l1c.py +1 -1
- imap_processing/tests/lo/test_lo_science.py +6 -7
- imap_processing/tests/lo/test_star_sensor.py +1 -1
- imap_processing/tests/mag/conftest.py +58 -9
- imap_processing/tests/mag/test_mag_decom.py +4 -3
- imap_processing/tests/mag/test_mag_l1a.py +13 -7
- imap_processing/tests/mag/test_mag_l1b.py +9 -9
- imap_processing/tests/mag/test_mag_l1c.py +151 -47
- imap_processing/tests/mag/test_mag_l2.py +130 -0
- imap_processing/tests/mag/test_mag_validation.py +144 -7
- 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_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/test_quaternions.py +1 -1
- imap_processing/tests/spice/test_data/fake_repoint_data.csv +4 -4
- imap_processing/tests/spice/test_data/fake_spin_data.csv +11 -11
- imap_processing/tests/spice/test_geometry.py +3 -3
- 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 +20 -10
- 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 +7 -9
- imap_processing/tests/swapi/test_swapi_l2.py +180 -8
- 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 +6 -6
- 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 +82 -102
- imap_processing/tests/test_cli.py +171 -88
- imap_processing/tests/test_utils.py +2 -1
- imap_processing/tests/ultra/data/mock_data.py +49 -21
- imap_processing/tests/ultra/unit/conftest.py +53 -70
- imap_processing/tests/ultra/unit/test_badtimes.py +2 -4
- imap_processing/tests/ultra/unit/test_cullingmask.py +4 -6
- imap_processing/tests/ultra/unit/test_de.py +3 -10
- imap_processing/tests/ultra/unit/test_decom_apid_880.py +27 -76
- imap_processing/tests/ultra/unit/test_decom_apid_881.py +15 -16
- 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 +3 -4
- imap_processing/tests/ultra/unit/test_ultra_l1a.py +84 -307
- imap_processing/tests/ultra/unit/test_ultra_l1b.py +30 -12
- imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +2 -2
- imap_processing/tests/ultra/unit/test_ultra_l1b_culling.py +4 -1
- imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +163 -29
- imap_processing/tests/ultra/unit/test_ultra_l1c.py +5 -5
- imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +32 -43
- 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 +21 -34
- 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 -243
- imap_processing/ultra/l1b/badtimes.py +1 -4
- imap_processing/ultra/l1b/cullingmask.py +2 -6
- imap_processing/ultra/l1b/de.py +62 -47
- imap_processing/ultra/l1b/extendedspin.py +8 -4
- imap_processing/ultra/l1b/lookup_utils.py +72 -9
- imap_processing/ultra/l1b/ultra_l1b.py +3 -8
- imap_processing/ultra/l1b/ultra_l1b_culling.py +4 -4
- imap_processing/ultra/l1b/ultra_l1b_extended.py +236 -78
- imap_processing/ultra/l1c/histogram.py +2 -6
- imap_processing/ultra/l1c/spacecraft_pset.py +2 -4
- imap_processing/ultra/l1c/ultra_l1c.py +1 -5
- imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +107 -60
- 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 +13 -12
- imap_processing/utils.py +1 -1
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/METADATA +3 -2
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/RECORD +264 -225
- imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +0 -154
- imap_processing/mag/imap_mag_sdc-configuration_v001.yaml +0 -6
- imap_processing/mag/l1b/__init__.py +0 -0
- imap_processing/swe/l1b/swe_esa_lookup_table.csv +0 -1441
- imap_processing/swe/l1b/swe_l1b_science.py +0 -699
- imap_processing/tests/swe/test_swe_l1b_science.py +0 -103
- imap_processing/ultra/lookup_tables/dps_sensitivity45.cdf +0 -0
- imap_processing/ultra/lookup_tables/ultra_90_dps_exposure_compressed.cdf +0 -0
- /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/461971383-404.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971384-405.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971385-406.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971386-407.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971387-408.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971388-409.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971389-410.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971390-411.bin +0 -0
- /imap_processing/tests/ialirt/{test_data → data}/l0/461971391-412.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/tests/ialirt/{test_data → data}/l0/sample_decoded_i-alirt_data.csv +0 -0
- /imap_processing/tests/mag/validation/{imap_calibration_mag_20240229_v01.cdf → calibration/imap_mag_l1b-calibration_20240229_v001.cdf} +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-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/LICENSE +0 -0
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/WHEEL +0 -0
- {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/entry_points.txt +0 -0
|
@@ -58,7 +58,7 @@ default_int32_attrs: &default_int32
|
|
|
58
58
|
|
|
59
59
|
default_float32_attrs: &default_float32
|
|
60
60
|
<<: *default
|
|
61
|
-
FILLVAL: .
|
|
61
|
+
FILLVAL: -1.0e31
|
|
62
62
|
FORMAT: F12.6
|
|
63
63
|
VALIDMIN: -3.4028235e+38
|
|
64
64
|
VALIDMAX: 3.4028235e+38
|
|
@@ -213,13 +213,11 @@ energy_heliosphere:
|
|
|
213
213
|
UNITS: keV
|
|
214
214
|
|
|
215
215
|
species:
|
|
216
|
-
<<: *
|
|
216
|
+
<<: *default_uint8
|
|
217
217
|
DISPLAY_TYPE: no_plot
|
|
218
218
|
CATDESC: Label species type.
|
|
219
219
|
FIELDNAM: Label species type.
|
|
220
|
-
|
|
221
|
-
FORMAT: A8
|
|
222
|
-
dtype: str
|
|
220
|
+
LABLAXIS: species
|
|
223
221
|
UNITS: " "
|
|
224
222
|
|
|
225
223
|
front_back_distance:
|
|
@@ -236,20 +234,6 @@ path_length:
|
|
|
236
234
|
LABLAXIS: path_length
|
|
237
235
|
UNITS: mm / 100
|
|
238
236
|
|
|
239
|
-
azimuth:
|
|
240
|
-
<<: *default_float32
|
|
241
|
-
CATDESC: Azimuth.
|
|
242
|
-
FIELDNAM: azimuth
|
|
243
|
-
LABLAXIS: azimuth
|
|
244
|
-
UNITS: radians
|
|
245
|
-
|
|
246
|
-
elevation:
|
|
247
|
-
<<: *default_float32
|
|
248
|
-
CATDESC: Elevation.
|
|
249
|
-
FIELDNAM: elevation
|
|
250
|
-
LABLAXIS: elevation
|
|
251
|
-
UNITS: radians
|
|
252
|
-
|
|
253
237
|
phi:
|
|
254
238
|
<<: *default_float32
|
|
255
239
|
CATDESC: Ultra instrument frame event phi (azimuth with range -90 -> 90).
|
|
@@ -264,6 +248,20 @@ theta:
|
|
|
264
248
|
LABLAXIS: theta
|
|
265
249
|
UNITS: degrees
|
|
266
250
|
|
|
251
|
+
phi_fwhm:
|
|
252
|
+
<<: *default_float32
|
|
253
|
+
CATDESC: FWHM of the phi distribution.
|
|
254
|
+
FIELDNAM: phi_fwhm
|
|
255
|
+
LABLAXIS: phi fwhm
|
|
256
|
+
UNITS: degrees
|
|
257
|
+
|
|
258
|
+
theta_fwhm:
|
|
259
|
+
<<: *default_float32
|
|
260
|
+
CATDESC: FWHM of the theta distribution.
|
|
261
|
+
FIELDNAM: phi_fwhm
|
|
262
|
+
LABLAXIS: phi fwhm
|
|
263
|
+
UNITS: degrees
|
|
264
|
+
|
|
267
265
|
event_efficiency:
|
|
268
266
|
<<: *default_float32
|
|
269
267
|
CATDESC: Estimated event efficiency for this path through the instrument.
|
|
@@ -271,6 +269,22 @@ event_efficiency:
|
|
|
271
269
|
LABLAXIS: event efficiency
|
|
272
270
|
UNITS: " "
|
|
273
271
|
|
|
272
|
+
direct_event_unit_velocity:
|
|
273
|
+
<<: *default_float32
|
|
274
|
+
CATDESC: Unit vector of the direct event velocity in the instrument frame.
|
|
275
|
+
DEPEND_1: component
|
|
276
|
+
FIELDNAM: direct_event_unit_velocity
|
|
277
|
+
LABLAXIS: direct event unit velocity
|
|
278
|
+
UNITS: " "
|
|
279
|
+
|
|
280
|
+
direct_event_unit_position:
|
|
281
|
+
<<: *default_float32
|
|
282
|
+
CATDESC: Unit vector of the direct event position in the instrument frame.
|
|
283
|
+
DEPEND_1: component
|
|
284
|
+
FIELDNAM: direct_event_unit_position
|
|
285
|
+
LABLAXIS: direct event unit position
|
|
286
|
+
UNITS: " "
|
|
287
|
+
|
|
274
288
|
velocity_sc:
|
|
275
289
|
<<: *default_float32
|
|
276
290
|
CATDESC: x,y,z-components of the velocity vector of the ena in the spacecraft frame.
|
|
@@ -11,7 +11,7 @@ default_attrs: &default
|
|
|
11
11
|
|
|
12
12
|
default_float32_attrs: &default_float32
|
|
13
13
|
<<: *default
|
|
14
|
-
FILLVAL: .
|
|
14
|
+
FILLVAL: -1.0e31
|
|
15
15
|
FORMAT: F12.6
|
|
16
16
|
VALIDMIN: -3.4028235e+38
|
|
17
17
|
VALIDMAX: 3.4028235e+38
|
|
@@ -31,22 +31,6 @@ longitude:
|
|
|
31
31
|
LABLAXIS: longitude
|
|
32
32
|
UNITS: degrees
|
|
33
33
|
|
|
34
|
-
spin_angle:
|
|
35
|
-
<<: *default
|
|
36
|
-
CATDESC: Angular bin defined by central location of the bin
|
|
37
|
-
FIELDNAM: spin_angle
|
|
38
|
-
LABLAXIS: spin angle
|
|
39
|
-
# TODO: come back to format
|
|
40
|
-
UNITS: degrees
|
|
41
|
-
|
|
42
|
-
time_bin:
|
|
43
|
-
<<: *default
|
|
44
|
-
CATDESC: Time bin defined by central location of the bin.
|
|
45
|
-
FIELDNAM: time_bin
|
|
46
|
-
LABLAXIS: time bin
|
|
47
|
-
# TODO: come back to format
|
|
48
|
-
UNITS: seconds
|
|
49
|
-
|
|
50
34
|
species_bin:
|
|
51
35
|
<<: *default
|
|
52
36
|
CATDESC: Species bin defined by central location.
|
|
@@ -95,30 +79,6 @@ sid:
|
|
|
95
79
|
# TODO: come back to format
|
|
96
80
|
UNITS: " "
|
|
97
81
|
|
|
98
|
-
row:
|
|
99
|
-
<<: *default
|
|
100
|
-
CATDESC: Row number.
|
|
101
|
-
FIELDNAM: row
|
|
102
|
-
LABLAXIS: row
|
|
103
|
-
# TODO: come back to format
|
|
104
|
-
UNITS: " "
|
|
105
|
-
|
|
106
|
-
column:
|
|
107
|
-
<<: *default
|
|
108
|
-
CATDESC: Column number.
|
|
109
|
-
FIELDNAM: column
|
|
110
|
-
LABLAXIS: column
|
|
111
|
-
# TODO: come back to format
|
|
112
|
-
UNITS: " "
|
|
113
|
-
|
|
114
|
-
spin:
|
|
115
|
-
<<: *default
|
|
116
|
-
CATDESC: Spin number at integration start.
|
|
117
|
-
FIELDNAM: spin
|
|
118
|
-
LABLAXIS: spin
|
|
119
|
-
# TODO: come back to format
|
|
120
|
-
UNITS: " "
|
|
121
|
-
|
|
122
82
|
shcoarse:
|
|
123
83
|
<<: *default
|
|
124
84
|
CATDESC: CCSDS packet timestamp.
|
|
@@ -127,10 +87,10 @@ shcoarse:
|
|
|
127
87
|
# TODO: come back to format
|
|
128
88
|
UNITS: seconds
|
|
129
89
|
|
|
130
|
-
|
|
131
|
-
<<: *
|
|
132
|
-
CATDESC:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
UNITS:
|
|
90
|
+
energy_bin_delta:
|
|
91
|
+
<<: *default_float32
|
|
92
|
+
CATDESC: Difference between the energy bin edges.
|
|
93
|
+
DEPEND_0: energy_bin_geometric_mean
|
|
94
|
+
FIELDNAM: energy_bin_delta
|
|
95
|
+
LABLAXIS: energy bin delta
|
|
96
|
+
UNITS: keV
|
imap_processing/cdf/utils.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"""Various utility functions to support creation of CDF files."""
|
|
2
2
|
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
3
5
|
import logging
|
|
4
6
|
import re
|
|
7
|
+
import warnings
|
|
5
8
|
from pathlib import Path
|
|
6
|
-
from typing import Optional
|
|
7
9
|
|
|
8
10
|
import imap_data_access
|
|
9
11
|
import numpy as np
|
|
@@ -19,15 +21,15 @@ logger = logging.getLogger(__name__)
|
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
def load_cdf(
|
|
22
|
-
file_path: Path, remove_xarray_attrs: bool = True, **kwargs: dict
|
|
24
|
+
file_path: Path | str, remove_xarray_attrs: bool = True, **kwargs: dict
|
|
23
25
|
) -> xr.Dataset:
|
|
24
26
|
"""
|
|
25
27
|
Load the contents of a CDF file into an ``xarray`` dataset.
|
|
26
28
|
|
|
27
29
|
Parameters
|
|
28
30
|
----------
|
|
29
|
-
file_path : Path
|
|
30
|
-
The path to the CDF file.
|
|
31
|
+
file_path : Path or ImapFilePath or str
|
|
32
|
+
The path to the CDF file or ImapFilePath object.
|
|
31
33
|
remove_xarray_attrs : bool
|
|
32
34
|
Whether to remove the xarray attributes that get injected by the
|
|
33
35
|
cdf_to_xarray function from the output xarray.Dataset. Default is True.
|
|
@@ -39,6 +41,9 @@ def load_cdf(
|
|
|
39
41
|
dataset : xarray.Dataset
|
|
40
42
|
The ``xarray`` dataset for the CDF file.
|
|
41
43
|
"""
|
|
44
|
+
if isinstance(file_path, imap_data_access.ImapFilePath):
|
|
45
|
+
file_path = file_path.construct_path()
|
|
46
|
+
|
|
42
47
|
dataset = cdf_to_xarray(file_path, kwargs)
|
|
43
48
|
|
|
44
49
|
# cdf_to_xarray converts single-value attributes to lists
|
|
@@ -61,7 +66,6 @@ def load_cdf(
|
|
|
61
66
|
|
|
62
67
|
def write_cdf(
|
|
63
68
|
dataset: xr.Dataset,
|
|
64
|
-
parent_files: Optional[list] = None,
|
|
65
69
|
**extra_cdf_kwargs: dict,
|
|
66
70
|
) -> Path:
|
|
67
71
|
"""
|
|
@@ -71,17 +75,19 @@ def write_cdf(
|
|
|
71
75
|
fills in the final attributes, and converts the whole dataset to a CDF.
|
|
72
76
|
The date in the file name is determined by the time of the first epoch in the
|
|
73
77
|
xarray Dataset. The first 3 file name fields (mission, instrument, level) are
|
|
74
|
-
determined by the "Logical_source" attribute. The version is
|
|
78
|
+
determined by the "Logical_source" attribute. The version is determined from
|
|
75
79
|
"Data_version".
|
|
76
80
|
|
|
81
|
+
The start_date and repointing attributes in the dataset are used to override the
|
|
82
|
+
computed values.
|
|
83
|
+
|
|
84
|
+
If these are not included, start_date is generated from the first epoch in the
|
|
85
|
+
dataset and repointing is not included if the attribute is not present or None.
|
|
86
|
+
|
|
77
87
|
Parameters
|
|
78
88
|
----------
|
|
79
89
|
dataset : xarray.Dataset
|
|
80
90
|
The dataset object to convert to a CDF.
|
|
81
|
-
parent_files : list of Path, optional
|
|
82
|
-
List of parent files that were used to make this file. These get added to
|
|
83
|
-
the ``Parents`` global attribute:
|
|
84
|
-
https://spdf.gsfc.nasa.gov/istp_guide/gattributes.html.
|
|
85
91
|
**extra_cdf_kwargs : dict
|
|
86
92
|
Additional keyword arguments to pass to the ``xarray_to_cdf`` function.
|
|
87
93
|
|
|
@@ -96,26 +102,36 @@ def write_cdf(
|
|
|
96
102
|
# Convert J2000 epoch referenced data to datetime64
|
|
97
103
|
# TODO: This implementation of epoch to time string results in an error of
|
|
98
104
|
# 5 seconds due to 5 leap-second occurrences since the J2000 epoch.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
105
|
+
# TODO: Create a ttj2000_to_datetime function to handle this conversion
|
|
106
|
+
start_date = dataset.attrs.get("Start_date", None)
|
|
107
|
+
|
|
108
|
+
if start_date is None:
|
|
109
|
+
# If no start time is included, then use the first epoch in the dataset
|
|
110
|
+
dt64 = TTJ2000_EPOCH + dataset["epoch"].values[0].astype("timedelta64[ns]")
|
|
111
|
+
start_date = np.datetime_as_string(dt64, unit="D").replace("-", "")
|
|
112
|
+
|
|
113
|
+
version = dataset.attrs.get("Data_version", None)
|
|
114
|
+
if version is None:
|
|
115
|
+
warnings.warn(
|
|
116
|
+
"No Data_version attribute found in dataset. Using default v999.",
|
|
117
|
+
stacklevel=2,
|
|
118
|
+
)
|
|
119
|
+
version = "v999"
|
|
120
|
+
elif not re.match(r"v\d{3}", version):
|
|
121
|
+
raise ValueError(
|
|
122
|
+
f"The Data_version attribute {version} does not match expected format vXXX."
|
|
123
|
+
)
|
|
124
|
+
|
|
111
125
|
repointing = dataset.attrs.get("Repointing", None)
|
|
126
|
+
|
|
127
|
+
repointing_int = int(repointing[-5:]) if repointing else None
|
|
112
128
|
science_file = imap_data_access.ScienceFilePath.generate_from_inputs(
|
|
113
129
|
instrument=instrument,
|
|
114
130
|
data_level=data_level,
|
|
115
131
|
descriptor=descriptor,
|
|
116
|
-
start_time=
|
|
132
|
+
start_time=start_date,
|
|
117
133
|
version=version,
|
|
118
|
-
repointing=
|
|
134
|
+
repointing=repointing_int,
|
|
119
135
|
)
|
|
120
136
|
file_path = Path(science_file.construct_path())
|
|
121
137
|
if not file_path.parent.exists():
|
|
@@ -128,13 +144,6 @@ def write_cdf(
|
|
|
128
144
|
dataset.attrs["Logical_file_id"] = file_path.stem
|
|
129
145
|
# Add the processing version to the dataset attributes
|
|
130
146
|
dataset.attrs["ground_software_version"] = imap_processing._version.__version__
|
|
131
|
-
# Add any parent files to the dataset attributes
|
|
132
|
-
if parent_files:
|
|
133
|
-
# Include the current files if there are any and include just the filename
|
|
134
|
-
# [file1.txt, file2.cdf, ...]
|
|
135
|
-
dataset.attrs["Parents"] = dataset.attrs.get("Parents", []) + [
|
|
136
|
-
parent_file.name for parent_file in parent_files
|
|
137
|
-
]
|
|
138
147
|
|
|
139
148
|
# Convert the xarray object to a CDF
|
|
140
149
|
if "l1" in data_level:
|
|
@@ -147,7 +156,6 @@ def write_cdf(
|
|
|
147
156
|
extra_cdf_kwargs["istp"] = True # type: ignore
|
|
148
157
|
|
|
149
158
|
xarray_to_cdf(dataset, str(file_path), **extra_cdf_kwargs)
|
|
150
|
-
|
|
151
159
|
return file_path
|
|
152
160
|
|
|
153
161
|
|
|
@@ -185,7 +193,7 @@ def parse_filename_like(filename_like: str) -> re.Match:
|
|
|
185
193
|
r"(?P<descriptor>[^_]+)" # Required descriptor
|
|
186
194
|
r"(_(?P<start_date>\d{8}))?" # Optional start date
|
|
187
195
|
r"(-repoint(?P<repointing>\d{5}))?" # Optional repointing field
|
|
188
|
-
r"(?:
|
|
196
|
+
r"(?:_(?P<version>v\d{3}))?" # Optional version
|
|
189
197
|
r"(?:\.(?P<extension>cdf|pkts))?$" # Optional extension
|
|
190
198
|
)
|
|
191
199
|
match = re.match(regex_str, filename_like)
|