Skip to main content

Utilities to generate Purkinje networks from fractal trees and mesh surfaces

Project description

PurkinjeUV

PyPI version Test License Docs

PurkinjeUV is a modular Python package for constructing, simulating, and exporting fractal-based Purkinje networks over anatomical or idealized cardiac surface meshes. It offers a flexible architecture for working with geometries via OBJ, VTK, and GMSH, and supports UV mapping, eikonal solvers, and export utilities.

Table of Contents

Features

  • Fractal-based generation of Purkinje networks constrained to 3D surface meshes
  • Fast Iterative Method (FIM)-based eikonal solver for activation time simulation
  • Surface processing tools, including Laplacian-based UV mapping
  • VTK and IGB utilities for visualization and interoperability with scientific tools
  • Fully modular and scriptable, suitable for both research and reproducible simulation pipelines

Installation

Install the latest release from PyPI:

pip install purkinje-uv

Documentation

The full documentation is available at:

https://ricardogr07.github.io/purkinje-uv/main

Getting Started

See Getting Started Guide for full documentation.

# Generate a fractal tree and save it to VTU (no activation required)

from pathlib import Path
import numpy as np

from purkinje_uv import FractalTreeParameters, FractalTree, PurkinjeTree

# Parameters: FractalTree reads the mesh from p.meshfile
p = FractalTreeParameters(
    meshfile="data/sphere.obj",
    init_node_id=0,
    second_node_id=1,
    l_segment=0.01,   # step size on the surface
    init_length=0.1,
    length=0.1,
    branch_angle=0.15,
    w=0.1,
    N_it=10,
)

# Grow the tree on the surface (UV domain)
ft = FractalTree(params=p)
ft.grow_tree()

# Wrap as a PurkinjeTree and save
out = Path("output")
out.mkdir(parents=True, exist_ok=True)

purk = PurkinjeTree(
    nodes=np.asarray(ft.nodes_xyz),
    connectivity=np.asarray(ft.connectivity),
    end_nodes=np.asarray(ft.end_nodes),
)

purk.save(str(out / "fractal_tree.vtu"))

Visualization:

import pyvista as pv

tree = pv.read("output/fractal_tree.vtu")
tree.plot()

Runnable notebooks:

  • examples/demo_obj/demo_obj_fractal_tree.ipynb
  • examples/demo_gmsh/demo_fractal_tree_biventricular.ipynb

Requirements

  • Python ≥ 3.10
  • Optional:
    • pyvista for visualization
    • cupy for GPU acceleration (used in FIM solver)
    • gmsh and cardiac-geometries for realistic biventricular geometries

Attributions and Credits

Based on the work by Francisco Sahli:

References: Sahli Costabal, F., Yao, J., & Kuhl, E. (2016). Predicting the cardiac toxicity of drugs using a hybrid multiscale model of the heart. Journal of the Mechanical Behavior of Biomedical Materials, 62, 217–231. DOI: 10.1016/j.jmbbm.2016.05.004

Maintained by Ricardo García Ramírez (July 2025)

Citation

@article{sahli2016hybrid,
  title={Predicting the cardiac toxicity of drugs using a hybrid multiscale model of the heart},
  author={Sahli Costabal, Feras and Yao, Jiajian and Kuhl, Ellen},
  journal={Journal of the Mechanical Behavior of Biomedical Materials},
  volume={62},
  pages={217--231},
  year={2016},
  publisher={Elsevier}
}

@misc{purkinjeuv2025,
  author = {Ricardo García Ramírez},
  title = {PurkinjeUV: Modular Fractal Purkinje Generator on Surface Meshes},
  year = {2025},
  howpublished = {\url{https://github.com/ricardogr07/purkinje-uv}}
}

License

Released under the MIT License. See LICENSE.

Contributing

See CONTRIBUTING.md for guidelines.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

purkinje_uv-0.3.0.tar.gz (29.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

purkinje_uv-0.3.0-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

File details

Details for the file purkinje_uv-0.3.0.tar.gz.

File metadata

  • Download URL: purkinje_uv-0.3.0.tar.gz
  • Upload date:
  • Size: 29.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for purkinje_uv-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d284b236c2a7a45d8394ddfa8c035b3c4211f052086c44895656f8ef0af4368a
MD5 4a49158a28a777615c4c1b95f226162a
BLAKE2b-256 564124272ab9a78898ce8f9681989fac80cf4e8500b9b221ac6ea1c46e285ae4

See more details on using hashes here.

Provenance

The following attestation bundles were made for purkinje_uv-0.3.0.tar.gz:

Publisher: release.yml on ricardogr07/purkinje-uv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file purkinje_uv-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: purkinje_uv-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 30.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for purkinje_uv-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 12c11fdd00872585ac5bdb05b4d81d5fb252ba015e5e7d0a4a7e46c16c915b50
MD5 36344bb717624555b31a57c08925d3af
BLAKE2b-256 2e313715e8c3e961d3499340bdc802f417c84e4d8db4df20c34f9a9281408c5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for purkinje_uv-0.3.0-py3-none-any.whl:

Publisher: release.yml on ricardogr07/purkinje-uv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page