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
|
@@ -124,8 +124,8 @@ def consolidate_rate_columns(
|
|
|
124
124
|
|
|
125
125
|
The validation data has each value in a separate column. This
|
|
126
126
|
function aggregates related data into arrays to match processed
|
|
127
|
-
data. Each rate column has
|
|
128
|
-
|
|
127
|
+
data. Each rate column has corresponding plus and minus columns
|
|
128
|
+
for uncertainty values.
|
|
129
129
|
|
|
130
130
|
Parameters
|
|
131
131
|
----------
|
|
@@ -142,16 +142,16 @@ def consolidate_rate_columns(
|
|
|
142
142
|
"""
|
|
143
143
|
for new_col, prefix in rate_columns.items():
|
|
144
144
|
pattern_rates = re.compile(rf"^{prefix}\d+$")
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
pattern_uncert_plus = re.compile(rf"^{prefix}\d+_STAT_UNCERT_PLUS$")
|
|
146
|
+
pattern_uncert_minus = re.compile(rf"^{prefix}\d+_STAT_UNCERT_MINUS$")
|
|
147
147
|
data[new_col] = data.filter(regex=pattern_rates.pattern).apply(
|
|
148
148
|
lambda row: row.values, axis=1
|
|
149
149
|
)
|
|
150
|
-
data[f"{new_col}
|
|
151
|
-
regex=
|
|
150
|
+
data[f"{new_col}_stat_uncert_plus"] = data.filter(
|
|
151
|
+
regex=pattern_uncert_plus.pattern
|
|
152
152
|
).apply(lambda row: row.values, axis=1)
|
|
153
|
-
data[f"{new_col}
|
|
154
|
-
regex=
|
|
153
|
+
data[f"{new_col}_stat_uncert_minus"] = data.filter(
|
|
154
|
+
regex=pattern_uncert_minus.pattern
|
|
155
155
|
).apply(lambda row: row.values, axis=1)
|
|
156
156
|
if new_col == "sectorates":
|
|
157
157
|
data = consolidate_sectorates(data)
|
|
@@ -159,10 +159,11 @@ def consolidate_rate_columns(
|
|
|
159
159
|
columns=data.filter(regex=pattern_rates.pattern).columns, inplace=True
|
|
160
160
|
)
|
|
161
161
|
data.drop(
|
|
162
|
-
columns=data.filter(regex=
|
|
162
|
+
columns=data.filter(regex=pattern_uncert_plus.pattern).columns, inplace=True
|
|
163
163
|
)
|
|
164
164
|
data.drop(
|
|
165
|
-
columns=data.filter(regex=
|
|
165
|
+
columns=data.filter(regex=pattern_uncert_minus.pattern).columns,
|
|
166
|
+
inplace=True,
|
|
166
167
|
)
|
|
167
168
|
return data
|
|
168
169
|
|
|
@@ -207,22 +208,22 @@ def consolidate_sectorates(data: pd.DataFrame) -> pd.DataFrame:
|
|
|
207
208
|
Validation data with sectorate columns consolidated into arrays
|
|
208
209
|
"""
|
|
209
210
|
sectorates_three_digits = data.filter(regex=r"^SECTORATES_\d{3}$").columns
|
|
210
|
-
|
|
211
|
-
regex=r"^SECTORATES_\d{3}
|
|
211
|
+
sectorates_uncert_plus_three_digits = data.filter(
|
|
212
|
+
regex=r"^SECTORATES_\d{3}_STAT_UNCERT_PLUS$"
|
|
212
213
|
).columns
|
|
213
|
-
|
|
214
|
-
regex=r"^SECTORATES_\d{3}
|
|
214
|
+
sectorates_uncert_minus_three_digits = data.filter(
|
|
215
|
+
regex=r"^SECTORATES_\d{3}_STAT_UNCERT_MINUS$"
|
|
215
216
|
).columns
|
|
216
217
|
|
|
217
218
|
data["sectorates"] = data[sectorates_three_digits].apply(
|
|
218
219
|
lambda row: row.values.reshape(15, 8), axis=1
|
|
219
220
|
)
|
|
220
|
-
data["
|
|
221
|
-
|
|
222
|
-
)
|
|
223
|
-
data["
|
|
224
|
-
|
|
225
|
-
)
|
|
221
|
+
data["sectorates_stat_uncert_plus"] = data[
|
|
222
|
+
sectorates_uncert_plus_three_digits
|
|
223
|
+
].apply(lambda row: row.values.reshape(15, 8), axis=1)
|
|
224
|
+
data["sectorates_stat_uncert_minus"] = data[
|
|
225
|
+
sectorates_uncert_minus_three_digits
|
|
226
|
+
].apply(lambda row: row.values.reshape(15, 8), axis=1)
|
|
226
227
|
|
|
227
228
|
sectorates_four_digits = data.filter(regex=r"^SECTORATES_\d{3}_\d{1}$").columns
|
|
228
229
|
data["sectorates_by_mod_val"] = data[sectorates_four_digits].apply(
|
|
@@ -250,15 +251,15 @@ def process_single_rates(data: pd.DataFrame) -> pd.DataFrame:
|
|
|
250
251
|
data["sngrates"] = data.apply(
|
|
251
252
|
lambda row: np.array([row["sngrates_hg"], row["sngrates_lg"]]), axis=1
|
|
252
253
|
)
|
|
253
|
-
data["
|
|
254
|
+
data["sngrates_stat_uncert_plus"] = data.apply(
|
|
254
255
|
lambda row: np.array(
|
|
255
|
-
[row["
|
|
256
|
+
[row["sngrates_hg_stat_uncert_plus"], row["sngrates_lg_stat_uncert_plus"]]
|
|
256
257
|
),
|
|
257
258
|
axis=1,
|
|
258
259
|
)
|
|
259
|
-
data["
|
|
260
|
+
data["sngrates_stat_uncert_minus"] = data.apply(
|
|
260
261
|
lambda row: np.array(
|
|
261
|
-
[row["
|
|
262
|
+
[row["sngrates_hg_stat_uncert_minus"], row["sngrates_lg_stat_uncert_minus"]]
|
|
262
263
|
),
|
|
263
264
|
axis=1,
|
|
264
265
|
)
|
|
@@ -266,10 +267,10 @@ def process_single_rates(data: pd.DataFrame) -> pd.DataFrame:
|
|
|
266
267
|
columns=[
|
|
267
268
|
"sngrates_hg",
|
|
268
269
|
"sngrates_lg",
|
|
269
|
-
"
|
|
270
|
-
"
|
|
271
|
-
"
|
|
272
|
-
"
|
|
270
|
+
"sngrates_hg_stat_uncert_plus",
|
|
271
|
+
"sngrates_lg_stat_uncert_plus",
|
|
272
|
+
"sngrates_hg_stat_uncert_minus",
|
|
273
|
+
"sngrates_lg_stat_uncert_minus",
|
|
273
274
|
],
|
|
274
275
|
inplace=True,
|
|
275
276
|
)
|
|
@@ -338,9 +339,9 @@ def compare_data(
|
|
|
338
339
|
"species",
|
|
339
340
|
"energy_bin",
|
|
340
341
|
]:
|
|
341
|
-
assert (
|
|
342
|
-
field in
|
|
343
|
-
)
|
|
342
|
+
assert field in actual_data.data_vars.keys(), (
|
|
343
|
+
f"Field {field} not found in actual data variables"
|
|
344
|
+
)
|
|
344
345
|
if field not in skip:
|
|
345
346
|
for frame in range(expected_data.shape[0]):
|
|
346
347
|
if field == "species":
|
|
@@ -353,27 +354,27 @@ def compare_data(
|
|
|
353
354
|
# array of sectored rate data from the actual data for comparison.
|
|
354
355
|
species = expected_data[field][frame]
|
|
355
356
|
energy_bin = expected_data["energy_bin"][frame]
|
|
356
|
-
if "
|
|
357
|
+
if "sectorates_stat_uncert_plus" in expected_data.columns:
|
|
357
358
|
np.testing.assert_allclose(
|
|
358
|
-
actual_data[f"{species}
|
|
359
|
-
|
|
360
|
-
].data,
|
|
361
|
-
expected_data["
|
|
359
|
+
actual_data[f"{species}_sectored_counts_stat_uncert_plus"][
|
|
360
|
+
frame
|
|
361
|
+
][energy_bin].data,
|
|
362
|
+
expected_data["sectorates_stat_uncert_plus"][frame],
|
|
362
363
|
rtol=1e-7, # relative tolerance
|
|
363
364
|
atol=1e-8, # absolute tolerance
|
|
364
|
-
err_msg=f"Mismatch in {species}
|
|
365
|
-
f"
|
|
365
|
+
err_msg=f"Mismatch in {species}_sectored_counts_stat_uncert"
|
|
366
|
+
f"_plus at frame {frame}, energy_bin {energy_bin}",
|
|
366
367
|
)
|
|
367
|
-
if "
|
|
368
|
+
if "sectorates_stat_uncert_minus" in expected_data.columns:
|
|
368
369
|
np.testing.assert_allclose(
|
|
369
|
-
actual_data[f"{species}
|
|
370
|
+
actual_data[f"{species}_sectored_counts_stat_uncert_minus"][
|
|
370
371
|
frame
|
|
371
372
|
][energy_bin].data,
|
|
372
|
-
expected_data["
|
|
373
|
+
expected_data["sectorates_stat_uncert_minus"][frame],
|
|
373
374
|
rtol=1e-7,
|
|
374
375
|
atol=1e-8,
|
|
375
|
-
err_msg=f"Mismatch in {species}
|
|
376
|
-
f"
|
|
376
|
+
err_msg=f"Mismatch in {species}_sectored_counts_stat_uncert"
|
|
377
|
+
f"_minus at frame {frame}, energy_bin {energy_bin}",
|
|
377
378
|
)
|
|
378
379
|
else:
|
|
379
380
|
np.testing.assert_allclose(
|
|
@@ -21,7 +21,7 @@ from imap_processing.hit.l0.decom_hit import (
|
|
|
21
21
|
from imap_processing.utils import packet_file_to_datasets
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
@pytest.fixture
|
|
24
|
+
@pytest.fixture
|
|
25
25
|
def sci_dataset():
|
|
26
26
|
"""Create a xarray dataset for testing from sample data."""
|
|
27
27
|
packet_definition = (
|
|
@@ -62,7 +62,7 @@ def test_subcom_sectorates(sci_packet_filepath):
|
|
|
62
62
|
sci_dataset = decom_hit(sci_dataset)
|
|
63
63
|
|
|
64
64
|
# Call the function to be tested
|
|
65
|
-
subcom_sectorates(sci_dataset)
|
|
65
|
+
sci_dataset = subcom_sectorates(sci_dataset)
|
|
66
66
|
|
|
67
67
|
# Number of science frames in the dataset
|
|
68
68
|
frames = sci_dataset["epoch"].shape[0]
|
|
@@ -79,7 +79,7 @@ def test_subcom_sectorates(sci_packet_filepath):
|
|
|
79
79
|
for species, shape in expected_shapes.items():
|
|
80
80
|
# Check if the dataset has the new data variables
|
|
81
81
|
assert f"{species}_sectored_counts" in sci_dataset
|
|
82
|
-
assert f"{species}_energy_mean" in sci_dataset
|
|
82
|
+
assert f"{species}_energy_mean" in sci_dataset.coords
|
|
83
83
|
assert f"{species}_energy_delta_minus" in sci_dataset
|
|
84
84
|
assert f"{species}_energy_delta_plus" in sci_dataset
|
|
85
85
|
# Check the shape of the new data variables
|
|
@@ -117,13 +117,13 @@ def test_calculate_uncertainties():
|
|
|
117
117
|
|
|
118
118
|
# Assertions
|
|
119
119
|
np.testing.assert_array_almost_equal(
|
|
120
|
-
result["
|
|
120
|
+
result["counts_stat_uncert_plus"].values, expected_delta_plus
|
|
121
121
|
)
|
|
122
122
|
np.testing.assert_array_almost_equal(
|
|
123
|
-
result["
|
|
123
|
+
result["counts_stat_uncert_minus"].values, expected_delta_minus
|
|
124
124
|
)
|
|
125
|
-
assert "
|
|
126
|
-
assert "
|
|
125
|
+
assert "version_stat_uncert_plus" not in result
|
|
126
|
+
assert "version_stat_uncert_minus" not in result
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
def test_validate_l1a_housekeeping_data(hk_packet_filepath):
|
|
@@ -137,7 +137,7 @@ def test_validate_l1a_housekeeping_data(hk_packet_filepath):
|
|
|
137
137
|
hk_packet_filepath : str
|
|
138
138
|
File path to housekeeping ccsds file
|
|
139
139
|
"""
|
|
140
|
-
datasets = hit_l1a(hk_packet_filepath
|
|
140
|
+
datasets = hit_l1a(hk_packet_filepath)
|
|
141
141
|
hk_dataset = None
|
|
142
142
|
for dataset in datasets:
|
|
143
143
|
if dataset.attrs["Logical_source"] == "imap_hit_l1a_hk":
|
|
@@ -223,7 +223,7 @@ def test_validate_l1a_counts_data(sci_packet_filepath, validation_data):
|
|
|
223
223
|
"""
|
|
224
224
|
|
|
225
225
|
# Process the sample data
|
|
226
|
-
processed_datasets = hit_l1a(sci_packet_filepath
|
|
226
|
+
processed_datasets = hit_l1a(sci_packet_filepath)
|
|
227
227
|
l1a_counts_data = processed_datasets[0]
|
|
228
228
|
|
|
229
229
|
# Prepare validation data for comparison with processed data
|
|
@@ -260,7 +260,7 @@ def test_hit_l1a(hk_packet_filepath, sci_packet_filepath):
|
|
|
260
260
|
Path to ccsds file for science data
|
|
261
261
|
"""
|
|
262
262
|
for packet_filepath in [hk_packet_filepath, sci_packet_filepath]:
|
|
263
|
-
processed_datasets = hit_l1a(packet_filepath
|
|
263
|
+
processed_datasets = hit_l1a(packet_filepath)
|
|
264
264
|
assert isinstance(processed_datasets, list)
|
|
265
265
|
assert all(isinstance(ds, xr.Dataset) for ds in processed_datasets)
|
|
266
266
|
if packet_filepath == hk_packet_filepath:
|