Skip to content

BUG: setting Data_version in write_cdf #1738

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions imap_processing/cdf/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,11 @@ def write_cdf(
"No Data_version attribute found in dataset. Using default v999.",
stacklevel=2,
)
version = "v999"
elif not re.match(r"v\d{3}", version):
version = "999"
dataset.attrs["Data_version"] = version
elif not re.match(r"\d{3}", version):
raise ValueError(
f"The Data_version attribute {version} does not match expected format vXXX."
f"The Data_version attribute {version} does not match expected format XXX."
)

repointing = dataset.attrs.get("Repointing", None)
Expand All @@ -129,7 +130,7 @@ def write_cdf(
data_level=data_level,
descriptor=descriptor,
start_time=start_date,
version=version,
version=f"v{version}", # Ensure version is prefixed with 'v'
repointing=repointing_int,
)
file_path = Path(science_file.construct_path())
Expand Down
2 changes: 1 addition & 1 deletion imap_processing/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,7 @@ def post_processing(
products = []
for ds in processed_data:
if isinstance(ds, xr.Dataset):
ds.attrs["Data_version"] = self.version
ds.attrs["Data_version"] = self.version[1:] # Strip 'v' from version
if self.repointing is not None:
ds.attrs["Repointing"] = self.repointing
ds.attrs["Start_date"] = self.start_date
Expand Down
2 changes: 1 addition & 1 deletion imap_processing/tests/cdf/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def test_dataset():
# Load the CDF attrs
swe_attrs = ImapCdfAttributes()
swe_attrs.add_instrument_global_attrs("swe")
swe_attrs.add_global_attribute("Data_version", "v001")
swe_attrs.add_global_attribute("Data_version", "001")

dataset = xr.Dataset(
{
Expand Down
2 changes: 1 addition & 1 deletion imap_processing/tests/idex/test_idex_l2a.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def test_l2a_logical_source_and_cdf(l2a_dataset: xr.Dataset):
expected_src = "imap_idex_l2a_sci-1week"
assert l2a_dataset.attrs["Logical_source"] == expected_src
# Verify the CDF file can be created with no errors.
l2a_dataset.attrs["Data_version"] = "v999"
l2a_dataset.attrs["Data_version"] = "999"
file_name = write_cdf(l2a_dataset)
assert file_name.exists()
assert file_name.name == "imap_idex_l2a_sci-1week_20231218_v999.cdf"
Expand Down
2 changes: 1 addition & 1 deletion imap_processing/tests/idex/test_idex_l2b.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def test_l2b_logical_source_and_cdf(l2b_dataset: xr.Dataset):
expected_src = "imap_idex_l2b_sci-1week"
assert l2b_dataset.attrs["Logical_source"] == expected_src
# Verify the CDF file can be created with no errors.
l2b_dataset.attrs["Data_version"] = "v999"
l2b_dataset.attrs["Data_version"] = "999"
file_name = write_cdf(l2b_dataset)

assert file_name.exists()
Expand Down
4 changes: 2 additions & 2 deletions imap_processing/tests/idex/test_idex_l2c.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ def test_l2c_attrs_and_vars(l2c_datasets: list[xr.Dataset], l1b_dataset: xr.Data
"rectangular_lat_pixel": int(180 / IDEX_SPACING_DEG),
"epoch": 1,
}
healpix_ds.attrs["Data_version"] = "v999"
rect_ds.attrs["Data_version"] = "v999"
healpix_ds.attrs["Data_version"] = "999"
rect_ds.attrs["Data_version"] = "999"
# Check the attributes of the dataset by writing to a CDF file
hp_file_name = write_cdf(healpix_ds)
rect_file_name = write_cdf(rect_ds)
Expand Down
2 changes: 1 addition & 1 deletion imap_processing/tests/mag/test_mag_decom.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def cdf_attrs():
test_attrs.add_instrument_global_attrs("mag")
test_attrs.add_instrument_variable_attrs("mag", "l1a")
# Default v001 expected when writing to file and re-loading
test_attrs.add_global_attribute("Data_version", "v001")
test_attrs.add_global_attribute("Data_version", "001")
return test_attrs


Expand Down
4 changes: 2 additions & 2 deletions imap_processing/tests/swe/test_swe_l1b.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ def test_swe_l1b(mock_get_file_paths, l1b_validation_df):
l1b_input = l1a_datasets[0]

# Set these two as cli.py -> post_processing would have.
l1b_input.attrs["Data_version"] = "v002"
l1b_input.attrs["Data_version"] = "002"
# write data to CDF
l1a_cdf_filepath = write_cdf(l1b_input)
assert l1a_cdf_filepath.name == "imap_swe_l1a_sci_20240510_v002.cdf"
Expand Down Expand Up @@ -204,7 +204,7 @@ def get_file_paths_side_effect(descriptor):
l1b_datasets = swe_l1b(dependencies)

l1b_write_ds = l1b_datasets[0]
l1b_write_ds.attrs["Data_version"] = "v002"
l1b_write_ds.attrs["Data_version"] = "002"

sci_l1b_filepath = write_cdf(l1b_write_ds)

Expand Down
6 changes: 3 additions & 3 deletions imap_processing/tests/swe/test_swe_l2.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ def test_swe_l2(mock_get_file_paths, use_fake_spin_data_for_time):
test_data_path = "tests/swe/l0_data/2024051010_SWE_SCIENCE_packet.bin"
l1a_datasets = swe_l1a(imap_module_directory / test_data_path)
l1a_ds = l1a_datasets[0]
l1a_ds.attrs["Data_version"] = "v000"
l1a_ds.attrs["Data_version"] = "000"
l1a_cdf_filepath = write_cdf(l1a_ds)
assert l1a_cdf_filepath.name == "imap_swe_l1a_sci_20240510_v000.cdf"

Expand Down Expand Up @@ -295,7 +295,7 @@ def get_file_paths_side_effect(descriptor):
eu_anc = AncillaryInput("imap_swe_eu-conversion_20240510_v000.csv")
dependencies = ProcessingInputCollection(science_input, inflight_anc, eu_anc)
l1b_dataset = swe_l1b(dependencies)[0]
l1b_dataset.attrs["Data_version"] = "v000"
l1b_dataset.attrs["Data_version"] = "000"
l2_dataset = swe_l2(l1b_dataset)

assert isinstance(l2_dataset, xr.Dataset)
Expand Down Expand Up @@ -325,6 +325,6 @@ def get_file_paths_side_effect(descriptor):
assert np.allclose(cal_factor, cal_factor[:, 0:1], rtol=1e-9, atol=0)

# Write L2 to CDF
l2_dataset.attrs["Data_version"] = "v002"
l2_dataset.attrs["Data_version"] = "002"
l2_cdf_filepath = write_cdf(l2_dataset)
assert l2_cdf_filepath.name == "imap_swe_l2_sci_20240510_v002.cdf"
2 changes: 1 addition & 1 deletion imap_processing/tests/ultra/mock_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ def mock_l1c_pset_product_healpix(
attrs={
"Logical_file_id": logical_file_id,
"Logical_source": logical_source,
"Data_version": "v001",
"Data_version": "001",
},
)

Expand Down
16 changes: 8 additions & 8 deletions imap_processing/tests/ultra/unit/test_ultra_l1a.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def test_cdf_aux(ccsds_path_theta_0):
"""Tests that CDF file can be created."""

test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_AUX.apid[0])
test_data[0].attrs["Data_version"] = "v999"
test_data[0].attrs["Data_version"] = "999"
test_data[0].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(test_data[0], istp=True)

Expand All @@ -85,7 +85,7 @@ def test_cdf_aux(ccsds_path_theta_0):
def test_cdf_rates(ccsds_path_theta_0):
"""Tests that CDF file can be created."""
test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_RATES.apid[0])
test_data[0].attrs["Data_version"] = "v999"
test_data[0].attrs["Data_version"] = "999"
test_data[0].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(test_data[0], istp=True)

Expand All @@ -99,7 +99,7 @@ def test_cdf_rates(ccsds_path_theta_0):
def test_cdf_tof(ccsds_path_theta_0):
"""Tests that CDF file can be created."""
test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_TOF.apid[0])
test_data[0].attrs["Data_version"] = "v999"
test_data[0].attrs["Data_version"] = "999"
test_data[0].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(test_data[0], istp=True)
assert test_data_path.exists()
Expand All @@ -112,7 +112,7 @@ def test_cdf_tof(ccsds_path_theta_0):
def test_cdf_events(ccsds_path_theta_0):
"""Tests that CDF file can be created."""
test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_EVENTS.apid[0])
test_data[0].attrs["Data_version"] = "v999"
test_data[0].attrs["Data_version"] = "999"
test_data[0].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(test_data[0], istp=True)

