SimVascular / SimVascular/svMultiPhysics

Fiber generation following Bayer's method does not follow original convention.

Open
#551 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
C++
Stars
45
Forks
60
Avg merge
5d 23h
Merged PRs (30d)
11

Description

Description

In the fiber-generation codes, the Bayer convention for the beta angles does not match the original paper.
In Bayer's original paper, the beta angle induces a rotation about the fiber angle as the axis, whereas the code now performs a rotation about the rotated longitudinal axis.

Reproduction

Run utilities/fiber_generation/main_bayer.py

Expected behavior

The original Bayer paper and Piersanti's paper do

  1. Rotate by $\alpha$ degrees using the transmural vector as the axis.
  2. Rotate by $\beta$ degrees using the rotated fiber vector as an axis.

The code should be updated to do that, so it follows the original paper.

Additional context

When I was refactoring this code months ago, I thought there was a defined convention for the $\alpha$ and $beta$ angles, but I was wrong. Bayer and Piersanti perform the rotation as described previously. Doste performs the rotations as,

  1. Rotate by $\alpha$ degrees using the transmural vector as the axis.
  2. Rotate by $\beta$ degrees using the rotated apex-to-base vector as an axis.

Things to consider (I am just writing this here because the literature is very confusing, and I want to have records of this)

Vector notation
  • Bayer and Piersanti call the vector pointing in the circumferential direction "longitudinal, $e_l$", and the vector pointing from the apex to the base "normal, $e_n$".
  • Doste calls the vector pointing in the circumferential direction "circumferential, $e_c$", and the vector pointing from the apex to the base "longitudinal, $e_l$".
$\alpha, \beta$ angles versus helix, transverse angles.

Another thing I checked back then was experimental / imaging literature. I think there exists a consensus that the helix angle and the transverse angle are defined as in the image (from [this paper])(https://doi.org/10.1152/ajpheart.00059.2022):
Image
If using the Doste convention, we can say that $\alpha$ is the helix angle and $\beta$ is the transverse angle.
If using the Bayer / Piersanti convention, then $\alpha$ = helix angle but $\beta$ != transverse angle.
Interestingly, if using Bayer / Piersanti convention, the transverse angle will always be zero, which would go against the transverse angles measured experimentally.

Code of Conduct
  • I agree to follow this project's Code of Conduct and Contributing Guidelines

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running utilities/fiber_generation/main_bayer.py and trace how the alpha and beta rotations are applied. Compare the implementation with the Bayer and Piersanti rotation order and axes described in the issue. Done means the generated fibers follow the original Bayer convention.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, python
Domain
hpc
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.