UK Biobank atlas - mesh generation
Generate meshes using the UK Biobank atlas (https://www.cardiacatlas.org/biventricular-modes/)
Install
Install with pip
python3 -m pip install ukb-atlas
or (latest version)
python3 -m pip install git+https://github.com/ComputationalPhysiology/ukb-atlas
or similarly with pipx
pipx install ukb-atlas
or (latest version)
pipx install git+https://github.com/ComputationalPhysiology/ukb-atlas.git
Quick start
To generate surfaces from the UK Biobank atlas, run the following command
$ ukb-atlas surf data --mode -1 --std 1.5 --case ED
INFO:ukb.atlas:Generating points from /root/.ukb/UKBRVLV.h5
INFO:ukb.atlas:Using mode -1 and std 1.5
INFO:ukb.surface:Saved data/LV_ENDO_ED.stl
INFO:ukb.surface:Saved data/RV_SEPTUM_ED.stl
INFO:ukb.surface:Saved data/RV_FREEWALL_ED.stl
INFO:ukb.surface:Saved data/LV_EPI_ED.stl
INFO:ukb.surface:Saved data/RV_EPI_ED.stl
INFO:ukb.surface:Saved data/MV_ED.stl
INFO:ukb.surface:Saved data/AV_ED.stl
INFO:ukb.surface:Saved data/TV_ED.stl
INFO:ukb.surface:Saved data/PV_ED.stl
Each STL file is one region of the biventricular template. The file data/surfaces.json records
which files make up each surface of the mesh: LV_ENDO, RV_ENDO (RV septum and free wall),
EPI (LV and RV epicardium), and the valve rims MV, AV, TV and PV.
Now we can generate a mesh from these surfaces
$ ukb-atlas mesh data
INFO:ukb.mesh:Creating mesh for ED with char_length_max=5.0, char_length_min=5.0
INFO:ukb.mesh:Created mesh data/ED.msh
The mesh has the physical surfaces LV_ENDO, RV_ENDO, EPI, MV, AV, TV and PV, and the
physical volume Wall.
Now we can also create a mesh without the outflow tracts using the cilp command
$ ukb-atlas clip data
ukb-atlas clip data
INFO:ukb.clip:Folder: data
INFO:ukb.clip:Case: ED
INFO:ukb.clip:Origin: [-13.612554383622273, 18.55767189380559, 15.135103714006394]
INFO:ukb.clip:Normal: [-0.7160843664428893, 0.544394641424108, 0.4368725838557541]
INFO:ukb.clip:Reading data/LV_ENDO_ED.stl
Warning: PLY writer doesn't support multidimensional point data yet. Skipping Normals.
Warning: PLY doesn't support 64-bit integers. Casting down to 32-bit.
INFO:ukb.clip:Saved data/lv_clipped.ply
INFO:ukb.clip:Reading data/RV_SEPTUM_ED.stl, data/RV_FREEWALL_ED.stl
INFO:ukb.clip:Saving data/rv_clipped.ply
Warning: PLY writer doesn't support multidimensional point data yet. Skipping Normals.
Warning: PLY doesn't support 64-bit integers. Casting down to 32-bit.
INFO:ukb.clip:Reading data/LV_EPI_ED.stl, data/RV_EPI_ED.stl
INFO:ukb.clip:Saving data/epi_clipped.ply
Warning: PLY writer doesn't support multidimensional point data yet. Skipping Normals.
Warning: PLY doesn't support 64-bit integers. Casting down to 32-bit.
and then create a mesh from the clipped surfaces
$ ukb-atlas mesh data --clipped
INFO:ukb.mesh:Creating clipped mesh for ED with char_length_max=5.0, char_length_min=5.0
INFO:ukb.mesh:Created mesh data/ED_clipped.msh
The clipped mesh has the physical surfaces LV_ENDO, RV_ENDO, EPI and BASE, and the physical
volume Wall.
Geometries
surf takes a --geometry (-g) option, and mesh builds whichever geometry surf wrote:
| Geometry | Physical surfaces | Physical volumes |
|---|---|---|
biv (default) |
LV_ENDO, RV_ENDO, EPI, MV, AV, TV, PV |
Wall |
biv-closed |
as biv, plus MV_CAP, AV_CAP, TV_CAP, PV_CAP |
Wall, LV_CAVITY, RV_CAVITY |
lv |
LV_ENDO, EPI, RV_SEPTUM, SEPTAL_BRIDGE, MV, AV |
Wall |
lv-closed |
as lv, plus MV_CAP, AV_CAP |
Wall, LV_CAVITY |
MV, AV, TV and PV are the rims where the endocardium and epicardium meet at each valve. In
the closed geometries each valve opening is also closed by a cap (*_CAP), so the LV
(LV_ENDO + MV_CAP + AV_CAP) and RV (RV_ENDO + TV_CAP + PV_CAP) cavities are closed
surfaces. The cavities are meshed as their own volumes, sharing nodes with the wall at the
endocardium. The LV-only geometries keep the outflow tract; the LV wall is closed on the RV side by
the RV septal surface (RV_SEPTUM) and a surface through the wall along the RV insertion
(SEPTAL_BRIDGE), and its EPI is the LV epicardium only.
$ ukb-atlas surf data -g biv-closed
$ ukb-atlas mesh data
clip only supports the biv geometries.
We can also export labelled point clouds directly from the atlas using the points command
$ ukb-atlas points data --mode -1 --std 1.5 --case both
INFO:ukb.atlas:Generating points from /root/.ukb/UKBRVLV.h5
INFO:ukb.atlas:Using mode -1 and std 1.5
INFO:ukb.pointcloud:Saved data/ED_pointcloud.tsv
INFO:ukb.pointcloud:Saved data/ES_pointcloud.tsv
This generates tab-separated files (ED_pointcloud.tsv, ES_pointcloud.tsv) with columns x, y, z, label, and region for every node of the biventricular template. The labels are 1-4 for the valve rims
(MV, AV, TV, PV), 5 LV_ENDO, 6 RV_SEPTUM, 7 RV_FREEWALL, 8 LV_EPI, 9
RV_EPI, and 10-13 for the valve centre nodes (MV_CAP, AV_CAP, TV_CAP, PV_CAP).
The triangulation and region labels come from the
biv-me template (Apache-2.0), vendored in
src/ukb/data/biv-me.
Usage
There are three main commands:
surf- Extract surfaces from the atlas and save them in the specified directory as STL filesclip- Clip the surfaces to remove e.g the outflow tractsmesh- Generate mesh from the surfaces
usage: ukb-atlas [-h] {surf,clip,mesh} ...
UKB-atlas This is a command line interface for extracting surfaces and generating Bi-ventricular meshes from the UK Biobank atlas: https://www.cardiacatlas.org/biventricular-modes/
positional arguments:
{surf,clip,mesh}
surf Extract surfaces from the atlas
clip Clip the surfaces
mesh Generate mesh from the surfaces
options:
-h, --help show this help message and exit
Citing
If you use this tool to create meshes please cite
@software{Finsberg_fenics-beat_2024,
author = {Henrik Finsberg and Lisa R Pankewitz},
doi = {10.5281/zenodo.13927883},
title = {UK Biobank atlas - mesh generation},
url = {https://github.com/ComputationalPhysiology/ukb-atlas},
version = {0.1.0},
year = {2024}
}
The templates used to generate the meshes are described where developed as part of the following publication (so please cite this paper if you use the templates)
@article{PANKEWITZ2024103091,
title = {A universal biventricular coordinate system incorporating valve annuli: Validation in congenital heart disease},
journal = {Medical Image Analysis},
volume = {93},
pages = {103091},
year = {2024},
issn = {1361-8415},
doi = {https://doi.org/10.1016/j.media.2024.103091},
url = {https://www.sciencedirect.com/science/article/pii/S1361841524000161},
author = {Lisa R Pankewitz and Kristian G Hustad and Sachin Govil and James C Perry and Sanjeet Hegde and Renxiang Tang and Jeffrey H Omens and Alistair A Young and Andrew D McCulloch and Hermenegild J Arevalo},
keywords = {Cardiac geometry, Coordinates, Congenital Heart Disease, Mapping},
}
License
MIT
Metadata
Release files for ukb-atlas 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ukb_atlas-2.0.0.tar.gz | 130.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ukb_atlas-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 250.8 kB
Release files / ukb_atlas-2.0.0.tar.gz
| Download URL | ukb_atlas-2.0.0.tar.gz |
|---|---|
| Size | 130.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dcfbd3a6b82354204b88ceb76e255091d1715a123ebc7081d9b0ada118fe5e27
|
|
BLAKE2b-256 checksum How to use checksums |
e01e43d7aa525a03016e0a9649dc26b3221bd861381b335fb6052ab0199d1f5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logRelease files / ukb_atlas-2.0.0-py3-none-any.whl
| Download URL | ukb_atlas-2.0.0-py3-none-any.whl |
|---|---|
| Size | 120.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e804f0245120c8e86ba22e54ea21ea6362d18243037de64004beea271f94d92
|
|
BLAKE2b-256 checksum How to use checksums |
aa6c72deefb2800fe3c1a12bf6703e7152f52b00b8ddfe8c5fb8d9c49851c95b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logSecurity for ukb-atlas 2.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for ukb_atlas-2.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.