From 575b0f7343f6425949606ee37f8c1ab65941fabb Mon Sep 17 00:00:00 2001 From: Jon Niehof Date: Fri, 2 Oct 2026 11:41:40 -0600 Subject: [PATCH 1/2] MAG L2: switch quality_flags to UINT1 to match range and FILLVAL * Similar to qf_bitmask changes in 4c9c110c262edf52d173ee1351025c32f2d6d21f --- imap_processing/mag/l2/mag_l2_data.py | 2 +- imap_processing/tests/mag/test_mag_l2.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/imap_processing/mag/l2/mag_l2_data.py b/imap_processing/mag/l2/mag_l2_data.py index beee1f2b4..62ee5cec9 100644 --- a/imap_processing/mag/l2/mag_l2_data.py +++ b/imap_processing/mag/l2/mag_l2_data.py @@ -243,7 +243,7 @@ def generate_dataset( ) quality_flags = xr.DataArray( - self.quality_flags, + self.quality_flags.astype(np.uint8), name="quality_flags", dims=["epoch"], attrs=attribute_manager.get_variable_attributes("qf"), diff --git a/imap_processing/tests/mag/test_mag_l2.py b/imap_processing/tests/mag/test_mag_l2.py index fbdbf15c4..e3edfb660 100644 --- a/imap_processing/tests/mag/test_mag_l2.py +++ b/imap_processing/tests/mag/test_mag_l2.py @@ -670,11 +670,15 @@ def test_qf(norm_dataset): cdf_filepath = write_cdf(output) with cdflib.CDF(cdf_filepath) as cdf_file: qf_attrs = cdf_file.varattsget("quality_flags") + qf_info = cdf_file.varinq("quality_flags") qf_bitmask_attrs = cdf_file.varattsget("quality_bitmask") qf_bitmask_info = cdf_file.varinq("quality_bitmask") + assert qf_info.Data_Type_Description == "CDF_UINT1" assert qf_attrs["FORMAT"] == "I1" + assert int(qf_attrs["VALIDMIN"]) == 0 assert int(qf_attrs["VALIDMAX"]) == 1 + assert int(qf_attrs["FILLVAL"]) == 255 assert qf_bitmask_info.Data_Type_Description == "CDF_UINT2" assert qf_bitmask_attrs["FORMAT"] == "I3" assert int(qf_bitmask_attrs["FILLVAL"]) == 65535 From 0d9ff8e8591cbae07653c02a9c73c58d12704e30 Mon Sep 17 00:00:00 2001 From: Jon Niehof Date: Mon, 5 Oct 2026 02:58:23 -0600 Subject: [PATCH 2/2] MAG L2: add SCALEMIN/SCALEMAX for field vectors * Makes for easier plotting in CAVA --- imap_processing/cdf/config/imap_mag_l2_variable_attrs.yaml | 2 ++ imap_processing/tests/mag/test_mag_l2.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/imap_processing/cdf/config/imap_mag_l2_variable_attrs.yaml b/imap_processing/cdf/config/imap_mag_l2_variable_attrs.yaml index bbd8658f8..48d972ce3 100644 --- a/imap_processing/cdf/config/imap_mag_l2_variable_attrs.yaml +++ b/imap_processing/cdf/config/imap_mag_l2_variable_attrs.yaml @@ -52,6 +52,8 @@ vector_attrs: &vectors_default FILLVAL: -1.0e31 FORMAT: F13.5 LABL_PTR_1: direction_label + SCALEMAX: 100.0 + SCALEMIN: -100.0 UNITS: nT VALIDMAX: 1.0e+5 VALIDMIN: -1.0e+5 diff --git a/imap_processing/tests/mag/test_mag_l2.py b/imap_processing/tests/mag/test_mag_l2.py index e3edfb660..7bd1d2cc8 100644 --- a/imap_processing/tests/mag/test_mag_l2.py +++ b/imap_processing/tests/mag/test_mag_l2.py @@ -106,6 +106,8 @@ def test_mag_l2_attributes( assert vectors_attrs["FORMAT"] == "F13.5" assert np.isclose(vectors_attrs["VALIDMIN"], -1.0e5) assert np.isclose(vectors_attrs["VALIDMAX"], 1.0e5) + assert np.isclose(vectors_attrs["SCALEMIN"], -100) + assert np.isclose(vectors_attrs["SCALEMAX"], 100) expected_vector_text = { "SRF": ( "Magnetic field in the Spacecraft Reference Frame (SRF)",