Skip to content
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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ network_weights
# Data files
*.gz
*.mat
*.mhd
*.mha
*.raw
*.zip
*.nii
Expand Down
95 changes: 95 additions & 0 deletions data/CHOP-Valve4D/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# CHOP-Valve4D

## Download

Download this dataset automatically with:

```bash
physiotwin4d-download-data CHOP-Valve4D --directory data/CHOP-Valve4D
```

or from Python:

```python
from physiotwin4d import DataDownloadTools

DataDownloadTools.DownloadCHOPValve4DData("data/CHOP-Valve4D")
assert DataDownloadTools.VerifyCHOPValve4DData("data/CHOP-Valve4D")
```

This downloads and extracts three zip archives attached to the
[PhysioTwin4D 2026.07.1 GitHub release](https://github.com/Project-MONAI/physiotwin4d/releases/tag/2026.07.1)
into matching subdirectories:

| Release asset | Extracted into | Contents | Size |
| ----------------------------- | --------------- | ------------------------------------------- | ------- |
| `CHOP-Valve4D-Alterra.zip` | `Alterra/` | Alterra valve mesh time series (`.vtk`) | >1 GB |
| `CHOP-Valve4D-TPV25.zip` | `TPV25/` | TPV25 valve mesh time series (`.vtk`) | >1 GB |
| `CHOP-Valve4D-CT.zip` | `CT/` | Source CT volume + Simpleware segmentation | — |

A subdirectory that already contains files is left alone, so re-running the
command resumes an interrupted download.
Comment thread
aylward marked this conversation as resolved.
Comment thread
aylward marked this conversation as resolved.
Comment on lines +30 to +31

**Directory structure after download:**
```
data/CHOP-Valve4D/
├── Alterra/
│ ├── frame_0000.vtk
│ ├── frame_0001.vtk
│ └── ...
├── TPV25/
│ ├── frame_0000.vtk
│ ├── frame_0001.vtk
│ └── ...
├── CT/
│ ├── RVOT28-Dias.nii.gz (or .mha)
│ └── Simpleware/
│ └── parts/
└── README.md (this file)
```
Comment thread
aylward marked this conversation as resolved.

## Overview

Time-varying 4D valve reconstruction models showing transcatheter
pulmonary valve motion over the cardiac cycle, derived from an FEBio
finite-element simulation of an Alterra valve deployed in a native right
ventricular outflow tract (RVOT).

### Original Data

The source data is an FEBio finite-element model (`.feb`) published by the
Jolley Lab at CHOP (Children's Hospital of Philadelphia). This repository
does not redistribute the source `.feb` file — it is available from the
FEBio website:

- Project page: https://repo.febio.org/permalink/project/136
- Direct download: https://repo.febio.org/modelRepo/api/v1.05/files/0/136

### Converted Data (PhysioTwin4D Convenience Release)

As a convenience, PhysioTwin4D converts the original FEBio geometry to VTK
(surface and volumetric meshes) and ITK (image) formats, and also provides
a Simpleware segmentation derived from the model. These converted files are
what the `physiotwin4d-download-data CHOP-Valve4D` command above fetches;
they are not tracked in this git repository. The original citation and
license terms below still apply to this converted data.

### Citation

Zelonis, C. N., Maheshwari, J., Wu, W., Maas, S. A., Aslan, S., Sunderland, K.,
... & Jolley, M. A. (2025). Integrated Open-Source Framework for Simulation of
Transcatheter Pulmonary Valves in Native Right Ventricular Outflow Tracts. arXiv
preprint arXiv:2507.06337.

### Acknowledgement

Data provided by the Jolley Lab at CHOP (Children's Hospital of
Philadelphia):
- https://www.linkedin.com/company/jolleylab

## Using This Dataset

- Time-series VTK to USD conversion (`experiments/Convert_VTK_To_USD/`)
- 4D valve motion visualization in NVIDIA Omniverse
- Temporal cardiac mechanics analysis
- Valve dynamics studies and surgical planning
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T00.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T00.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T10.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T10.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T20.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T20.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T30.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T30.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T40.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T40.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T50.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T50.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T60.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T60.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T70.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T70.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T80.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T80.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case10Pack_T90.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 512 512 120
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case10Pack/Images/case10_T90.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T00.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T00_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T10.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T10_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T20.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T20_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T30.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T30_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T40.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T40_s.img
Comment on lines +1 to +11

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Committed .mhd headers will cause VerifyDirLab4DCTData to report a false positive.

VerifyDirLab4DCTData (in data_download_tools.py) checks any(data_dir.glob("Case1Pack_T*.mhd")) to determine whether DirLab data is downloaded. Since these .mhd headers are now committed to the repo, that check will always return True — even when the referenced raw .img files (e.g., Case1Pack/Images/case1_T40_s.img) are absent. Downstream workflows that gate on this verification will proceed to load images and fail with confusing errors instead of receiving a clear "data not downloaded" message.

Consider updating VerifyDirLab4DCTData to also confirm that at least one referenced ElementDataFile exists on disk, or check for the presence of .img / .mha files alongside the .mhd headers.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/DirLab-4DCT/Case1Pack_T40.mhd` around lines 1 - 11, Update
VerifyDirLab4DCTData in data_download_tools.py so it does not rely only on
finding Case1Pack_T*.mhd headers, since committed headers can create a false
positive. Extend the check to validate the actual image payload referenced by
the header, using the ElementDataFile path from the .mhd file or by confirming
the expected .img/.mha files exist alongside it. Keep the existing verification
flow and symbol names unchanged, but make the downloaded-data test fail unless
both the header and its backing data are present.

11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T50.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T50_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T60.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T60_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T70.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T70_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T80.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T80_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case1Pack_T90.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 94
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 0.97 0.97 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case1Pack/Images/case1_T90_s.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case2Pack_T00.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 112
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 1.16 1.16 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case2Pack/Images/case2_T00-ssm.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case2Pack_T10.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 112
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 1.16 1.16 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case2Pack/Images/case2_T10-ssm.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case2Pack_T20.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 112
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 1.16 1.16 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case2Pack/Images/case2_T20-ssm.img
11 changes: 11 additions & 0 deletions data/DirLab-4DCT/Case2Pack_T30.mhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ObjectType = Image
NDims = 3
DimSize = 256 256 112
HeaderSize = -1
BinaryData = True
BinaryDataByteOrderMSB = False
Orientation = 1 0 0 0 1 0 0 0 -1
ElementSpacing = 1.16 1.16 2.5
ElementType = MET_SHORT
ElementNumberOfChannels = 1
ElementDataFile = Case2Pack/Images/case2_T30-ssm.img
Loading
Loading