Expand All @@ -127,7 +127,7 @@ def test_cdf_hk(ccsds_path_theta_0):
"""Tests that CDF file can be created."""
test_data = ultra_l1a(ccsds_path_theta_0, apid_input=869)
data = test_data[0]
data.attrs["Data_version"] = "v999"
data.attrs["Data_version"] = "999"
data.attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(data, istp=True)

Expand All @@ -143,7 +143,7 @@ def test_cdf_cmdtxt(ccsds_path_all_apids):
"""Tests that CDF file can be created."""
test_data = ultra_l1a(ccsds_path_all_apids, apid_input=939)
data = test_data[0]
data.attrs["Data_version"] = "v999"
data.attrs["Data_version"] = "999"
test_data_path = write_cdf(data, istp=True)

assert test_data_path.exists()
Expand All @@ -155,7 +155,7 @@ def test_cdf_monitorlimits(ccsds_path_all_apids):
"""Tests that CDF file can be created."""
test_data = ultra_l1a(ccsds_path_all_apids, apid_input=937)
data = test_data[0]
data.attrs["Data_version"] = "v999"
data.attrs["Data_version"] = "999"
test_data_path = write_cdf(data, istp=True)

assert test_data_path.exists()
Expand All @@ -169,7 +169,7 @@ def test_cdf_startup(ccsds_path_all_apids):
"""Tests that CDF file can be created."""
test_data = ultra_l1a(ccsds_path_all_apids, apid_input=941)
data = test_data[0]
data.attrs["Data_version"] = "v999"
data.attrs["Data_version"] = "999"
test_data_path = write_cdf(data, istp=True)

