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
imap_processing/swe/l2/swe_l2.py
CHANGED
|
@@ -12,35 +12,9 @@ from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
|
|
|
12
12
|
from imap_processing.spice.geometry import SpiceFrame
|
|
13
13
|
from imap_processing.spice.spin import get_instrument_spin_phase, get_spin_angle
|
|
14
14
|
from imap_processing.swe.utils import swe_constants
|
|
15
|
-
from imap_processing.swe.utils.swe_utils import (
|
|
16
|
-
read_lookup_table,
|
|
17
|
-
)
|
|
18
15
|
|
|
19
16
|
|
|
20
|
-
def
|
|
21
|
-
"""
|
|
22
|
-
Get particle energy.
|
|
23
|
-
|
|
24
|
-
Calculate particle energy and add to the lookup table.
|
|
25
|
-
To convert Volts to Energy, multiply ESA voltage in Volts by
|
|
26
|
-
energy conversion factor to get electron energy in eV.
|
|
27
|
-
|
|
28
|
-
Returns
|
|
29
|
-
-------
|
|
30
|
-
lookup_table : pandas.DataFrame
|
|
31
|
-
Lookup table with energy column added.
|
|
32
|
-
"""
|
|
33
|
-
# The lookup table gives voltage applied to analyzers.
|
|
34
|
-
lookup_table = read_lookup_table()
|
|
35
|
-
|
|
36
|
-
# Convert voltage to electron energy in eV by apply conversion factor.
|
|
37
|
-
lookup_table["energy"] = (
|
|
38
|
-
lookup_table["esa_v"].values * swe_constants.ENERGY_CONVERSION_FACTOR
|
|
39
|
-
)
|
|
40
|
-
return lookup_table
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def calculate_phase_space_density(l1b_dataset: xr.Dataset) -> xr.Dataset:
|
|
17
|
+
def calculate_phase_space_density(l1b_dataset: xr.Dataset) -> npt.NDArray:
|
|
44
18
|
"""
|
|
45
19
|
Convert counts to phase space density.
|
|
46
20
|
|
|
@@ -52,7 +26,7 @@ def calculate_phase_space_density(l1b_dataset: xr.Dataset) -> xr.Dataset:
|
|
|
52
26
|
Where:
|
|
53
27
|
C / tau = corrected count rate which in the input L1B science data.
|
|
54
28
|
G = geometric factor, in (cm^2 * ster). 7 CEMs geometric factor value.
|
|
55
|
-
eV = eV in electron-volts
|
|
29
|
+
eV = eV in electron-volts.
|
|
56
30
|
E = Energy in Joules. eV * 1.60219e-19(J/eV).
|
|
57
31
|
m = mass of electron (9.10938356e-31 kg).
|
|
58
32
|
s = second.
|
|
@@ -80,25 +54,12 @@ def calculate_phase_space_density(l1b_dataset: xr.Dataset) -> xr.Dataset:
|
|
|
80
54
|
|
|
81
55
|
Returns
|
|
82
56
|
-------
|
|
83
|
-
|
|
57
|
+
phase_space_density : np.ndarray
|
|
84
58
|
Phase space density. We need to call this phase space density because
|
|
85
59
|
there will be density in L3 processing.
|
|
86
60
|
"""
|
|
87
|
-
# Get
|
|
88
|
-
|
|
89
|
-
# Get energy values from lookup table.
|
|
90
|
-
particle_energy = get_particle_energy()
|
|
91
|
-
# Get 720 (24 energy steps x 30 angle) particle energy for each full
|
|
92
|
-
# sweep data.
|
|
93
|
-
particle_energy_data = np.array(
|
|
94
|
-
[
|
|
95
|
-
particle_energy[particle_energy["table_index"] == val]["energy"].tolist()
|
|
96
|
-
for val in esa_table_nums
|
|
97
|
-
]
|
|
98
|
-
)
|
|
99
|
-
particle_energy_data = particle_energy_data.reshape(
|
|
100
|
-
-1, swe_constants.N_ESA_STEPS, swe_constants.N_ANGLE_SECTORS
|
|
101
|
-
)
|
|
61
|
+
# Get energy values.
|
|
62
|
+
particle_energy_data = l1b_dataset["esa_energy"].values
|
|
102
63
|
|
|
103
64
|
# Calculate phase space density using formula:
|
|
104
65
|
# 2 * (C/tau) / (G * 1.237e31 * eV^2)
|
|
@@ -108,27 +69,14 @@ def calculate_phase_space_density(l1b_dataset: xr.Dataset) -> xr.Dataset:
|
|
|
108
69
|
* swe_constants.VELOCITY_CONVERSION_FACTOR
|
|
109
70
|
* particle_energy_data[:, :, :, np.newaxis] ** 2
|
|
110
71
|
)
|
|
72
|
+
phase_space_density = density.data
|
|
111
73
|
|
|
112
|
-
|
|
113
|
-
# energy in eV value that flux calculation can use.
|
|
114
|
-
phase_space_density_dataset = xr.Dataset(
|
|
115
|
-
{
|
|
116
|
-
"phase_space_density": (
|
|
117
|
-
["epoch", "esa_step", "spin_sector", "cem_id"],
|
|
118
|
-
density.data,
|
|
119
|
-
),
|
|
120
|
-
"energy_in_eV": (
|
|
121
|
-
["epoch", "esa_step", "spin_sector"],
|
|
122
|
-
particle_energy_data,
|
|
123
|
-
),
|
|
124
|
-
},
|
|
125
|
-
coords=l1b_dataset.coords,
|
|
126
|
-
)
|
|
74
|
+
return phase_space_density
|
|
127
75
|
|
|
128
|
-
return phase_space_density_dataset
|
|
129
76
|
|
|
130
|
-
|
|
131
|
-
|
|
77
|
+
def calculate_flux(
|
|
78
|
+
phase_space_density: np.ndarray, esa_energy: np.ndarray
|
|
79
|
+
) -> npt.NDArray:
|
|
132
80
|
"""
|
|
133
81
|
Calculate flux.
|
|
134
82
|
|
|
@@ -140,7 +88,7 @@ def calculate_flux(l1b_dataset: xr.Dataset) -> npt.NDArray:
|
|
|
140
88
|
Where:
|
|
141
89
|
fv = the phase space density of solar wind electrons
|
|
142
90
|
given by calculate_phase_space_density() result.
|
|
143
|
-
eV = Energy in electron-volts
|
|
91
|
+
eV = Energy in electron-volts.
|
|
144
92
|
E = Energy in Joules. eV * 1.60219e-19(J/eV).
|
|
145
93
|
v = sqrt( (3.20438 * 10e-15 / 9.10938e-31) * eV ) cm/s. See
|
|
146
94
|
calculate_phase_space_density() for this calculation.
|
|
@@ -165,19 +113,20 @@ def calculate_flux(l1b_dataset: xr.Dataset) -> npt.NDArray:
|
|
|
165
113
|
|
|
166
114
|
Parameters
|
|
167
115
|
----------
|
|
168
|
-
|
|
169
|
-
The
|
|
116
|
+
phase_space_density : numpy.ndarray
|
|
117
|
+
The phase space density.
|
|
118
|
+
esa_energy : numpy.ndarray
|
|
119
|
+
The energy values in eV.
|
|
170
120
|
|
|
171
121
|
Returns
|
|
172
122
|
-------
|
|
173
123
|
flux : numpy.ndarray
|
|
174
124
|
Flux values.
|
|
175
125
|
"""
|
|
176
|
-
phase_space_density_ds = calculate_phase_space_density(l1b_dataset)
|
|
177
126
|
flux = (
|
|
178
127
|
swe_constants.FLUX_CONVERSION_FACTOR
|
|
179
|
-
*
|
|
180
|
-
*
|
|
128
|
+
* esa_energy[:, :, :, np.newaxis]
|
|
129
|
+
* phase_space_density
|
|
181
130
|
)
|
|
182
131
|
return flux
|
|
183
132
|
|
|
@@ -303,7 +252,7 @@ def find_angle_bin_indices(
|
|
|
303
252
|
return spin_angle_bins_indices
|
|
304
253
|
|
|
305
254
|
|
|
306
|
-
def swe_l2(l1b_dataset: xr.Dataset
|
|
255
|
+
def swe_l2(l1b_dataset: xr.Dataset) -> xr.Dataset:
|
|
307
256
|
"""
|
|
308
257
|
Will process data to L2.
|
|
309
258
|
|
|
@@ -311,8 +260,6 @@ def swe_l2(l1b_dataset: xr.Dataset, data_version: str) -> xr.Dataset:
|
|
|
311
260
|
----------
|
|
312
261
|
l1b_dataset : xarray.Dataset
|
|
313
262
|
The L1B dataset to process.
|
|
314
|
-
data_version : str
|
|
315
|
-
Version of the data product being created.
|
|
316
263
|
|
|
317
264
|
Returns
|
|
318
265
|
-------
|
|
@@ -322,7 +269,6 @@ def swe_l2(l1b_dataset: xr.Dataset, data_version: str) -> xr.Dataset:
|
|
|
322
269
|
cdf_attributes = ImapCdfAttributes()
|
|
323
270
|
cdf_attributes.add_instrument_global_attrs("swe")
|
|
324
271
|
cdf_attributes.add_instrument_variable_attrs("swe", "l2")
|
|
325
|
-
cdf_attributes.add_global_attribute("Data_version", data_version)
|
|
326
272
|
|
|
327
273
|
# Energy values in eV.
|
|
328
274
|
energy_xr = xr.DataArray(
|
|
@@ -397,9 +343,7 @@ def swe_l2(l1b_dataset: xr.Dataset, data_version: str) -> xr.Dataset:
|
|
|
397
343
|
# Calculate phase space density and flux. Store data in shape
|
|
398
344
|
# (epoch, esa_step, spin_sector, cem_id). This is for L3 purposes.
|
|
399
345
|
############################################################
|
|
400
|
-
phase_space_density = calculate_phase_space_density(l1b_dataset)
|
|
401
|
-
"phase_space_density"
|
|
402
|
-
]
|
|
346
|
+
phase_space_density = calculate_phase_space_density(l1b_dataset)
|
|
403
347
|
dataset["phase_space_density_spin_sector"] = xr.DataArray(
|
|
404
348
|
phase_space_density,
|
|
405
349
|
name="phase_space_density_spin_sector",
|
|
@@ -407,7 +351,7 @@ def swe_l2(l1b_dataset: xr.Dataset, data_version: str) -> xr.Dataset:
|
|
|
407
351
|
attrs=cdf_attributes.get_variable_attributes("phase_space_density_spin_sector"),
|
|
408
352
|
)
|
|
409
353
|
|
|
410
|
-
flux = calculate_flux(l1b_dataset)
|
|
354
|
+
flux = calculate_flux(phase_space_density, l1b_dataset["esa_energy"].data)
|
|
411
355
|
dataset["flux_spin_sector"] = xr.DataArray(
|
|
412
356
|
flux,
|
|
413
357
|
name="flux_spin_sector",
|
|
@@ -466,7 +410,7 @@ def swe_l2(l1b_dataset: xr.Dataset, data_version: str) -> xr.Dataset:
|
|
|
466
410
|
|
|
467
411
|
# Put phase space density data in its spin angle bins using the indices.
|
|
468
412
|
phase_space_density_binned_data = put_data_into_angle_bins(
|
|
469
|
-
phase_space_density
|
|
413
|
+
phase_space_density, spin_angle_bins_indices
|
|
470
414
|
)
|
|
471
415
|
dataset["phase_space_density"] = xr.DataArray(
|
|
472
416
|
phase_space_density_binned_data,
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tests for the ``cdf.utils`` module."""
|
|
2
2
|
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
3
|
import imap_data_access
|
|
6
4
|
import numpy as np
|
|
7
5
|
import pytest
|
|
@@ -16,7 +14,7 @@ from imap_processing.cdf.utils import (
|
|
|
16
14
|
from imap_processing.spice.time import met_to_ttj2000ns
|
|
17
15
|
|
|
18
16
|
|
|
19
|
-
@pytest.fixture
|
|
17
|
+
@pytest.fixture
|
|
20
18
|
def test_dataset():
|
|
21
19
|
"""Create a simple ``xarray`` dataset to be used in testing
|
|
22
20
|
|
|
@@ -28,7 +26,7 @@ def test_dataset():
|
|
|
28
26
|
# Load the CDF attrs
|
|
29
27
|
swe_attrs = ImapCdfAttributes()
|
|
30
28
|
swe_attrs.add_instrument_global_attrs("swe")
|
|
31
|
-
swe_attrs.add_global_attribute("Data_version", "
|
|
29
|
+
swe_attrs.add_global_attribute("Data_version", "v001")
|
|
32
30
|
|
|
33
31
|
dataset = xr.Dataset(
|
|
34
32
|
{
|
|
@@ -97,17 +95,17 @@ def test_written_and_loaded_dataset(test_dataset):
|
|
|
97
95
|
assert str(test_dataset) == str(new_dataset)
|
|
98
96
|
|
|
99
97
|
|
|
100
|
-
def
|
|
101
|
-
|
|
98
|
+
def test_repoint_start_date(test_dataset):
|
|
99
|
+
output_file_path = write_cdf(test_dataset)
|
|
100
|
+
assert "imap_swe_l1a_sci_20100101_v001.cdf" in output_file_path.name
|
|
101
|
+
test_dataset.attrs["Start_date"] = "20001212"
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
new_dataset = load_cdf(write_cdf(test_dataset, parent_files=parent_paths))
|
|
110
|
-
assert new_dataset.attrs["Parents"] == [p.name for p in parent_paths]
|
|
103
|
+
output_file_path = write_cdf(test_dataset)
|
|
104
|
+
assert "imap_swe_l1a_sci_20001212_v001.cdf" in output_file_path.name
|
|
105
|
+
|
|
106
|
+
test_dataset.attrs["Repointing"] = "12345"
|
|
107
|
+
output_file_path = write_cdf(test_dataset)
|
|
108
|
+
assert "imap_swe_l1a_sci_20001212-repoint12345_v001.cdf" in output_file_path.name
|
|
111
109
|
|
|
112
110
|
|
|
113
111
|
@pytest.mark.parametrize(
|
|
@@ -131,7 +129,7 @@ def test_parents_injection(test_dataset):
|
|
|
131
129
|
"data_level": "l1a",
|
|
132
130
|
"descriptor": "hist",
|
|
133
131
|
"start_date": "20250415",
|
|
134
|
-
"version": "
|
|
132
|
+
"version": "v001",
|
|
135
133
|
},
|
|
136
134
|
),
|
|
137
135
|
(
|
|
@@ -144,7 +142,7 @@ def test_parents_injection(test_dataset):
|
|
|
144
142
|
"descriptor": "pset",
|
|
145
143
|
"start_date": "20250415",
|
|
146
144
|
"repointing": "12345",
|
|
147
|
-
"version": "
|
|
145
|
+
"version": "v001",
|
|
148
146
|
"extension": "cdf",
|
|
149
147
|
},
|
|
150
148
|
),
|
|
@@ -1,43 +1,54 @@
|
|
|
1
1
|
from imap_processing import imap_module_directory
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
TEST_L0_DATA_PATH = imap_module_directory / "tests" / "codice" / "data"
|
|
4
|
+
TEST_L0_FILE = TEST_L0_DATA_PATH / "imap_codice_l0_raw_20241110_v001.pkts"
|
|
5
|
+
TEST_L1A_DATA_PATH = (
|
|
6
|
+
imap_module_directory
|
|
7
|
+
/ "codice"
|
|
8
|
+
/ "data"
|
|
9
|
+
/ "imap"
|
|
10
|
+
/ "codice"
|
|
11
|
+
/ "l1a"
|
|
12
|
+
/ "2024"
|
|
13
|
+
/ "11"
|
|
14
|
+
)
|
|
4
15
|
|
|
5
|
-
TEST_L0_FILE = TEST_DATA_PATH / "imap_codice_l0_raw_20241110_v001.pkts"
|
|
6
16
|
|
|
7
17
|
TEST_L1A_FILES = [
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_hskp_20241110_v001.cdf",
|
|
19
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_hi-counters-aggregated_20241110_v001.cdf",
|
|
20
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_hi-counters-singles_20241110_v001.cdf",
|
|
21
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_hi-omni_20241110_v001.cdf",
|
|
22
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_hi-priority_20241110_v001.cdf",
|
|
23
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_hi-sectored_20241110_v001.cdf",
|
|
24
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-counters-aggregated_20241110_v001.cdf",
|
|
25
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-counters-singles_20241110_v001.cdf",
|
|
26
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-sw-angular_20241110_v001.cdf",
|
|
27
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-nsw-angular_20241110_v001.cdf",
|
|
28
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-sw-priority_20241110_v001.cdf",
|
|
29
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-nsw-priority_20241110_v001.cdf",
|
|
30
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-sw-species_20241110_v001.cdf",
|
|
31
|
+
TEST_L1A_DATA_PATH / "imap_codice_l1a_lo-nsw-species_20241110_v001.cdf",
|
|
21
32
|
]
|
|
22
33
|
|
|
23
34
|
# ruff: noqa
|
|
24
35
|
VALIDATION_DATA = [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hi-ialirt_20241110193700_v0.0.0.cdf",
|
|
37
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf",
|
|
38
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hskp_20241110193622_v0.0.0.cdf",
|
|
39
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-counters-aggregated_20241110193700_v0.0.0.cdf",
|
|
40
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-counters-singles_20241110193700_v0.0.0.cdf",
|
|
41
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-sw-priority_20241110193700_v0.0.0.cdf",
|
|
42
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-nsw-priority_20241110193700_v0.0.0.cdf",
|
|
43
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-sw-species_20241110193700_v0.0.0.cdf",
|
|
44
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-nsw-species_20241110193700_v0.0.0.cdf",
|
|
45
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-sw-angular_20241110193700_v0.0.0.cdf",
|
|
46
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-nsw-angular_20241110193700_v0.0.0.cdf",
|
|
47
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hi-counters-aggregated_20241110193700_v0.0.0.cdf",
|
|
48
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hi-counters-singles_20241110193700_v0.0.0.cdf",
|
|
49
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hi-omni_20241110193700_v0.0.0.cdf",
|
|
50
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hi-sectored_20241110193700_v0.0.0.cdf",
|
|
51
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hi-priorities_20241110193700_v0.0.0.cdf",
|
|
52
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_lo-pha_20241110193700_v0.0.0.cdf",
|
|
53
|
+
TEST_L0_DATA_PATH / "validation" / "imap_codice_l1a_hi-pha_20241110193700_v0.0.0.cdf",
|
|
43
54
|
] # fmt: skip
|
imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-pha_20241110193700_v0.0.0.cdf
CHANGED
|
Binary file
|
imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-pha_20241110193700_v0.0.0.cdf
CHANGED
|
Binary file
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Tests the L1a processing for decommutated CoDICE data"""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
import re
|
|
4
5
|
|
|
5
6
|
import numpy as np
|
|
6
7
|
import pytest
|
|
@@ -9,6 +10,7 @@ import xarray as xr
|
|
|
9
10
|
from imap_processing.cdf.utils import load_cdf, write_cdf
|
|
10
11
|
from imap_processing.codice import constants
|
|
11
12
|
from imap_processing.codice.codice_l1a import process_codice_l1a
|
|
13
|
+
from imap_processing.tests.conftest import _download_external_data, _test_data_paths
|
|
12
14
|
|
|
13
15
|
from .conftest import TEST_L0_FILE, VALIDATION_DATA
|
|
14
16
|
|
|
@@ -55,7 +57,7 @@ EXPECTED_ARRAY_SHAPES = [
|
|
|
55
57
|
(77, 15, 4), # hi-omni
|
|
56
58
|
(77, 8, 12, 12), # hi-sectored
|
|
57
59
|
(77,), # hi-priority
|
|
58
|
-
(), # lo-pha
|
|
60
|
+
(77, 10000), # lo-pha
|
|
59
61
|
(), # hi-pha # TODO: Need to implement
|
|
60
62
|
]
|
|
61
63
|
|
|
@@ -76,7 +78,7 @@ EXPECTED_NUM_VARIABLES = [
|
|
|
76
78
|
10, # hi-omni
|
|
77
79
|
6, # hi-sectored
|
|
78
80
|
8, # hi-priority
|
|
79
|
-
|
|
81
|
+
80, # lo-pha
|
|
80
82
|
0, # hi-pha # TODO: Need to implement
|
|
81
83
|
]
|
|
82
84
|
|
|
@@ -112,8 +114,11 @@ def test_l1a_data() -> xr.Dataset:
|
|
|
112
114
|
processed_datasets : list[xarray.Dataset]
|
|
113
115
|
A list of ``xarray`` datasets containing the test data
|
|
114
116
|
"""
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
# Make sure we have the data available here. This test collection gets
|
|
118
|
+
# skipped at the module level if the mark isn't present. We can't decorate
|
|
119
|
+
# a fixture, so add the needed call directly here instead.
|
|
120
|
+
_download_external_data(_test_data_paths())
|
|
121
|
+
processed_datasets = process_codice_l1a(file_path=TEST_L0_FILE)
|
|
117
122
|
|
|
118
123
|
return processed_datasets
|
|
119
124
|
|
|
@@ -135,9 +140,10 @@ def test_l1a_data_array_shape(test_l1a_data, index):
|
|
|
135
140
|
|
|
136
141
|
# Mark currently broken/unsupported datasets as expected to fail
|
|
137
142
|
# TODO: Remove these once they are supported
|
|
138
|
-
if index in [0, 1,
|
|
143
|
+
if index in [0, 1, 17]:
|
|
139
144
|
pytest.xfail("Data product is currently unsupported")
|
|
140
145
|
|
|
146
|
+
# There are exceptions for some variables
|
|
141
147
|
for variable in processed_dataset:
|
|
142
148
|
# For variables with energy dimensions
|
|
143
149
|
if variable in ["energy_table", "acquisition_time_per_step"]:
|
|
@@ -154,7 +160,10 @@ def test_l1a_data_array_shape(test_l1a_data, index):
|
|
|
154
160
|
assert processed_dataset[variable].data.shape == (
|
|
155
161
|
len(processed_dataset["epoch"].data),
|
|
156
162
|
)
|
|
157
|
-
# For
|
|
163
|
+
# For some direct event variables:
|
|
164
|
+
elif re.match(r"P[0-7]_(NumEvents|DataQuality)", variable):
|
|
165
|
+
assert processed_dataset[variable].data.shape == (77,)
|
|
166
|
+
# For nominal variables
|
|
158
167
|
else:
|
|
159
168
|
assert processed_dataset[variable].data.shape == expected_shape
|
|
160
169
|
|
|
@@ -179,7 +188,7 @@ def test_l1a_logical_sources(test_l1a_data, index):
|
|
|
179
188
|
|
|
180
189
|
# Mark currently broken/unsupported datasets as expected to fail
|
|
181
190
|
# TODO: Remove these once they are supported
|
|
182
|
-
if index in [0, 1,
|
|
191
|
+
if index in [0, 1, 17]:
|
|
183
192
|
pytest.xfail("Data product is currently unsupported")
|
|
184
193
|
|
|
185
194
|
# Write the dataset to a file to set the logical source attribute
|
|
@@ -207,7 +216,7 @@ def test_l1a_num_data_variables(test_l1a_data, index):
|
|
|
207
216
|
|
|
208
217
|
# Mark currently broken/unsupported datasets as expected to fail
|
|
209
218
|
# TODO: Remove these once they are supported
|
|
210
|
-
if index in [0, 1,
|
|
219
|
+
if index in [0, 1, 17]:
|
|
211
220
|
pytest.xfail("Data product is currently unsupported")
|
|
212
221
|
|
|
213
222
|
assert len(processed_dataset) == EXPECTED_NUM_VARIABLES[index]
|
|
@@ -245,12 +254,12 @@ def test_l1a_validate_data_arrays(test_l1a_data: xr.Dataset, index):
|
|
|
245
254
|
"lo-nsw-priority",
|
|
246
255
|
"lo-sw-species",
|
|
247
256
|
"lo-nsw-species",
|
|
248
|
-
"
|
|
257
|
+
"lo_pha",
|
|
249
258
|
]
|
|
250
259
|
|
|
251
260
|
if descriptor in able_to_be_validated:
|
|
252
261
|
counters = getattr(
|
|
253
|
-
constants, f
|
|
262
|
+
constants, f"{descriptor.upper().replace('-', '_')}_VARIABLE_NAMES"
|
|
254
263
|
)
|
|
255
264
|
processed_dataset = test_l1a_data[index]
|
|
256
265
|
validation_dataset = load_cdf(VALIDATION_DATA[index])
|
|
@@ -356,7 +365,7 @@ def test_l1a_validate_support_variables(test_l1a_data, index):
|
|
|
356
365
|
def test_l1a_multiple_packets():
|
|
357
366
|
"""Tests that an input L0 file containing multiple APIDs can be processed."""
|
|
358
367
|
|
|
359
|
-
processed_datasets = process_codice_l1a(file_path=TEST_L0_FILE
|
|
368
|
+
processed_datasets = process_codice_l1a(file_path=TEST_L0_FILE)
|
|
360
369
|
|
|
361
370
|
# TODO: Could add some more checks here?
|
|
362
371
|
assert len(processed_datasets) == 18
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
import pytest
|
|
4
4
|
import xarray as xr
|
|
5
5
|
|
|
6
|
-
from imap_processing.cdf.utils import load_cdf
|
|
7
6
|
from imap_processing.codice.codice_l1b import process_codice_l1b
|
|
8
7
|
|
|
9
8
|
from .conftest import TEST_L1A_FILES
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
EXPECTED_LOGICAL_SOURCES = [
|
|
12
11
|
"imap_codice_l1b_hskp",
|
|
13
12
|
"imap_codice_l1b_hi-counters-aggregated",
|
|
14
13
|
"imap_codice_l1b_hi-counters-singles",
|
|
15
14
|
"imap_codice_l1b_hi-omni",
|
|
15
|
+
"imap_codice_l1b_hi-priority",
|
|
16
16
|
"imap_codice_l1b_hi-sectored",
|
|
17
17
|
"imap_codice_l1b_lo-counters-aggregated",
|
|
18
18
|
"imap_codice_l1b_lo-counters-singles",
|
|
@@ -34,18 +34,17 @@ def test_l1b_data(request) -> xr.Dataset:
|
|
|
34
34
|
dataset : xr.Dataset
|
|
35
35
|
A ``xarray`` dataset containing the test data
|
|
36
36
|
"""
|
|
37
|
-
|
|
38
|
-
dataset = process_codice_l1b(input_dataset, data_version="001")
|
|
37
|
+
dataset = process_codice_l1b(request.param)
|
|
39
38
|
return dataset
|
|
40
39
|
|
|
41
40
|
|
|
42
41
|
@pytest.mark.skip("Awaiting proper implementation of L1B")
|
|
43
42
|
@pytest.mark.parametrize(
|
|
44
43
|
"test_l1b_data, expected_logical_source",
|
|
45
|
-
list(zip(TEST_L1A_FILES,
|
|
44
|
+
list(zip(TEST_L1A_FILES, EXPECTED_LOGICAL_SOURCES)),
|
|
46
45
|
indirect=["test_l1b_data"],
|
|
47
46
|
)
|
|
48
|
-
def
|
|
47
|
+
def test_l1b_logical_sources(test_l1b_data: xr.Dataset, expected_logical_source: str):
|
|
49
48
|
"""Tests that the ``process_codice_l1b`` function generates datasets
|
|
50
49
|
with the expected logical source.
|
|
51
50
|
|
|
@@ -53,7 +52,7 @@ def test_l1b_cdf_filenames(test_l1b_data: xr.Dataset, expected_logical_source: s
|
|
|
53
52
|
----------
|
|
54
53
|
test_l1b_data : xr.Dataset
|
|
55
54
|
A ``xarray`` dataset containing the test data
|
|
56
|
-
|
|
55
|
+
expected_logical_source : str
|
|
57
56
|
The expected CDF filename
|
|
58
57
|
"""
|
|
59
58
|
|