index:
- Abstract
- Model description
- Segments
- Perfusion area
- Boundary conditions
- Optimization criteria/Target functions/Model requirements
- Algorithm description
- Algorithm 1 - comparison of entire trees
- Algorithm 2 - step-wise optimization and comparison of individual bifurcations
The task is to build an algorithm able to create a simulation of the arterial topography within the heart that is accurate enough for practical purposes. This simulation works in a step-wise fashion, optimizing several criteria in each individual step, and in the total result of the simulation.
The arterial tree is viewed as a set of many interconnected segments (geometrically represented as straight cylindrical tubes). Each segment is fed by one parent segment and feeds two daughter segments. The tree starts at a root segment (called
- It's unique segment index, or id (
$i$ ). - A backward pointer holding the index of the parent segment (
$B_i$ ). - One forward pointer holding the index of the left daughter segment (
$D_i^l$ ). - One forward pointer holding the index of the right daughter segment (
$D_i^r$ ).
Additionally, each segment has it's own length
The location, orientation, and length of each segment is defined by the cartesian coordinates
Due to the binary mode of branching, the total number of segments can be calculated using:
The area of tissue to be perfused into may be 2D or 3D, and could theoretically take on one of many shapes. It is initially considered as a 2D circular area for simplicity. This circular area is described using the perfusion area
The main feeding artery, represented by the root segment, is perfused at a pressure of
- The bifurcation rule:
Where:
-
$r(i)$ represents the radius of the (parent) segment$i$ . -
$\gamma$ is the bifurcation exponent.
- Bifurcation ratios:
Where:
-
$r(i)$ represents the radius of the (parent) segment$i$ . -
$\beta^l(i)$ is the left bifurcation ratio. -
$\beta^r(i)$ is the right bifurcation ratio. $\beta < 1$ - These ratio may be equal (symmetric bifurcation) or significantly different (asymmetric bifurcation).
- Total blood volume: The total blood volume within the tree needs to be minimized:
Where:
- T is the total blood volume within the tree.
-
$l(i)$ is the length of the segment$i$ . -
$r(i)$ is the radius of the segment$i$ .
- Perfusion area: The total perfusion flow should be finally distributed evenly over the perfusion area:
All individual perfusion areas should be supplied with equal flows at equal pressure:
-
The pressure drop:
The drop in pressure along the path from the root to any of the terminal segments should be the same.
-
The flow:
The flow$Q_i$ through a segment is proportional to the number of individual distal perfusion areas connected to it:
Note:
- Poiseuille's law:
Where:
-
$Q$ is the flow rate. -
$\Delta P$ is the drop in pressure. -
$r$ is the radius. -
$\eta$ is the fluid viscosity. -
$l$ is the tubing length.
This approach is relatively simple, but it is very limited, as it can only handle a small number of terminal segments. It's impracticality makes it largely unusable.
- Distribute the terminal segments over the perfusion area.
- Generate and geometrically optimize every possible tree to obtain the minimal blood volume, given the distribution of terminal segments, one after the other.
- Choose the tree with the minimal blood volume from the resulting trees.
This approach is relatively more complex and involves more steps, but is able to handle a significantly larger number of terminal segments with a much lower computational load.
- The supporting circle is a subset of the total perfusion area for all the terminal segments in which the tree is contained and extended in each iteration. It is initialized to support one individual terminal perfusion area, and is increased in each iteration to support one more instance of such area. This process ensures an even distribution of terminal segments over the whole perfusion area.
-
$r_{supp}$ is the radius of the supporting circle. -
$k_{term}$ is the number of terminal segments in the current iteration. -
$k_{tot}$ is the total number of segments in the current iteration. -
$(x(j),y(j))$ are the coordinates of the distal end of an already existing segment$j$ . -
$(x(B_j),y(B_j))$ are the coordinates of the proximal end of an already existing segment$j$ . -
$i_{conn}$ is the index of the pre-existing segment within the tree that we wish to connect the new segment to. This segment is cut in half in the process of bifurcation to allow for the geometric optimization of the new bifurcation. -
$i_{old}$ is the index of the parent segment of$i_{conn}$ prior to adding the bifurcation. -
$i_{new}$ is the index of the new segment that we wish to add. -
$i_{bif}$ is the index of the segment that acts as the parent segment to both$i_{new}$ and$i_{conn}$ after adding the bifurcation. It connects the proximal end of$i_{new}$ and$i_{conn}$ to the distal end of$i_{old}$ It is originally the proximal half of the segment$i_{conn}$ prior to adding the bifurcation.
- Initialize the supporting circle to be the size of the perfusion area of a single terminal segment (
$\pi\cdot r_{supp}^2 = \frac{A_{perf}}{N_{term}}$ ). - Initialize the root segment such that the proximal (feeding) end is at the circle border, and the distal (terminal) end is randomly within the supporting circle.
- Using the length of the resulting segment, calculate the radius such that the resistance yields the flow
$Q_{term}$ . -
$k_{term}$ ,$k_{tot}$ are set to 1.
- The supporting circle is increased to accommodate one additional terminal perfusion area:
- The segment coordinates are stretched to meet the increase in the supporting circle.
- The segment radii are increased to meet the increase in segment length in order to correct the total tree resistance.
- Initialize the threshold distance according to:
- A random location is selected for the distal end of the new segment within the supporting circle, with a uniform distribution.
- Compute the distance from the new location to each segment. First compute the projection of the new location on the given segment:
where:
- "$\cdot$" denotes the dot product.
If
$0\leq d_{proj} \leq 1$ , the projection lies along the segment j. If the projection of the new location lies along the already existing segment$j$ , calculate the orthogonal distance:
Else, calculate the distance between the randomly selected point, and one of the endpoints of the already existing segment
- If the distance thus obtained exceeds the threshold distance
$d_{thresh}$ , the point is selected to become the distal end of the new segment to be added. Else, the current selection is discarded and the random selection (tossing) is repeated. - If the tossing fails
$N_{toss}$ many times, reduce the threshold distance by 10% and try again. Repeat this until a point is selected. - Choose one of the existing segments from among the relevant bifurcation candidates that were not already chosen as
$i_{conn}$ in the current iteration, and and let it be$i_{conn}$ . - Shorten
$i_{conn}$ by half (the distal end being unaffected) - Insert
$i_{bif}$ in place of the removed half, and connect$i_{new}$ and the remaining half of$i_{conn}$ to the distal end of it.
- Re-adjust the flow in the segments
$i_{new}$ and$i_{conn}$ such that$Q_{inew} = Q_{term}$ and$Q_{iconn} = NDIST_{iconn}\cdot Q_{term}$ via the ratio$\frac{r(i_{conn})}{r(i_{new})}$ . - Re-adjust the flow in the segment
$i_{bif}$ to be$Q_{ibif} = Q_{iconn} + Q_{term}$ . - Re-adjust the bifurcation ratios in all segments proximal to
$i_{bif}$ recursively up to the root segment. - Re-adjust
$r(iroot)$ to obtain a total flow within the tree of$(k_{term}+1)\cdot Q_{term}$ . - Optimize the addition geometrically to obtain the minimum of the target function
- If the optimized addition to the tree does not intersect with any pre-existing segment (except
$i_{bif}$ and$i_{conn}$ ), store the values of the target function and bifurcation coordinates and revert the tree to the state prior to the bifurcation; else discard the new bifurcation and revert the tree. - If all relevant candidates for the connection have been tried, continue; else return to step 13.
- Adopt the bifurcation found to yield the lowest value of the target function.
- increase
$k_{term}$ by 1 and$k_{tot}$ by 2. - If there are
$N_{term}$ many terminal segments, halt; else return to step 5.