assert test_data_path.exists()
Expand Down
8 changes: 4 additions & 4 deletions imap_processing/tests/ultra/unit/test_ultra_l1b.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def side_effect_func(event_times, position, ultra_frame, dps_frame, sc_frame):
== "IMAP-Ultra Instrument Level-1B Direct Event Data."
)

l1b_de_dataset[0].attrs["Data_version"] = "v999"
l1b_de_dataset[0].attrs["Data_version"] = "999"
l1b_de_dataset[0].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(l1b_de_dataset[0], istp=True)
assert test_data_path.exists()
Expand Down Expand Up @@ -200,7 +200,7 @@ def test_cdf_extendedspin(use_fake_spin_data_for_time, faux_aux_dataset, rates_d

l1b_extendedspin_dataset = ultra_l1b(data_dict)
"""Tests that CDF file is created and contains same attributes as xarray."""
l1b_extendedspin_dataset[0].attrs["Data_version"] = "v999"
l1b_extendedspin_dataset[0].attrs["Data_version"] = "999"
l1b_extendedspin_dataset[0].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(l1b_extendedspin_dataset[0], istp=True)
assert test_data_path.exists()
Expand Down Expand Up @@ -229,7 +229,7 @@ def test_cdf_cullingmask(use_fake_spin_data_for_time, faux_aux_dataset, rates_da
data_dict["imap_ultra_l1a_45sensor-rates"] = rates_dataset

l1b_extendedspin_dataset = ultra_l1b(data_dict)
l1b_extendedspin_dataset[1].attrs["Data_version"] = "v999"
l1b_extendedspin_dataset[1].attrs["Data_version"] = "999"
l1b_extendedspin_dataset[1].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(l1b_extendedspin_dataset[1], istp=True)
assert test_data_path.exists()
Expand Down Expand Up @@ -258,7 +258,7 @@ def test_cdf_badtimes(use_fake_spin_data_for_time, faux_aux_dataset, rates_datas
data_dict["imap_ultra_l1a_45sensor-rates"] = rates_dataset

l1b_extendedspin_dataset = ultra_l1b(data_dict)
l1b_extendedspin_dataset[2].attrs["Data_version"] = "v999"
l1b_extendedspin_dataset[2].attrs["Data_version"] = "999"
l1b_extendedspin_dataset[2].attrs["Repointing"] = "repoint99999"
test_data_path = write_cdf(l1b_extendedspin_dataset[2], istp=True)
assert test_data_path.exists()
Expand Down
2 changes: 1 addition & 1 deletion imap_processing/tests/ultra/unit/test_ultra_l1c.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ def test_calculate_spacecraft_pset_with_cdf():
}

output_datasets = ultra_l1c(data_dict)
output_datasets[0].attrs["Data_version"] = "v999"
output_datasets[0].attrs["Data_version"] = "999"
output_datasets[0].attrs["Repointing"] = f"repoint{pointing + 1:05d}"
test_data_path = write_cdf(output_datasets[0], istp=True)

Expand Down