From fdd46e1a15257c2a423ded2a1e25da9862c2bb29 Mon Sep 17 00:00:00 2001 From: Stephen Aylward Date: Tue, 21 Jul 2026 13:16:17 -0400 Subject: [PATCH 1/3] ENH: Fix directory structure for CHOP-Valve data --- src/physiotwin4d/data_download_tools.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/physiotwin4d/data_download_tools.py b/src/physiotwin4d/data_download_tools.py index da83d37..5b24474 100644 --- a/src/physiotwin4d/data_download_tools.py +++ b/src/physiotwin4d/data_download_tools.py @@ -244,7 +244,7 @@ def DownloadCHOPValve4DData(dirname: Union[str, Path]) -> Path: # noqa: N802 """ data_dir = Path(dirname) for subdir_name, asset_name in DataDownloadTools.CHOP_VALVE4D_ASSETS.items(): - target_dir = data_dir / subdir_name + target_dir = data_dir if DataDownloadTools._CHOPValve4DSubdirIsPopulated(subdir_name, target_dir): continue url = DataDownloadTools.CHOP_VALVE4D_RELEASE_URL + asset_name @@ -304,13 +304,11 @@ def VerifyCHOPValve4DData(dirname: Union[str, Path]) -> bool: # noqa: N802 experiments. """ data_dir = Path(dirname) - has_ct = DataDownloadTools._CHOPValve4DSubdirIsPopulated("CT", data_dir / "CT") + has_ct = DataDownloadTools._CHOPValve4DSubdirIsPopulated("CT", data_dir) has_alterra = DataDownloadTools._CHOPValve4DSubdirIsPopulated( - "Alterra", data_dir / "Alterra" - ) - has_tpv25 = DataDownloadTools._CHOPValve4DSubdirIsPopulated( - "TPV25", data_dir / "TPV25" + "Alterra", data_dir ) + has_tpv25 = DataDownloadTools._CHOPValve4DSubdirIsPopulated("TPV25", data_dir) return has_ct or (has_alterra and has_tpv25) @staticmethod From 7f19386e7f630dd512d3375a15c1db7e4ff77260 Mon Sep 17 00:00:00 2001 From: Stephen Aylward Date: Tue, 21 Jul 2026 15:10:00 -0400 Subject: [PATCH 2/3] ENH: Fixed paths for verifying CHOP valve data --- src/physiotwin4d/data_download_tools.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/physiotwin4d/data_download_tools.py b/src/physiotwin4d/data_download_tools.py index 5b24474..480c0c2 100644 --- a/src/physiotwin4d/data_download_tools.py +++ b/src/physiotwin4d/data_download_tools.py @@ -244,8 +244,8 @@ def DownloadCHOPValve4DData(dirname: Union[str, Path]) -> Path: # noqa: N802 """ data_dir = Path(dirname) for subdir_name, asset_name in DataDownloadTools.CHOP_VALVE4D_ASSETS.items(): - target_dir = data_dir - if DataDownloadTools._CHOPValve4DSubdirIsPopulated(subdir_name, target_dir): + target_dir = data_dir / subdir_name + if DataDownloadTools._CHOPValve4DSubdirIsPopulated(target_dir): continue url = DataDownloadTools.CHOP_VALVE4D_RELEASE_URL + asset_name DataDownloadTools._DownloadAndExtractZip(url, target_dir) @@ -254,7 +254,7 @@ def DownloadCHOPValve4DData(dirname: Union[str, Path]) -> Path: # noqa: N802 @staticmethod def _CHOPValve4DSubdirIsPopulated( # noqa: N802 - subdir_name: str, target_dir: Path + target_dir: Path, ) -> bool: """Return True when ``target_dir`` already has subdir_name's expected files. @@ -266,6 +266,7 @@ def _CHOPValve4DSubdirIsPopulated( # noqa: N802 """ if not target_dir.is_dir(): return False + subdir_name = target_dir.name if subdir_name == "CT": has_ct_volume = any( (target_dir / filename).is_file() @@ -293,7 +294,7 @@ def _DownloadAndExtractZip(url: str, target_dir: Path) -> None: # noqa: N802 raise RuntimeError(f"Downloaded archive is empty: {url}") with zipfile.ZipFile(archive_file) as archive: - archive.extractall(target_dir) + archive.extractall(target_dir.parent) @staticmethod def VerifyCHOPValve4DData(dirname: Union[str, Path]) -> bool: # noqa: N802 @@ -304,11 +305,11 @@ def VerifyCHOPValve4DData(dirname: Union[str, Path]) -> bool: # noqa: N802 experiments. """ data_dir = Path(dirname) - has_ct = DataDownloadTools._CHOPValve4DSubdirIsPopulated("CT", data_dir) + has_ct = DataDownloadTools._CHOPValve4DSubdirIsPopulated(data_dir / "CT") has_alterra = DataDownloadTools._CHOPValve4DSubdirIsPopulated( - "Alterra", data_dir + data_dir / "Alterra" ) - has_tpv25 = DataDownloadTools._CHOPValve4DSubdirIsPopulated("TPV25", data_dir) + has_tpv25 = DataDownloadTools._CHOPValve4DSubdirIsPopulated(data_dir / "TPV25") return has_ct or (has_alterra and has_tpv25) @staticmethod From 0acc9291d996fe57910f98493d0156a7c23a23f8 Mon Sep 17 00:00:00 2001 From: Stephen Aylward Date: Wed, 22 Jul 2026 09:31:25 -0400 Subject: [PATCH 3/3] ENH: Updated data extraction path --- tests/test_download_heart_data.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/test_download_heart_data.py b/tests/test_download_heart_data.py index 0143e6c..e63e8ef 100644 --- a/tests/test_download_heart_data.py +++ b/tests/test_download_heart_data.py @@ -200,7 +200,9 @@ def make_archive(subdir_name: str, member_name: str, content: bytes) -> Path: for subdir_name, asset_name in DataDownloadTools.CHOP_VALVE4D_ASSETS.items(): url = DataDownloadTools.CHOP_VALVE4D_RELEASE_URL + asset_name urls_to_archives[url] = make_archive( - subdir_name, f"{subdir_name}.txt", f"# {subdir_name}\n".encode() + subdir_name, + f"{subdir_name}/{subdir_name}.txt", + f"# {subdir_name}\n".encode(), ) def fake_urlopen(url: str, timeout: float) -> object: @@ -274,9 +276,9 @@ def make_archive(subdir_name: str, member_name: str, content: bytes) -> Path: urls_to_archives = {} for subdir_name, asset_name in DataDownloadTools.CHOP_VALVE4D_ASSETS.items(): url = DataDownloadTools.CHOP_VALVE4D_RELEASE_URL + asset_name - member_name = "RVOT28-Dias.mha" if subdir_name == "CT" else "frame_0000.vtk" + leaf = "RVOT28-Dias.mha" if subdir_name == "CT" else "frame_0000.vtk" urls_to_archives[url] = make_archive( - subdir_name, member_name, f"# {subdir_name}\n".encode() + subdir_name, f"{subdir_name}/{leaf}", f"# {subdir_name}\n".encode() ) def fake_urlopen(url: str, timeout: float) -> object: